令人不安的irq将我从睡眠模式中唤醒

时间:2017-11-20 15:06:29

标签: arm microcontroller sleep stm32

我的系统处于睡眠模式时出现问题。

目前我的MCU正在驱动一个通过无线电定期发送消息的无线电芯片,当无线电芯片正在发送消息时,我将MCU置于睡眠模式。

但有时当无线电芯片发送数据并唤醒我的MCU并中止数据发送时,我会收到中断。 我不知道如何找到哪个irq唤醒我,因为我的系统当前正在运行许多可以“随机”运行irq的任务但是当无线电芯片正在发送时,没有任何“随机”irq应该触发消息。

当我在睡眠模式下使用__WFI()后尝试中断时,调用堆栈已经刷新了新数据,我看不出最后执行的指令是什么。

你知道一种确定哪个irq唤醒我睡眠系统的方法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

唤醒后立即检查trueNVIC->ISPR[x]个寄存器。如果在处理程序运行之前无法中断,请使用此宏替换SCB->ICSR(如果您不使用gcc,则替换为等效的内容)

__WFI()

以后能够舒适地检查内容。我从ST Cortex-M3编程手册中获取了寄存器名称,其他核心的过程应该类似。