Системы прерыванийРассмотрим примеры организации прерываний в системах с использованием микропроцессора 580–й серии.

Средства для обслуживания прерываний. Микропроцессор имеет следующие средства:

●     вход запроса на прерывание INT, на который подается внешний сигнал с еди­ничным уровнем;

●     выход разрешений прерывания INTE, на который поступает сигнал с внутрен­него триггера. При INTE = 1 прерывания разрешены, при INTE = 0 — запре­щены, т. е. сигнал запроса INT = 1 не воспринимается процессором;

●     машинный цикл «подтверждение запроса на прерывание», в котором:

•      с помощью выходного управляющего сигнала ввода данных DBIN и флага INTA (нулевой разряд слова состояния SW) формируется внешними аппа­ратными средствами сигнал подтверждения прерывания INTA (вместо сиг­нала чтения памяти);

•      происходит аппаратный сброс флага INTE;

•      содержимое программного счетчика остается неизменным;

●     две команды EI и DI для программной установки и программного сброса сиг­нала разрешения прерывания INTE;

●     однобайтную команду RST (повторный пуск), которая во время цикла «под­тверждение запроса на прерывание» с помощью сигнала ¯INTA считывается с ШД. Команда RST имеет двоичный код 11N2N1N0111, который формируется аппаратными средствами. После дешифрации код приобретает вид 00N2N1No000. По этой команде текущее значение программного счетчика помещается в стек и происходит передача управления по одному из восьми адресов 00000000...00111000, расположенных с интервалом 8 байт. Команда выполня­ется в три машинных цикла. В первом цикле происходит выборка команды с ШД и декодирование, в следующем цикле — сохранение текущего значения счетчика команд, в третьем цикле — загрузка счетчик счетчика новым значе­ние (адресом первой ячейки подпрограммы).

При выполнении условия INT V INTE = 1, которое проверяется в последнем такте каждого машинного цикла, процессор переходит к процедуре обслуживания запроса. Она начинается с машинного цикла «подтверждение запроса на преры­вание».

Система с одним вектором прерывания. В этом случае можно использо­вать команду RST7, так как она легко формируется аппаратно, поскольку ее код содержит одни единицы. Например, команду RST на шине данных можно полу­чить, подключив ее линии через резисторы к источнику питания.

рис. 3.9.1

В приведенной на рис. 3.9.1 схеме системы с одним вектором прерывания для этой цели использован регистр RG, на выходе которого включен буфер, управля­емый сигналом ¯INTA. При поступлении хотя бы одного запроса ЗПр0...ЗПр7 от ВУ с входа элемента ИЛИ снимается сигнал запроса INT для ЦП. Поступившие за­просы на прерывание фиксируются триггере слова состояния РСС. Если флаг разрешения прерывания INTE = 1, ЦП приступает к выполнению машинного цикла «подтверждение запроса на прерывание». С помощью внешнего сигнала подтвер­ждения прерывания ¯INTA считывается команда RST.

В системе с одним вектором прерывания и несколькими источниками запроса для идентификации источника используется поллинг. Главная программа обра­ботки прерываний для RST7 располагается по адресу 38Н. Ниже приводится текст программы опроса для случая, когда в системе используются три источника за­просов.

ORG               38Н                 ; выставить стартовый адрес

; Сохранить в стеке содержимое

push             psw              ; регистров А и состояния SW

push             B                     ; регистровой пары ВС

push             d                     ; регистровой пары DE

push             h                     ; регистровой пары HL

 

; Определить источник прерываний

in port                              ; считать из pcc признаки прерываний в аккумулятор А

rar                                      ; сдвигая вправо на 1 разряд содержимое А, проверить

; бит 0 с помощью флага переносе CY

jc into                               ; если cy = 1, то переход по адресу into

rar                                      ; проверить бит 1 с помощью флага cy

jc INT1                                ; если CY = 1, то переход по адресу INT1

Jmp               INT2              ; переход по адресу INT2

 

где INT0, INTl, INT2 — стартовые адреса подпрограмм обслуживания внешних устройств ВУ0, ВУ1, ВУ2.

После идентификации источника запроса процессора переходит к обслужива­нию подпрограммы прерывания.

рис. 3.9.2

