А.3. Аппаратные прерывания
А.3. Аппаратные прерывания
Аппаратные прерывания обеспечивают реакцию процессора на события, происходящие асинхронно по отношению к ис- полняемому программному коду. Процессоры х86 поддер- живают таблицу, содержащую определения до 256 процедур обслуживания прерываний. Немаскируемые прерывания NMI обрабатываются процессором независимо от состояния флага разрешения прерывания IF. К ним относятся прерывания, приходящие по линии NMI, а для процессоров, поддержива- ющих режим системного управления, еще и по линии SMI#.
Сигнал на линию NMI приходит от схем контроля паритета памяти, от линии 10СНК шины ISA или SERR# шины PCI. В машинах класса AT сигнал NMI блокируется до входа про- цессора установкой бита 7 порта 070h в 1, отдельные источ- ники - битами 2, 3 порта 061h. Идентифицировать источник NMI позволяют биты 6, 7 регистра 061h.
В XT NMI вызывается и математическим сопроцессором при возникновении исключения. Запретить NMI позволяет об- нуление бита 7 порта OAOh; отдельные источники блокиру- ются битами 4, 5 регистра 061h; биты 6, 7 регистра 062h идентифицируют источник.
Обработка маскируемых прерываний может запрещаться ин- струкцией DI и разрешаться - Е1 (или другим способом воз- действия на флаг процессора /F). Эти прерывания обслужи- ваются контроллером, программно-совместимым с 8259А. Он имеет 8 входов запросов прерываний IRQx от внешних ис- точников. При обработке запроса контроллер передает по шине данных 8-битный вектор прерывания, соответствующий номеру запроса. Этот вектор является индексом, по которо- му ссылка на процедуру обработки прерывания хранится в таблице прерываний.
В машинах класса AT используются два контроллера пре- рываний. Ведущий (первичный) контроллер 8259А#1 обслу- живает запросы О, 1, 3-7. К его входу 2 подключен ведомый (вторичный) контроллер 8259А#2, который обслуживает за- просы 8-15. При этом используется вложенность приорите- тов - запросы 8-15 со своим рядом убывающих приорите-
тон вклиниваются между запросами 1 и 3 ведущего контрол- лера, приоритеты запросов которого также убывают с рос- том номера.
В XT один контроллер 8259А обслуживал все 8 линий запросов.
На входы контроллеров прерываний поступают запросы от системных устройств и плат расширения. Эти линии обо- значаются как IRQx и имеют общепринятое назначение (табл. А.2). Прерывания в табл. А.2 расположены в порядке убы- вания их приоритетов. Номера векторов, соответствующих линиям запросов контроллеров, система приоритетов и дру- гие параметры могут задаваться программно при инициали- зации контроллеров.
Имя (номер) |
Вектор |
Назначение |
NMI |
02h |
Контроль канала, паритет (в XT - сопроцессор) |
0 |
08h |
Таймер (канал 0 8253/8254) |
1 |
09h |
Клавиатура |
IRQ2 |
OAh |
XT - произвольно, AT - каскад IRQ8-IRQ15 |
8 |
70h |
CMOS RTC - часы реального времени |
IRQ9 |
71h |
Произвольно |
IRQ10 |
72h |
Произвольно |
IRQ11 |
73h |
Произвольно |
IRQ12 |
74h |
PS/2-Mouse или произвольно |
13 |
75h |
Математический сопроцессор |
IRQ14 |
76h |
HDC - контроллер НЖМД |
IRQ15 |
77h |
Произвольно |
IRQ3 |
OBh |
COM2, COM4 |
IRQ4 |
OCh |
СОМ1, COM3 |
IRQ5 |
ODh |
XT - HDC, AT - LPT2, Sound (произвольно) |
IRQ6 |
OEh |
FDC - контроллер НГМД |
IRQ7 |
OFh |
LPT1 - принтер |
адаптер должен быть сконфигурирован на использование конкретной линии шины (джамперами или программно), а ПО, поддерживающее данный адаптер, должно быть проин- формировано о номере используемого вектора. Поскольку прерывания являются дефицитным ресурсом, возникает же- лание разделить эти линии между несколькими устройства- ми. Тогда обработчик прерывания устройства, определив, что источник - не его, вызывал бы обработчик другого устрой- ства, работающего с той же линией. Однако в шине ISA пре- рывание вырабатывается по положительному перепаду сиг- нала на линии запроса. Такой способ подачи сигнала имеет меньшую помехозащищенность, чем срабатывание по отри- цательному перепаду, и отрезает путь к нормальному разде- ляемому использованию линий, для которого полностью пригоден способ подачи сигнала по низкому уровню.
По- скольку традиционный контроллер позволяет задавать чув- ствительность - уровень (Level) или перепад (Edge) - толь- ко для всех входов одновременно, разделяемые прерывания на шине ISA неработоспособны. Тем не менее, некоторые чип- сеты, реализующие контроллеры прерываний, допускают индивидуальное управление чувствительностью каждого вхо- да. Тогда при соответствующих возможностях BIOS Setup и адаптеров разделяемые прерывания технически реализуемы.
При чувствительности к уровню сигнал запроса аппаратно- го прерывания IRQx должен удерживаться генерирующей схемой по крайней мерю до цикла подтверждения прерыва- ния процессором. В противном случае источник прерыва- ния не будет правильно идентифицирован. Обычно адапте- ры строят так, что сигнал запроса сбрасывается при обращении программы обслуживания прерывания к соот- ветствующим регистрам адаптера.
Для запросов прерывания с шины PCI используются 4 ли- нии, которые обозначают как INTR А, В, С, D. Возможно их разделяемое использование. Линии циклически сдвигаются в слотах (Рисунок А.1) и независимо коммутируются на доступные IRQx с помощью конфигурационных регистров чипсета. Линии IRQx, используемые шиной PCI, недоступны для шины ISA. "Дележку" линий между шинами, а также управление
чувствительностью отдельных линий вьшолняют настройки BIOS Setup, а также система РпР. В опциях настройки ISA или Legacy подразумевают использование линий IRQx тради- ционными адаптерами шины ISA (статическое распределение), a PCI/PnP - адаптерами шины PCI или адаптерами РпР для шины ISA (динамическое распределение).