Искусство схемотехники. Том 3 (Изд.4-е) - Хоровиц Пауль. Страница 23
Обратите внимание на необходимость пересылки из ЦП в УСАПП правильной последовательности инициализирующих байт до того, как начнут передаваться какие-либо последовательные данные, как это было и в случае параллельного порта 8536; в нашем примере последовательный порт не использовался, так что мы опустили его инициализацию. Программа 11.4 дает понятие о процедуре инициализации. Сложность программы (включая декодирование таблиц с данными с целью определения управляющих байтов) — это цена, которую вы платите за исключительную гибкость БИС поддержки микропроцессора.
После того как с помощью управляющих регистров установлен режим работы УСАПП, можно передавать и принимать байты данных с помощью циклов ЦП записи и чтения при высоком уровне сигнала D/C'. С целью определения наличия нового, ожидающего приема в ЦП байта данных или возможности пересылки в УСАПП нового байта для его дальнейшей передачи следует опрашивать регистр состояния (при низком уровне D/C'), конкретно D0 в регистре RR0 в первом случае, и D2 в том же регистре во втором.
В дополнение к этому по другим битам регистра состояния можно судить о фиксации ошибки четности, потере принимаемых данных и т. д. Часто эти страшные удары судьбы можно игнорировать и смело идти вперед. В программе 11.5 приведены фрагменты пересылки данных при том же, что и раньше, отображении регистров на адресное пространство.
Учтите, что эти примеры, в которых используется программный ввод-вывод с проверкой состояния (см. разд. 10.06–10.08), иллюстрируют работу простейших программных драйверов. В них работа ЦП останавливается на время циклического опроса флага состояния. Использование механизма прерываний позволяет повысить эффективность работы ЦП; это особенно справедливо для операций ввода. Микросхема 8530 может возбуждать прерывания по любому указанному условию; от нее даже можно получить в качестве подтверждения выбранный вами 8-битовый вектор, если использовать линии подтверждения прерывания (IEI, IEO, INTACK). Все эти возможности реализуются с помощью управляющих байтов инициализации.
Микросхемы параллельного ввода-вывода (PIO). В состав нашего микропроцессорного прибора была включена многофункциональная микросхема параллельного порта (такого рода схемы часто объединяются с одним или несколькими таймерами). Использованная нами микросхема 8536 принадлежит тому же семейству, что и микросхема последовательного порта 8530 и использует схожие интерфейс с процессором и протокол настройки. Хорошие микросхемы параллельных портов позволяют программировать для каждого бита в отдельности направление передачи и режим (с фиксацией, с открытым стоком, с инверсией). Протокол передачи данных также можно запрограммировать; например, в микросхеме 8536 можно разрешить векторизуемые прерывания по любому сочетанию входных бит. Можно также выбрать один из четырех режимов квитирования (см. ниже).
Микросхемы РIO, как и все периферийные БИС, разрабатываются на базе nМОП- и КМОП-технологий, причем в новых разработках используется в основном последняя. С выходов таких схем можно снять, как правило, несколько мА, однако nМОП-схемы, в отличие от КМОП, обеспечивают лишь доли мА. Поэтому они обычно используются совместно с микросхемами мощных драйверов, позволяющих подключать к ним нагрузку, требующую значительных токов. Не пытайтесь подключать реле непосредственно к выходу микросхемы РIO (см. наши замечания относительно микросхем среднего уровня интеграции в разделе «Фиксаторы и D-регистры»).
На рис. 11.27 показан пример реальной схемы, конкретно для управления 6-разрядным дисплеем.
Рис. 11.27. Управление мультиплексированным дисплеем от РIO.
Конечно, вам придется написать программу для периодического вывода последовательных десятичных чисел, а также и «шагающего бита» через порт А, не забыв запретить прерывания на время вывода, чтобы предотвратить мерцание. Другой, более простой способ управления многоразрядным ЭЛД-дисплеем в микропроцессорной системе заключается в использовании чего-то вроде семейства «интеллектуальных дисплеев» фирмы Siemens-дисплейных секций, отображаемых на память, и выглядящих с точки зрения ЦП просто как участки памяти (см. рис. 9.24); поскольку такие дисплеи запоминают выводимые числа, запись в них требуется выполнять только при смене отображаемого числа.
Квитирование. Процедура квитирования требует некоторых пояснений. Представьте себя на месте внешнего устройства, посылающего байты данных в процессор через порт РIO. Вы хотите узнать, готов ли РIO принять следующий байт, т. е. извлечен ли процессором предыдущий байт. Для выполнения этой операции следует предусмотреть в РIO специальный выход «готов к приему данных» (ready for data, RFD), который сбрасывается РIO после получения от вас нового байта, и вновь устанавливается после того, как этот байт забирается центральным процессором. Другими словами, вы имеете право стробировать свои данные в любой момент, если только установлен RFD.
На рис. 11.28 показано, как реализуется это «взаимное квитирование», которое является одним из четырех режимов квитирования, предусмотренных в микросхеме 8536.
Рис. 11.28. Квитирование.
При вводе данных внешний источник может установить данные, но не устанавливает строб ACKIN' (такое название этого вывода придумала фирма Zilog!) до обнаружения установленного сигнала RFD. Устройство снимает строб (и может снять данные), обнаружив сброс RFD, затем снова ожидает установки RFD. При выводе данных процессы протекают аналогично. РIO устанавливает сначала данные, затем сигнал DAV' (data available, данные установлены). Внешнее устройство фиксирует данные, после чего устанавливает сигнал подтверждения ACKIN'. Это заставляет РIO сбросить и данные, и DAV'. Последнее воспринимается внешним устройством, как команда на сброс ACKIN', чем начинается новый цикл. Заметьте, что квитирование полностью взаимно, т. е. каждый участник передачи данных на каждом шаге ждет вершения своей части операции вторым соучастником. Такое полностью взаимное квитирование гарантирует отсутствие потерь данных. Иногда, однако, протокол можно упростить. В микросхеме 8536 предусмотрен режим «импульсного квитирования», в котором сигнал ACKIN' не обязан ожидать разрешения на сброс; в этом случае сигнал ACKIN' представляет собой импульс длительностью по меньшей мере 250 нc, возбуждаемый, когда установлены RFD или DAV', как было описано выше.
Легко сообразить, что режим квитирования выбирается в процессе инициализации посылкой тех же всеобъемлющих управляющих байтов. Если выбран один из режимов квитирования, все или некоторые из четырех линий порта С используются в качестве ACKIN', DAV' и RFD. Если вы не назначаете порту режим квитирования, линии порта С можно использовать, как обычные биты ввода-вывода, точно так же, как порты А и В.
Предупреждение: общий недостаток многих периферийных БИС, особенно с тактирующим входом, заключается в непомерно большом времени успокоения после каждой операции. Весьма показателен наш опыт работы с микросхемой 8530: при использовании МП 68000 на частоте 10 МГц пришлось между последовательными циклами вывода включить несколько команд NOP, потому что скорость, с которой ЦП мог посылать последовательные байты (интервал между байтами 0,8 мкc) была выше скорости их приема микросхемой 8530 (минимальное значение «допустимого времени восстановления после доступа» для 8530 составляет 1,7 мкс). Учтите также своеобразные требования к синхронизации процессорного интерфейса. Вспомним, что в нашем микропроцессорном приборе периферийные схемы Zilog требовали необычно большого времени предустановки адреса по отношению к фронту строба чтения (80 не), что заставило нас добавить схемы для генерации задержанного сигнала RD'. Эти особенности, с которыми вы не встретитесь при использовании простых цифровых схем среднего уровня интеграции, являются результатом необходимости тактирования внутренних состояний микросхемы, относительно низкой скорости работы КМОП-схем, или и того, и другого.