Искусство схемотехники. Том 3 (Изд.4-е) - Хоровиц Пауль. Страница 10
Организация порта микропереключателей также не сложна. На выходе использован трехстабильный 8-разрядный инвертирующий буфер `240, управляемый уровнями от микропереключателей с принудительной установкой верхнего уровня. Разрешающим сигналом буфера служит тот же сигнал декодирования адреса LEDSW', на этот раз объединенный с RD'. Другими словами, если вы записываете по адресу $86000, данные индицируются на ЭЛД; если вы читаете, то считывается байт, характеризующий установку микропереключателей. Поскольку мы использовали инвертирующий буфер, замкнутый переключатель считывается как 1, а не 0.
АЦП и ЦАПы. Эти порты устроены так же просто. Обе микросхемы конвертеров являются «комплексными», со встроенными таймерами и опорными источниками. АЦП AD670 удовлетворяет протоколу сигналов R/W' и DS', поскольку снабжен входами направления и разрешения кристалла. Запись (разрешение микросхемы осуществляется низким уровнем R/W') начинает преобразование, в то время как чтение позволяет получить результирующий байт. В цикле записи АЦП фиксирует два бита данных: BPO/UPO' управляет диапазоном входных сигналов (высокий уровень — биполярный сигнал, низкий — однополярный), a FMT определяет формат цифрового выхода (высокий — дополнение до двух, низкий — беззнаковое двоичное представление). Выходной сигнал DONE говорит об окончании преобразования; мы отказались от использования этого сигнала, потому что, как нам кажется, проще выполнить несколько команд NOP в течение времени преобразования (длительность которого не превышает 10 мкс), чем организовывать опрос флага.
Микросхема AD670, как большинство периферийных микросхем, не отличается быстротой реакции в своей интерфейсной части. Ей требуется строб СЕ' по меньшей мере длительностью 300 нc в цикле записи, в цикле же чтения время доступа с момента установки СЕ' составляет 250 нc. Обратившись к рис. 11.4, вы увидите, что эти величины не удовлетворяют требованиям временной синхронизации МП 68008 в случае нормального (без состояний ожидания) цикла магистрали. Однако при двух состояниях ожидания (которые наша схема генерирует для всех адресов от $80000 и выше) все согласуется: сигнал DS' в цикле записи получает длительность 390 нc, а в цикле чтения он должен поддерживаться в установленном состоянии в течение 487 нc.
ЦАП AD558 также является комплексным конвертером; ему требуется единственное напряжение питания +5В, а на выходе образуется сигнал напряжения. В микросхему можно только записывать, поэтому мы использовали строб WR' для разрешения микросхемы, а сигнал декодирования адреса — для выбора микросхемы. Здесь также временные соотношения не будут удовлетворяться при отсутствии состояния ожидания: AD558 требует наличия данных за 200 нc до среза сигнала СЕ', а минимальная длительность СЕ' составляет 150 нc. Без состояний ожидания вы получите только 180 нc и 140 нc, соответственно; два состояния ожидания увеличат эти интервалы до удовлетворительных значений 430 нc и 390 нc.
Последовательный и параллельный порты. Типичными представителями перифейрийных БИС являются микросхемы Zilog 8530 SCC (последовательный порт) и 8536 СIO (параллельный порт и таймер). Такого рода микросхемы отличаются необычной гибкостью и умопомрачительным количеством рабочих режимов, программируемых путем засылки управляющих байтов во внутренние регистры. Некоторые из этих микросхем по сложности приближаются к микропроцессорам (см. рис. 11.13), и чтобы научиться программировать их работу, вам придется затратить немало времени.
Рис. 11.13. Структурная схема последовательного порта Zilog 8530.
Примечание: BR — запрос шины; FIFO — «пеpвым вошел, первым вышел»; TxD — сигнал передачи; RxD — сигнал приема; NRZ1 — кодирование без возвращения к нулю с инверсией; CRC — контроль циклическим избыточным кодом; DPLL — фазовая автоподстройка частоты; SDLC — синхронное управление линиями передачи данных.
Хотя периферийные БИС обычно разрабатываются под конкретные микропроцессоры, общность их характеристик позволяет использовать микросхемы, предназначенные для поддержки определенного семейства микропроцессоров, с процессорами других фирм. Микросхемы Zilog 85хх претендуют на роль универсальных, «магистрально-независимых» периферийных устройств, хотя при использовании их с МП 68008 возникает некоторая несовместимость в отношении строба RD', которую мы снимем, образовав задержанный строб RD'.
Рассмотрим сначала параллельный порт/таймер 8536. В нем используется пара стробирующих сигналов RD' и WR', а также сигнал разрешения входа СЕ' (который, как и обычно, поступает с выхода дешифратора адреса). Кроме того, на соответствующий вход микросхемы подаются тактовые сигналы для синхронизации таймера и управления внутренней логикой. Микросхема 8536 включает цепи полностью векторизуемых прерываний с подтверждением, выставляющие вектор на линии данных в течение цикла подтверждения прерывания. Реализация всех этих излишних для нас возможностей требует использования приоритетной цепочки, связывающей устройства (с помощью входного сигнала IEi и выходного IEO), а также входа INTACK', управляющего установкой (программируемого) вектора. Мы же ограничимся выходным сигналом INT' для организации запроса прерывания. Из состава интерфейсной шины к параллельному порту подключаются линии данных D0-D7, а также адресные линии (А0, А1) для адресации внутренних регистров; использование двух младших адресных линий приводит к отображению внутренних регистров на адресное пространство, начинающееся с базового адреса. В нашем случае внутренние регистры располагаются по адресам $84000-$84003.
Число адресных выводов наводит на мысль, что в микросхеме имеются 4 внутренних регистра, что, однако, весьма далеко от истины: фактически порт содержит 41 регистр для записи и 48 регистров для чтения! (Мы же предупреждали, что программирование этих микросхем — кошмарное занятие!) Для доступа к регистрам вы сначала записываете в «управляющий» регистр по адресу база + 3 ($84003) байт, содержащий адрес требуемого регистра данных, а затем читаете из или записываете в выбранный регистр. В отличие от этого регистры данных параллельного порта допускают непосредственную адресацию, и в них записывают или из них читают прямо по адресам база, база + 1 и база + 2.
На рис. 11.14 показаны временные диаграммы циклов чтения и записи, позволяющие рассмотреть проблемы синхронизации строба RD'.
Рис. 11.14. Синхронизация параллельного порта Zilog 8536.
Спецификации микросхемы 8536 дают минимальное значение интервала между установкой адресных сигналов А0-А1 и фронтом строба RD' (время упреждения) 80 нc. В спецификациях также определяется время отклика, как обычно, довольно большое — бедняге 8536 требуется 255 нc для выдачи данных; длительность же сигнала RD' должна составлять 390 нc (минимум). С большим временем отклика мы уже умеем бороться с помощью состояний ожидания. Однако состояния ожидания не решат проблему с временем упреждения адреса по отношению к RD' (из рис. 11.4 видно, что сигнал DS' может появиться всего лишь через 30 нc после установки правильного адреса). Чтобы все работало правильно, мы должны задержать RD' на один такт ЦП: это легко сделать с помощью того же сдвигового регистра, который генерирует сигнал DTACK'. Мы просто образуем логическое И «быстрого» строба RD' и (инвертированного) выходного сигнала Q0 сдвигового регистра, который не устанавливается до перепада тактового сигнала ЦП между состояниями S3 и S4. В результате образуется задержанный строб RD' (который мы назвали DELRD'), начинающийся на один такт позже (в тот же момент, что и нормальный DS' цикла записи). Описанная процедура предоставляет порту дополнительные 125 нc для упреждения адреса (в сумме 155 нc). Генератор состояний ожидания по-прежнему вводит два состояния ожидания, что делает полную длину цикла достаточной для медленных периферийных устройств.