|
Форум - сигнал INT.
|
(С) Вопилин Виталий & MASTERSOFT
г.Тольятти, 1995
СИГНАЛ INT
Предлагаю покончить раз и навсегда с наболевшей темой по выработке сигнала
INT.
Аксиома: сигнал INT вырабатывается по заднему фронту кадрового синхроимпульса.
(ИФК: стиль Кирилла Громова бессмертен - "АКСИОМА"!).
Теперь посмотрим как микропроцессор Z80 обрабатывает сигнал INT.
Микропроцессор опрашивает состояние входа INT каждый раз после выполнения
текущей команды. При обнаружении на входе INT сигнала с низким уровнем,
процессор завершает текущую команду, прерывает исполнение программы, формирует
цикл подтверждения прерывания, и переходит к выполнению подпрограммы обработки
прерывания, расположенной по определенному адресу в памяти. Адрес задается
программно-аппаратными средствами с помощью одного из трех режимов прерывания.
Возврат из программы обработки прерывания осуществляется по команде возврата
RET I. Микропроцессор имеет три режима обработки прерывания, которые
устанавливаются командами процессора IM 0, IM 1, IM 2. Прерывание может быть
запрещено командой DI, а разрешено командой EI.
Цикл подтверждения прерывания INT является циклом чтения кода операции из
внешнего устройства. Для этого процессор вырабатывает специальный цикл M1, в
котором активизируется сигнал IORQ. Низкий уровень сигнала IORQ указывает
устройству, запросившему прерывание, что оно должно выставить на шину данных
вектор прерывания (адрес или код команды). Кроме того, в цикл автоматически
вводится два такта ожидания, необходимых для реализации приоритетных
прерываний. По спаду импульса второго такта ожидания процессор анализирует
вход WAIT, и если на этот вход подан сигнал низкого уровня, процессор
формирует дополнительные такты ожидания. После считывания вектора прерывания
следует процесс регенерации памяти.
За циклом подтверждения прерывания обязательно следует два цикла записи в
памяти, в которых на вершину стека записываются старший, а затем младший байты
счетчика команд. Следующее действие процессора зависит от типа прерывания.
Прерывание нулевого типа (IM0)
Режим устанавливается командой IM0 или аппаратным сбросом процессора и
аналогичен режиму обработки прерывания в микропроцессоре I8080 (КР580ВМ80). В
цикле подтверждения прерывания внешнее устройство, запросившее прерывание,
должно выставить на шину данных любую команду, которая является первой в
подпрограмме обработки прерывания, и после записи в стек содержимого счетчика
команд, следует выполнение принятой от внешнего устройства команды. Команда от
внешнего устройства может быть любая (чаще всего используются команды RST n
или CALL adress). Но ZX-SPECTRUM устроен таким образом, что при вызове
прерывания в режиме 0 с шины данных всегда считывается значение 255 (#FF) -
код команды RST 56 (38H). Следовательно для ZX-SPECTRUM этот режим аналогичен
режиму IM1.
Ъ--
V
Ъ---------ї --Щ Ъ------------------------ї
і і і Устройство, запросившееі
і Г---------------ґ прерывание і
і і і і
і ЦП Z80A і --ї А-----------------В------Щ
і іIORQ'Ъ--ї V і
і Г-----ґ1 і А-- ^
і іM1' і Г----------> А-----
і Г-----ґ і Разрешение подачи Сигнал "сброс"
і і А--Щ вектора на шину из порта ввода/вывода
і і данных
А---------Щ
Прерывания первого типа (IM1)
Режим устанавливается командой IM1. Он применяется в системах с минимальной
конфигурацией, где нежелательно наращивание аппаратной части введением
вспомогательной логики. По приходу прерывания от внешнего устройства, по
завершении текущей команды, состояние счетчика команд РС автоматически
сохраняется в стеке, и в счетчик команд заносится адрес 0038H. Таким образом,
происходит переход к адресу 0038H (т.е. выполняется команда CALL 38H), и цикл
подтверждения прерывания продлевается на два такта ожидания. С адреса 0038H
должна начинаться подпрограмма обработки прерывания, подпрограмма должна
завершаться командой возврата RET. В ZX-SPECTRUM установлен режим прерывания
IM1, а по адресу 38H (56) расположена подпрограмма сканирования клавиатуры.
Прерывания второго типа (IM2)
Режим устанавливается командой IM2. Это самый производительный режим
прерываний микропроцессора Z80. Он применяется в сложных системах с развитой
сетью переферийных устройств. При этом в памяти программируется таблица
стартовых адресов каждой подпрограммы обработки прерывания (ISR). Таблица
может быть размещена в любой области памяти с соблюдением лишь правила записи
стартовых адресов: младший байт записывается в ячейку с четным адресом,
старший байт-в следующую по возрастанию ячейку. После считывания вектора
прерывания от запросившего устройства и записи в стек старшего и младшего
байтов счетчика команд, следует цикл чтения данных из памяти. В этом цикле
процессор формирует 16-разрядный адрес, в котором старший байт равен значению
содержимого регистра прерываний (I), а младший байт - это вектор прерывания от
внешнего устройства. Сформированный таким образом адрес указывает на ячейку
памяти в таблице, где хранится стартовый адрес подпрограммы обработки
прерывания. Считав стартовый адрес из двух смежных ячеек, процессор переходит
к обработке программы прерывания. Возврат из подпрограммы обработки прерывания
должен происходить по команде RET I.
Команда RET I распознается переферийными микросхемами процессорного
комплекта Z80, что позволяет организовать многоуровневую систему прерываний,
т.е. переферийные устройства определяют что подпрограмма обработки прерывания
уже выполнена, и устройство с более низким приоритетом может выдавать запрос
на обслуживание своей подпрограммы.
В процессорном комплекте Z80 предусмотрено, что переферийные БИС могут
выдавать только четные байты - для однозначности адресации ячеек таблицы.
Значит, даже при неизменном состоянии регистра I процессора возможно
обслуживание 128-ми устройств в режиме прерываний IM2.
Итак, мы рассмотрели обработку всех 3-х режимов прерывания и на основании
вышеизложенного сделаем вывод:
Для нулевого режима прерывания, для получения и гашения сигнала INT
используется микропроцессорный комплект KP580.
Для гашения сигнала INT в первом режиме прерываний нужно использовать
сигналы M1 и IORQ, отсюда вытекает небольшая схема:
DD2
DD1.3 +5B 1Ъ-В---ї ---
-ї --- 2Ъ-ї -----0RіTT і5 INT
і КСИ Ъ-ґ1і1 3Г-ґ Г----------
А- --ґ3і 0-------/Cі і
А-ґ і 2і і і
А-Щ Ъ--ґDі і
---- Б 4Г-ґ і
IORQ 5Ъ-ї 8Ъ-ї Ъ--0Sі і
-- --ґ1і4Ъґ1і і А-Б---Щ DD1- K555ЛЕ1
M1 6і 0-ґі 0-Щ DD2- K555ТМ2
--ґ і Аґ і10
А-Щ 9А-Щ
DD1.1 DD1.2
---
КСИ - кадровый синхроимпульс
Сигнал КСИ по заднему фронту устанавливает триггер в нулевое состояние ( на
выходе "0" ). Установка триггера в единичное состояние ( на выходе "1" )
осуществляется подачей логического "0" на вход S триггера от схемы совпадения
сигналов M1 и IORQ выполненной на элементе "ИЛИ-НЕ" К555ЛЕ1.
Для второго режима прерывания для получения и гашения сигнала INT
используется микропроцессорный комплект Z80.
СОДЕРЖАНИЕ:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Форум-Игры - В разделе рассмотрены: Burry, McGuian World Champion, Sword&Sorcery, Marsport, Master of Magic, Colony, Firelord, Tai-Pan, The Spectre, Rebel Star, Dr.What, Rescue, Vatman, Iron Man, Seymour at the Movies, Wild West Seymour Adventures, Venturama, Livingstone 2, Total Eclipse 2, Dizzy 6, Elite, Street Hassle.
-
Перекресток - В разделе рассмотрены: Mysterious Adventure N11, Temple of Terror, Witch Cauldron, Smok Wawelski, ID, Eric the Viking, Golden Apple, Famous Five, Emerald Island,Magnetic Moon 1, Shadows of Mordor, Quest Adventure, Sam Spoon, Snowball, Slain the King, Lancelot, MindFighter, The Legend of Apache Gold, Звёздное Наследие, Return to Eden.
-
-
-
-
-
-
-
-
|
|