КОМПЬЮТЕРНОЕ ЖЕЛЕЗО
HARDWARE FOR PC

Архитектурные компоненты IBM PC-совместимого компьютера

Контроллеры расположены по адресам 20-21h (8259A#1) и AO-Alh (8259A#2), обращаться к ним следует как к однобайтным портам ввода-вывода. После ини¬циализации (процедурой POST и при загрузке ОС) все неиспользуемые входы контроллеров замаскированы (на запросы прерываний реагировать не будут), а их векторы прерываний указывают на «заглушку» — процедуру с единственной инструкцией IRET. Первым делом программа должна загрузить в память свой об¬работчик и подставить указатель на его начало в соответствующее место таблицы прерываний. Далее следует размаскировать вход, для чего выполняется чтение регистра маски (адрес 21h для 8259А#1, Alh для 8259А#2), обнуление соответ-

12.3. Аппаратные прерывания

459

ствующего бита (см. табл. 12.2) и запись в регистр нового значения маски. При работе с контроллером прерываний от программы требуется лишь управление маской своего запроса (при инициализации программы нужно обнулить маску требуемого запроса) и корректное завершение обработки прерываний. Каждая процедура обработки аппаратного прерывания должна завершаться командой ЕОI (End Of Interruption), посылаемой контроллеру:

для 1-го контроллера — посылка байта 20h по адресу 20h;

для 2-го контроллера — посылка байта 2Oh по адресу AOh (EOI для ведомого
контроллера), затем посылка байта 20h по адресу 20h (EOI для ведущего кон¬
троллера).
Некорректно завершенная процедура не позволит повторно использовать данный или другие запросы прерываний. Если обработчик прерывания удаляется из памя¬ти, предварительно должен быть замаскирован соответствующий ему вход контрол¬лера. Все изменения в таблице прерываний должны выполняться при замаскиро¬ванных прерываниях, чтобы избежать попытки использования вектора в процессе его модификации (это приведет к «вылету» программы).
На входы контроллеров прерываний поступают запросы от системных устройств (клавиатура, системный таймер, CMOS-таймер, сопроцессор), периферийных контроллеров системной платы и от карт расширения.

Hosted by uCoz