Искусство схемотехники. Том 2 (Изд.4-е)
Шрифт:
LocalTalk. LocalTalk (первоначально Appletalk), разработанная (угадайте, кем?) фирмой Apple Computer, представляет собой упрощенную сеть с конфликтами. Это не кольцевая сеть, а линейная. Один из узлов может передавать, остальные слушают. В качестве среды передачи используется одна симметричная пара; сигналы в стандарте RS-422 поступают на нее из узлов через трансформаторы. Формат пакета соответствует стандарту SDLC. Максимальная протяженность сети составляет 330 м, и к ней можно подключить до 32 узлов. Пропускная способность сети составляет 230,4 Кбит/с. Совместимый вариант, известный под именем PhoneNET (Farallon Computing Inc.) использует телефонные кабели и соединители и, как утверждается, работает при расстояниях до 1300 м.
Протокол сети схож с Ethernet, но проще: если вы не слышите передачу по сети, вы можете посылать свой пакет. Аппаратура сети
В сети LocalTalk предусмотрены протоколы для совместного использования файлов и ресурсов (принтеров, модемов и проч.), а также способ наименования устройств, подключенных к сети. Можно даже раздобыть интерфейсы LocalTalk для «не-Аррlе»-компьютеров, что дает вам возможность пересылать файлы между компьютерами типов Macintosh, IBM и UNIX, а также совместно использовать такие ресурсы, как лазерный принтер.
10.22. Пример интерфейса: аппаратная упаковка данных
Если все ваши приборы подключаются к стандартной интерфейсной магистрали (например, GPIB), ваши дела блестящи: просто купите интерфейсную плату для вашего компьютера и несколько кабелей, соедините все вместе и наймите программиста. Талант тут не требуется, только деньги. Однако эта глава посвящена магистральным интерфейсам, и мы хотели бы завершить ее примером законченной разработки.
Надо полагать, что вы, как и мы, не выбрасываете все ваши работоспособные приборы, если появляется что-нибудь новенькое. Некоторые исключительно полезные приборы были созданы еще до эпохи GPIB; в них можно вдохнуть новую жизнь, смастерив к ним интерфейс для подключения к лабораторному компьютеру. Например, частотомер с 8-разрядным цифровым индикатором скорее всего имеет на задней панели «цифро-последовательный, бит-параллельный» выход, на котором появляются друг за другом индицируемые цифры в двоично-кодированном десятичном коде (BCD); весьма вероятно, что скорость вывода цифр совпадает со скоростью регенерации индикатора. Контролировать временные соотношения вы не можете; каждая достоверная цифра, вместе с ее трехбитным адресом позиции в числе, сопровождается стробом. Такого рода прибор скорее всего использует выходные уровни TTL.
На рис. 10.23 показано, как подключить такой прибор к IBM PC.
Рис. 10.23. Символьно-последовательный интерфейс.
Это законченный интерфейс, вместе с флагом состояния, прерываниями и выбираемым адресом порта ввода-вывода. Работа интерфейса начинается в левом нижнем углу рисунка, где обозначены данные, посылаемые из частотомера: последовательные цифры, их адреса (0–7) и стробирующий импульс STROBE7, говорящий о достоверности данных. Частотомер посылает цифры от самой младшей (LSD) до самой старшей (MSD), так что весь цикл заканчивается приемом самой старшей цифры (разряда 7). Восемь регистров `173 (4-разрядные D-регистры с тристабильными выходами) фиксируют последовательные цифры; для этого их информационные входы объединены, а на тактовые входы подаются отдельные сигналы с дешифратора адреса цифр. Обратите внимание на использование микросхемы `138-стробируемого дешифратора 1 из 8, с помощью которого из сигналов адреса и строба образуются тактовые сигналы для фиксации цифр.
Таким образом, выходные данные частотомера фиксируются в восьми 4-разрядных регистрах, выходы которых образуют 4 группы по 2 цифры (8 бит) в группе. PC может принять все восемь цифр четырьмя командами IN ввода данных шириной 1 байт из четырех последовательных адресов портов ввода-вывода (начиная с адреса, установленного на DIP-переключателе). Можно даже поступить еще лучше, читая данные из 16-разрядного регистра (т. е. выполняя вместо команды IN AL,DX, команду IN AX,DX), что приведет к двум последовательным операциям чтения байтов из двух соседних портов ввода-вывода. Обратите внимание на простоту схемы дешифрации адреса. 8-разрядный компаратор `682 выдает низкий уровень на выходе, когда 7 старших бит адреса совпадают с комбинацией, установленной на переключателях (при условии, что этот зануда AEN находится в низком состоянии); этим «базовым адресом» разрешается дешифратор 1 из 8 `138, стробируемый сигналом IOR', который декодирует три младшие бита адреса и генерирует отдельные импульсы ввода, соответствующие последовательным адресам портов. Это весьма распространенный способ дешифрации адресов, так как обычно вы назначаете различным регистрам интерфейса несколько последовательных адресов портов.
Флаг состояния устанавливается при приеме последней цифры числа из частотомера; состояние можно прочитать по адресу PORT + 4, где PORT — адрес, установленный на DIP-переключателях. Флаг состояния сбрасывается, когда ЦП читает последний (самый старший) байт данных (по адресу PORT + 3). Интерфейс позволяет работать и в режиме прерываний, которые через перемычку подключаются к любому из уровней IRQ2 или IRQ3, и разрешаются посылкой 1 по адресу PORT (а запрещаются посылкой 0); обратите внимание на неполную дешифрацию адреса в цепи записи, что позволило сэкономить вентили. Как и положено законопослушным гражданам, при включении питания мы сбрасываем оба триггера — и состояния, и разрешения прерываний.
Описанный интерфейс выполняет «упаковку» данных, объединяя несколько чисел в одно компьютерное слово. Если «числа» состоят из одного бита каждое, в 16-разрядное слово компьютера их можно упаковать 16 штук. Это не такое бессмысленное рассуждение, как кажется на первый взгляд: в цифровой обработке сигналов приходится иметь дело с периодическими выборками жестко ограниченных колебаний (которые можно рассматривать, как 1-бит аналого-цифровое преобразование); для повышения скорости выполнения операций ввода-вывода эти биты можно упаковать аппаратно и читать затем целыми словами. Конечно, если скорость не имеет значения, проще получать данные с помощью минимальных аппаратных средств, а всю упаковку и преобразования выполнять программно. Например, в приведенном примере можно было фиксировать и передавать в ЦП по одной цифре, если только быстродействие компьютера достаточно высоко, чтобы цифры не терялись.
Упражнение 10.8. Видоизмените схему интерфейса так, чтобы можно было программно выбирать линию запроса прерывания IRQ, используемую интерфейсом: посылкой 01Н по адресу PORT разрешать прерывания по IRQ2, посылкой 02Н по адресу PORT разрешать прерывания по IRQ3, а посылкой 0 по адресу PORT (или включением питания) запрещать и то, и другое.
Практическое замечание по поводу нашей схемы: следует избегать чрезмерной нагрузки линий шины. В приведенной схеме к каждой линии Dn подключаются выходы четырех тристабильных регистров `173, что создает чрезмерную емкостную нагрузку. Хотя наш интерфейс будет, несомненно, работать правильно, его подключение ограничит число дополнительных плат, которые можно установить на шине (особенно, если остальные разработчики окажутся грешными в том же отношении!). В нашем случае следовало использовать тристабильный 8-разрядный буфер (микросхема `244), включив его между выходами D0-D7 и шиной данных PC. Сигнал разрешения микросхемы можно получить, образовав логическое И декодированного адреса и сигнала IOR.
10.23. Форматы чисел
Формат байтов (или слов), получаемых из частотомера в рассмотренном примере, отличается от внутримашинного двоичного формата; частотомер образует двоично-кодированные десятичные коды, упакованные по две цифры в байте (или четыре цифры в слове). Чтобы с этими числами можно было выполнять какие-то вычисления, их следует преобразовать в целые числа или в числа с плавающей точкой (хотя в системе команд микропроцессора предусмотрены и команды с «десятичной коррекцией», позволяющие выполнять арифметические операции непосредственно над упакованными двоично-кодированными десятичными числами). Рассмотрим форматы чисел, обычно используемые в компьютерах (рис. 10.24), предмет, кратко затронутый нами в начале гл. 8.