Теория операционных систем

         

Простые внешние устройства

  У кошки четыре ноги -
Вход, выход, земля и питание

По-видимому, самым простым из мыслимых (а также и из используемых) внешних устройств является порт вывода. Такие устройства являются стандартным компонентом большинства микропроцессорных систем. У микропроцессоров первых поколений порты реализовались отдельными микросхемами, у современных микроконтроллеров они обычно интегрированы в один кристалл с процессором.
Порт вывода представляет собой регистр и несколько выходных контактов, называемых на жаргоне микроэлектронщиков "ногами". В литературе входные и выходные контакты микросхем обычно называют просто входами и выходами. Количество выходов порта, как правило, соответствует, и никогда


не превосходит количества битов в регистре. Если в бит регистра записан ноль, напряжение на выходе порта будет низким, а если единица, то, соответственно, высоким. Большинство современных микропроцессорных комплектов используют так называемые ТТЛ-совместимые напряжения, когда нулю соответствует напряжение 0 В, а единице — 5 В или, при работе от источника питания с более низким напряжением, напряжение этого самого источника (рис. 9.3).

Рис. 9.3. Принципиальная схема ТТЛ-совместимых выходных каскадов порта вывода (здесь и далее Vss — высокое напряжение питания, Vdd — ноль)

Поскольку и внутри процессора для представления нулей и единиц также используется высокое и низкое напряжение, порт полезен прежде всего тем, что имеет регистр — чтобы удержать напряжение на выходе, npouecconv достаточно один раз установить значение регистра.
Кроме того, польза от порта состоит в том, что поддержание напряжени на выходе может потребовать пропускания через этот выход тока. Порты современных микроконтроллеров имеют внутреннее сопротивление около 200 Ом и способны без вреда для себя пропустить через вывод ток до 25 мА. Выводы шин адреса и данных микропроцессоров, как правило, рассчитаны на гораздо меньшие токи. Кроме того, порты часто имеют встроенные механизмы защиты от короткого замыкания, статического электричества и т. д.
Применения порта вывода многообразны. Например, к нему можно присоединить светодиод и получить лампочку, миганием которой можно программно управлять (такие диоды часто используются при отладке программ для микроконтроллеров — вместо диагностической печати).

Присоединив к выводу порта динамик, можно издавать различные звуки — впрочем, чтобы получился именно звук, а не одиночный щелчок, центральный процессор должен периодически записывать в соответствующий бит порта то ноль, то единицу. Применяя широтно-импульсную модуляцию (т. е. манипулируя относительными продолжительностями периодов высокого и низкого напряжений) таким способом можно генерировать не только прямоугольный меандр, но и сигналы более сложной формы и, соответственно, звуки различного тембра. Используя переменный период, можно генерировать сигналы с частотой, не кратной тактовой частоте центрального процессора или таймера, применяемого для синхронизации (пример 6.1). Изменяя период сигнала с помощью достаточно сложных алгоритмов, можно даже получать отношение тактовой частоты и частоты сигнала, равное иррациональному числу.

Впрочем, сигналы, порожденные с помощью вышеперечисленных приемов, будут состоять не только из сигнала заданного тембра и частоты, по и из гармоник тактовой частоты. Если последняя частота достаточно высока, с этим можно смириться в надежде на то, что динамик не сможет се воспроизвести, а слушатель — уловить.
Кроме того, к выводу порта можно присоединить внешнюю цифровую, аналоговую или электромеханическую схему (например, шаговый электродвигатель), которая будет выполнять какую-то полезную работу. Таким образом, порт вывода, как правило, не является внешним устройством сам по себе, а служит интерфейсом между микропроцессором и собственно внешним устройством.
Другое столь же простое устройство — это порт ввода. Порт ввода также состоит из регистра и нескольких входных линий, соответствующих битам реги~ стра (рис. 9.4). Бит регистра имеет значение 0, если на вход подано низко6 напряжение (точнее говоря, если во время последнего цикла тактового генератора порта на вход было подано низкое напряжение) и, наоборот, единицу — если высокое. Понятно, что напряжение практически никогда не соответствует в точности 0 или 5 В, поэтому в спецификациях портов ввода всегда указывают диапазон напряжений, которые считаются нулем (например, от 0 до 0.2 В) и единицей (например, от 4.5 до 5 В), для промежуточных же напряжений значение соответствующего бита не определено (а на практике определяется случайными факторами). Регистр порта ввода часто называют регистром-защелкой (latch register), потому что основная его функция — зафиксировать напряжения на входах в определенный момент времени и передать их центральному процессору в виде однозначно (пусть и негарантированно правильно) определенных значений.

Рис. 9.4. Порт ввода

Разработчики микросхем часто совмещают входы портов ввода и выходы портов вывода, создавая таким образом комбинированное устройство — порт ввода-вывода. Такое устройство должно быть существенно сложнее, чем простая комбинация порта ввода и порта вывода. Если порт вывода пытается установить на определенном выходе высокое напряжение, а другое Устройство пытается установить низкое, в соответствии с законом Ома это приведет к возникновению электрического тока. Внутреннее сопротивление типичного мпкроконтроллерного порта составляет около 200 Ом. При разности напряжений в 5 В это соответствует упоминавшемуся выше предельно Допустимому току в 25 мА: таким образом, устройство с нулевым внутренним сопротивлением все-таки может выставить ноль, но попытка сделать это на нескольких линиях одновременно приведет к перегрузке схем питания контроллера. В любом случае, большие токи приводят к потерям энергии и разогреву схемы, поэтому без крайней необходимости их лучше избегать. Если мы хотим использовать одни и те же "ноги" микросхемы как для ввода, так и для вывода, мы должны иметь возможность контролируемого включения выходных каскадов порта вывода.
Отключаемые выходные каскады называются тристабильными, а третье, отключенное, состояние выхода — высокоимпедансным. Тристабильные выходы используются не только для реализации двунаправленных контактов микросхем, но и для подключения устройств к шине: устройство, перешел шее в третье состояние, освобождает шину и позволяет какому-то другому задатчику выставлять на ней свои данные. Для управления переводом выходов в высокоимпедансное состояние, порт ввода-вывода должен иметь еще один регистр, называемый регистром или маской направления данных (data direction register) (рис. 9.5).

Рис. 9.5. Принципиальная схема порта ввода-вывода

Единица в разряде этого регистра обычно соответствует переводу соответствующего вывода в третье состояние, дающее возможность использовать этот контакт для ввода. Таким образом, даже такое простое устройство, как порт ввода-вывода, имеет целых три регистра: два регистра данных (многие реализации портов размещают эти два регистра по одному адресу: при чтении обращение происходит к защелке порта ввода, а при записи -- к регистру порта вывода) и один управляющий. Более сложные устройства обычно также имеют один или несколько регистров данных и один или несколько управляющих регистров. Устройства, передающие и принимающие большие объемы данных (контроллеры жестких дисков, сетевые интерфейсы, видеоадаптеры) часто вместо одного регистра данных снабжаются буфером памяти, отображенным на адреса памяти процессора.
Вместо управляющих регистров у некоторых сложных устройств есть командный регистр. Центральный процессор передает через этот регистр последовательность команд, а устройство их исполняет и, возможно, передает последовательность ответов.

Содержание раздела