ARMv7体系结构支持睡眠模式,可以停止Cortex-M3和系统时钟以最大限度降低功耗。在睡眠时,可以停止系统时钟,但可以让FCLK继续运行,以允许处理器能被SysTick异常唤醒。该体系结构支持立即睡眠、退出睡眠和深度睡眠等模式。
● 立即睡眠Sleep-now
等待中断(Wait For Interrupt,WFI)或等待事件(Wait For Event,WFE)指令请求立即睡眠模式。这些指令使得NVIC让处理器进入挂起其他异常事件的低功耗状态。
● 退出睡眠Sleep-on-exit
当系统控制寄存器的SLEEPONEXIT位置位时,一旦处理器退出最低优先级的ISR,它就进入低功耗状态。处理器无须将寄存器出栈,就可进入低功耗状态,并且无须让寄存器压栈就可产生下一个异常事件。内核一直处于睡眠状态直至别的异常被挂起。这是一个自动的WFI模式。
在如调试等各种情况下,“退出时睡眠”可以返回基址处。因而必须提供基址代码,如空闲循环(Idle Loop)或空闲线程。
● 深度睡眠Deep-sleep
深度睡眠与立即睡眠和“退出时睡眠”机制共用。当系统控制寄存器的SLEEPDEEP位置位时,处理器指示系统可以进入深度睡眠。