To achieve this set the PRIMASK bit to 1 and the FAULTMASK bit to 0. If an interrupt arrives that is enabled and has a higher priority than current exception priority, the processor wakes up but does not execute the interrupt handler until the processor sets PRIMASK to zero.
То есть разбудит процессор только разрешенное(я так понимаю в NVIC) прерывание с более выским приоритетом.
Сообщение отредактировал Brain13 - Jun 4 2015, 18:23
__disable_irq Typically, this intrinsic disables IRQ interrupts by setting the I-bit in the CPSR. However, for M-profile it sets the exception mask register (PRIMASK).
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
Имхо - у ТС изначально неверно построен алгоритм. WFI не нужно смешивать с каким-либо полезным кодом. Систему с WFI надо строить так, чтобы WFI выполнялось в фоновом процессе (возможно просто бесконечный цикл while (1) WFI();), а вся полезная работа - в задачах или ISR с приоритетом выше фонового. Тогда никаких запретов прерывания с WFI не нужно, WFI будет выполняться только когда нет ждущих прерываний. Если ПО без ОС - вся работа в ISR-ах (разбитых по приоритетам), в фоновой задаче - функция main() заканчивающаяся while (1) WFI();.