图 13.2 进入睡眠模式的序列
当处理器进入睡眠模式时,单片机作如何反应,还取决于芯片的设计。最典型的作法就
是把一些外设的时钟停掉以降低功耗。当然,芯片还可以做得更有力,切断一部分功能模块
的电源,甚至切断整个芯片的电源并且停止所有的时钟。这是把事情做绝了,只能通过复位
来唤醒。为此,芯片厂商可以在单片机上提供一个引脚,并根据它的电平变化来产生此复位
信号。另外,芯片厂商还可以在设计时加入少量的 SRAM 作为后备存储区,该区电力供应不
被切断(如 STM32),以供应用程序在轮回前,先把今生离别之际的一些重要上下文存入,
待到来世再报恩。
WFI/WFE除了进入睡眠的序列不同外,它们的唤醒行为也有所不同。
当从 WFI 唤醒时,要根据异常系统的游戏规则来决定是否唤醒。只有当该中断的优先
级比当前优先级要高(如果是在服务例程中使用 WFI),并且比 BASEPRI 掩蔽的高时,才唤
醒处理器并执行 ISR。但如果 PRIMASK置位,则依然唤醒处理器,然而 ISR 却不执行了。
WFE则有点区别,不管优先级和掩蔽情况如何,只要 SETONPEND 置位,它就会不错过
任何一个事件,在发生事件时一定把处理器唤醒。至于是否执行 ISR,则与 WFI的规则相同。
CM3 处理器唤醒的具体规则如表 13.2A和表 13.2B所示。但要注意:这是假设中断的优
先级比当前优先级要高的(即没有在异常服务例程中使用WFI/WFE,谁在这里用谁想不开)。
182