литература / Пухальский Проектирование микропроцессорных систем 2001
.pdf160 |
Глава 2. Методы ввода-вывода |
Рис. 2.9. Временные диаграммы режима вывода по готовности
2.3. Программный ввод-вывод с квитированием |
161 |
Временные диаграммы, изображенные на рис. 2.8, поясняют работу схемы в режиме ввода данных по готовности при использовании МП 8080. Аналогичным образом схема работает и в режиме вывода данных по готовности (рис. 2.9).
Диализ значения сигнала READY в МП 8080 производится в такте Т2 каждого машинного цикла. Если МП обнаружит значение сигнала READY = 0, то он перейдет в состояние ожидания выдаст значение сигнала WAIT = 1. При выходе МП из состояния ожидания сигнал WAIT авоматически сбрасывается в 0. Это же справедливо и для МП 8085, только сигнал WAIT у него
тсутствует. |
____ |
_ _ _ |
Если в схеме, изображенной на рис. 2.7, |
вместо сигнапов IIOR и HOW подать сигналы |
|
iEMR и МЕШУ, то ее можно будет использовать для введения тактов ожидания при чтении и аписи данных в память. При этом, конечно, на адресный дешифратор 555ИЕ7 нужно подать ругие разряды адреса.
2.3. Программный ввод-вывод с квитированием
Ввод данных без квитирования часто неприемлем, так как микропроцессору не известны юменты времени, в которые внешние устройства записывают сигналом STB = 1 данные в бу ферный регистр ввода (см. рис. 2.3). Осложнения возникают и при выводе данных, если внешiee устройство, подключенное к буферному регистру вывода, не в состоянии принимать дан- 1ые с такой скоростью, с которой их может выдавать МП. В таких случаях используется цитирование (acknowledgement, handshaking — подтверждение приема) — передача устройст- >ом управляющих сигналов в ответ на принятое сообщение. Для синхронизации передачи дан ных между внешними устройствами и МП используются сигналы квитирования (флаги) IBF Input Buffer Full — входной буфер заполнен) и OBF (Output Buffer Full — выходной буфер затолнен) — флаги могут быть как прямыми, так и инверсными.
На рис. 2.10, а показана структурная схема внешнего устройства, предназначенного для программного ввода и вывода с квитированием; 1533ИР22 — буферный регистр ввода данных, 1533ИР23 — буферный регистр вывода данных, 1533ТМ2 —- два D-триггера регистра состоя
ния флагов IBF1 |
и OBFu чтение которого МП производит через драйвер 1533АП5. Регистр со |
стояния может |
содержать восемь триггеров для обслуживания программного ввода-вывода |
с квитированием четырех внешних устройств. |
|
Значение сигнала STB - 0 (STB — Strobe — строб) загружает байт данных в регистр ввода и устанавливает значение флага IBFX- 1, а значение сигнала АСК ~ 0 (.АСК ■— Acknowledge — квитировать) подтверждает прием байта данных внешним устройством из регистра вывода и устанавливает значение флага OBFx - ]. Флаги 1BF\ и OBF\ поступают в МГ1 программным способом (читаются по шине данных), а на внешнее устройство — аппаратно (по проводни кам). Чтение флагов производится значением сигнала ОЕ2 - IIORCS94 = 0, чтение регистра
ввода и сброс флага 1BF\ — значением сигнала |
ОЕх- [/OR-CSHO = 0, запись байта данных |
в регистр вывода и установка значения OBF{ = 0 — значением сигнала II = H O W ■CS94 = I. |
|
На рис. 2.10,6, в изображены блок-схемы |
алгоритмов программного ввода и вывода |
с квитированием: port_F — имя порта регистра |
состояния (регистра флагов IBF и OBF), |
port_1— имя порта ввода, port_2 —■имя порта вывода. Флаги 1BF\ и OBF\ фиксируются в двух разрядах регистра состояния и перед каждой операцией ввода или вывода МП производит чте ние этого регистра (команда IN port_F) для проверки сигналов квитирования 1BF (при вводе — рис. 2.10, б) или OAF (при выводе — рис. 2.10, в).
При получении значения IBF = 0 при вводе МП будет читать регистр состояния до тех пар, пока внешнее устройство не выдаст данные в буферный регистр ввода и не установит флаг
II Г. И. I [уханьский
162 |
Глава 2. Методы ввода-вывода |
IBF = 1 (рис. 2.10, б). Только обнаружив, что флаг JBF установлен в 1, МГ1 производит ввод
байта данных из буферного регистра ввода и сброс флага IBF. При получении значения разряда OBF ~ 0 при выводе МП будет читать регистр состояния до тех пор, пока внешнее устройство
не примет байт данных из буферного регистра вывода и не установит значение флага OBF = I (рис. 2.10, в). Только обнаружив, что флаг OBF = 1, МП производит вывод следующего байта
данных в буферный регистр вывода и установку флага OBF в 0. Из этого следует назначение флагов:
[0 - указание I/O загрузить буферный регистр,
I BFj =< |
к , г г ■ |
[1 - указание МП принять байт данных;
— |0 - указание I/O принять байт данных,
'[ l - указание МП загрузить буферный регистр.
Адресация регистров ввода, вывода и состояния приведена в табл. 2.2. Здесь произведена неполная дешифрация адресных сигналов — в дешифрации не участвуют разряды адреса А{ и
Ао, а значит, часть адресов теряется. Из табл. 2.2 следует, что при использованном способе ад ресации одним дешифратором можно адресовать как отдельные регистры, так и интерфейсные БИС типа приведенной на рис. 2.4, содержащие до четырех устройств ввода и вывода.
Временные диаграммы, изображенные на рис. 2.11, а, поясняют процесс ввода с квитиро ванием, а на рис. 2.11, 6 — процесс вывода с квитированием (значения сигналов ПОИ ~ 0 и HOW = 0 помечены командами IN port и OUT port, которыми они порождаются).
Рис. 2.1ft. Программный ввод-вывод с квитированием
|
|
|
|
|
|
|
2.3. Программный ввод-вывод с квитированием |
|
163 |
||||
|
|
Таблица 2.2. Адресация |
НО |
СО |
Х М Ю С |
|
|
||||||
|
|
Wt-o ; |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Разряды адреса |
|
Выход |
port |
ST B |
|
|
|
|||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
D C |
Q-j-a |
|
|
|
|
|
z z x z z z |
|
|
||||||||||
|
|
|
|
||||||||||
1 |
0 |
0 |
0 |
0 |
0 |
X |
X |
0 |
8083 |
IBF} |
|
|
|
1 |
0 |
0 |
0 |
0 |
1 |
X |
X |
1 |
84--87 |
1Ш L|M 94 UlN 94 |
IN SQ |
|
|
1 |
0 |
0 |
0 |
1 |
0 |
X |
X |
2 |
8 8 - 8В |
D 0RG - |
Z-состояние |
О — |
|
1 |
0 |
0 |
0 |
1 1 |
X |
X |
3 |
8С -8 F |
|
|
|||
|
|
|
|
||||||||||
1 |
0 |
0 |
1 |
0 |
0 |
X |
X |
4 |
90 --93 |
DB ~~У |
VALID y ~ |
И Ю |
С |
1 |
0 |
0 |
1 0 |
1 X |
X |
5 |
94 --97 |
|
1 OUT 94 |
|_ OUT 94 |
|||
1 |
0 |
0 |
1 1 0 |
X |
X |
6 |
9 8 - 9В |
|
|||||
|
|
|
|
||||||||||
1 |
0 |
0 |
1 1 1 X |
X |
7 |
9С 9F |
/cF |
U |
|
u |
|||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
ЛОт-о. |
|
£ |
|
|
|
|
|
|
|
|
|
|
|
I/OR |
""1J]N 94 |
U lK 94 |
LJlN 94 |
Рис. 2.11. Временные диаграммы ввода-вывода с квитированием
В программах ввод-вывод с квитированием обычно используется несколько раз. Поэтому его целесообразно оформлять в виде подпрограмм.
Задача 1. Из регистра ввода 1533ИР22 переслать байт данных в ячейку памяти Л/(23А7) и из ячейки памяти М(23А8) байт данных переслать в регистр вывода 1533ИР23. Решение:
|
LXI |
H, 23A7h |
rpH <r- 23A7 — адрес памяти |
|
CALL Cin |
Подпрограмма ввода Cin |
|
|
INX |
H |
rp H <— 23A8 — адрсс памяти |
|
CALL Cout |
Подпрограмма вывода Cout |
|
Cin: |
IN |
94h |
А <- SW =IZO(94) = x x x x OBF2IBF2OBF1IBF] — чтение флагов |
|
ANI |
1 |
1 = 0000 0001 — маска для выделения флага IBF\ |
|
JZ |
Cin |
Переход, если IBF\ = 0 |
|
IN |
80h |
А <— //0(80) — ввод из регистра 1533ИР22 |
|
MOV |
M, A |
M(rp Н) А — запись в память |
|
RET |
|
|
Com/: |
IN |
94h |
А <— SW = //0(94) = xxxxOBFjlBFzOBFJBF[ — чтение флагов |
|
ANI |
2 |
2 = 0000 0010 — маска для выделения флага OBF\ |
|
JZ |
Cout |
Переход, если OBF\ = 0 |
|
MOV |
A, M |
А <— M{rp Н) — чтение памяти |
|
OUT |
94h |
//0(94) <— M(rp Н) — вывод в регистр 1533ИР23 |
|
RET |
|
|
Квитирование позволяет согласовать во времени работу асинхронно работающих МП и внешних устройств — быстродействие МП может быть и больше, и меньше быстродействия внешних устройств.
164 Глава 2. Методы ввода-вывода
2.4. Ввод-вывод по прерыванию
При вводе-выводе по прерыванию внешние устройства подают на вход 1NT микропроцес сора 8080 сигнал запроса прерывания IRQ (Interrupt Request). Значение сигнала INT МП анали зирует в последнем такте последнего машинного цикла каждой выполняемой команды. При обнаружении значения INT = 1 при состоянии внутреннего триггера INTE = 1 микропроцессор приостанавливает выполнение текущей программы и переходит к выполнению подпрограммы обработки прерывания (ППОП), закончив которую возвращается к выполнению прерванной программы. Для реализации ввода-вывода по прерыванию требуются дополнительные аппа ратные средства. Типичным примером ввода по прерыванию является ввод кода нажатой кла виши клавиатуры (частота нажатия клавиш невелика и потери времени при программном вводе с квитированием были бы необоснованно большими). Выполняются ППОП на фоне основной программы, что обеспечивает наиболее рациональное использование процессорного времени.
О дновекторные системы прерываний. На рис. 2.12 изображены структурные схемы МП-систем 8080 с обслуживанием одновекторных прерываний. Вектор прерывания — это ад рес подпрограммы обработки прерывания или число, по которому этот адрес автоматически вычисляется микропроцессором. Подключение выхода INTA системного контроллера 8238 к источнику напряжения питания +12 В переводит его в режим выдачи в МП машинного кода FFft команды RST 7 в ответ на запрос прерывания IRQ = 1 по входу INT [10]. При приеме за проса прерывания (при условии, что командой EI предварительно было установлено значение сигнала INTE ~ 1) МП 8080 выдает в системный контроллер слово состояния SW8>ш = 0010x011 (см. табл. 1.15), младший разряд которого D0 = 1 блокирует системную шину данных, т. е. вы борка команды RST 7 производится не из памяти команд программы, а из самого системного контроллера 8238. Формат команд RST п показан на рис. 2.13 — адрес вызова ППОП вычисля ется автоматически и определяется числом 8 х п - (8 х 7)i0 = 5б10 = 38i6-
На рис. 2.12, а изображена структурная схема МП-системы с обслуживанием по прерыва нию одного внешнего устройства 1/0-0. Прием запросов прерывания IRQ = 1 возможен только после установки командой EI значения сигнала INTE = 1. Сразу после приема запроса преры вания МП сбрасывает сигнал 1NTE в 0, что используется для сброса в 0 сигнала IRQ. Таким
образом, ввод-вывод по прерыванию определяется схемой: |
|
|||||
. |
=> |
INTE 1 |
=> |
IRQ 1 |
(аппаратное квитирование ввода-вывода), |
|
|
:=> |
SW*. ш |
=> |
RST 7 |
=^> ППОП по адресу addr= 003 8/г |
|
(команда RST |
7 поступает в МП по локальной шине данных из системного контроллера 8238). |
|||||
|
|
|
|
б) |
8080 |
AST 7 |
|
|
|
|
|
•D?-о |
|
OS ,Ж
Сброс запроса
л р ер ш а к к я
Рис. 2.12. Одновекторные системы прерываний
|
2.4. Ввод-вывод по прерыванию |
165 |
|||||
D1 |
D6 |
D5 |
D4 |
£>3 |
D2 |
D 1 |
D0 |
1 |
1 |
п |
п |
п |
1 |
1 |
1 |
Рис. 2.13. Машинные коды команд RST |
п |
||||||
Содержимое всех внутренних регистров МП, которые будут использоваться подпрограм мой обработки прерывания, необходимо сохранить в оперативной памяти, а в самом конце ППОП следует восстановить содержимое этих регистров. Для этих целей наиболее целесооб разно использовать команды PUSH гр и POP гр, адресующие стек. Так как ввод и вывод дан ных при обработке прерываний от внешних устройств производится командами IN port и OUT port с использованием аккумулятора, то всегда следует сохранять и восстанавливать, по крайней мере, регистр P S W — аккумулятор й регистр признаков. Типовое оформление подпро граммы обработки прерывания при сохранении и восстановлении содержимого всех внутрен них регистров МП приведено ниже:
; Начало подпрограммы обработки прерывания RST 7 с адресом вызова 7 x 8 = 56d - 0038h PUSH PSW ; Сохранение в стеке состояния прерванной (основной) программы
PUSH H
PUSH D
PUSH В
|
|
; Собственно подпрограмма обработки прерывания |
POP |
В |
; Восстановление состояния прерванной программы |
POP |
D |
|
POP |
H |
|
POP |
PSW |
|
EI |
|
; Разрешение прерываний (INTE <— 1) |
RET |
|
; Возврат в прерванную программу |
На рис. 2.12, б показана структурная схема МП-системы с одновекторным обслуживанием по прерыванию восьми внешних устройств 1/О—т (т = 0 ... 7) с восемью уровнями приоритета. При выдаче активного уровня сигнала запроса прерывания /„, = 0 хотя бы одним внешним уст ройством приоритетный шифратор PRCD вырабатывает активный уровень группового сигнала запроса прерывания GS = 0 и выдает двоичный код номера т = А2А|А0, внешнего устройства, имеющего наибольший приоритет из всех внешних устройств, одновременно запросивших об служивание. Чем больше номер т входа /„, у приоритетного шифратора 555ИВ1, тем выше приоритет этого входа. Детальное описание ИС 555ИВ1, а также других приоритетных шифра торов, можно найти в § 6.6 книги [5].
Пример 1 (подпрограмма обслуживания прерывания, соответствующая рис. 2.12, б):
; Начало подпрограммы обработки прерывания RST 7 с адресом вызова 7 x 8 = 56d = 0038/г
PUSH |
PSW |
; Сохранение в стеке состояния прерванной программы |
PUSH |
H |
|
PUSH |
D |
|
PUSH |
В |
|
IN |
CSbd |
; А <— хххх xA2AiA0 — чтение номера I/O, запросившего обслуживание |
ANI |
1 |
; А 0000 OA2A[A0 — выделение кода А2А 1А0 = т |
CPI |
1 |
; Сравнение кода А2А|А0 с числом 1 |
JZ |
IO_l |
; Переход на обслуживание I/O-1 |
JC |
I0 _ 0 |
; Переход на обслуживание I/O -0 |
CPI |
3 |
; Сравнение кода A2AiA0 с числом 3 |
166 |
|
|
Глава 2. Методы ввода-вывода |
|
JZ |
IO_3 |
Переход на обслуживание I/O- 3 |
|
JC |
IO_2 |
Переход на обслуживание I/O-2 |
|
CPI |
5 |
Сравнение кодаА2А(Ао с числом 5 |
|
JZ |
IO_5 |
Переход на обслуживание I/O-5 |
|
JC |
IO_4 |
Переход на обслуживание I/O-4 |
|
CPI |
6 |
Сравнение кода Ау^Ао с числом 6 |
|
JZ |
IO_6 |
Переход на обслуживание I/O-6 |
|
Л |
|
Начало подпрограммы обслуживания 1/0-1 |
|
OUT |
ResetJLR1 |
Сброс запроса прерывания от 1 /0 -1 (сигнал I/OW 8l CSI1 = 0) |
|
JMP |
ENDRST |
Конец подпрограммы обслуживания l / 0 - l |
10 0: |
/ . |
|
Начало подпрограммы обслуживания I/O -0 |
|
OUT |
Reset_IR0 |
Сброс запроса прерывания от I/O -0 |
|
JMP |
ENDRST |
Конец подпрограммы обслуживания I/O -0 |
Ю_1: |
|
|
и т. д. |
Ю_6 |
|
|
|
ENDRST: |
POP |
В |
Восстановление состояния прерванной программы |
|
POP |
D |
|
|
POP |
H |
|
|
POP |
PSW |
|
|
EI |
|
; Разрешение прерываний (INTE <— 1) |
|
RET |
|
; Возврат в прерванную программу |
Прервать эту подпрограмму до ее завершения другие внешние устройства не в состоянии, так как команда разрешения прерываний EI находится в самом конце подпрограммы.
Для определения адресов переходов на программы обслуживания I/O-т удобно использо вать косвенно-регистровый метод адресации переходов (см. § 1.7). Пример 2:
; Начало подпрограммы обработки прерывания RST 7 с адресом вызова 7 x 8 = 56d = 38h
|
PUSH |
PSW |
; Сохранение в стеке состояния прерванной программы |
|
PUSH |
H |
|
|
PUSH |
D |
|
|
PUSH |
В |
|
|
IN |
CSbd |
А <— хххх хА2А,А0 — чтение номера I/O-т , пославшего запрос |
|
ANI |
1 |
А <— 0000 OAjAjAq — выделение кода А2А,Ао = т |
|
LXI |
H, A d d r j |
HL <— A d d rjt (начальный адрес таблицы адресов |
|
MVI |
D, 0 |
передачи управления) |
|
ADD |
A |
А <— т х 2 |
|
MOV |
E, A |
DE = т х 2 |
|
DAD |
D |
HL <— Addr_t + (т х 2) |
|
MOV |
A, M |
|
|
INX |
H |
|
|
MOV |
H, M |
|
|
MOV |
L, A |
; HL = Addr_m |
Г |
PCHL |
|
; PC <— Addr_m (переход на обслуживание I/O-m, где m = A2AiA0) |
|
|
|
Addrjt |
Addr |
|
A d d r j + 2 |
Addr_\ |
|
Addr t + 4 |
Addr |
2 |
Таблица адресов переходов: Addr_m — двухбайтовый адрес передачи управления подпрограмме обслуживания внешнего устройства 1/О-т (т = 0 ... 7)
|
|
2.4. Ввод-вывод по прерыванию |
167 |
||
Addr_t + 6 |
AddrJ, |
Передача управления подпрограмме обслуживания |
|||
Addr_t + 8 |
Addr_4 |
||||
Addr_t + А |
AddrJ, |
внешнего устройства I/O-т осуществляется с помощью |
|||
A ddrJ + С |
Addr_6 |
косвенно-регистрового метода адресации переходов |
|||
Addr t + E |
Addr 1 |
|
|
|
|
В этой подпрограмме используется |
|
|
|||
таблица для |
восьми адресов переходов |
80 80 |
JiSTn |
||
Addr_m и вычисление конкретного |
ад |
£*7-0 |
|
||
реса таблицы для загрузки из нее адреса |
|
||||
L O S 3 IN T |
|
||||
перехода в |
программный |
счетчик |
PC. |
|
|
Если при отладке программы адреса |
|
|
|||
переходов изменятся или |
потребуется |
|
|
||
перенести подпрограммы обслуживания |
|
|
|||
прерываний в другое место памяти, то |
|
|
|||
достаточно будет изменить только таб |
|
|
|||
лицу адресов. |
|
|
|
|
|
Восьмивекторные системы |
пре |
|
|
||
рываний. На рис. 2.14 показана струк |
|
|
|||
турная схема МП-системы с восьмивек |
|
|
|||
торным обслуживанием по прерыванию |
|
|
|||
внешних устройств I/O- т (т = 0 ...7 ). |
|
|
|||
Отличие этой системы прерываний от |
Рис. 2.14. Восьмивекторная система прерываний |
||||
предыдущей заключается в том, что
здесь производится чтение команд RST п из элементарного контроллера прерываний, выпол ненного на ИС 555ИВ1 и 1533АП12. Машинный код l l x x x l l l команд RST п формируется шинным драйвером 1533АП12. В ответ на групповой запрос прерывания GS = 1 (при INTE = 1)
МП выдает в системный контроллер 8238 слово состояния SWSi ш = 0010x011 (см. табл. 1.15), по которому вырабатывается сигнал INTA ="1Г, производящий чтение шинного драйвера BD (безадресное чтение команд из внешнего устройства — контроллера прерываний).
Таким образом, ввод-вывод по прерыванию определяется схемой:
/„Д => |
INTE 1 |
(аппаратное квитирование ввода-вывода) |
|
G S I |
rs. INTA = ТГ |
RST п => ППОП по адресу addr = 8 х п |
|
|
SWit ю |
||
(команда RST п поступает в МП по системной шине данных через приемопередатчик систем ного контроллера 8238). В МП-системах с восьмивекторным обслуживанием внешних уст ройств по прерыванию не нужно программным способом определять внешнее устройство, за просившее обслуживание, а значит, уменьшается размер ППОП и увеличивается производи тельность системы.
Пример 3 (подпрограммы обслуживания прерываний, соответствующие рис. 2.14):
0000 |
JMP |
Main |
Точка входа по запросу прерывания RST 0 и по аппаратному сбросу |
|
|
|
RESET = 1 (при включении питания или нажатии кнопки сброса) |
0008 |
PUSH |
PSW |
Начало подпрограммы обработки прерывания RST 1 |
|
PUSH |
H |
Сохранение в стеке состояния прерванной (основной) программы |
|
PUSH |
D |
(абсолютные адреса 0000, 0008, 0010 и 0018 добавлены только |
|
PUSH |
В |
для удобства анализа программы — в транслируемой программе |
|
JMP |
IO 1 |
они должны отсутствовать) |
|
NOP |
|
|
0010 |
PUSH |
PSW |
; Начало подпрограммы обработки прерывания RST 2 |
168 |
|
Глава 2. Методы ввода-вывода |
|
PUSH |
H |
|
|
PUSH |
D |
|
|
OUT |
Reset_ |
; Сброс запроса прерывания от I/O-2 |
|
JMP |
IO_2 |
|
|
PUSH |
PSW |
; Начало подпрограммы обработки прерывания RST 3 |
|
JMP |
IO_3 |
|
|
|
|
; и т. д. (для внешних устройств I/O-4 ... 1/0-1) |
|
|
|
; Продолжение подпрограммы обработки прерывания RST 1 |
|
OUT |
Reset_ |
; Сброс запроса прерывания от I/O-1 |
|
POP |
В |
; Восстановление состояния прерванной программы |
|
POP |
D |
|
|
POP |
H |
|
|
POP |
PSW |
|
|
EI |
|
; Разрешение прерываний (INTE <—1) |
|
RET |
|
; Возврат в прерванную программу |
|
PUSH |
В |
; Продолжение подпрограммы обработки прерывания RST 2 |
|
POP |
В |
; Восстановление состояния прерванной программы |
|
POP |
D |
|
|
POP |
H |
|
|
POP |
PSW |
|
|
EI |
|
; Разрешение прерываний (INTE |
1) |
RET |
|
; Возврат в прерванную программу |
|
|
|
; Продолжение подпрограммы обработки прерывания RST 3 |
|
RET |
|
|
|
|
|
; и т. д. (для внешних устройств I/O -4 ... 1/0-1) |
|
Main: |
|
; Начало основной программы: тестирование и инициализация |
|
|
|
; |
устройств МП-системы |
Команды сброса запросов прерывания от внешних устройств OUT R esetjn могут распола гаться в любом месте подпрограмм, но не после команды EI, а команда разрешения прерыва ний EI — только в конце ППОП. В противном случае выполнение ППОП с большим приорите том будут прерывать запросы прерываний, имеющие меньший приоритет. Катастрофически же опасен в этом случае повторный запрос прерывания обслуживаемого внешнего устройства до выполнения команды RET ППОП, вызванной предыдущим запросом — будет нарушена работа стека. Если есть гарантия, что во время выполнения ППОП не будет повторных запросов (час тота запросов невелика), то прерывания можно разрешать и до завершения ППОП. Если ко манда EI расположена в конце ППОП, то приоритетность внешних устройств срабатывает только лишь при выборе их для обслуживания. Все это справедливо и для МП 8085, имеющего пять входов запросов прерываний с пятью уровнями приоритетов.
Рассмотренные выше системы прерываний являются одноуровневыми — выполнение те кущей ППОП не могут прервать другие внешние устройства. В многоуровневых системах пре рываний любое внешнее устройство, имеющее больший приоритет, может прервать выполне ние ППОП внешнего устройства, имеющего меньший приоритет, а после выполнения новой ППОП будет автоматически продолжено выполнение прерванной подпрограммы. Понятно, что в этом случае команда EI в допускающей прерывание подпрограмме должна находиться не в самом ее конце. Если система прерываний имеет т уровней прерываний, то одновременно в обслуживании могут находиться до т ППОП в разной степени завершенности. Последова-
2.4. Ввод-вывод по прерыванию |
169 |
тельность выполнения ППОП аналогична последовательности выполнения обычных команд CALL addr, вызывающих подпрограммы, имеющие т уровней вложенности. Для построения многоуровневой системы прерываний требуются дополнительные аппаратные затраты.
Система прерываний МП 8085. Этот МП имеет 5 входов запросов прерываний с пятью уровнями приоритетов (табл. 2.3) и четырехвекторную систему прерываний. Вход TRAP не маскируемого запроса прерываний имеет наибольший приоритет, а вход INTR (аналог входа INT в МП 8080) — наименьший приоритет. На рис. 2.15 изображена внутренняя схема МП, обеспечивающая прием запросов прерываний TRAP по положительному фронту с последую щим удержанием высокого уровня сигнала TRAP до приема запроса микропроцессором.
На рис. 2.16 изображена МП-система с восьмиуровневой системой приоритетных преры ваний, обеспечиваемой программируемым контроллером прерываний 8259 (580ВН59). Вход IR0 запроса прерываний имеет наибольший приоритет, а вход IR-] — наименьший приоритет.
Ввод-вывод по прерыванию определяется схемой:
=> |
INTE 1 (8080) I IE 1 (8085) (аппаратное квитирование ввода-вывода), |
|
IRmS ==> INTS |
____ |
U Ll => CALL A d d rjn => ППОП по адресу Addr_m |
=> |
INTA = U |
|
(команда CALL Addr_m поступает в МП по системной шине данных из контроллера прерыва ний 8259). Чтение трехбайтовых команд CALL Addrjm из контроллера прерываний 8259 без адресное — выполняется сигналом INTA, который больше нигде не используется. В контрол лере прерываний запросы прерываний с меньшим уровнем приоритета и повторные запросы блокируются, поэтому команду EI можно помещать в самом начале ППОП. Прервать выполне ние ППОП могут лишь запросы прерываний с большим уровнем приоритета. После выполне ния новой ППОП будет автоматически продолжено выполнение прерванной подпрограммы. Одновременно в обслуживании могут находиться до восьми ППОП в разной степени завер шенности.
|
|
Таблица 2.3. Система прерываний МП 8085 |
|
Сигнал |
Приоритет |
Адрес |
Тип запроса (чувствительность входа) |
TRAP |
1 |
24ft |
Положительный фронт и высокий уровень до приема запроса |
RST 7.5 |
2 |
3Cft |
Положительный фронт (запрос запоминается в триггере) |
RST 6.5 |
3 |
34ft |
Высокий уровень до приема запроса |
RST 5.5 |
4 |
2Cft |
Высокий уровень до приема запроса |
INTR |
5 |
— |
Высокий уровень до приема запроса |
|
|
|
UNTJ0 |
CALL addr |
INT |
INTA |
TRAP - |
|
|
£ 7-0 8259 |
|||
|
|
£>7-0 |
|
|||
1— |
D Т |
I— I Запросл |
CPU |
|
|
|
1— |
>с |
прерывания |
|
|
|
|
RES1N — - W - M |
R |
< |
|
|
I /O - 7 |
I /O - 0 |
|
Внутреннее подтверждение |
ROM |
= £ > |
r |
i s |
|
|
|
прерывания |
|
|
||
|
|
|
|
|
System Data |
Bits |
Рис. 2.15. Потенциально-импульсная |
Рис. 2.16. Восьмиуровневая |
|||||
схема запроса прерываний |
система прерываний |
|
||||
