Типы прерываний и источники возникновения запросов. Принципы обработки прерываний и флаговая логика микропроцессоров, страница 10

вывода не должна быть прервана длительным дисковым прерыванием.

Следовательно, дисковые прерывания необходимо временно запретить.

Такое маскирование часто используют в задачах реального времени.

Регистр IMR обычно используют для маскирования отдельных аппаратных прерываний. Для этого используется вывод в порт с адресом 21h ведущего контроллера прерываний и в порт с адресом A1h

ведомого контроллера прерываний, позволяющего маскировать прерывания IRQ8 - IRQ15. По указанному порту устанавливаются в "1" те биты регистра, которые соответствуют номерам запрещаемых вами прерываний.

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

; пример маскирования запросов от КНМГД

mov   al,      01000000b  ; маскирование бита 6

out     21h,   al                 ; запись в IMR

* * *

mov   al,      0                  ; очистка IMR в конце

out     21h,   al                 ; программы 

Чтобы провести полное блокирование аппаратных прерываний обычно используют специальные команды управления битом I в регистре флагов процессора RF: cli ( clear interrupt) и sti ( set interrupt ). Когда флаг I равен 1 - аппаратные прерывания запрещены, когда он равен 0 - разрешены все прерывания, разрешенные в IMR.

Таким образом, управление от процессора более приоритетно по

сравнению с управлением от контроллера прерываний .

Для очиски (обнуления ) I-флага применяют команду STI, а команду CLI для записи в RF 1. При использовании этих команд необходимо соблюдать следующие правила:

- нельзя отключать прерывания на длительный период, так как это влечет за собой нарушение системного времени;

- за командой CLI всегда должна следовать команда STI, иначе неизбежно "зависание" компьютера из-за блокировки клавиатуры;

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

                    Логика взаимодействия  контроллера
                    прерываний и процессора  при обмене

Логика взаимодействия показана на рис.2. Процессор прерывает свою работу и переходит к выполнению программы обработки прерывания при поступлении сигнала INTR на соответствующий вход микро-процессора. Условиями формирования этого сигнала являются :

- поступление запроса на линии прерываний контроллера прерываний от периферийного устройства. Поступивший запрос фиксируется в регистре IRR;

- разрешение аппаратных прерываний от процессора (бит I в регистре флагов RF равен 0);

- разрешение данного прерывания от контроллера прерываний, которое формируется, если:

- прерывание не замаскировано, т.е. соответствующий бит в регистре IMR контроллера равен 0;

- в момент поступления запроса не обслуживается прерывание с более высоким уровнем приоритета. В регистре обслужи          вания контроллера ISR устанавливается байт, запрещающий   все аппаратные прерывания с более низким приоритетом по сравнению с обслуживаемым.

Снятие  заявки на обслуживание производится  программно. Поэтому при создании собственных аппаратных прерываний в конце программы обработки необходимо очищать байт ISR. Для этого следует записать в порт 20h код очистки 20h:

mov   al,      20h

out     20h,   al

Если вы только расширяете функции имеющегося обработчика, сброс регистра обслуживания не требуется, так как он уже предусмотрен в стандартной программе обработки дополняемого прерывания.

                    Интегрированный периферийный контроллер

В связи с ростом интеграции современных СБИС в архитектурах ВС и персональных компьютеров используются периферийные контроллеры интегрированного типа, совмещающие различные функции управления обменом информацией. В системе типа 80386DX, предлагаемой для выполнения этих работ, используется контроллер 82С206, включающий в свой состав следующие устройства: