Системы прерываний

Системы прерываний Рассмотрим примеры организации прерываний в системах с использованием микропроцессора 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

В приведенной на рис. 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.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.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 для кодировки ВУ не ис­пользуется, так как в этом случае команда

RST

0 соответствует сбросу ЦП. На вы­ходе компаратора появляется единичный сигнал, который заносится в триггер запроса ТЗ и поступает на вход процессора как запрос на прерывание

INT

. В от­вет на

INT

:

? процессор сбрасывает флаг разрешения прерывания

INTE,

после чего проис­ходит также сброс триггера запроса ТЗ;

? с помощью ЦП вырабатывается (вне ЦП) сигнал подтверждения прерывания ?

INTA

= 0, который отпирает буфер. Вектор прерываний считывается в ЦП и инициирует его на выполнение процедуры обслуживания прерывания.

Понравилась статья? Поделиться с друзьями:
Все об энергетике, электротехнике и электронике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: