以CH592X为例:
一.低精度电池电压监测:
PowerMonitor(ENABLE,LPLevel_2V5); //使能低精度电压监控 PFIC_EnableIRQ(WDOG_BAT_IRQn); //低精度使用此中断
中断服务函数:
__INTERRUPT __HIGH_CODE void WDOG_BAT_IRQHandler(void) { SetSysClock(CLK_SOURCE_PLL_60MHz); DelayMs(5); PRINT("WDOG_BAT_IRQHandler\n"); while(R8_BAT_STATUS&RB_BAT_STAT_LOW)//等电压恢复 { PRINT("wait...\n"); } }
二.高精度电池电压监测:
PowerMonitor(ENABLE,HALevel_2V5); //设置高精度触发 PFIC_EnableIRQ(NMI_IRQn);//使能NMI中断
中断服务函数:
__INTERRUPT __HIGH_CODE void NMI_Handler(void) { SetSysClock(CLK_SOURCE_PLL_60MHz); DelayMs(5); PRINT("R8_BAT_STATUS=%x. \n",R8_BAT_STATUS); while(R8_BAT_STATUS&RB_BAT_STAT_LOWER) //等电压恢复 { PRINT("wait...\n"); } PRINT("recover...\n"); }
支持挡位:
typedef enum { /* 下面等级将使用高精度监控,210uA消耗 */ HALevel_1V9 = 0, // 1.7-1.9 HALevel_2V1, // 1.9-2.1 HALevel_2V3, // 2.1-2.3 HALevel_2V5, // 2.3-2.5 /* 下面等级将使用低功耗监控,1uA消耗 */ LPLevel_1V8 = 0x80, LPLevel_1V9, LPLevel_2V0, LPLevel_2V1, LPLevel_2V2, LPLevel_2V3, LPLevel_2V4, LPLevel_2V5, } VolM_LevelypeDef;
tips:在低功耗程序中使用低压监测功能时需注意,低功耗函数中一般会将此功能关闭,调用了 R8_BAT_DET_CTRL = 0; // 关闭电压监控,如需使用低电压监测,可将关闭电压监控的函数去掉。