вывода не должна быть прервана длительным дисковым прерыванием.
Следовательно, дисковые прерывания необходимо временно запретить.
Такое маскирование часто используют в задачах реального времени.
Регистр 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, включающий в свой состав следующие устройства:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.