背景:我试图在没有__WFI()的CAN活动时使我的嵌入式应用程序进入睡眠状态,然后在接收到CAN中断时将其唤醒。在进入睡眠模式之前,我禁用所有中断并在NVIC寄存器中清除其未决状态。
要开始,现在我只是想确保在禁用所有中断后可以永远睡觉。
for(int i = 0; i < IRQ_MAX; i++)
{
IRQ_ClearPending((IRQ)i);
IRQ_Disable((IRQ)i);
}
__DSB();
__ISB();
__WFI();
MCU_Reset();
我检查了NVIC寄存器,并将它们全部设置为0,这意味着所有中断都被禁用,并且没有待处理的中断。但是,每当我执行WFI(等待中断)指令时,它对我来说都是NOP。
为什么我不能进入睡眠模式?我是否真的必须以某种方式禁用所有外设并在其源处禁用中断,或者是否有办法掩盖所有中断减去CAN的中断?
谢谢您的时间。让我知道我有什么办法可以澄清这个问题。
答案 0 :(得分:-1)
检查不正确的外部异常终止,这不会立即导致异常。