Мы пройдем с вами процедуру аппаратного проектирования, остановившись на критериях выбора элементов и разработки схемы. Вы научитесь выбирать и подключать память и периферийные устройства и разумным образом распределять адресное пространство. Закончив аппаратное проектирование, мы займемся программным обеспечением и напишем несколько программных "модулей" (блоков) для управления выбранными процессами. Мы, однако, не будем утомлять вас детальным рассмотрением всех программных строк, поскольку программные комплексы, подобные нашему, содержат много не очень интересных (хотя и необходимых) программ, вроде программы ввода с клавиатуры установочных команд. Наконец, мы проанализируем эффективность получившегося прибора - гибкость, обусловленную применением микропроцессора, и накладываемые им ограничения скоростных характеристик.
11.05. Разработка схемы
Структурная схема. На рис. 11.9 изображена структурная, на рис. 11.10 - электрическая схемы микропроцессорного прибора.
Рис. 11.9.Структурная схема прибора общего назначения на базе микропроцессора.
Рис. 11.10.Электрическая схема прибора общего назначения на базе микропроцессора.
Рассмотрим сначала структурную схему, на которой показаны устройства, подключенные к магистрали. Если анализировать эту схему с позиции микроЭВМ, то сразу бросается в глаза "перекошенность" памяти: объем ПЗУ в 4 раза превышает объем ОЗУ. Однако в микропроцессорном приборе конкретного назначения все программы и таблицы размещаются не в ОЗУ, а в ПЗУ, а ОЗУ используется только для буферизации данных и хранения временных результатов вычислений. К тому же производители программируемых ПЗУ с ультрафиолетовым стиранием (РПЗУ) по мере повышения качества технологии прекращают выпуск ПЗУ малого объема; сейчас трудно найти РПЗУ с емкостью, меньшей 8Кx8 бит. Так или иначе, на схеме показана память минимально возможного объема (по одной микросхеме ПЗУ и ОЗУ); при необходимости память можно расширить.
Следующее устройство на магистрали-календарь-часы. Календарь-часы??!! Что это, просто излишняя роскошь для тех, кому лень посмотреть на собственные часы при включении прибора? Напротив, календарь-часы - существенный элемент любого прибора, выполняющего периодические измерения, или фиксирующего моменты поступления данных, или управляющего любыми другими процессами, протекающими во времени. Календарь-часы можно запрограммировать, чтобы они вызывали периодические прерывания с частотой от 100 прерываний в секунду до одного за день; можно использовать их и как будильник (конечно, без звонка; вместо звонка возникает прерывание), устанавливаемый на любой момент хотя и в следующем веке. В нашем усреднителе сигналов мы воспользуемся таймерами параллельного порта 8536, но и календарь иметь под рукой полезно.
Микросхема 8530 последовательного порта представляет собой высокопроизводительный двухканальный УСАПП (универсальный синхронно-асинхронный приемно-передатчик, см. разд. 10.19), в комплекте с парой задающих генераторов. Это очень приличная микросхема, не только знакомая со всеми хитростями обычного асинхронного интерфейса RS-232, но и обеспечивающая полный синхронный протокол "SDLC/HDLC", включающий контроль ошибок, восстановление после тайм-аута, синхронизацию кадров и т. д.; возможно слишком жирно для нашей задачи, но, в конце концов, какого черта! Микросхема 8536 является одновременно таймером и параллельным портом; ее сделали отличные ребята из фирмы Zilog, и она тоже не слабак: возможностей у нее тьма-тьмущая. Например, каждую из ее 20 линий можно запрограммировать на вход или на выход, как на прямой, так и на инверсный; каждый выход может быть с открытым стоком или с двумя состояниями, в то время как каждый вход может работать в нормальном режиме или с "запоминанием 1" (кратковременный положительный импульс устанавливает входной регистр).
Описание режимов, кажется, не имеет конца (оно занимает 26 страниц) и поражает неисчислимыми возможностями. Посмотрим теперь на верхний ряд устройств. Матрица ЭЛД представляет собой просто линейку из 8 диодов, предназначенных для индикации работы прибора; эти диоды могут оказать также существенную помощь при отладке, когда остальные средства оказываются бессильны. К одному из выходов, питающих ЭЛД, мы подключили твердотельное реле, с помощью которого можно управлять каким-то сильноточным устройством. Например, для стабилизации температуры в ванне можно подавать сигнал, характеризующий температуру, на вход АЦП, а с помощью реле переменного тока включать нагреватель. Мы еще предоставим вам возможность проявить свою смекалку в этой области при выполнении упражнений. Микропереключатель в DIP-корпусе является обычным 8-контактным переключателем, полезным для ввода в прибор настроечной информации; с его помощью можно, например, указать, какой последовательный порт (и на какой частоте) используется ЦП после включения питания. Наконец, мы подключили к магистрали по паре аналого-цифровых и цифро-аналоговых преобразователей, чтобы прибор мог функционировать в мире аналоговых сигналов.
Детали схемы. Теперь начнется самое интересное. Рассмотрим электрическую схему прибора (рис. 11.10).
ЦП CLK. для работы МП 68008 требуются тактовые сигналы (CLK) прямоугольной формы (перепады логических уровней) в диапазоне от 2 до 10 МГц. Верхний предел определяется скоростью срабатывания внутренних вентилей и регистров; в настоящее время можно встретить экземпляры МП 68008 с максимальной тактовой частотой 8, 10 или 12,5 МГц. Нижний предел определяется тем обстоятельством, что в ЦП используются динамические регистры, требующие периодической регенерации, поскольку данные в них сохраняются не в триггерах, а в заряженных конденсаторах. Скорость вычислений пропорциональна тактовой частоте, поэтому естественно желание всемерно повысить тактовую частоту. Это, однако, сопряжено с некоторыми недостатками: а) более жесткие требования к временной синхронизации памяти и периферийных устройств, б) большая стоимость и в) большая рассеиваемая мощность, особенно для маломощных КМОП-процессоров и периферийных устройств. Обычно потребляемая мощность не имеет большого значения, за исключением случая батарейного питания; см. гл. 14. Мы остановились на тактовой частоте 8 МГц, так как это дает возможность использовать ту же тактовую серию (деленную на два) для микросхемы последовательного порта; в противном случае для работы УСАПП потребовался бы отдельный генератор, или пришлось бы ограничиться низкими скоростями передачи.
RESET, прерывания, стробирующие сигналы. Для того чтобы выполнить начальную загрузку МП 68008, следует установить сигналы RESET' и HALT' (обе линии двунаправленные; надо использовать схему с открытым коллектором с принудительной установкой верхнего уровня). Мы применили простую схему автозагрузки, состоящую из RC-цепи, триггера Шмитта и кнопки. Обратите внимание на диод, служащий для быстрого разряда в случае коротких выбросов напряжения питания; более совершенная схема сброса при включении питания должна использовать цепь "микропроцессорного контроля" вроде МАХ692, дающую хорошо сформированный сигнал сброса. Линия, обозначенная нами MR', переводится в высокое состояние и при начальной загрузке, и (на время 128 тактов) при выполнении ЦП команды RESET; линия INIT' переводится в высокое состояние только при загрузке.
В этой простой системы мы остановились на автовекторизуемых прерываниях; логическое И сигналов FC0 и FC1 указывает на выполнение цикла подтверждения прерывания, в течение которого мы обязаны установить сигнал VPA' одновременно со стробом адреса AS'. Мы также используем наш сигнал INTA' для запрещения нормального декодирования ввода-вывода (см. ниже). В МП 68008 предусмотрены три уровня автовекторизуемых прерываний. К нижнему уровню (IPL1) мы подключили через проводное ИЛИ "медленные" прерывания от последовательного порта и календаря; прерывания от чувствительного к задержкам таймера (называемого "СIO"-микросхемой) реализуются на следующем уровне (IPL0/2). Самый верхний уровень "немаскируемых" прерываний (установлены обе линии IPL) зарезервирован для прерывания от кнопки (немаскируемое прерывание NMI), так что вы всегда можете вывести плату из состояния зависания в процессе отладки программы.
Для образования пары стробирующих сигналов (RD', WR') мы использовали несколько вентилей. Эти сигналы будут полезны для некоторых "Intel-совместимых" периферийных устройств, для которых требуются отдельные строб-сигналы.