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