__WFI () не будет спать, даже если все прерывания отключены и ожидают очистки - серия LPC18XX - PullRequest
0 голосов
/ 10 ноября 2018

Справочная информация: я пытаюсь заставить мое встроенное приложение перейти в спящий режим, когда нет активности CAN с помощью __WFI (), а затем просыпаться при получении прерывания 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?

Спасибо за ваше время. Дайте мне знать, если я могу что-то сделать, чтобы прояснить вопрос.

...