最近研究低功耗,参考网上一些范例,基本实现了TM4C123 MCU的Sleep模式和DeepSleep模式。但还有一些问题不清楚:
1 MCU进入睡眠前用SysCtlPeripheralSleepEnable使得指定外设模块在睡眠模式中也保持开启。那么是不是其他外设模块默认就自动被关闭了,或者不提供系统时钟了? 如果追求睡眠时的功耗尽量的低,是否还需要在休眠前手动disable一下,唤醒后再手动enable?GPIO的状态(输入输出上拉)在睡眠时是保持的,是否应改变以降低功耗?
2 DeepSleep和Sleep的差别,DeepSleep可以配置改变系统时钟,而Sleep是用运行模式的时钟。除此之外,睡眠和深睡眠之间还有什么差别呢?如果深睡眠模式照样配置成用运行模式的时钟(DSLPCLKCFG寄存器Bit 6:4 = 0 ),是否就等同睡眠模式呢?从dateshheet中current consumption表格看功耗还是有差别的。
3 我的深睡眠模式程序中,配置成30K内部时钟(DSLPCLKCFG寄存器Bit 6:4 = 3) ,经常无法依赖TIME0定时器唤醒(但毫米级的systick中断可以),而用内部16M时钟(DSLPCLKCFG寄存器Bit 6:4 = 1 )就没问题。不知是什么原因。
4 我看到的资料写睡眠模式被唤醒后,自动回复睡眠前的MCU状态。那固件程序是不是不需要做什么复原的工作?