В этой главе рассматриваются основные принципы параллельной и последовательной передачи данных, методы управления вводом и выводом, а также несколько популярных программируемых микросхем для ввода и вывода.
Микропроцессорная система без средств ввода и вывода оказывается бесполезной. Конечно, характеристики и объемы ввода и вывода в системе определяются, в первую очередь, спецификой ее применения. Например, в простом домашнем компьютере, как минимум, необходимы ввод с клавиатуры и вывод на обычный телевизор. Кроме того, желательны канал связи с бытовым магнитофоном и дополнительный выход на принтер (рис. 7.1).
Рис. 7.1. Средства ввода-вывода в простом домашнем компьютере.
Однако, в микропроцессорной системе управления некоторым промышленным процессом не требуются клавиатура и дисплей, так как почти наверняка ее дистанционно программирует и контролирует главный микрокомпьютер (с использованием последовательной линии RS-232C). Контроллер должен иметь до 24 отдельных линий ввода и вывода для управления реле, двигателями и лампами (рис. 7.2).
Рис. 7.2. Средства ввода-вывода в промышленной системе управления.
Существуют два основных способа организации ввода-вывода. С одной стороны, устройства (микросхемы) ввода-вывода считаются адресами памяти, а с другой — каждому устройству (микросхеме) назначается адрес конкретного порта. В любом случае данные выводятся простой записью их по соответствующему адресу памяти или порта, а вводятся считыванием по аналогичному адресу. В случае ввода-вывода, отображенного на память, ЦП реализует операции ввода-вывода точно так же, как операции памяти. Часть пространства памяти резервируется для ввода-вывода: ее, конечно, нельзя одновременно назначать ЗУПВ или ПЗУ. При организации ввода-вывода через порты выделяется набор адресов портов, которые совершенно не зависят от обычного пространства памяти. Адреса портов отделяются от адресов памяти с помощью сигналов, действующих на шине управления.
Например, в микропроцессоре Z80 для этого используются сигналы:
— линия запроса памяти, на которой формируется сигнал низкого уровня, когда ЦП выполняет операцию считывания или записи с памятью;
— линия запроса ввода-вывода, на которой формируется сигнал низкого уровня, когда ЦП выполняет операцию ввода-вывода.
Для ввода и вывода в микропроцессоре Z80 существуют специальные команды, например:
OUT(FFH), А — записывает содержимое аккумулятора (8-битное значение) в порт с 16-ричным адресом FF;
IN (A) FFH — считывает содержимое порта с 16-ричным адресом FF и помещает результат в аккумулятор.
Необходимо различать также параллельный и последовательный ввод-вывод. В первом случае одновременно передается байт данных (следовательно, здесь требуется 8-битный буфер или защелка), а во втором данные передаются отдельными битами. Параллельный ввод-вывод реализуется довольно просто (рис. 7.3). Здесь для вывода применяется стандартная 8-битная защелка, а для ввода — 8-битный тристабильный буфер. Однако такая простая схема оказывается недостаточно гибкой, и лучше воспользоваться программируемой микросхемой параллельного ввода-вывода.
Рис. 7.3. Схема простого параллельного ввода и вывода.
Поскольку данные обычно представлены на шине микропроцессора в параллельной форме (байтами), их последовательный ввод-вывод оказывается несколько сложнее. Для последовательного ввода потребуются средства преобразования последовательных входных данных в параллельные данные, которые можно поместить на шину. С другой стороны, для последовательного вывода необходимы средства преобразования параллельных данных, представленных на шине, в последовательные выходные данные. В первом случае преобразование осуществляется регистром сдвига с последовательным входом и параллельным выходом (SIPO), а во втором — регистром сдвига с параллельным входом и последовательным выходом (PISO). Схемы обоих вариантов ввода и вывода показаны на рис. 7.4.
Рис. 7.4. Схемы последовательного ввода и вывода:
а — последовательный ввод с регистром сдвига SIPO; б — последовательный вывод с регистром PISO
Их можно реализовать на обычных логических элементах, но более эффективное решение заключается в применении специализированных программируемых микросхем.
Существуют три основных метода управления операциями ввода-вывода. Наиболее простой и очевидный метод заключается в том, чтобы разрешить ЦП управлять всеми операциями ввода-вывода. Этот метод, называемый программным вводом-выводом (или вводом-выводом с опросом), обеспечивает ЦП полное управление ситуацией, но оказывается наименее гибким и довольно медленным. По существу, ЦП периодически опрашивает каждое периферийное устройство (через соответствующую схему ввода-вывода), не требует ли оно обслуживания. Если запрос имеется, ЦП выполняет необходимую процедуру обслуживания. Когда воспринят запрос на обслуживание, все запросы от других периферийных устройств игнорируются; эти устройства должны ожидать до тех пор, пока ЦП не освободится для обработки их запроса на обслуживание.
Более удобный, но и более сложный метод заключается в том, чтобы разрешить периферийным устройствам прерывать обычную работу ЦП. При наличии сигнала прерывания и с учетом состояния своего флажка прерывания ЦП должен приостановить текущую программу (сохранив в стеке все важные параметры и адрес возврата), а затем выполнить необходимую процедуру обслуживания.
Прерывания можно схемно упорядочить по приоритетам так, чтобы самое важное периферийное устройство обслуживалось в первую очередь. В качестве примера рассмотрим тормозную систему автомобиля. ЦП должен отреагировать на отказ тормозов и выдать об этом предупреждение независимо от других одновременно происходящих событий.
Согласно третьему, самому сложному методу управления вводом-выводом внешним устройствам обеспечивается полный доступ к пространству памяти системы без всякого участия ЦП в передачах данных. Такой метод называется прямым доступом к памяти (ПДП) и оказывается очень эффективным. Данные можно передавать с исключительно высокой скоростью (так как вмешательства ЦП не требуется), поэтому ПДП используется, например, для передач данных в накопитель на твердом диске или из него. В простых управляющих применениях ПДП не требуется, но о нем нужно знать. Упрощенные структурные схемы всех методов управления вводом-выводом показаны на рис. 7.5.
Рис. 7.5. Основные методы управления вводом-выводом:
а — программируемый (с опросом); б — по прерыванию; в — прямой
После обзора основных принципов ввода-вывода в микропроцессорных системах обратимся к распространенным программируемым микросхемам ввода-вывода.
Микросхемы параллельного ввода-вывода имеют множество фирменных названий, но их внутренняя архитектура и принципы действия удивительно похожи и различаются только в некоторых деталях. Наиболее известны следующие микросхемы:
6520 — периферийный интерфейсный адаптер (PIA);
6521 — периферийный интерфейсный адаптер (PIA), аналогичен 6520;
6522 — универсальный интерфейсный адаптер (VIA);
6820 — периферийный интерфейсный адаптер (PIA), эквивалент 6520;
6821 — периферийный интерфейсный адаптер (PIA), эквивалент 6521;
8255 — программируемый параллельный интерфейс (PPI);
Z80-PIO — программируемый ввод-вывод (РIO).
Как следует из приведенных названий, программируемые микросхемы параллельного ввода-вывода допускают программное задание одного из нескольких режимов:
1) все восемь линий являются входами;
2) все восемь линий являются выходами;
3) линии отдельно программируются как входные или выходные.
Кроме того, обычно предусматриваются дополнительные линии для квитирования. Этот термин характеризует процесс обмена управляющими сигналами между микрокомпьютером и периферийным устройством.
Обозначения линий портов и их функции в разных микросхемах также различны, но и здесь наблюдается определенное единообразие. Большинство указанных выше микросхем обладают следующими линиями (рис. 7.6):
доступ к памяти
Рис. 7.6. Внутренние регистры типичной программируемой микросхемы параллельного ввода-вывода.
РА0—РА7 — линии ввода-вывода порта А. Первая линия соответствует младшему биту, а вторая — старшему;
СА1—СА2 — линии квитирования для порта А; СА1 — это вход прерывания, а СА2 можно использовать и как вход прерывания, и как выход управления периферийным устройством;
РВ0—РВ7 — линии ввода-вывода порта В;
СВ1—СВ2 — линии квитирования для порта В; их функции аналогичны линиям СА1—СА2.
Электрические характеристики портов ввода-вывода разнообразны, но все сигналы обязательно ТТЛ-совместимы. Выходные линии портов (обычно группы В) нескольких программируемых микросхем параллельного ввода-вывода допускают непосредственное подключение к базе обычного или составного (схема Дарлингтона) транзистора. Следовательно, такую микросхему можно использовать в качестве драйвера реле или лампы. К выходным линиям порта иногда подключают высоковольтные драйверы с открытым коллектором.
На рис. 7.7 показана разводка контактов нескольких программируемых микросхем параллельного ввода-вывода.
Рис. 7.7. Разводка контактов распространенных программируемых микросхем параллельного ввода-вывода.
Последовательные данные передаются в синхронном или асинхронном режимах. В синхронном режиме все передачи осуществляются под управлением общего сигнала синхронизации, который должен присутствовать на обоих концах линии связи. Асинхронная передача подразумевает — передачу данных пакетами; каждый пакет содержит необходимую информацию, требующуюся для декодирования содержащихся в нем данных. Конечно, второй режим сложнее, но у него есть серьезное преимущество: не нужен отдельный сигнал синхронизации.
Подробнее этот вопрос рассмотрен в гл. 8.
Программируемые микросхемы последовательного ввода-вывода выпускаются под разными названиями, например:
6850 — асинхронный связной интерфейсный адаптер (ACIA);
6852 — синхронный адаптер последовательных данных (SSDA);
8251 —универсальный синхронно-асинхронный приемник-передатчик (USART);
8256 — универсальный асинхронный приемник-передатчик (UART);
Z80-DART— сдвоенный асинхронный приемник-передатчик (DART).
Как и у микросхем параллельного ввода-вывода, у программируемых микросхем последовательного ввода-вывода наблюдается общность внутренней архитектуры. Вот список наиболее типичных сигналов:
D0—D7 — входные-выходные линии данных, подключаемые непосредственно к шине микропроцессора;
RXD — принимаемые данные (входные последовательные данные);
TXD — передаваемые данные (выходные последовательные данные);
CTS — сброс передачи. На этой линии периферийное устройство формирует сигнал низкого уровня, когда оно готово воспринимать данные от микропроцессорной системы;
RTS — запрос передачи. На эту линию микропроцессорная система выдает сигнал низкого уровня, когда она намерена передавать данные в периферийное устройство.
Все сигналы программируемых микросхем последовательного ввода-вывода ТТЛ-совместимы. Отметим, однако, что эти сигналы рассчитаны только на очень короткие линии связи, например между клавиатурой и корпусом компьютера. Для последовательной передачи данных на значительное расстояние требуются дополнительные буферы и преобразователи уровней, включаемые между микросхемами последовательного ввода-вывода и линией связи.
Разводка контактов наиболее распространенных программируемых микросхем последовательного ввода-вывода показана на рис. 7.8.
Рис. 7.8. Разводка контактов распространенных программируемых микросхем последовательного ввода-вывода.
Поскольку работа программируемых микросхем параллельного ввода-вывода предсказуема, можно обнаружить возникающие в них неисправности, измерив сигналы на различных входных и выходных линиях. Поиск неисправностей в микросхемах параллельного ввода-вывода оказывается сравнительно простой задачей, чего нельзя сказать о микросхемах последовательного ввода-вывода.
Прежде всего следует убедиться в том, что ЦП действительно выбирает подозреваемую программируемую микросхему ввода-вывода. Для этого достаточно проверить сигналы на линиях управления с помощью логического пробника. Убедившись в выборе конкретной микросхемы, необходимо проверить ситуацию со стороны периферийного устройства. По возможности целесообразно написать короткую программу для исследования порта (т. е. считывания или записи данных) и проконтролировать возникающие при ее выполнении логические условия. Отказ транзистора внешнего драйвера часто выводит из строя буфер-драйвер внутри программируемой микросхемы ввода-вывода, но повреждение не обязательно распространяется на все восемь линий конкретного порта. Следовательно, перед заменой микросхемы ввода-вывода следует тщательно проверить периферийное устройство и соответствующие схемы.
Когда микросхемы вставлены в гнезда, целесообразно заменить подозреваемую микросхему на заведомо исправную (не забудьте при этом выключить питание и отсоединить все внешние схемы). Как и в случае с полупроводниковой памятью, рекомендуется смонтировать гнездо для микросхемы, если его нет.
Обнаружить неисправность в программируемых микросхемах последовательного ввода-вывода гораздо труднее. Здесь также рекомендуется прежде всего проверить условия со стороны ЦП, т. е. различные сигналы шины управления и выбора микросхемы. Убедившись в том, что микросхема выбирается, можно проверить состояния линий RTS и CTS (при выводе) и или (при вводе). Следует также проверить наличие и правильность сигналов синхронизации (типичная частота синхронизации приема-передачи составляет 500 кГц). Наконец, из-за различий в схемах весьма желательно иметь под рукой фирменные материалы по эксплуатации микросхем.
Полезно, также выполнить короткую тест-программу порта, например цикл, который непрерывно выводит в порт один и тот же байт. Отметим, однако, что последовательный интерфейс с RS-232C требует сигналов квитирования, поэтому очень важно проверить драйверы и приемники линии связи, разъемы и кабели, а также само периферийное устройство, прежде чем менять микросхему последовательного ввода-вывода.