Прямой ввод/вывод данных.
Как уже отмечалось, прямой ввод/вывод возможен только с внешними устройствами (ВУ), которые всегда готовы к обмену. Он является составной частью более сложных протоколов обмена.
Ввод данных в процессор из подсистемы ввода–вывода (ВВ) — это операция чтения процессором отдельного порта пространства
IOSEG
. Операция ввода выполняется в следующей последовательности (рис. 3.3.1, а):
? на шину ША адреса микропроцессор выставляет адрес требуемого ВУ;
? на выходе дешифратора Дш формируется сигнал адреса буфера данных ?АДБ;
? на одну из линий шины управления выставляется строб чтения ?Чт;
? на выходе логического элемента ИЛИ–НЕ формируется сигнал чтения данных ЧтД, который открывает буфер данных БД и пропускает данные через шину данных ШД в микропроцессор.
В качестве примера приведем подпрограмму прямого ввода данных в ячейку памяти М, адрес которой хранится в регистровой паре
HL
.
INPUT
:
PUSH
PSW
;сохранение в стеке содержимого
PSW
IN
port
;ввод данных в аккумулятор А из порта
MOV
М, А
;запись в память по адресу (
HL
) из А
POP PSW
;возврат из стека содержимого
PSW
RET
;возврат из подпрограммы
где
INPUT
— метка, указывающая адрес первой ячейки подпрограммы;
port
— адрес порта; А — аккумулятор;
PSW
— регистр слова состояния;
(HL)
— содержимое регистровой пары
HL.
Вывод данных из процессора в подсистему ВВ — это операция записи данных процессором в отдельный порт пространства
IOSEG.
Операция вывода выполняется в следующей последовательности (рис. 3.3.1, б):
?
на шину адреса ША микропроцессор выставляет адрес регистра данных РД требуемого ВУ;
? на выходе дешифратора Дш формируется сигнал адреса регистра данных ?АРД;
? на одну из линий шины управления выставляется строб записи ?Зп;
? на выходе логического элемента ИЛИ–НЕ формируется сигнал записи данных ЗпД, с помощью которого поступившие из микропроцессора данные записываются в регистр данных РД.
В качестве примера приведем подпрограмму прямого вывода данных из ячейки памяти М с адресом, хранящимся в регистровой паре
HL
.
OUT
:
PUSH
PSW
;запись в стек содержимого
PSW
MOV
А, М
;считывание в А ячейки М с адресом в
HL
OUT
port
;вывод данных из аккумулятора А в порт
POP PSW
;возврат из стека содержимого
PSW
RET
;возврат из подпрограммы
где
OUT
— метка, указывающая адрес первой ячейки подпрограммы; А — аккумулятор;
PSW
— регистр слова состояния.
Обмен данными с программным квитированием. Особенности обмена данными с программным квитированием рассмотрим на примере простейших устройств (контроллеров) ввода и вывода.
Ввод данных.
В состав устройства ввода данных входят (рис. 3.3.2, а):
? буфер данных
БД, при активизации которого сигналом чтения данных ЧтД = 1 происходит ввод данных в процессор;
? буфер состояния
БС, при активизации которого сигналом чтения состояния ЧтС = 1 в процессор вводится сигнал ГтВУ. При ГтВУ = 1 процессору разрешено вводить данные;
? триггер подтверждения
ТПт, предназначен для формирования сигнала подтверждения Пт о том, что данные микропроцессором введены;
? дешифратор
Дш и логические элементы (ЛЭ) 1, 2, 3 ИЛИ–НЕ, формирующие сигналы для управления БД, БС и ТПт.
Назначение сигналов, используемых в устройстве ввода, приведено в табл. 3.3.1.
Пусть на устройство ввода от внешнего устройства ВУ поступает сигнал готовности ГтВУ = 0. Тогда процессор будет работать в режиме периодического опроса буфера состояния БС. В этом режиме процессор выставляет адрес буфера состояния БС на ША и генерирует сигнал чтения ?Чт = 0; с выхода элемента 2 поступает сигнал ЧтС буфера БС. После того, как ВУ выставит новые данные на ШВУ и сигнал ГтВУ = 1 (рис. 3.3.2, б), при первом же чтении буфера состояния БС сигналом ЧтС процессор узнает о возможности ввода данных и приступит к ее реализации. Для этого на ША (вход дешифратора Дш) выставляется адрес регистра данных РД, а на вход элемента 1 подается сигнал чтения ?Чт = 0. Сформированный таким способом сигнал чтения данных ЧтД отпирает буфер данных БД и производит ввод данных в процессор. Затем процессор с помощью Дш и ЛЭ 3 формирует сигнал записи подтверждения ЗпПт = 1, который устанавливает на выходе триггера подтверждения ТПт сигнал подтверждения Пт = 1. Этот сигнал сообщает ВУ о том, что новые данные введены. Микропроцессор переходит в режим опроса БС. После того как ВУ сбросит сигнал готовности (ГтВУ = 0), процессор после первого сигнала ЧтС = 1 при ГтВУ = 0 формирует сигнал ЗпПт = 1 и сбрасывает сигнал подтверждения (Пт = 0). Устройство ввода возвращается в исходное состояние.
Вывод данных.
В состав устройства входят (рис. 3.3.2, в):
? буфер состояния
БС, при активизации которого сигналом чтения состояния ЧтС = 1 в процессор вводится сигнал подтверждения ПтВУ. При ПтВУ = 0 микропроцессору разрешено выводить данные;
? регистр данных
РД, в который записываются выводимые процессором данные (сигналом записи данных ЗпД = 1);
? триггер готовности
ТГт, предназначенный для формирования сигнала готовности Гт = 1 микропроцессора к выводу новых данных;
? дешифратор
Дш и ЛЭ ИЛИ–НЕ 1, 2, 3, формирующие сигналы для управления РД, БС и ТГт.
Назначение сигналов, используемых в устройстве вывода, приведено в табл. 3.3.2.
Пусть в исходном состоянии (рис. 3.3.2, г) сигнал подтверждения ПтВУ = 1 и процессор работает в режиме опроса буфера состояния БС. После установки ПтВУ = 0 профессор переходит в режим записи данных в РД устройства вывода. Для этого на ША устанавливается адрес регистра данных РД и продается сигнал записи Зп = 0. Затем с помощью сигнала ЗпГт = 1 на выходе триггера ТГт формируется сигнал готовности Гт = 1, информирующий ВУ о том, что данные занесены в РД. Микропроцессор переходит в режим опроса. После того, как ВУ примет новые данные и установит сигнал ПтВУ = 1, микропроцессор после первого же чтения состояния при ПтВУ = 1 сбросит сигнал готовности (Гт = 0). Устройство вывода вернется в исходное состояние.
Обмен данными с аппаратным квитированием.
Состав устройств. Для иллюстрации принципов программно–управляемого обмена с аппаратным квитированием рассмотрим схемы интерфейсных устройств (контроллеров) ввода (рис. 3.3.3, а) и вывода (рис. 3.3.3, б).
Устройства содержат:
? регистры для хранения данных
(РД);
? буферы
каналов данных (БД) и состояния (БС). Буферы представляют собой однонаправленные шинные формирователи с высокоомным состоянием. Через них осуществляется связь устройств с внешними шинами;
? дешифраторы
(Дш) для формирования сигналов обращения к буферам и регистрам;
? триггеры
и логические элементы для формирования осведомительных и управляющих сигналов.
Сведения об используемых в устройствах ввода и вывода сигналах приведены в табл. 3.3.3.
Ввод данных.
При вводе информации (рис. 3.3.3, а, б) по стробу ввода СтрВв, поступившему из ВУ, данные записываются в РД. Сигнал чтения ЧтД = 0, поэтому триггер–защелка Т по срезу строба устанавливается в единичное состояние, формируя флаг ФВв = 1 готовности к началу операции ввода. Микропроцессор производит опрос состояния устройства ввода. При этом:
? на вход устройства по шине управления поступает сигнал Чт = 0, на вход дешифратора Дш — адресный код буфера состояния БС, инициируя на входе ЛЭ ИЛИ–НЕ (1) нулевой сигнал;
? сигналом чтения состояния ЧтС = 1, снимаемым с выхода ЛЭ ИЛИ–НЕ (1), открывается буфер состояния БС, и сигнал ФВв передается по ШД в процессор. В микропроцессоре происходит выделение сигнала флага (например, командой
ANI)
и определение его значения
(например, с помощью команды условного перехода
JZ).
Если ФВв = 1, то выполняется команда ввода данных из РД, в противном случае производится повторный цикл опроса состояния, т. е. микропроцессор переходит режим ожидания.
При ФВв = 1 микропроцессор выполняет команду ввода
IN,
адресуясь к регистру данных РД. При этом:
? с выхода Дш поступает нулевой сигнал на один из входов ЛЭ ИЛИ–НЕ (2);
? с шины управления поступает сигнал ?Чт = 0 на другой вход ИЛИ–НЕ (2);
? с выхода ЛЭ ИЛИ–НЕ (2) снимается сигнал чтения данных ЧтД = 1, активизируя БД для передачи информации в микропроцессор;
? триггер Т по срезу сигнала ЧтД переводится в нулевое состояние и осуществляет сброс флага ФВв = 0, информируя тем самым ВУ о вводе данных в микропроцессор. Внешнее устройство может приступить к загрузке РД следующим байтом данных.
Вывод данных.
При выводе информации (рис. 3.3.3, в, г), так же как и при вводе (командой
IN
по адресу буфера состояния), производится опрос состояния устройства вывода. Если сигнал флага готовности вывода ФВыв = 0, то цикл опроса повторяется. Если же ФВыв = 1, то со стороны процессора (по команде
OUT
) поступает сигнал записи ?Зп = 0. С его помощью формируется сигнал записи данных ЗпД = 1, по которому информация с ШД заносится в регистр РД. Так как поступающий со стороны устройства вывода строб вывода СтрВыв = 0, то по срезу сигнала ЗпД триггер Т устанавливается в единичное состояние. На выходе ЛЭ ИЛИ–НЕ (3) формируется сигнал ФВыв = 0. Происходит сброс флага, запрещающий микропроцессору повторную запись данных до тех пор, пока со стороны ВУ не поступит строб вывода СтрВыв = 1 (рис. 3.3.3, г). Задний фронт этого сигнала восстановит состояние флажка (ФВыв = 1) и разрешит микропроцессору запись следующего байта данных.
Двунаправленный обмен.
Рассмотрим вариант схемы устройства двунаправленного обмена с квитированием (рис. 3.3.4), в котором для фиксации стробов используются триггеры–защелки.
Порт содержит:
? регистры
вводимых РД1 и выводимых РД2 данных;
? буферы данных
БД1, БД2 и буфер состояния БС;
? триггеры
Т1, Т2 для установки и сброса флагов ввода ФВв и вывода ФВыв;
? дешифратор
Дш для выделения адресов;
? набор
логических элементов.
Ввод/вывод данных осуществляется в два этапа. На первом этапе данные от источника (ВУ/процессора) заносятся в регистры данных порта, на втором — переписываются в приемник (процессор/ВУ).
Индикаторами разрешения/запрещения обмена служат два флага, упакованные в слово состояния.
Флаг ввода
при ФВв = 1 свидетельствует о том, что регистр РД1 загружен новой порцией данных и микропроцессор может приступить к их вводу. При ФВв = 1 для ВУ накладывается запрет на передачу данных.
Флаг вывода
при ФВыв = 0 свидетельствует о том, что регистр РД2 загружен данными и они могут быть считаны ВУ. При ФВыв = 0 для микропроцессора накладывается запрет на передачу данных.
Обмен данными протекает в две стадии. В первой стадии проверяется готовность ВУ к обмену, во второй — происходит ввод или вывод данных.
Ввод данных
при ФВв = 0 (для ВУ разрешена запись в РД1) протекает в такой последовательности:
? микропроцессор командой
IN
опрашивает буфер состояния БС, выставив сигнал чтения ?Чт = 0 и адрес буфера. Так как ФВв = 0, процессор переходит в режим ожидания или продолжает выполнять программу до генерирования очередного запроса;
? по срезу строба СтрВв данные, поступившие из ВУ, заносятся в регистр РД1, а триггер Т1 и флаг готовности ФВв устанавливаются в единичное состояние, так как ЧтД = 0. Флаг в состоянии ФВв = 1 запрещает ВУ передачу данных и разрешает процессору приступить к вводу данных после фиксации значения флага при очередном опросе;
? данные из регистра РД1 с помощью сигнала ЧтД считываются в аккумулятор микропроцессора. Это цикл отличается от цикла опроса лишь тем, что выставляется адрес регистра РД1 вместо БС. По завершении ввода по срезу ЧтД происходит сброс флага ФВв.
Вывод данных
при Фвыв = 1 (для процессора разрешена запись в РД2) протекает в такой последовательности:
? микропроцессор командой
IN
опрашивает буфер состояния БС, выставив сигнал чтения ?Чт = 0 и адрес буфера. Так как ФВыв = 1, процессор приступает к загрузке регистра данных РД2;
? на вход дешифратора подается адрес РД2, с помощью сигнала внешнего сигнала записи ?Зп = 0 формируется внутренний сигнал записи ЗпД = 1 в РД2. По срезу этого сигнала устанавливается флаг ФВыв = 0, информирующий ВУ о том, что регистр РД2 заполнен;
? внешнее устройство посылает в порт сигнал СтрВыв, который открывает буфер для передачи сигнала в ВУ. По срезу ЗпД флаг ФВыв переводится в нулевое состояние, свидетельствующее об окончании операции вывода.
Проиллюстрируем реализацию рассмотренных принципов программного обмена в параллельном коде на примере микросхемы КР580ВВ55.