Я работаю с ядром i.mx35 armv6. У меня есть прерывание 62, настроенное как FIQ с моим обработчиком, установленным и вызываемым. Мой обработчик на данный момент просто переключает выходной контакт, чтобы я мог проверить задержку с помощью области. С помощью приведенного ниже кода, как только я запускаю FIQ, он продолжается вечно так быстро, как может, по-видимому, не подтверждается. Я запускаю FIQ с помощью регистра прерываний, поэтому я уверен, что источник не запускает его так быстро. Если я отключаю прерывание 62 в AVIC в моей процедуре FIQ, прерывание срабатывает только один раз.
Я прочитал разделы о порте VIC в Техническом справочном руководстве ARM1136JF-S и ARM1136J-S, и он описывает правильную процедуру выхода. У меня только один обработчик FIQ, поэтому мне не нужно переходить. Строка, которую я не понимаю:
STR R0, [R8,#AckFinished]
Я не уверен, что AckFinished должен быть или что эта команда должна делать.
Мой обработчик FIQ ниже:
ldr r9, IOMUX_ADDR12
ldr r8, [r9]
orr r8, #0x08 @ top LED
str r8,[r9] @turn on LED
bic r8, #0x08 @ top LED
str r8,[r9] @turn off LED
subs pc, r14, #4
IOMUX_ADDR12: .word 0xFC2A4000 @remapped IOMUX addr
Мой обработчик возвращает нормально, и нормальная работа системы возобновляется, если я отключаю его после первого запуска, в противном случае он срабатывает постоянно, и система, кажется, зависает.
Считаете ли вы, что мое предположение правильно, что ядро не подтверждает AVIC или может быть другая причина запуска этого FIQ? Если ядро не подтверждает AVIC, что мне нужно сделать, чтобы подтвердить его?