Crates.io | axp173 |
lib.rs | axp173 |
version | 0.1.7 |
source | src |
created_at | 2020-02-02 15:09:44.413227 |
updated_at | 2021-01-24 17:54:48.854865 |
description | Device-agnostic X-Powers AXP173 power management IC driver |
homepage | |
repository | https://github.com/eupn/axp173 |
max_upload_size | |
id | 204223 |
size | 2,937,182 |
axp173
This is a embedded-hal driver for X-Powers' Power Management IC AXP173.
It's device-agnostic and uses embedded-hal's Write
/WriteRead
for I2C communication.
Add dependency to Cargo.toml
:
cargo add axp173
Instantiate and init the device:
// ... declare and configure your I2c peripheral ...
// Init AXP173 PMIC
let axp173 = axp173::Axp173::new(i2c);
axp173.init()?;
Ok(axp173)
Configure the PMIC
// Set charging current to 100mA
axp173
.set_charging_current(ChargingCurrent::CURRENT_100MA)?;
// Enable internal ADCs
// 25Hz sample rate, Disable TS, enable current sensing ADC
axp173
.set_adc_settings(
AdcSettings::default()
.set_adc_sample_rate(AdcSampleRate::RATE_25HZ)
.ts_adc(false)
.set_ts_pin_mode(TsPinMode::SHUT_DOWN)
.vbus_voltage_adc(true)
.vbus_current_adc(true)
.batt_voltage_adc(true)
.batt_current_adc(true),
)?;
// Enable battery gas gauge
axp173.set_coulomb_counter(true)?;
axp173.resume_coulomb_counter()?;
// Power-off the device after 4 seconds of
// long press of power button
axp173.set_shutdown_long_press_time(ShutdownLongPressTime::SEC_4)?;
// Clear pending IRQs and enable some interesting IRQs
axp173.clear_all_irq()?;
axp173.set_irq(axp173::Irq::ButtonShortPress, true)?;
axp173.set_irq(axp173::Irq::BatteryCharged, true)?;
axp173.set_irq(axp173::Irq::VbusPluggedIn, true)?;
Handle PMIC IRQs:
// Inside an IRQ ISR:
if axp173.check_irq(Irq::ButtonShortPress)? {
axp173.clear_irq(Irq::ButtonShortPress)?;
defmt::info!("Button pressed");
}
axp173.clear_all_irq()?; // Clear everything else
What is done and tested and what is not yet: