Re: STM32 как определить разрешены ли прерывания глобально
Можно просто ответить на Ваш вопрос.
Скажем для IAR есть так называемая intrinsic функция __get_interrupt_state(). (Кстати для AVR там есть что-то аналогичное), но это ответ будет неполный и не совсем корректный.
1. Судя по тому куску кода который я увидел, Вы хотите запретить прерывания на время, а потом вернуть. Но у Вас возникает коллизия если прерывания уже были запрещены. Поэтому Вам требуется проанализировать текущее состояние. Если это так, то это делается без if следующим способом.
__isstate_t savestate = __get_interrupt_state(); // сохранить текущее состояние
__disable_interrupt(); // запретить прерывания
..... // работа
__set_interrupt_state(savestate); // восстановить прежнее состояние
Кстати для AVR я делал также.
2. Процессор ARM, в отличие от AVR имеет несколько уровней приоритета прерывания. В связи с этим большую часть коллизий удаётся разрулить с помощью грамотной настройки прерываний. Защищённая секция используется крайне редко.
Для лучшего понимания почитайте архитектуру ядра выбранного Вами МП.
|