picocalc_BIOS/Core/Inc/axp2101.h
JackCarterSmith 4d93c9d2e2
Implement RTC alarm registers
- minors fix
- alarm management WIP
2025-05-21 13:33:29 +02:00

352 lines
16 KiB
C

#include "stm32f1xx_hal.h"
#ifndef AXP2101_H_
#define AXP2101_H_
/*
* --------------------- I2C registers ------------------------
*/
#define XPOWERS_AXP2101_CHIP_ID (0x4A)
#define XPOWERS_AXP2101_STATUS1 (0x00)
#define XPOWERS_AXP2101_STATUS2 (0x01)
#define XPOWERS_AXP2101_IC_TYPE (0x03)
#define XPOWERS_AXP2101_DATA_BUFFER1 (0x04)
#define XPOWERS_AXP2101_DATA_BUFFER2 (0x05)
#define XPOWERS_AXP2101_DATA_BUFFER3 (0x06)
#define XPOWERS_AXP2101_DATA_BUFFER4 (0x07)
#define XPOWERS_AXP2101_DATA_BUFFER_SIZE (4u)
#define XPOWERS_AXP2101_COMMON_CONFIG (0x10)
//#define XPOWERS_AXP2101_BATFET_CTRL (0x12)
//#define XPOWERS_AXP2101_DIE_TEMP_CTRL (0x13)
//#define XPOWERS_AXP2101_MIN_SYS_VOL_CTRL (0x14)
//#define XPOWERS_AXP2101_INPUT_VOL_LIMIT_CTRL (0x15)
//#define XPOWERS_AXP2101_INPUT_CUR_LIMIT_CTRL (0x16)
//#define XPOWERS_AXP2101_RESET_FUEL_GAUGE (0x17)
//#define XPOWERS_AXP2101_CHARGE_GAUGE_WDT_CTRL (0x18)
//#define XPOWERS_AXP2101_WDT_CTRL (0x19)
#define XPOWERS_AXP2101_LOW_BAT_WARN_SET (0x1A)
//#define XPOWERS_AXP2101_PWRON_STATUS (0x20)
//#define XPOWERS_AXP2101_PWROFF_STATUS (0x21)
//#define XPOWERS_AXP2101_PWROFF_EN (0x22)
//#define XPOWERS_AXP2101_DC_OVP_UVP_CTRL (0x23)
#define XPOWERS_AXP2101_VOFF_SET (0x24)
//#define XPOWERS_AXP2101_PWROK_SEQU_CTRL (0x25)
//#define XPOWERS_AXP2101_SLEEP_WAKEUP_CTRL (0x26)
//#define XPOWERS_AXP2101_IRQ_OFF_ON_LEVEL_CTRL (0x27)
//#define XPOWERS_AXP2101_FAST_PWRON_SET0 (0x28)
//#define XPOWERS_AXP2101_FAST_PWRON_SET1 (0x29)
//#define XPOWERS_AXP2101_FAST_PWRON_SET2 (0x2A)
//#define XPOWERS_AXP2101_FAST_PWRON_CTRL (0x2B)
#define XPOWERS_AXP2101_ADC_CHANNEL_CTRL (0x30)
#define XPOWERS_AXP2101_ADC_DATA_RELUST0 (0x34)
#define XPOWERS_AXP2101_ADC_DATA_RELUST1 (0x35)
#define XPOWERS_AXP2101_ADC_DATA_RELUST2 (0x36)
#define XPOWERS_AXP2101_ADC_DATA_RELUST3 (0x37)
#define XPOWERS_AXP2101_ADC_DATA_RELUST4 (0x38)
#define XPOWERS_AXP2101_ADC_DATA_RELUST5 (0x39)
#define XPOWERS_AXP2101_ADC_DATA_RELUST6 (0x3A)
#define XPOWERS_AXP2101_ADC_DATA_RELUST7 (0x3B)
#define XPOWERS_AXP2101_ADC_DATA_RELUST8 (0x3C)
#define XPOWERS_AXP2101_ADC_DATA_RELUST9 (0x3D)
/*
* ------------------ Interrupt registers ---------------------
*/
#define XPOWERS_AXP2101_INTEN1 (0x40)
#define XPOWERS_AXP2101_INTEN2 (0x41)
#define XPOWERS_AXP2101_INTEN3 (0x42)
/*
* -------------------- Status registers -----------------------
*/
#define XPOWERS_AXP2101_INTSTS1 (0x48)
#define XPOWERS_AXP2101_INTSTS2 (0x49)
#define XPOWERS_AXP2101_INTSTS3 (0x4A)
#define XPOWERS_AXP2101_INTSTS_CNT (3)
#define XPOWERS_AXP2101_TS_PIN_CTRL (0x50)
#define XPOWERS_AXP2101_TS_HYSL2H_SET (0x52)
#define XPOWERS_AXP2101_TS_LYSL2H_SET (0x53)
#define XPOWERS_AXP2101_VLTF_CHG_SET (0x54)
#define XPOWERS_AXP2101_VHLTF_CHG_SET (0x55)
#define XPOWERS_AXP2101_VLTF_WORK_SET (0x56)
#define XPOWERS_AXP2101_VHLTF_WORK_SET (0x57)
#define XPOWERS_AXP2101_JIETA_EN_CTRL (0x58)
#define XPOWERS_AXP2101_JIETA_SET0 (0x59)
#define XPOWERS_AXP2101_JIETA_SET1 (0x5A)
#define XPOWERS_AXP2101_JIETA_SET2 (0x5B)
#define XPOWERS_AXP2101_IPRECHG_SET (0x61)
#define XPOWERS_AXP2101_ICC_CHG_SET (0x62)
#define XPOWERS_AXP2101_ITERM_CHG_SET_CTRL (0x63)
#define XPOWERS_AXP2101_CV_CHG_VOL_SET (0x64)
#define XPOWERS_AXP2101_THE_REGU_THRES_SET (0x65)
#define XPOWERS_AXP2101_CHG_TIMEOUT_SET_CTRL (0x67)
#define XPOWERS_AXP2101_BAT_DET_CTRL (0x68)
#define XPOWERS_AXP2101_CHGLED_SET_CTRL (0x69)
#define XPOWERS_AXP2101_BTN_VOL_MIN (2600)
#define XPOWERS_AXP2101_BTN_VOL_MAX (3300)
#define XPOWERS_AXP2101_BTN_VOL_STEPS (100)
#define XPOWERS_AXP2101_BTN_BAT_CHG_VOL_SET (0x6A)
#define XPOWERS_AXP2101_DC_ONOFF_DVM_CTRL (0x80)
#define XPOWERS_AXP2101_DC_FORCE_PWM_CTRL (0x81)
#define XPOWERS_AXP2101_DC_VOL0_CTRL (0x82)
#define XPOWERS_AXP2101_DC_VOL1_CTRL (0x83)
#define XPOWERS_AXP2101_DC_VOL2_CTRL (0x84)
#define XPOWERS_AXP2101_DC_VOL3_CTRL (0x85)
#define XPOWERS_AXP2101_DC_VOL4_CTRL (0x86)
#define XPOWERS_AXP2101_LDO_ONOFF_CTRL0 (0x90)
#define XPOWERS_AXP2101_LDO_ONOFF_CTRL1 (0x91)
#define XPOWERS_AXP2101_LDO_VOL0_CTRL (0x92)
#define XPOWERS_AXP2101_LDO_VOL1_CTRL (0x93)
#define XPOWERS_AXP2101_LDO_VOL2_CTRL (0x94)
#define XPOWERS_AXP2101_LDO_VOL3_CTRL (0x95)
#define XPOWERS_AXP2101_LDO_VOL4_CTRL (0x96)
#define XPOWERS_AXP2101_LDO_VOL5_CTRL (0x97)
#define XPOWERS_AXP2101_LDO_VOL6_CTRL (0x98)
#define XPOWERS_AXP2101_LDO_VOL7_CTRL (0x99)
#define XPOWERS_AXP2101_LDO_VOL8_CTRL (0x9A)
#define XPOWERS_AXP2101_BAT_PARAME (0xA1)
#define XPOWERS_AXP2101_FUEL_GAUGE_CTRL (0xA2)
#define XPOWERS_AXP2101_BAT_PERCENT_DATA (0xA4)
/*
* ------------------------ DCDC 1~5 ---------------------------
*/
#define XPOWERS_AXP2101_DCDC1_VOL_MIN (1500)
#define XPOWERS_AXP2101_DCDC1_VOL_MAX (3400)
#define XPOWERS_AXP2101_DCDC1_VOL_STEPS (100u)
#define XPOWERS_AXP2101_DCDC2_VOL1_MIN (500u)
#define XPOWERS_AXP2101_DCDC2_VOL1_MAX (1200u)
#define XPOWERS_AXP2101_DCDC2_VOL2_MIN (1220u)
#define XPOWERS_AXP2101_DCDC2_VOL2_MAX (1540u)
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS1 (10u)
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS2 (20u)
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS1_BASE (0u)
#define XPOWERS_AXP2101_DCDC2_VOL_STEPS2_BASE (71)
#define XPOWERS_AXP2101_DCDC3_VOL1_MIN (500u)
#define XPOWERS_AXP2101_DCDC3_VOL1_MAX (1200u)
#define XPOWERS_AXP2101_DCDC3_VOL2_MIN (1220u)
#define XPOWERS_AXP2101_DCDC3_VOL2_MAX (1540u)
#define XPOWERS_AXP2101_DCDC3_VOL3_MIN (1600u)
#define XPOWERS_AXP2101_DCDC3_VOL3_MAX (3400u)
#define XPOWERS_AXP2101_DCDC3_VOL_MIN (500)
#define XPOWERS_AXP2101_DCDC3_VOL_MAX (3400)
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS1 (10u)
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS2 (20u)
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS3 (100u)
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS1_BASE (0u)
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS2_BASE (71)
#define XPOWERS_AXP2101_DCDC3_VOL_STEPS3_BASE (88)
#define XPOWERS_AXP2101_DCDC4_VOL1_MIN (500u)
#define XPOWERS_AXP2101_DCDC4_VOL1_MAX (1200u)
#define XPOWERS_AXP2101_DCDC4_VOL2_MIN (1220u)
#define XPOWERS_AXP2101_DCDC4_VOL2_MAX (1840u)
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS1 (10u)
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS2 (20u)
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS1_BASE (0u)
#define XPOWERS_AXP2101_DCDC4_VOL_STEPS2_BASE (71)
#define XPOWERS_AXP2101_DCDC5_VOL_1200MV (1200)
#define XPOWERS_AXP2101_DCDC5_VOL_VAL (0x19)
#define XPOWERS_AXP2101_DCDC5_VOL_MIN (1400)
#define XPOWERS_AXP2101_DCDC5_VOL_MAX (3700)
#define XPOWERS_AXP2101_DCDC5_VOL_STEPS (100u)
#define XPOWERS_AXP2101_VSYS_VOL_THRESHOLD_MIN (2600)
#define XPOWERS_AXP2101_VSYS_VOL_THRESHOLD_MAX (3300)
#define XPOWERS_AXP2101_VSYS_VOL_THRESHOLD_STEPS (100)
/*
* ----------------------- ALDO 1~4 --------------------------
*/
#define XPOWERS_AXP2101_ALDO1_VOL_MIN (500)
#define XPOWERS_AXP2101_ALDO1_VOL_MAX (3500)
#define XPOWERS_AXP2101_ALDO1_VOL_STEPS (100u)
#define XPOWERS_AXP2101_ALDO2_VOL_MIN (500)
#define XPOWERS_AXP2101_ALDO2_VOL_MAX (3500)
#define XPOWERS_AXP2101_ALDO2_VOL_STEPS (100u)
#define XPOWERS_AXP2101_ALDO3_VOL_MIN (500)
#define XPOWERS_AXP2101_ALDO3_VOL_MAX (3500)
#define XPOWERS_AXP2101_ALDO3_VOL_STEPS (100u)
#define XPOWERS_AXP2101_ALDO4_VOL_MIN (500)
#define XPOWERS_AXP2101_ALDO4_VOL_MAX (3500)
#define XPOWERS_AXP2101_ALDO4_VOL_STEPS (100u)
/*
* ----------------------- BLDO 1~2 --------------------------
*/
#define XPOWERS_AXP2101_BLDO1_VOL_MIN (500)
#define XPOWERS_AXP2101_BLDO1_VOL_MAX (3500)
#define XPOWERS_AXP2101_BLDO1_VOL_STEPS (100u)
#define XPOWERS_AXP2101_BLDO2_VOL_MIN (500)
#define XPOWERS_AXP2101_BLDO2_VOL_MAX (3500)
#define XPOWERS_AXP2101_BLDO2_VOL_STEPS (100u)
/*
* ----------------------- CPUSLDO --------------------------
*/
#define XPOWERS_AXP2101_CPUSLDO_VOL_MIN (500)
#define XPOWERS_AXP2101_CPUSLDO_VOL_MAX (1400)
#define XPOWERS_AXP2101_CPUSLDO_VOL_STEPS (50)
/*
* ----------------------- DLDO 1~2 --------------------------
*/
#define XPOWERS_AXP2101_DLDO1_VOL_MIN (500)
#define XPOWERS_AXP2101_DLDO1_VOL_MAX (3400)
#define XPOWERS_AXP2101_DLDO1_VOL_STEPS (100u)
#define XPOWERS_AXP2101_DLDO2_VOL_MIN (500)
#define XPOWERS_AXP2101_DLDO2_VOL_MAX (3400)
#define XPOWERS_AXP2101_DLDO2_VOL_STEPS (100u)
#define XPOWERS_AXP2101_CONVERSION(raw) (22.0 + (7274 - raw) / 20.0)
#define _BV(b) (1UL << (uint32_t)(b))
/**
* @brief Charging led mode parameters.
*/
typedef enum __xpowers_chg_led_mode {
XPOWERS_CHG_LED_OFF,
XPOWERS_CHG_LED_BLINK_1HZ,
XPOWERS_CHG_LED_BLINK_4HZ,
XPOWERS_CHG_LED_ON,
XPOWERS_CHG_LED_CTRL_CHG, // The charging indicator is controlled by the charger
} xpowers_chg_led_mode_t;
typedef enum {
XPOWERS_AXP2101_CHG_TRI_STATE, //tri_charge
XPOWERS_AXP2101_CHG_PRE_STATE, //pre_charge
XPOWERS_AXP2101_CHG_CC_STATE, //constant charge
XPOWERS_AXP2101_CHG_CV_STATE, //constant voltage
XPOWERS_AXP2101_CHG_DONE_STATE, //charge done
XPOWERS_AXP2101_CHG_STOP_STATE, //not charge
} xpowers_chg_status_t;
/*
* ------------- axp2101 interrupt control mask -------------
*/
//! IRQ1 REG 40H
#define XPOWERS_AXP2101_BAT_NOR_UNDER_TEMP_IRQ _BV(0) //!< Battery Under Temperature in Work
#define XPOWERS_AXP2101_BAT_NOR_OVER_TEMP_IRQ _BV(1) //!< Battery Over Temperature in Work mode
#define XPOWERS_AXP2101_BAT_CHG_UNDER_TEMP_IRQ _BV(2) //!< Battery Under Temperature in Charge mode IRQ(bcut_irq)
#define XPOWERS_AXP2101_BAT_CHG_OVER_TEMP_IRQ _BV(3) //!< Battery Over Temperature in Charge mode IRQ(bcot_irq) enable
#define XPOWERS_AXP2101_GAUGE_NEW_SOC_IRQ _BV(4) //!< Gauge New SOC IRQ(lowsoc_irq) enable ???
#define XPOWERS_AXP2101_WDT_TIMEOUT_IRQ _BV(5) //!< Gauge Watchdog Timeout IRQ(gwdt_irq) enable
#define XPOWERS_AXP2101_WARNING_LEVEL1_IRQ _BV(6) //!< SOC drop to Warning Level1 IRQ(socwl1_irq) enable
#define XPOWERS_AXP2101_WARNING_LEVEL2_IRQ _BV(7) //!< SOC drop to Warning Level2 IRQ(socwl2_irq) enable
//! IRQ2 REG 41H
#define XPOWERS_AXP2101_PKEY_POSITIVE_IRQ _BV(8) //!< POWERON Positive Edge IRQ(ponpe_irq_en) enable
#define XPOWERS_AXP2101_PKEY_NEGATIVE_IRQ _BV(9) //!< POWERON Negative Edge IRQ(ponne_irq_en) enable
#define XPOWERS_AXP2101_PKEY_LONG_IRQ _BV(10) //!< POWERON Long PRESS IRQ(ponlp_irq) enable
#define XPOWERS_AXP2101_PKEY_SHORT_IRQ _BV(11) //!< POWERON Short PRESS IRQ(ponsp_irq_en) enable
#define XPOWERS_AXP2101_BAT_REMOVE_IRQ _BV(12) //!< Battery Remove IRQ(bremove_irq) enable
#define XPOWERS_AXP2101_BAT_INSERT_IRQ _BV(13) //!< Battery Insert IRQ(binsert_irq) enabl
#define XPOWERS_AXP2101_VBUS_REMOVE_IRQ _BV(14) //!< VBUS Remove IRQ(vremove_irq) enabl
#define XPOWERS_AXP2101_VBUS_INSERT_IRQ _BV(15) //!< VBUS Insert IRQ(vinsert_irq) enable
//! IRQ3 REG 42H
#define XPOWERS_AXP2101_BAT_OVER_VOL_IRQ _BV(16) //!< Battery Over Voltage Protection IRQ(bovp_irq) enable
#define XPOWERS_AXP2101_CHAGER_TIMER_IRQ _BV(17) //!< Charger Safety Timer1/2 expire IRQ(chgte_irq) enable
#define XPOWERS_AXP2101_DIE_OVER_TEMP_IRQ _BV(18) //!< DIE Over Temperature level1 IRQ(dotl1_irq) enable
#define XPOWERS_AXP2101_BAT_CHG_START_IRQ _BV(19) //!< Charger start IRQ(chgst_irq) enable
#define XPOWERS_AXP2101_BAT_CHG_DONE_IRQ _BV(20) //!< Battery charge done IRQ(chgdn_irq) enable
#define XPOWERS_AXP2101_BATFET_OVER_CURR_IRQ _BV(21) //!< BATFET Over Current Protection IRQ(bocp_irq) enable
#define XPOWERS_AXP2101_LDO_OVER_CURR_IRQ _BV(22) //!< LDO Over Current IRQ(ldooc_irq) enable
#define XPOWERS_AXP2101_WDT_EXPIRE_IRQ _BV(23) //!< Watchdog Expire IRQ(wdexp_irq) enable
#define XPOWERS_AXP2101_ALL_IRQ (0xFFFFFFFFUL)
uint32_t AXP2101_shutdown(void);
uint32_t AXP2101_disableTSPinMeasure(void);
uint32_t AXP2101_enableBattDetection(void);
uint32_t AXP2101_enableBattVoltageMeasure(void);
uint32_t AXP2101_enableSystemVoltageMeasure(void);
uint32_t AXP2101_enableVbusVoltageMeasure(void);
uint32_t AXP2101_enableIRQ(uint32_t opt);
uint32_t AXP2101_disableIRQ(uint32_t opt);
uint32_t AXP2101_clearIrqStatus(void);
uint8_t AXP2101_isDropWarningLevel1Irq(void);
uint8_t AXP2101_isVbusRemoveIrq(void);
uint8_t AXP2101_isBatInsertIrq(void);
uint8_t AXP2101_isBatRemoveIrq(void);
uint8_t AXP2101_isPkeyShortPressIrq(void);
uint8_t AXP2101_isPkeyLongPressIrq(void);
uint8_t AXP2101_isBatChargeDoneIrq(void);
uint8_t AXP2101_isBatChargeStartIrq(void);
uint32_t AXP2101_setLowBatWarnThreshold(uint8_t percentage);
uint32_t AXP2101_setLowBatShutdownThreshold(uint8_t opt);
uint32_t AXP2101_setSysPowerDownVoltage(uint16_t value);
uint32_t AXP2101_setChargingLedMode(uint8_t mode);
int8_t AXP2101_readDataBuffer(uint8_t *data, uint8_t size);
uint8_t AXP2101_isBatteryConnect(void);
uint8_t AXP2101_isCharging(void);
uint8_t AXP2101_isDischarge(void);
uint8_t AXP2101_isStandby(void);
uint8_t AXP2101_isVbusGood(void);
uint8_t AXP2101_isVbusIn(void);
uint32_t AXP2101_getIrqStatus(uint32_t* out_value);
uint32_t AXP2101_getBatteryPercent(uint8_t* out_value);
xpowers_chg_status_t AXP2101_getChargerStatus(void);
uint16_t AXP2101_getBattVoltage(void);
uint16_t AXP2101_getVbusVoltage(void);
uint16_t AXP2101_getSystemVoltage(void);
#endif /* AXP2101_H_ */