2.3.3. Контроллер прерываний 8259А.

Контроллер 8259А своими 8-битными регистрами приписывается к пространству ввода/вывода и занимает 2 смежных адреса. Обмен с регистрами контроллеров должен производиться только однобайтными операциями ввода/вывода. В PC-совместимых компьютерах контроллеры имеют следующие адреса:

·  8259А#h, 021h;

·  8259А#2 - 0A0h, 0Alh (только для AT).

Контроллер имеет два режима работы: режим инициализации и операционный. После сброса контроллер инициализируется последовательностью команд длиной до 4 байт, после чего переходит в операционный режим (Operation Mode). В операционном режиме он может быть и реинициализирован. Признаком начала инициализации является единичное значение бита 4 в байте, записываемом по адресу 020h (0A0h).

Команды инициализации обозначаются ICW1-ICW4 (Initialization Command Words) и посылаются инструкциями 8-битного вывода в порты контроллеров. Байт ICW1 посылается по адресу 020h (0A0h для 8259#2), байты ICW2-ICW4 посылаются по адресу 021h (0Alh).

Байт ICW1 - конфигуратор контроллера:

·  Биты [7:5]-0 (в PC не используются).

·  Бит 4=1 — признак команды инициализации (в командах управления он нулевой).

·  Бит 3 — чувствительность линий запроса:

0=прерывание по перепаду,

1=прерывание по уровню.

·  Бит 2=0 (в PC не используется).

·  Бит 1 — схема включения: 1

1=одиночный контроллер (XT),

0=каскадное включение (AT).

·  Бит 0 — признак использования ICW4.

Байт ICW2 задает начальный номер векторов, генерируемых данным контроллером, в таблице прерываний. Биты [2:0] должны иметь нулевые значения.

НЕ нашли? Не то? Что вы ищете?

Байт ICW3 используется только для каскадного включения (в XT пропускается).

Для ведущего (Master) контроллера биты [0:7] указывают на наличие ведомых контроллеров на линиях IRQO-IRQ7 соответственно.

Для ведомого (Slave) контроллера биты [2:0] содержат номер IRQ ведущего контроллера, к которому он подключен, биты [7:3]=0.

Байт ICW4 задает режим работы контроллера, его применение обязательно при начальной инициализации (в XT - третий байт инициализации).

·  Биты [7:5] =0 - не используются.

·  Бит 4 - SFNM (Special Fully Nested Mode) - включает режим вложенности приоритетов запросов ведущего и ведомого контроллеров.

·  Бит 3 - BUF (Buffered) - признак буферизованности шины.

·  Бит 2 - M/S (Master/Slave) - положение в каскаде:

1-ведущий, 0=ведомый.

·  Бит 1 - AEOI (Auto End Of Interrupt) - разрешение автоматического завершения прерывания (которое не требует сброса бита маски по окончании обслуживания запроса).

·  Бит 0 — тип используемого процессора:

1=8086/8088 и старше, 0=8080.

В операционном режиме контроллер воспринимает команды управления OCW1-OCW3 (Operation Control Words). OCW1 посылается по адресу 021h (0A1h), OCW2, OCW3 - по адресу 020h (0A0h).

Байт OCW1 - маски запросов, единичное значение бита означает маскирование запроса:

·  Биты [0:7] 8259#1 - маски запросов IRQO-IRQ7.

Биты [0:7] 8259#2 - маски запросов IRQ8-IRQ15.

Байт OCW2 - завершение обслуживания (Е01), управление приоритетом.

·  Биты [7:5] задают код операции:

001 - неспецифический Е01 (АЕ01=1 в ICW4),

Oil*— специфический Е01 для запроса LLL;

101— неспецифический Е01 с ротацией приоритета;

100 — установка режима ротации приоритета;

000 — сброс режима ротации приоритета;

111*— специфический Е01 с ротацией приоритета;

110* — установка низшего приоритета;

010— нет операции.

В операциях, помеченных звездочкой, используются биты 2-0 (поле LLL).

·  Биты [4:3] =00 - признак OCW2

·  Биты [2:0] — поле LLL — номер уровня, к которому относится команда.

Байт OCW3 — оперативное управление контроллером.

·  Бит 7=0.

·  Биты [6:5] — режим специального маскирования (в PC не используется):

11=установить;

10=сбросить;

·  00,01 —не изменять.

·  Биты [4:3]=01 — признак OCW3.

·  Бит 2=0 — запрещает режим полинга (в котором запрос прерывания к процессору не вырабатывается).

·  Биты [1:0] — управление чтением регистров:

10=чтение IR — регистра масок;

11=чтение IS — регистра обслуживаемого прерывания;

00,01 —не изменять регистр.

Для чтения регистра маски или регистра обслуживаемого прерывания (в зависимости от бит [1:0] OCW3) используется порт 021h (OA1h 8259#2).

В IBM PC/XT/AT используется режим вложенных прерываний с фиксированным приоритетом и автоматическим неспецифическим завершением, байты инициализации и управления приведены в табл. 2.3.

Каждая процедура обработки аппаратного прерывания должна завершаться командой Е01 (End Of Interruption), посылаемой контроллеру:

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

·  для 2-го контроллера - посылка байта 20h по адресу 0A0h; программный вызов прерывания 0Ah -~ завершение для ведущего контроллера; для некоторых старых версий BIOS необходим явный сброс маски запроса в рстистре 2-го контроллера.

Некорректно завершенная процедура не позволит повторно использовать данный или другие запросы прерываний.

Таблица 2.3. Байты инициализации контроллеров прерываний

Байт

XT

AT#1

AT #2

ICWI

12h

10h

10h

ICW2

08h

08h

70h

ICW3

-

04h

02h

ICW4

0Fh

1Fh

1Bh

OCW3

0Ah

0Ah

0Ah