ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА ИНФОРМАЦИИ В МИКРОПРОЦЕССОРНЫХ СИСТЕМАХ.

ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА ИНФОРМАЦИИ В МИКРОПРОЦЕССОРНЫХ СИСТЕМАХ.

В предыдущей статье раздела читатель познакомился с основными периферийными устройствами, предназначенными для организации ввода-вывода информации. Несмотря на многообразие этих устройств, существуют стандартные методы обмена информацией между ними и микропроцессором, а также типовые способы их подключения.

Обмен информацией между внешними устройствами и микропроцессорной системой может быть организован тремя способами: программным, по прерываниям, в режиме прямого доступа.

Программный ввод-вывод инициируется и управляется микропроцессором. Внешние устройства при этом могут лишь сигнализировать о своем состоянии, показывая готовность (неготовность) к приему или передаче.

Ввод-вывод по прерываниям происходит под управлением внешнего устройства. При готовности принять или передать информацию внешнее устройство подает микропроцессору сигнал запроса прерывания INT. Поэтому сигналу прекращается выполнение основной программы, и процессор переходит к реализации специальной подпрограммы управления обменом данными. После ее окончания система продолжает работать по основной программе.

Обмен данными в режиме прямого доступа в память характеризуется тем, что по сигналу требования захвата HOLD микропроцессор, отключается от системных шин, предоставляя их внешнему устройству. Последнее может обращаться к основной памяти системы, минуя микропроцессор. Рассмотрим эти способы подробнее. Но прежде обратим внимание на следующее. Из-за разного быстрого действия микропроцессорной системы и внешних устройств процессор может оказаться готовым к приему или выдаче данных, в то время как внешнее устройство еще не успеет обработать данные, полученные ранее. В такой ситуации возникает необходимость синхронизировать их работу. Иначе говоря, нужно заставить более быстрое устройство ждать до того момента, пока медленное не закончит обработку данных и подаст сигнал готовности. Более того, для большинства внешних устройств перед началом ввода-вывода необходима проверка готовности к обмену данными. Такой способ передачи данных называют синхронным или вводом-выводом с квитированием.

Некоторые внешние устройства, например светодиодные индикаторы, всегда готовы к приему информации и специальных сигналов проверки их готовности не требуется. В таких случаях ввод-вывод называют асинхронным.

Информация, передаваемая между микропроцессорной системой и внешними устройствами, может быть разделена на управляющие сигналы и данные. Управляющие сигналы от периферийного устройства принято называть сигналами состояния. Совокупность сигналов состояния или слово состояния сообщает микропроцессору о готовности внешнего устройства к обмену, а также о наличии ошибок при обмене, запроса прерывания и др.

Управляющие сигналы от микропроцессорной системы или командные слова инициируют действия, STBD в 0 и переходит к выполнению основной программы.

Как только внешнее устройство закончит обработку полученной информации, оно вновь вырабатывает сигнал RDU = 0 и ждет новую порцию данных, которые могут появиться в результате выполнения основной программы.

DQ — сигнал запроса данных, вырабатываемый процессором; RDY — сигнал готовности внешнего устройства выдать данные.

Нетрудно заметить, что при отсутствии сигнала RDY система занята только анализом его состояния.

Эта подпрограмма занимает в памяти 31 байт, а время ее выполнения зависит от быстродействия внешнего устройства и может быть довольно большим. Отсюда виден недостаток программного асинхронного ввода-вывода — микропроцессорная система значительную часть времени простаивает, ожидая сигнал готовности от внешнего устройства и не выполняя никаких полезных действий.

К достоинствам программного ввода-вывода можно отнести достаточно простую аппаратную реализацию.

Организация ввода-вывода по прерываниям сокращает время непроизводительных простоев процессора, но требует дополнительных аппаратурных затрат. При использовании такого способа чередуется выполнение основной программы и подпрограммы ввода-вывода. Внешнее устройство, готовое к обмену, выдает сигнал запроса прерывания на вход специального блока приоритетных прерываний, например, К589ИК14 или программируемого контроллера прерываний, о котором пойдет речь в следующей статье. Эти блоки выдают на вход INT микропроцессора сигналы запроса прерывания. Если прерывание разрешено, на выходе INTE микропроцессора присутствует логическая 1, и он принимает код команды RST N или CALL ADDR.

Напомним, что в процессе выполнения указанных команд микропроцессор загружает в стек текущее значение счетчика команд, а в счетчик — начальный адрес подпрограммы обслуживания прерывания, по которой реализуется управление вводом-выводом.

