Рассмотрим примеры организации прерываний в системах с использованием микропроцессора 580–й серии.
Средства для обслуживания прерываний.
Микропроцессор имеет следующие средства:
? вход запроса
на прерывание
INT
, на который подается внешний сигнал с единичным уровнем;
? выход разрешений
прерывания
INTE,
на
который поступает сигнал с внутреннего триггера. При
INTE
= 1 прерывания разрешены, при
INTE
= 0 — запрещены, т. е. сигнал запроса
INT
= 1 не воспринимается процессором;
? машинный цикл
«подтверждение запроса на прерывание», в котором:
• с помощью выходного управляющего сигнала ввода данных
DBIN
и флага
INTA
(нулевой разряд слова состояния
SW)
формируется внешними аппаратными средствами сигнал подтверждения прерывания
INTA
(вместо сигнала чтения памяти);
• происходит аппаратный сброс флага
INTE;
• содержимое программного счетчика остается неизменным;
? две команды
EI
и
DI
для программной установки и программного сброса сигнала разрешения прерывания
INTE;
? однобайтную команду
RST
(повторный пуск), которая во время цикла «подтверждение запроса на прерывание» с помощью сигнала ?
IN
TA
считывается с ШД. Команда
RST
имеет двоичный код 11N2N1N0111
,
который формируется аппаратными средствами. После дешифрации код приобретает вид
00N2N1No000.
По этой команде текущее значение программного счетчика помещается в стек и происходит передача управления по одному из восьми адресов 00000000…00111000, расположенных с интервалом 8 байт. Команда выполняется в три машинных цикла. В первом цикле происходит выборка команды с ШД и декодирование, в следующем цикле — сохранение текущего значения счетчика команд, в третьем цикле — загрузка счетчик счетчика новым значение (адресом первой ячейки подпрограммы).
При выполнении условия
INT V
INTE
= 1, которое проверяется в последнем такте каждого машинного цикла, процессор переходит к процедуре обслуживания запроса. Она начинается с машинного цикла «подтверждение запроса на прерывание».
Система с одним вектором прерывания.
В этом случае можно использовать команду
RST7,
так как она легко формируется аппаратно, поскольку ее код содержит одни единицы. Например, команду
RST
на шине данных можно получить, подключив ее линии через резисторы к источнику питания.
В приведенной на рис. 3.9.1 схеме системы с одним вектором прерывания для этой цели использован регистр
RG,
на выходе которого включен буфер, управляемый сигналом ?
INTA.
При поступлении хотя бы одного запроса ЗПр0…ЗПр7 от ВУ с входа элемента ИЛИ снимается сигнал запроса
INT
для ЦП. Поступившие запросы на прерывание фиксируются триггере слова состояния РСС. Если флаг разрешения прерывания
INTE
= 1, ЦП приступает к выполнению машинного цикла «подтверждение запроса на прерывание». С помощью внешнего сигнала подтверждения прерывания ?
IN
TA
считывается команда
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
где
INT
0,
INTl
,
INT
2 — стартовые адреса подпрограмм обслуживания внешних устройств ВУ0, ВУ1, ВУ2.
После идентификации источника запроса процессора переходит к обслуживанию подпрограммы прерывания.
Система с несколькими векторами прерываний.
На рис. 3.9.2 приведена схема для обслуживания запросов прерываний от восьми ВУ. Она содержит:
? шифратор приоритетов (ШП) 3 из 8, на вход которого поступают запросы от ВУ, а с выходов снимается трехразрядный код А2А1А0 устройства с наивысшим приоритетом;
? формирователь команды
RST
, в качестве которого используется регистр
RG
.
На управляющий вход буфера подается строб ?
IN
TA
для занесения кода команды
RST
в ЦП. Отличие этой системы от предыдущей состоит в том, что каждое ВУ имеет свой собственный вектор прерывания. Ниже приведена программа, в которой используются три вектора прерываний со старшими приоритетами.
ORG 0
; выставить стартовый адрес общего сброса системы
jmp MAIN
;передача управления главной программе по сбросу
ORG 38Н
; выставить стартовый адрес вектора прерывания для ВУ7
jmp INT7
; передача управления подпрограмме для ВУ7
ORG З0Н
; выставить стартовый адрес вектора прерывания для ВУ6
JMP INT6
; передача управления подпрограмме для ВУ6
ORG 28Н
; выставить стартовый адрес вектора прерывания для ВУ5
JMP INT5
; передача управления подпрограмме для ВУ5
где
INT
7,
INT
6,
INT
5 — стартовые адреса подпрограмм обслуживания внешних устройств ВУ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.3 приведены состояния стека при обслуживании прерывания, где НС, КС — начальное и конечное состояния.
Приоритетные системы прерывания.
В качестве примера рассмотрим систему, представленную на рис. 3.9.4.
В ее состав входят:
? регистр текущего приоритета;
? шифратор приоритетов ШП 3 из 8;
? цифровой компаратор К для сравнения трехразрядных кодов А и В;
? триггер запросов ТЗ;
? регистр вектора прерываний
RG
;
? вспомогательные логические элементы.
Назначение отдельных функциональных узлов системы приведено выше.
Допустим, что в исходном состоянии регистр текущего приоритета содержит код В2В1В0 = 000, сигнал разрешения прерывания
INT
= 1. При поступлении на вход шифратора приоритетов ШП нескольких запросов на его выходе появится трехразрядный код А = А2А1А0, соответствующий наивысшему приоритету. С помощью операнда А в регистре
RG
формируется вектор прерывания или команда
RST
. Отметим, что трехразрядное двоичное число 000 для кодировки ВУ не используется, так как в этом случае команда
RST
0 соответствует сбросу ЦП. На выходе компаратора появляется единичный сигнал, который заносится в триггер запроса ТЗ и поступает на вход процессора как запрос на прерывание
INT
. В ответ на
INT
:
? процессор сбрасывает флаг разрешения прерывания
INTE,
после чего происходит также сброс триггера запроса ТЗ;
? с помощью ЦП вырабатывается (вне ЦП) сигнал подтверждения прерывания ?
INTA
= 0, который отпирает буфер. Вектор прерываний считывается в ЦП и инициирует его на выполнение процедуры обслуживания прерывания.