以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; // 关闭电压监控,如需使用低电压监测,可将关闭电压监控的函数去掉。

posted on 2025-03-01 15:16  WCH蓝牙应用分享  阅读(120)  评论(0)    收藏  举报