Контроллеры прерываний

Внешние устройства, включенные в подсистему прерываний, должны реализовать несколько функций, связанных с работой в этой подсистеме - формирование запроса, анализ ответа процессора, выдачу вектора прерывания. Кроме того, в подсистеме необходимо обеспечить дисциплину обслуживания запросов. Перечисленные функции могут быть реализованы на специальных устройствах - контроллерах прерываний, которые выпускаются в виде БИС в составе многих микропроцессорных комплектов.

Рис. 5.2. Общая схема контроллера прерываний

Рис. 5.3. Контроллер К589ИК14

На Рис. 5.3 приведена структурная схема простого контроллера прерываний К589ИК14, применяемого совместно с МП К580ВМ80 (на схеме показаны лишь основные блоки и выводы контроллера).

Контроллер включает в себя следующие блоки:

  • РгЗП - регистр запросов, на который поступают запросы на прерывание z0..z7 от внешних источников;
  • ПШ - приоритетный шифратор, формирующий на выходе трехразрядный код номера возбужденного входа (соответствующего разряда РгЗП), причем, если на входе ПШ присутствуют несколько единиц, то на выходе будет сформирован код большего номера;
  • Буф. - буферная схема, подключающая выход ПШ к линиям системной шины данных при подаче на управляющий вход сигнала подтверждения прерывания INTA;
  • РгТП - регистр текущего приоритета, программно-доступный в пространстве ввода/вывода и хранящий трехразрядный код приоритета текущей программы;
  • СС - схема сравнения, формирующая запрос на прерывание INT процессору при условии, что код наибольшего из поступивших запросов больше кода текущего приоритета.

МП проверяет состояние входа INT в конце каждого командного цикла при условии установки в "1" триггера разрешения прерывания TI. Если INT = 1, то МП вместо машинного цикла M1 следующего командного цикла выполняет цикл обслуживания прерывания, который отличается от M1 только тем, что вместо сигнала RDM\ вырабатывается сигнал INTA\ и программный счетчик PC не инкрементируется. Поэтому не происходит чтение команды из памяти (хотя ее адрес и выставлен на AB[15:0]), а по сигналу INTA\ контроллер выставляет на DB[5:3] трехразрядный номер запроса. На остальных линиях DB сохраняются лог. "1" (высокоимпедансное состояние). В такте T3 цикла обслуживания прерывания код с DB[7:0] записывается в регистр команд МП.
Код 11nnn111 представляет собой код одной из восьми команд RST 0. . RST 7, которые выполняются аналогично командам CALL, но с фиксированными адресами вызываемых подпрограмм:
RST 0 = CALL 0000h
RST 1 = CALL 0008h
RST 2 = CALL 0010h
.. . . . .
RST 7 = CALL 0038h
Таким образом, каждому запросу соответствует фиксированный адрес обслуживаемой его подпрограммы.
К недостаткам рассмотренного выше контроллера прерываний К589ИК14 относится жесткая система приоритетов запросов, не позволяющая обеспечить равновероятное обслуживание источников прерываний. Кроме того, контроллер не позволяет выделить произвольное подмножество разрешенных в данный момент прерываний из множества поступающих на его входы запросов. Возможно лишь задать определенный уровень, начиная с которого запросы будут разрешены.
Использование ..ИК14 накладывает ограничение на расположение обслуживающих прерывания подпрограмм или указателей на них в адресном пространстве памяти. Команды RST вызывают подпрограммы из начальной области адресов памяти (0000..0038), что не всегда удобно при организации МПС.