Команда RET, стоящая в конце подпрограммы обслуживания прерывания, извлекает из стека и загружает в счетчик команд старое значение, тем самым вызывая продолжение основной программы.

Запрещая или разрешая прерывания с помощью команд DI и EI, можно запрещать или разрешать процессору общение с устройствами ввода-вывода. Иногда саму подпрограмму реализации обмена начинают с команды D1 и заканчивают командой EI для того, чтобы другое прерывание с более высоким приоритетом «не отвлекало» микропроцессорную систему от обслуживания данного внешнего устройства. Такая процедура может привести к потере поступивших запросов прерывания более высокого приоритета от быстродействующих устройств. Если это недопустимо, то команду DI использовать нельзя, так как должна существовать возможность многоуровневого прерывания, при котором происходит вложение подпрограммы ввода-вывода.

При прерываниях с использованием команды RST для подпрограммы обслуживания обмена отводится только 8 байт. Если такая подпрограмма требует большего количества ячеек памяти, то в начале 8-баитовой области, определяемой RST N, располагают команду безусловного перехода IMP ADDR по адресу, который соответствует подпрограмме обслуживания прерывания.

В тех случаях, когда подпрограмма изменяет содержимое регистров и признаков, рекомендуется в начале подпрограммы заносить в стек их содержимое, а в конце восстанавливать его.

Большинство микроЭВМ имеют в составе своего математического обеспечения набор подпрограмм для выполнения операций ввода-вывода с использованием стандартных периферийных устройств. Такие подпрограммы иногда называют драйверами. Например, драйвер вывода для дисплея может выводить на экран из аккумулятора один символ или содержимое определенной области памяти.

Приведем пример подпрограммы ввода информации с клавиатуры по прерыванию и ее записи по адресу, хранящемуся в ВС.

Эта подпрограмма занимает в памяти 7 байт и выполняется за 52 машинных такта, что существенно меньше времени реакции человека. Иначе говоря, реализация такой подпрограммы не внесет неудобств в работу оператора. Чтобы исключить возможность повторного считывания одинаковых данных, нужно в начале обмена сбрасывать сигнал запроса прерывания от клавиатуры, например, сигналом INTE («Подтверждение прерывания») от микропроцессора. Разумеется, дребезг контактов клавиатуры в таком случае должен быть исключен, например, аппаратно.

Обратим внимание на то, что во всех рассмотренных процедурах обмена данные сначала записываются в аккумулятор микропроцессора, а потом передаются в память системы или во внешнее устройство. Естественно, что такая двухступенчатая передача, особенно при большой длине блоков информации, становится неэффективной по времени. Здесь на помощь приходит режим прямого доступа в память. Иначе говоря, быстродействующему устройству предоставляется право обмениваться данными с памятью, минуя микропроцессор.

Режим прямого доступа в память в микропроцессорных системах на базе КР580ИК80А реализуется следующим образом. Внешнее устройство подает на вход микропроцессора HOLD («Требование захвата») запрос для предоставления ему шины системы для обмена с памятью. Процессор отвечает сигналом HLDA («Подтверждение захвата») и переводит шины адреса и данных в высокоимпедансное состояние, одновременно устанавливая на своих управляющих выходах (кроме WR и HLDA) уровни логического 0. Получив сигнал HLDA, внешнее устройство вырабатывает необходимые управляющие сигналы, выдает на шину адреса адрес первой ячейки памяти и начинает обмен. Состояние захвата возможно только в том случае, если на входе READY («Готовность») микропроцессора присутствует напряжение логической 1. Переход в состояние захвата происходит в такте ТЗ машинного цикла «Чтение памяти» или в следующем за ним такте, если выполняется машинный цикл «Запись в память».

Заметим, что для организации режима прямого доступа в память существует программируемый контроллер КР580ВТ57, представляющий специализированный четырехканальный процессор. Его описание будет дано в одной из следующих статей раздела.

Применение режима прямого доступа в память наиболее эффективно с точки зрения временных затрат.

При реализации простых микропроцессорных систем процедуру, эквивалентную программному вводу-выводу с квитированием, иногда удобнее реализовать аппаратурным путем, используя режим ожидания микропроцессора. При этом внешнее устройство выдает на вход READY микропроцессора управляющий сигнал, свидетельствующий о готовности к обмену. Если на входе READY появится напряжение логического 0, то микропроцессор отвечает сигналом WAIT («Ожидание») и выполняет целое число тактов ожидания, во время которых состояния шин адреса, данных и управления микропроцессора не меняются и соответствуют их состояниям в такте ТЗ.

