思澈科技软件开发工具包  2.20
PMU

HAL PMU提供抽象的软件接口操作硬件PMU(Power Management Unit)模块,提供的功能有:

  • 设置芯片的供电参数
  • 设置低功耗时钟参数,
  • 配置芯片进入关机模式并设置唤醒源, 在关机模式下芯片可被PIN和RTC唤醒, 唤醒PIN与GPIO管脚的映射关系与LPSYS睡眠模式的唤醒PIN相同,参见AON
  • SF32LB52X支持充电,相关接口为 HAL_PMU_ChgInit

详细的API说明参考 PMU.

Note

使用HAL PMU

使能RTC和PIN唤醒后关机

void shutdown(void)
{
/* Enable PIN0 low level wakeup */
/* Enble RTC wakeup */
/* Disable Interrupt */
/* Shutdown, can be wakeup by PIN0 and RTC */
}
/* Use HAL_PMU_CheckBootMode in initializtion stage to check whether it's cold boot or wakeup from shutdown mode */
void init(void)
{
uint32_t wakeup_src;
/* check boot mode and clear PMU shutdown state if wakeup from shutdown mode
*/
HAL_PMU_CheckBootMode(&boot_mode, &wakeup_src);
}

配置充电

static PMU_ChgHandleTypeDef pmu_chg_handle;
static void pmu_chg_callback(PMU_ChgHandleTypeDef *handle, uint32_t status)
{
if (status & (1 << PMU_CHG_IRQ_VBUS_RDY))
{
printf("vbus: %d", HAL_PMU_ChgReadStatus(handle, PMU_CHG_IRQ_VBUS_RDY));
}
if (status & (1 << PMU_CHG_IRQ_EOC))
{
printf("eoc: %d", HAL_PMU_ChgReadStatus(handle, PMU_CHG_IRQ_EOC));
}
if (status & (1 << PMU_CHG_IRQ_VBAT_HIGH))
{
printf("vbat high: %d", HAL_PMU_ChgReadStatus(handle, PMU_CHG_IRQ_VBAT_HIGH));
}
}
void config_charger(void)
{
uint32_t current;
uint32_t volt;
//config calibration data for charger, calibration is saved in EFUSE
//cal_param.cc_mn = xxx;
//cal_param.cc_mp = xxx;
//cal_param.bg = xxx;
//cal_param.cv_vctrl = xxx;
//cal_param.rep_vctrl = xxx;
status = HAL_PMU_ChgInit(&pmu_chg_handle, &cal_param);
// config CC current
current = 300; //300mA
current = HAL_PMU_ChgConfigCcCurrent(&pmu_chg_handle, current);
// config target voltage
volt = 4300; //4300mV
volt = HAL_PMU_ChgConfigTargetVolt(&pmu_chg_handle, volt);
// enable IRQ and register callback
HAL_PMU_ChgRegisterCallback(&pmu_chg_handle, pmu_chg_callback);
RT_ASSERT(HAL_OK == status);
RT_ASSERT(HAL_OK == status);
RT_ASSERT(HAL_OK == status);
HAL_NVIC_SetPriority(PMUC_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(PMUC_IRQn);
}
HAL_PMU_ChgReadStatus
int8_t HAL_PMU_ChgReadStatus(PMU_ChgHandleTypeDef *handle, PMU_ChgIrqStatusTypeDef irq)
Read raw charger event status.
HAL_PMU_ChgInit
HAL_StatusTypeDef HAL_PMU_ChgInit(PMU_ChgHandleTypeDef *handle, PMU_ChgCalParamTypeDef *cal_param)
Init charger.
HAL_PMU_EnablePinWakeup
HAL_StatusTypeDef HAL_PMU_EnablePinWakeup(uint8_t pin, uint8_t mode)
Enable pin wakeup for hibernate.
HAL_PMU_ChgConfigIRQ
HAL_StatusTypeDef HAL_PMU_ChgConfigIRQ(PMU_ChgHandleTypeDef *handle, PMU_ChgIrqStatusTypeDef irq, PMU_ChgIrqTrigModeTypeDef trig_mode)
Enable/disable IRQ in specified trig mode.
__PMU_ChgHandleTypeDef
Definition: bf0_hal_pmu.h:130
HAL_OK
@ HAL_OK
Definition: bf0_hal_def.h:75
HAL_PMU_ChgRegisterCallback
void HAL_PMU_ChgRegisterCallback(PMU_ChgHandleTypeDef *handle, PMU_ChgCallbackTypeDef callback)
Register charger IRQ callback which is called when IRQ is triggered.
PMU_BootModeTypeDef
PMU_BootModeTypeDef
Definition: bf0_hal_pmu.h:72
PMU_CHG_IRQ_TRIG_MODE_POS_EDGE
@ PMU_CHG_IRQ_TRIG_MODE_POS_EDGE
Definition: bf0_hal_pmu.h:141
PMU_CHG_IRQ_VBAT_HIGH
@ PMU_CHG_IRQ_VBAT_HIGH
Definition: bf0_hal_pmu.h:151
HAL_NVIC_SetPriority
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
Set the priority of an interrupt.
HAL_NVIC_EnableIRQ
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
Enable a device specific interrupt in the NVIC interrupt controller.
HAL_PMU_EnableRtcWakeup
HAL_StatusTypeDef HAL_PMU_EnableRtcWakeup(void)
Enable RTC wakeup for hibernate.
PMU_CHG_IRQ_VBUS_RDY
@ PMU_CHG_IRQ_VBUS_RDY
Definition: bf0_hal_pmu.h:150
HAL_PMU_EnterHibernate
void HAL_PMU_EnterHibernate(void)
Make system enter hibernate mode.
HAL_PMU_ChgConfigCcCurrent
uint32_t HAL_PMU_ChgConfigCcCurrent(PMU_ChgHandleTypeDef *handle, uint32_t current)
Configure charger CC current.
PMU_ChgCalParamTypeDef
Definition: bf0_hal_pmu.h:91
HAL_PMU_CheckBootMode
HAL_StatusTypeDef HAL_PMU_CheckBootMode(PMU_BootModeTypeDef *boot_mode, uint32_t *wakeup_src)
Check PMU boot mode.
PMU_CHG_IRQ_TRIG_MODE_DOUBLE_EDGE
@ PMU_CHG_IRQ_TRIG_MODE_DOUBLE_EDGE
Definition: bf0_hal_pmu.h:143
HAL_PMU_ChgConfigTargetVolt
uint32_t HAL_PMU_ChgConfigTargetVolt(PMU_ChgHandleTypeDef *handle, uint32_t volt_mv)
Configure charging full target voltage.
PMU_CHG_IRQ_EOC
@ PMU_CHG_IRQ_EOC
Definition: bf0_hal_pmu.h:156