目录
1.问题描述
2.原因分析
3.解决方案
3.1 SRAM掉电问题解决方案
3.2 闹钟定时器中断使能问题解决方案
3.3 减计数器寄存器写入问题解决方案
4. 验证注意事项
LPC43xx系列运行LPCOpen低功耗演示“misc_pmc_states”时,掉电和深度掉电两种模式无法通过Alarm Timer成功唤醒。本文对这一系列问题进行了分析并提出了相应的解决方案。通过 RTC 唤醒也存在同样的问题和解决方案。
唤醒失败的原因包括以下三个方面。
- SRAM 掉电问题: LPC43xx系列在掉电模式下,只有8K SRAM不掉电,其他SRAM均掉电。从掉电模式唤醒后,程序继续向后执行,不会复位。因此,应确保进入掉电模式时,数据在不掉电的8K SRAM中,这样唤醒后才能继续运行。
- 闹钟定时器中断启用问题: LPC43xx 闹钟定时器中断启用需要一段时间才能生效。如果在进入低功耗模式之前未成功启用,则无法从低功耗模式唤醒。
- Downcounter寄存器问题:在LPC43xx系列中,为了保证在指定的时间唤醒,需要判断设定值是否成功写入Downcounter寄存器。
掉电和深度掉电模式下唤醒失败的原因总结如下表:
对于掉电唤醒失败,需要根据三个问题来解决。
深度断电唤醒不存在数据丢失问题。因为从深度掉电模式唤醒后,程序又复位并重新执行,不需要之前的数据。因此解决方案跳过了第一个,只需要 3.2 和 3.3。
如手册所示,LPC43xx系列掉电模式下,只有8kB本地SRAM不会掉电。
注意:带有和不带有内部闪存的芯片具有不同的 8K SRAM 地址范围。
对于不带内部闪存的 LPC4330/LPC4350/LPC4370 系列产品,8K SRAM 地址范围为 0x10090000– 0x10092000 (8KB)。LPC4337/LPC4367等带有内部闪存的芯片的地址范围是0x10088000 – 0x1008A000(8KB)。
将数据放置在这个8K SRAM区域可以解决数据丢失的问题。
以LPC4350为例,MCUXpressoIDE中的设置方法如下:
至此,SRAM区域的掉电问题设置完成。
为了确保闹钟定时器中断已启用,在其后添加一个while循环轮询,直到成功启用为止。进入src\pmc_states.c中的函数小路。
并添加 while((LPC_ATIMER->ENABLE& 0x01) != 0x01){}
在相应case模式下的Chip_ATIMER_IntEnable(LPC_ATIMER);函数语句之后。
该问题的解决方法与3.2类似。仍然用src\pmc_states.c进入函数路径,并在对应模式的情况下找到LPC_ATIMER->DOWNCOUNTER= RTC_ALARM_TIME*1000(与3.2位置一致)。
在其后添加一个 while 语句:
而(LPC_ATIMER->DOWNCOUNTER!=RTC_ALARM_TIME*1000);
如下图所示。
当没有内部flash的开发板进行测试时(例如:LPC4370,LPC4350…),比如Hitex LPC4350评估板,需要将启动配置为外部flash启动。参考图如下。
启动时需要将引脚P2_9、P2_8、P1_2、P1-1设置为低、低、高的形式,以SPIFI的形式启动。跳线设置如图所示。