При появлении на входе READY уровня логической 1 микропроцессор переходит от выполнения тактов ожидания к продолжению рабочих машинных тактов выполняемой команды.

Реализация ввода-вывода с аппаратным анализом сигнала готовности от внешнего устройства освобождает от необходимости программного опроса этого сигнала и, следовательно, создает экономию памяти за счет сокращения подпрограмм ввода-вывода. Но этот способ, как и программный ввод-вывод с квитированием, имеет тот же недостаток — непроизводительное использование микропроцессора во время ожидания ответа от внешнего устройства. Кроме того, при подключении нескольких внешних устройств аппаратная сложность значительно возрастает.

Режим ожидания наиболее часто применяют при работе с «медленной» полупроводниковой памятью, которая все же во много раз быстрее типового внешнего устройства. Время цикла обращения к такой памяти ненамного превышает время реакции микропроцессора. Этот режим очень удобно использовать при отладке микропроцессорных систем, так как при этом можно легко контролировать состояние всех шин системы, например, простым логическим пробником.

Как уже отмечалось в начале статьи, большое влияние на эффективность обмена данными оказывают способы подключения внешних устройств. Поясним два наиболее широко применяющихся способа, один из которых основан на подключении внешних устройств через подсистему ввода-вывода, второй — через подсистему памяти. Эти способы иногда называют соответственно изолированным и совмещенным вводом-выводом.

При изолированном вводе-выводе микропроцессор способен адресовать 256 устройств ввода, столько же устройств вывода и память объемом 64 Кбайт. Реализация этого способа требует включения в состав микропроцессорной системы системного контроллера, вырабатывающего сигналы ВВОД и ВЫВОД. Такой контроллер, выполненный на микросхемах средней степени интеграции, был рассмотрен ранее. Отметим, что в настоящее время уже появилась БИС КР580ВК28, выполняющая функции системного контроллера и шинного формирователя, которая предназначена для систем на базе процессора серии КР580.

При совмещенном вводе-выводе внешние устройства адресуются как ячейки памяти с использованием сигналов WR («Запись в память») и DBIN («Чтение памяти»). Обращение к внешним устройствам происходит по командам обращения к памяти. Такой способ организации ввода-вывода ведет к сокращению адресного пространства, предназначенного для памяти, за счет адресации внешних устройств. При этом, с одной стороны, можно отказаться от использования контроллера состояний, а с другой — может существенно усложниться дешифрация адреса.

Замена инструкций OUT и IN командами обращения к памяти повышает гибкость программирования обмена. При этом появляется возможность обращения внешнего устройства не только к аккумулятору, но и к любому регистру общего назначения или ячейке памяти, совмещения ввода-вывода с выполнением арифметико-логической операции, программного вычисления адреса внешнего устройства. Это невозможно при использовании команд OUT и IN, где адрес является непосредственным операндом. Программа ввода-вывода при таком способе обычно короче, а число подключаемых внешних устройств но сравнению с изолированным вводом-выводом может быть значительно увеличено.

Интересно отметить, что наличие в микропроцессоре КР580ИК80А косвенной адресации позволяет использовать шину адреса для выдачи данных, хранящихся в регистровых парах. Это удобно при подключении к микропроцессорной системе внешних устройств, разрядность которых превышает длину машинного слова микропроцессора. Например, выдача из процессора во внешнее устройство 24-разрядной информации может быть выполнена всего за одну команду 2-байтной пересылки данных PUSH RP, причем два байта выдаются по шине данных последовательно во времени, а третий передается по шине адреса. Оставшаяся половина адресных разрядов используется по прямому назначению. В этом случае внешнее устройство занимает адресное пространство, соответствующее 256 ячейкам памяти. Однако потеря памяти компенсируется более высокой скоростью обмена. Кроме того, появляется возможность выдавать данные по шине адреса одновременно с приемом информации по шине данных, что оказывается полезным при обмене информацией между микропроцессорной системой и быстродействующими функциональными преобразователями.

Длина этой программы 7 байт, время выполнения 37 тактов.

Рассмотрев общие принципы сопряжения микропроцессора с внешними устройствами, предложим читателю самостоятельно разработать схему подключения 24-разрядного устройства вывода информации и написать для нее программу обмена данными. Основным критерием разработки должно быть минимальное время выполнения программы выдачи данных.

Понравилась статья? Поделиться с друзьями: