Включение внешних прерываний на процессоре ARM
ОтCortex-R справочное руководство, вероятно, не специфичный для Cortex-R
Асинхронная маскировка прерывания
Природа асинхронных прерываний означает, что они могут происходить, пока процессор обрабатывает другое прерывание. Если в такой ситуации асинхронный прерывание создает новое исключение,r14_abt
а такжеSPSR_abt
значения перезаписываются Если это происходит до того, как данные помещаются в стек в памяти, информация о состоянии первой отмены теряется. Чтобы этого не происходило, CPSR содержит бит маски, A-бит, чтобы указать, что асинхронный прерывание не может быть принято. Когда бит A установлен, любая происходящая асинхронная остановка удерживается процессором в ожидании до тех пор, пока бит A не будет очищен, когда фактически будет принято исключение. Бит A устанавливается автоматически при отмене прерываний, исключений IRQ или FIQ и при сбросе. Вы должны очищать A-бит в обработчике прерывания только после того, как информация о состоянии либо была помещена в память, либо больше не требуется.
Мой вопрос, если у меня естьA
немного замаскированы после сброса, как я могу знать, еслиасинхронный прерывание находится на рассмотрении? Можно ли очистить ожидающие внешние прерывания без снятия маскиA
немного и принимая исключение? Или, в более общем смысле, есть ли совет по очисткеA
немного после сброса?
Очевидно что-то в моей текущей цепочке загрузки имеет ожидающий внешний прерывание (но только после жесткого включения). Я хотел бы включить внешние прерывания, но это кажется довольно громоздкимособый случай первыйвнешнее прерывание в коде исключения.