Track: By me composed! Xe-xe.. :) Author: Macros, 14 July 2K1. ----------------------------------------- +--------+ 11+D0 IRO+18 10+D1 IR1+19 Контроллер прерываний 9+D2 IR2+20 8+D3 IRЗ+21 i8259A 7+D4 IRЧ+22 6+D5 IRS+23 5+D6 IRб+24 4+D7 IR7+25 27+A0 | 1+CS# | 3+RD# | 2+WR# | 17+INT | 26+INTA | +--------+ Маскируемые прерывания обслуживаются контроллером 8259A. Этот контроллер име- ет 8 входов запросов прерываний IRQx от внешних источников и выход запроса INTR, по которому запрос поступает на однои- менный вход процессора. При обработке запроса INTR процессор формирует шинный цикл подтверждения прерывания INTA, в котором контроллер передает по шине дан- ных 8-битный вектор прерывания. Этот вектор является номером, по которому ссылка на процедуру обработки прерывания хранится в таблице прерываний. Команды инициализации обозначаются ICW1-ICWЧ и посылаются инструкциями 8-битного вывода в порты контроллера. Первый байт ICW1 посылается по адресу 020h, байты ICW2-ICWЧ посылаются по ад- ресу 021h (в PC). Байт ICW1 - конфигуратор контроллера. - Биты 7-5=0 (в PC не используются) - Бит 4=1 - признак команды инициализа- +ции (в командах управления от нулевой) - Бит 3 - чувствительность линий запро- са: 0=прерывание по перепаду 1=прерывание по уровню - Бит 2=0 (в PC не используется) - Бит 1 - схема включения 1=одиночный контроллер (XT) 0=каскадное включение (AT) - Бит 0 - признак использования ICWЧ Байт ICW2 задает начальный номер векто- ров, генерируемых данным контроллером, в таблице прерываний. Биты 2-0 должны иметь нулевые значения. Байт ICWЗ используется только для кас- кадного включения. Для ведущего контроллера быты 0-7 ука- зывают на наличие ведомых контроллеров на линиях IRQO-IRQ7 соответственно. Для ведомого контроллера биты 0-2 со- держат номер IRQ ведущего контроллера, к которому он подключен, биты 3-7=0 Байт ICWЧ задает режим работы контрол- лера, его применение обязательно при на- чальной инициализации (в XT - третий байт инициализации) - Биты 5-7 не используются - Бит 4 - SFNM - включает режим вложен- ности приоритетов запросов ведущего и ведомого контроллеров - Бит 3 - BUF - признак буферизованнос- Stu шины. - Бит 2 - M/S - положение в каскаде: 1=ведущий, 0=ведомый - Бит 1 - AEOI - разрешение автомати- ческого завершения прерывания (которое не требует сброса бита маски по оконча- нии обслуживания запроса) - Бит 0 - тип используемого процессора: N 1=8086/8088 и старше, 0=8080 В операционном режиме контроллер воспринимает команды управления OCW1-OCWЗ. OCW1 посылается по адресу 021h, OCW2, OCWЗ - по адресу 020h (в PC). Байт OCW1 - маски запросов, единичное значение бита означает маскирование зап- роса. - Биты 0-7 8259#1 - маски запросов IRQO-IRQ7 - Биты 0-7 8259#2 - маски запросов IRQ8-IRQ15 Байт OSW2 - завершение обслуживания (EOI), управление приоритетом. - Биты 7-5 задают код операци: 001 - неспецифический EOI (AEOI=1 в ICWЧ) 011* - специфический EOI для запроса LLL 101 - неспецифический EOI с ротацией приоритета 100 - установка режима ротации приори- тета 000 - сброс режима ротации приоритета 111* - специфический EOI с ротацией приоритета 110* - установка низшего приоритета 010 - нет операции В операциях, помеченых звездочкой, ис- пользвуются биты 2-0 (поле LLL) - Биты 4-3=00 - признак OCW2 - Биты 2-0 - поле LLL - номер уровня, к пкоторому относится команда. Байт OCWЗ - оперативное управление контроллером - Бит 7=0 - Биты 6-5 режим специального маскиро- вания (в PC не используется): 11 - установить 10 - сбросить 00,01 - не изменять - Биты 4-3=01 - признак OCWЗ - Бит 2=0 - запрещает режим полинга (в котором запрос прерывания к процессору не вырабатывается) - Биты 1-0 - управление чтением ре- гистров: 10=чтение IR - регистра масок 11=чтение IS - регистра обслуживае- мого прерывания 00,01 - не изменять регистр Для чтения регистра маски или регистра обслуживаемого прерывания (в зависимости от бит 1-0 OCWЗ) используется порт 021h (в PC).