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

Режим полного вложения



Режим полного вложения поддерживает многоуровневую структуру прерываний, в которой всем восьми входам IRQ контроллера назначается фиксированный порядок приоритетов от высшего к низшему. В базовой конфигурации PC AT этот режим используется как основной.

Такая структура приоритетов устанавливается по умолчанию при инициализации. При этом IRQ0 получает высший приоритет, а IRQ7 - низший. Однако режим полного вложения не ограничивается только такой структурой задания приоритетов. После инициализации высший приоритет может быть присвоен и другим входам IRQ при сохранении многоуровневой структуры прерываний режима полного вложения (см. табл. 6.9.).

Когда по нескольким входам IRQ приходят запросы, схема приоритета выбирает из них наиболее приоритетный согласно установленному статусу и формирует сигнал INTR в микропроцессор. Микропроцессор, подтверждая запрос на обслуживание прерывания, получает по шине X вектор прерывания по приоритетному запросу, а 8259А устанавливает соответствующий разряд в регистре ISR, чтобы обозначить прерывание, находящееся в обслуживании. Этот разряд ISR остается неизменным до поступления на 8259A команды окончания прерывания (EOI).

 

 

Рис. 6.25. Взаимодействие программ-обработчиков прерываний с разными уровнями приоритетов в режиме полного вложения

В режиме полного вложения, пока установлен разряд ISR, все последующие запросы с таким же или более низким приоритетом не вызывают выработку сигнала INTR для микропроцессора. Однако запросы более высокого приорита могут формировать запрос на прерывание для микропроцессора. Прерывания в этом случае подтверждаются только в том случае, если микропроцессор перед этим выполнил команду STI. Это объясняется тем, что вывод запроса прерывания на микропроцессоре автоматически запрещается после подтверждения любого прерывания.

На рис. 6.25 показано взаимодействие программ-обработчиков прерываний с разными уровнями приоритетов в режиме полного вложения.

Предположим, что в случае, показанном на рис. 6.25 , IRQ0 обладает высшим приоритетом, а IRQ7 - низшим и во время выполнения основной программы поступает запрос от IRQ3. Поскольку прерывания разрешены (командой STI), микропроцессор переходит к выполнению программы-обработчика прерывания по IRQ3. Во время выполнения этой программы поступает запрос от IRQ1. Поскольку приоритет IRQ1 выше, чем у IRQ3, контроллер формирует прерывание. Однако оно не подтверждается, так как микропроцессор замаскировал свой вход INTR в ответ на прерывание по IRQ3 (IF=0). Запрос на прерывание по IRQ1 не подтвердится, пока не будет выполнена команда STI в обработчике прерываний по IRQ3. Таким образом, программа-обработчик IRQ3 имеет "защищенную" область, в которой не разрешены никакие прерывания (за исключением немаскируемых). У сервисной программы IRQ1 нет такой "защищенной" части, поскольку ее первая команда - STI. Заметим, что в этом примере запрос по IRQ1 должен оставаться возбужденным до тех пор, пока он не будет подтвержден.

Когда подтверждается прерывание по IRQ3, устанавливается разряд 3 ISR. Когда подтверждается прерывание по IRQ1, разряды 1 и 3 ISR оказываются установленными (ни одна из программ-обработчиков не выполнена). В это время только IRQ0 может формировать прерывание, так как это единственный вход с более высоким приоритетом по сравнению с теми, которые уже обслуживаются. По завершении программы-обработчика прерывания по IRQ1, программа должна "уведомить" 8259A о завершении своей работы путем сброса разряда 1 в ISR. Это выполняется с помощью команды EOI. Затем команда IRET в программе-обработчика прерываний по IRQ1 передает управление программе-обработчику прерываний по IRQ3. Теперь запросы IRQ0-IRQ2 могут снова прервать пограмму-обработчик IRQ3. Если запросов на прерывание больше не поступает, по команде EOI сбрасывается разряд 3 ISR и по команде IRET возобновляется выполнение основной программы с того места, где она была прервана.

 







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