В реальном приложении может иметь место следующий сценарий:
1. VIC «решает», что есть запрос IRQ, и посылает сигнал запроса IRQ ядру.
2. Ядро фиксирует состояние запроса прерывания.
3. Обработка запроса продолжается в течение нескольких циклов из-за наличия конвейера команд.
4. Ядро загружает адрес запроса прерывания из VIC.
Существует вероятность, что состояние VIC изменилось во время шага 3. Например, VIC изменился так, что это изменение вызвало последовательность, начинающуюся с шага 1. При этом прежнее прерывание перестает обрабатываться. В этом случае, VIC уже не будет способен идентифицировать прерывание, которое сгенерировало запрос, и в результате VIC возвратит заданный по умолчанию адрес вектора прерывания VicDefVectAddr (OxFFFF F034).
Этот потенциально аварийный сценарий может быть предотвращен двумя способами:
1. Прикладной код должен содержать программные блоки, предотвращающие ложные прерывания, которые могут когда-либо случиться. При этом простой защиты от изменений VIC может оказаться недостаточно, поскольку, например, сбои при обработке прерывания могут также вызвать ложные прерывания.
2. Обработчик значения по умолчанию контроллера VIC должен быть программно установлен и проверен должным образом.
6.5. Детальные исследования ложных прерываний
Этот раздел содержит сведения, которые в более подробной форме могут быть получены на официальном сайте ARM (http://ymw.arm.com) в секции часто задаваемых вопросов (FAQ) под рубрикой «Техническая поддержка»: http://www.arm.com/support/faqip/3677.html..
Что произойдет, если прерывание поступит в момент его программного отключения? Рассмотрим ситуацию с учетом архитектуры ARM7TDMI.
Если прерывание получено ядром во время выполнения команды, которая отключает прерывания, тогда процессор семейства ARM7 все-таки воспримет прерывание. Это произойдет как для прерываний FIQ, так и для прерываний IRQ. Например, рассмотрим последовательность команд:
MRS rO, cpsr
ORR rO, rO, #I_Bit:OR:F_Bit ;отключить IRQ и FIQ прерывания
MSR cpsr_c, rO
Если запрос IRQ получен во время выполнения команды MSR, то поведение системы будет следующим:
• запрос IRQ запирается;
• команда MSR cpsr, гО выполняется до завершения, устанавливаются биты IhFbCPSR;
• прерывание IRQ воспринимается, потому что этот запрос поступил до реальной установки бита I в CPSR;
• CPSR (с установленными битами I и F) перемещается в SPSRirq.
Все это означает, что на входе в подпрограмму обработки запроса IRQ происходит необычный эффект, при котором прерывание запроса IRQ воспринимается, в то время как бит I в SPSR уже установлен. В приведенном выше примере бит F будет также установлен и в CPSR, и в SPSR. Это означает, что прерывания FIQ будут запрещены после входа в сервисную подпрограмму обработки запроса IRQ, и останутся в таком виде, пока вновь не будут разрешены. Причем, прерывания FIQ не будут разрешены автоматически при последующем возврате из IRQ.
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |