我的系统处于睡眠模式时出现问题。
目前我的MCU正在驱动一个通过无线电定期发送消息的无线电芯片,当无线电芯片正在发送消息时,我将MCU置于睡眠模式。
但有时当无线电芯片发送数据并唤醒我的MCU并中止数据发送时,我会收到中断。 我不知道如何找到哪个irq唤醒我,因为我的系统当前正在运行许多可以“随机”运行irq的任务但是当无线电芯片正在发送时,没有任何“随机”irq应该触发消息。
当我在睡眠模式下使用__WFI()后尝试中断时,调用堆栈已经刷新了新数据,我看不出最后执行的指令是什么。
你知道一种确定哪个irq唤醒我睡眠系统的方法吗?
感谢您的帮助。
答案 0 :(得分:1)
唤醒后立即检查true
和NVIC->ISPR[x]
个寄存器。如果在处理程序运行之前无法中断,请使用此宏替换SCB->ICSR
(如果您不使用gcc,则替换为等效的内容)
__WFI()
以后能够舒适地检查内容。我从ST Cortex-M3编程手册中获取了寄存器名称,其他核心的过程应该类似。