ARMv6 FIQ, подтверждение прерывания - PullRequest
1 голос
/ 27 мая 2010

Я работаю с ядром 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, что мне нужно сделать, чтобы подтвердить его?

1 Ответ

2 голосов
/ 27 мая 2010

Как вы и сказали, похоже, что вы не очищаете ожидающее прерывание от одного или обоих периферийных устройств, генерирующих прерывание, или от самого VIC.

...