Здавалка
Главная | Обратная связь

Маскирование прерываний



Запрещение или разрешение прерываний можно обеспечить не только маскированием вывода INTR микропроцессора командой CLI. В 8259A имеется регистр IMR (регистр маски прерывания), который расширяет возможности управления прерываниями. В отличие от одновременного запрещения или разрешения всех прерываний IMR дает возможность индивидуального маскирования IRQ. IMR представляет собой 8-разрядный регистр, в котором разряды 0-7 непосредственно соответствуют IRQ0-IRQ7. Любой вход IRQ может быть маскирован путем записи в IMR и установки соответствующего разряда. Аналогично любой вход IRQ может быть разрешен при сбросе соответствующего разряда IMR.

Когда возникает запрос на прерывание, который замаскирован разрядом в IMR, он не теряется, так как IMR действует только на выходы регистра IRR. Даже если какой-либо запрос замаскирован, то при возникновении он сохранится в IRR. Следовательно, при сбросе IMR прерывание будет выработано. Это справедливо, разумеется, при условии, что учтены другие факторы приоритета и запрос IRQ остается активным. Если запрос IRQ снимается перед сбросом IMR, то подтверждения прерывания не будет.

В реферате можно неупоминать!

Специальный режим маскирования (SMM)

В некоторых случаях необходимо разрешить прерывания более низкого приоритета по сравнению с выполняемой программой-обработчиком или, другими словами, разрешить устройствам с более низким приоритетом генерировать прерывания. Однако в режиме полного вложения запрещены все уровни IRQ более низкого приоритета по сравнению с выполняемой программой. Чтобы их разрешить, можно использовать команду EOI до завершения выполнения программы. Но следует иметь в виду, что при этом может возникнуть проблема "сверхвложения" подобно случаю, рассмотренному для автоматического режима EOI. Кроме того, сброс ISR не обратим средствами программного управления, поэтому запретить после этого IRQ более низкого приоритета можно только установкой соответствующего разряда IMR.

Лучшим решением является использование режимов специального маскирования. В сочетании с установкой соответствующего разряда IMR режим специального маскирования разрешает прерывания всех уровней, кроме уровня текущего обслуживания. Это достигается маскированием уровня текущего обслуживания с последующей выдачей команды режима специального маскирования. Режим специального маскирования остается в силе вплоть до его отмены.

На рис. 6.28 показано, как с помощью режима специального маскирования (SMM) достигается разрешение прерываний с более низким приоритетом.

Предположим, что IRQ0 обладает высшим приоритетом, когда основная программа прерывается по IRQ3. В программе-обработчике прерываний по IRQ3 выполняется команда STI. Это позволяет только прерываниям более высокого приоритета прервать программу-обработчик по IRQ3 в обычном режиме полного вложения. При дальнейшем выполнении программы по IRQ3 устанавливается разряд 4 в IMR (т.е. маскируется прерывание по IRQ3) и вводится режим специального маскирования. Теперь система приоритетов не подчиняется режиму полного вложения. Разрешены прерывания всех уровней, кроме IRQ3. Чтобы выйти из режима специального маскирования, описанная последовательность выполняется в обратном порядке.

 

Рис. 6.28. Разрешение прерываний с более низким приоритетом с помощью режима специального маскирования (SMM)

 

Следует помнить, что при установке режима специального маскирования он распространяется на все маскированные уровни.

В базовой конфигурации PC AT режим специального маскирования неиспользуется.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.