Система с несколькими векторами прерываний. На рис. 3.9.2 приведена схема для обслуживания запросов прерываний от восьми ВУ. Она содержит:

●     шифратор приоритетов (ШП) 3 из 8, на вход которого поступают запросы от ВУ, а с выходов снимается трехразрядный код А2А1А0 устройства с наивыс­шим приоритетом;

●     формирователь команды RST, в качестве которого используется регистр RG.

На управляющий вход буфера подается строб ¯INTA для занесения кода коман­ды RST в ЦП. Отличие этой системы от предыдущей состоит в том, что каждое ВУ имеет свой собственный вектор прерывания. Ниже приведена программа, в кото­рой используются три вектора прерываний со старшими приоритетами.

ORG               0                      ; выставить стартовый адрес общего сброса системы

jmp               MAIN            ;передача управления главной программе по сбросу

ORG               38Н                 ; выставить стартовый адрес вектора прерывания для ВУ7

jmp               INT7              ; передача управления подпрограмме для ВУ7

ORG               З0Н                 ; выставить стартовый адрес вектора прерывания для ВУ6

JMP               INT6              ; передача управления подпрограмме для ВУ6

ORG               28Н                 ; выставить стартовый адрес вектора прерывания для ВУ5

JMP               INT5              ; передача управления подпрограмме для ВУ5

где INT7, INT6, INT5 — стартовые адреса подпрограмм обслуживания внешних устройств ВУ7, ВУ6, ВУ5.

Сохранение состояния, предшествующего прерыванию. Для функциони­рования системы прерываний главная программа, расположенная по адресу MAIN, должна установить начальный адрес ADDR в указателе стека SP и разре­шить прерывания:

ORG   0                      ; установка начального адреса после сброса

JMP    MAIN            ; переход на начальный адрес главной программы

ORG   MAIN            ; установка начального адреса главной программы

LXI     SP, ADDR     ; загрузка начального адреса стека в SP

EI                               ; разрешение прерываний

 

Состояние основных программно доступных регист­ров процессора, предшествующее прерыванию, сохра­няется в вершине стека при входе в процедуру обработ­ки прерывания.

После обслуживания прерывания содержимое регист­ров извлекается из стека. Контекстные переключения выполняются с помощью следующих команд:

Сохранение в стеке

PUSH             PSW

PUSH             B

PUSH             D

PUSH             H

Извлечение из стека

POP   H

POP    D

POP    В

POP    PSW

Извлечение содержимого из стека производится в обратной последовательности по отношению к загрузке.

рис. 3.9.4

На рис. 3.9.3 приведены состояния стека при обслу­живании прерывания, где НС, КС — начальное и конеч­ное состояния.

рис. 3.9.3

Приоритетные системы прерывания. В качестве примера рассмотрим систе­му, представленную на рис. 3.9.4.

В ее состав входят:

●     регистр текущего приоритета;

●     шифратор приоритетов ШП 3 из 8;

●     цифровой компаратор К для сравнения трехразрядных кодов А и В;

●     триггер запросов ТЗ;

●     регистр вектора прерываний RG;

●     вспомогательные логические элементы.

Назначение отдельных функциональных узлов системы приведено выше.

Допустим, что в исходном состоянии регистр текущего приоритета содержит код В2В1В0 = 000, сигнал разрешения прерывания INT = 1. При поступлении на вход шифратора приоритетов ШП нескольких запросов на его выходе появится трехразрядный код А = А2А1А0, соответствующий наивысшему приоритету. С по­мощью операнда А в регистре RG формируется вектор прерывания или команда RST. Отметим, что трехразрядное двоичное число 000 для кодировки ВУ не ис­пользуется, так как в этом случае команда RST0 соответствует сбросу ЦП. На вы­ходе компаратора появляется единичный сигнал, который заносится в триггер запроса ТЗ и поступает на вход процессора как запрос на прерывание INT. В от­вет на INT:

●     процессор сбрасывает флаг разрешения прерывания INTE, после чего проис­ходит также сброс триггера запроса ТЗ;

 

●     с помощью ЦП вырабатывается (вне ЦП) сигнал подтверждения прерывания ¯INTA = 0, который отпирает буфер. Вектор прерываний считывается в ЦП и инициирует его на выполнение процедуры обслуживания прерывания.