【发布时间】:2013-12-03 14:50:46
【问题描述】:
在Cortex M3上,一段代码如何判断是否开启了中断,即程序状态寄存器中I位的状态(由cpsid和cpsie操作)?在较旧的 ARM 上,我能够读取 cpsr 寄存器,但这似乎不再可能。
我需要这些信息,因为我有一个从主函数和中断调用的函数,它需要原子地执行某个操作,同时禁用中断。本质上:
bool interrupts_enabled = InterruptsEnabled();
if (interrupts_enabled) {
__disable_irq();
}
Critical Code;
if (interrupts_enabled) {
__enable_irq();
}
另外,我想知道在执行中断时I 标志的行为。是否执行中断会设置I 标志,例如防止嵌套?是否默认启用中断嵌套,如何防止嵌套?
【问题讨论】:
标签: assembly embedded arm interrupt cortex-m3