Содержит ли регистр INTC_IRQ_PRIORITY в AM335x приоритет последнего IRQ во вложенных IRQ?

Согласно техническому справочному руководству AM335x регистр INTC_IRQ_PRIORITY содержит текущий активный уровень приоритета IRQ.
Это кажется правдой, так как я проверил это, сохранив его значение в ISR и распечатав его в основном цикле (вне ISR).
Я также заметил, что вне ISR значение INTC_IRQ_PRIORITY, очевидно, сохраняет значение, которое соответствует последнему IRQ, который произошел.
Я правильно получил шляпу?

Теперь, когда прерывание с более высоким приоритетом происходит, когда прерывание с более низким приоритетом обслуживается (становится вложенным), значение INTC_IRQ_PRIORITY становится значением IRQ с более высоким приоритетом, как и следовало ожидать.
Однако, когда ISR с более высоким приоритетом заканчивается и выполнение возвращается к ISR с более низким приоритетом - значение INTC_IRQ_PRIORITY остается одним из более высокого приоритета.
Если ISR с низким приоритетом теперь проверяет его, он получит значение, которое не соответствует его приоритету.

Не вызовет ли такое поведение проблемы в системах, которые проверяют, что некоторые API не вызываются из прерываний с высоким (er) приоритетом? (Проверяя INTC_IRQ_PRIORITY.)
(На самом деле это происходит в моем порту FreeRTOS, который подтверждает вызов API "XxxxFromISR()" из прерывания с низким приоритетом в описанной выше ситуации. Мне потребовалось несколько дней, чтобы выяснить, что происходит.)

Я что-то здесь упускаю?
Есть ли способ отслеживать INTC_IRQ_PRIORITY с обслуживанием приоритета IRQ во вложенных ситуациях?

Просто для справки - регистр INTC_IRQ_PRIORITY доступен только для чтения.

0 ответов

Другие вопросы по тегам