♦ для 1-го контроллера — посылка байта 20h по адресу 20h;
♦ для 2-го контроллера — посылка байта 20h по адресу A0h ( EOI
для ведомого контроллера), затем посылка байта 20h по адресу 20h ( EOI
для ведущего контроллера).
Таблица 12.2. Аппаратные прерывания (в порядке убывания приоритета)
Имя (номер¹) |
Вектор |
Контроллер/маска |
Описание |
NMI |
02h |
|
Контроль канала, паритет (в XT — сопроцессор) |
IRQ0 |
08h |
#1/1h |
Таймер (канал 0 8253/8254) |
IRQ1 |
09h |
#1/2h |
Клавиатура |
IRQ2 |
0Ah |
#1/4h |
XT — резерв, AT — недоступно (подключается каскад IRQ8-IRQ15) |
IRQ8 |
70h |
#2/1h |
CMOS RTC — часы реального времени |
IRQ9 |
71h |
#2/2h |
Резерв |
IRQ10 |
72h |
#2/4h |
Резерв |
IRQ11 |
73h |
#2/8h |
Резерв |
IRQ12 |
74h |
#2/10h |
PS/2-Mouse (резерв) |
IRQ 13 |
75h |
#2/20h |
Математический сопроцессор |
IRQ14 |
76h |
#2/40h |
HDC — контроллер НЖМД |
IRQ15 |
77h |
#2/80h |
Резерв |
IRQ3 |
0Bh |
#1/4h |
COM2, COM4 |
IRQ4 |
0Ch |
#1/10h |
COM1, COM3 |
IRQ5 |
0Dh |
#1/20h |
XT — HDC, AT — LPT2, Sound (резерв) |
IRQ6 |
0Eh |
#1/40h |
FDC — контроллер НГМД |
IRQ7 |
0Fh |
#1/80h |
LPT1 — принтер |
¹ Запросы прерываний 0, 1, 8 и 13 на шины расширения не выводятся.
Некорректно завершенная процедура не позволит повторно использовать данный или другие запросы прерываний. Если обработчик прерывания удаляется из памяти, предварительно должен быть замаскирован соответствующий ему вход контроллера. Все изменения в таблице прерываний должны выполняться при замаскированных прерываниях, чтобы избежать попытки использования вектора в процессе его модификации (это приведет к «вылету» программы).
На входы контроллеров прерываний поступают запросы от системных устройств (клавиатура, системный таймер, CMOS-таймер, сопроцессор), периферийных контроллеров системной платы и от карт расширения. Традиционно все линии запросов, не занятые перечисленными устройствами, присутствуют на всех слотах шины ISA/EISA. Эти линии обозначаются как IRQx
и имеют общепринятое назначение (табл. 12.2). Часть этих линий отдается в распоряжение шины PCI. В таблице отражены и приоритеты прерываний — запросы расположены в порядке их убывания. Номера векторов, соответствующих линиям запросов контроллеров, система приоритетов и некоторые другие параметры задаются программно при инициализации контроллеров. Эти основные настройки остаются традиционными для обеспечения совместимости с программным обеспечением.
Для запросов прерывания с шины PCI используются 4 линии запросов прерывания, которые обозначают как INTR А
, В
, С
, D
. Эти линии работают по низкому уровню, что дает возможность их разделения (совместного использования). Линии циклически сдвигаются в слотах и независимо коммутируются на доступные линии IRQx
с помощью конфигурационных регистров чипсета. Линии IRQx
, используемые шиной PCI, становятся недоступными для шины ISA. «Дележку» линий между шинами, а также управление чувствительностью отдельных линий обеспечивают параметры CMOS Setup, а также система PnP. В параметрах ISA
или Legacy
подразумевают использование линий IRQx традиционными адаптерами шины ISA
(статическое распределение), a PCI/PnP
— использование адаптерами шины PCI или адаптерами PnP для шины ISA (динамическое распределение). Общая схема формирования запросов прерываний изображена на рис. 12.1.
Рис. 12.1. Коммутация запросов прерываний
Каждому устройству, для поддержки работы которого требуются прерывания, должен быть назначен свой номер прерывания. Назначения номеров прерываний выполняются с двух сторон: во-первых, адаптер, нуждающийся в прерываниях, должен быть сконфигурирован на использование конкретной линии шины (джамперами или программно). Во-вторых, программное обеспечение, поддерживающее данный адаптер, должно быть проинформировано о номере используемого вектора. В процессе назначения прерываний может участвовать система PnP для шин ISA и PCI, для распределения линий запросов между шинами служат специальные параметры CMOS Setup.
Контроллер прерываний позволяет программировать свои входы на чувствительность к уровню или перепаду сигнала.
♦ Чувствительность к уровню (level sensitive) означает, что контроллер прерываний вырабатывает запрос прерывания процессора по факту обнаружения определенного уровня (на ISA — высокого) на входе DRQx
. Если к моменту завершения обработки этого запроса (после записи команды EOI
в регистр контроллера прерываний) контроллер снова обнаруживает активный уровень на том же входе DRQx
, то он снова сформирует запрос на прерывание процессора.
Читать дальше