从配置中断但禁用 Cortex M 系列的低功耗模式唤醒
Wake from low power mode with interrupts configured but disabled Cortex M series
Cortex-M 系列 MCU 的一项功能是能够从低功耗模式(睡眠或深度睡眠或其他 MCU 特定模式)唤醒并配置中断但禁用?
进入低功耗模式的机制是执行WFI指令。
我使用的来自 STM 和 Renesas 的 MCU,如果中断配置正确并且即使通过 cpsid 指令禁用了所有中断,也会通过中断从低功耗模式唤醒。
我正在尝试确定这是我对所有基于 Cortex M 系列的 MCU 所期望的,还是仅特定于某些 MCU 供应商。
只要您使用PRIMASK
禁用ALL中断,每个ARM Cortex-M都会以这种方式工作。这就是 CMSIS 的 __disable_irq()
所做的。根据文档,使用 BASEPRI
提高优先级不会导致优先级不足的中断唤醒芯片。
看这里 - http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/BABFEFIG.html
Operation
WFI is a hint instruction that suspends execution until one of the following events occurs:
- a non-masked interrupt occurs and is taken
- an interrupt masked by PRIMASK becomes pending
- a Debug Entry request.
Cortex-M 系列 MCU 的一项功能是能够从低功耗模式(睡眠或深度睡眠或其他 MCU 特定模式)唤醒并配置中断但禁用?
进入低功耗模式的机制是执行WFI指令。
我使用的来自 STM 和 Renesas 的 MCU,如果中断配置正确并且即使通过 cpsid 指令禁用了所有中断,也会通过中断从低功耗模式唤醒。
我正在尝试确定这是我对所有基于 Cortex M 系列的 MCU 所期望的,还是仅特定于某些 MCU 供应商。
只要您使用PRIMASK
禁用ALL中断,每个ARM Cortex-M都会以这种方式工作。这就是 CMSIS 的 __disable_irq()
所做的。根据文档,使用 BASEPRI
提高优先级不会导致优先级不足的中断唤醒芯片。
看这里 - http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/BABFEFIG.html
Operation
WFI is a hint instruction that suspends execution until one of the following events occurs:
- a non-masked interrupt occurs and is taken
- an interrupt masked by PRIMASK becomes pending
- a Debug Entry request.