我观察到嵌套中断有问题。 我知道我应该避免使用嵌套中断、但相信我、在这种情况下、没有其他选择。
这是一种情况:
- MSP 处于低功耗模式3 (LPM3)。
RTC 中断发生。
-在 RTC 的 ISR 内部,我设置 GIE 以启用嵌套。
- TA0 (或其它)中断、然后从 RTC 的 ISR (嵌套)返回。
-在 TA0内部、我更改状态寄存器(SR)位以退出 LPM (使用__BIC_SR_REGISTER_ON_EXIT)。
-MSP 不再响应。
注意:如果我没有尝试从嵌套中断中退出 LPM、MSP 将按预期运行。
在以下线程中、Jens-Michael Gross 提到"嵌套中断无法退出 LPM"。
https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/349661?Nested-interrupts-and-jump-table
我知道 SR 和 PC 在堆栈中保存了两次。 然后、在嵌套中断 ISR 结束时、修改并检索堆栈中保存的最新 SR (以退出 LPM)、然后 PC 将从 RTC 的 ISR 中检索一条指令、并继续执行 RTC 的 ISR。 然后、在 RTC ISR 结束时、在进入 RTC 的 ISR 之前、SR 将再次从堆栈中检索并保存值。 因此、MSP 此时不会退出 LPM 形式。
但是、我不理解的是、MSP 根本就不会唤醒、稍后当发生另一个中断并且没有启用嵌套时。
我非常感谢就这一问题提出任何意见。
提前感谢。