Контроллер прерываний К1810ВН59А (i8259А)
Основная задача контроллера – сообщить процессору какое внешнее устройство его запросило.
Подключение ВН59 к системной шине показано на рис. 3.
Рис. 3 Подключение ВН59 к системной шине
Контроллер имеет восемь входов запросов на прерывание (IR7 – IR0). Восприняв запрос на одном из этих входов ВН59, формирует сигнал на выходе INT. Этот сигнал подается на вход INTR ВМ86. Если внешние прерывания не замаскированы (флаг if установлен в единицу), МП подтверждает прерывание, выставляя два сигнала на выходе INTA. Эти сигналы поступают на одноименный вход контроллера, и по второму из них ВН59 выставляет на ШД тип прерывания. Этот тип он формирует следующим образом: старшие пять разрядов типа задает программист при настройке контроллера, а на место младших трех разрядов ВН59 подставляет двоичный номер линии, по которой пришел запрос.
Внутренняя структура ВН59 представлена на рис. 4
Рис. 4. Внутренняя структура ВН59.
Буфер данных используется для связи контроллера с шиной данных процессора (ШД). Контроллер подключается к ШД, когда на его вход CSприходит активный (нулевой) сигнал и при подтверждении прерывания (сигнал INTA). Система распаивается таким образом, чтобы активный CS приходил, когда процессор обращается к одному из двух внутренних портов контроллера командой inили out.
Схема чтения/записи управляет чтением/записью внутренних регистров контроллера. Активный сигнал IOR (вырабатывается при выполнении процессором команды in) задает операцию чтения, активный IOW(команда out) – операцию записи.
Каскадный буферсодержит схему распознавания каскадного соединения нескольких контроллеров, которая будет рассматриваться в дальнейшем.
IRR – восьмиразрядный регистр запросов прерываний. В нем запоминаются все запросы, приходящие на входы IR7 – IR0. Когда прерывание подтверждается процессором (приходит сигнал INTA), соответствующий разряд IRR сбрасывается. Текущее содержимое IRRможно прочитать с помощью команды OCW3(смотри ниже).
ISR– восьмиразрядный регистр обслуживаемых запросов. Соответствующий бит в этом регистре устанавливается, когда прерывание подтверждается процессором (приходит сигнал INTA). Сбрасывается этот бит, в зависимости от настройки контроллера, либо специальной командой EOI, которую формирует программист, как правило, в конце обработчика, либо автоматически (AEOI). Установленный разряд ISRблокирует (маскирует) восприятие контроллером запросов, имеющих тот же или более низкий по отношению к установленному разряду приоритет (пришедший запрос запоминается в IRR, но запросINT на процессор не вырабатывается). Устранить блокирующее влияние разрядов ISR можно либо путем их сброса (EIO), либо путем специального маскирования. Текущее содержимое IRRможно прочитать с помощью команды OCW3(смотри ниже).
IMR– восьмиразрядный регистр масок. Содержит маски, позволяющие заблокировать прохождение поступившего запроса в процессор. IMRi= 0разрешает запрос на ножке IRi,IMRi = 1 – запрещает.
Несмотря на то, что внутренняя архитектура ВН59 включает в себя довольно много различных регистров, с точки зрения программиста, контроллер содержит всего два адресуемых устройства, выбор между которыми определяет сигнал на линии А0.
В системе могут использоваться несколько ВН59, соединенных каскадно. При этом один контроллер является ведущим (MASTER), а все остальные ведомыми (SLAVE). Выходы INT ведомых контроллеров заводятся на входы IRi ведущего контроллера. Таким образом, максимальное число контроллеров в системе равно девяти, а максимально возможное число источников внешних прерываний равно 64. Например, в IBM-подобных ПЭВМ используются два контроллера прерываний. Ведущему присвоены системные адреса 20h (A0 = 0) и 21h (A0 = 1), ведомому – а0h и а1h. Таким образом, организуется 15 входов запросов на прерывание. Схема подключения контроллеров в IBM проведена на рис. 5.
Рис 5. Каскадное соединение контроллеров в IBM.