本帖最后由 zhufy 于 2021-3-19 20:38 编辑
今天在做个低功耗的产品,使用HC32L136K8TA ,首先使用RCL跑32.768k,驱动LCD液晶屏,功耗做到12.8ua左右。然后想进一步降低功耗,进入普通休眠模式,功耗降低到5.8ua左右。配置I/O口外部下降沿唤醒。问题来了,一开始外部触发后可以正常唤醒,但唤醒几次后突然唤不醒了。唤不醒的状态下测功耗是在5.8ua,说明就是在休眠,反复多次外部触发也没用。使用标记位测试,程序就停留在进入休眠的语句,就是没唤醒。测量i/o口电平正常。
问题关键是,为什么前几次可以正常唤醒,然后怎么就突然唤不醒了?(这里保证中途没有改变I/O触发设置)!!!
附上休眠初始化程序:
//Lpm Cfg 低功耗休眠模式配置
stc_lpm_config_t stcLpmCfg;
DDL_ZERO_STRUCT(stcLpmCfg);
stcLpmCfg.enSEVONPEND = Se***dDisable;
stcLpmCfg.enSLEEPDEEP = SlpDpDisable; //使能:执行WFI不进入深度休眠;
stcLpmCfg.enSLEEPONEXIT = SlpExtDisable; //不使能 使能:退出异常处理并返回时,处理器自动进入休眠模式的特性禁止.
Lpm_Config(&stcLpmCfg);
附上休眠进入程序:
//外部触发中断使能 下降沿触发
Gpio_EnableIrq(GpioPortB,GpioPin9,GpioIrqFalling); //PB09 按钮
Gpio_EnableIrq(GpioPortC,GpioPin3,GpioIrqFalling); //PC03 RST1
Gpio_EnableIrq(GpioPortC,GpioPin2,GpioIrqFalling); //PC02 RST2
Gpio_EnableIrq(GpioPortD,GpioPin6,GpioIrqFalling); //PD06 SIG
Lpm_GotoLpmMode();//进入休眠
goto Task_Start;
问题关键是,为什么前几次可以正常唤醒,然后怎么就突然唤不醒了?(这里保证中途没有改变I/O触发设置)!!! |
评论
|