32-разрядные процессоры позволяют адресовать до 64 Кбайт однобайтных регистров (портов ввода/вывода) в отдельном от памяти пространстве. Процессоры могут обращаться к портам разрядностью в байт или слово, причем разрядность слова (16 или 32 байт) определяется текущим режимом адресации и может изменяться с помощью префикса инструкций. При операциях ввода/вывода линии А[16:31] не используются. Адрес устройства задается либо в команде (только младший байт, старший – нулевой), либо берется из регистра DX (полный 16-битный адрес).
В защищенном режиме инструкции ввода/вывода являются привилегированными. Это означает, что они могут исполняться задачами только с определенным уровнем привилегий. Несанкционированная попытка выполнения этих инструкций вызовет исключение 13 (#GP) – нарушение защиты (сообщение General Protection Error).
Все операции с портами ввода/вывода выполняются без какого-либо кэширования и строго в порядке, предписанном программным кодом. Это естественно, поскольку порты ввода/вывода используются для управления различными аппаратными средствами, и последовательность управляющих воздействий и считываний состояния не должна нарушаться. Для этих целей можно использовать и область пространства памяти – так называемое отображение ввода/ вывода на память. Тогда для этой области памяти должно быть запрещено кэширование и установлен строгий порядок записей. Процессоры Р6 позволяют этого добиться с помощью формирования атрибутов страниц памяти. Процессоры 4-5 поколения позволяют аппаратно запрещать кэширование. Порядок операций у этих процессоров всегда строгий. Процессоры младших поколений кэширование не поддерживают, так что отображение ввода/вывода на память у них проблем не вызывает.
Порты ввода-вывода
Подсоединение периферийных устройств, таких как манипулятор типа мышь, внешний модем или принтер, к персональному компьютеру производится через так называемые устройства сопряжения, или адаптеры, на которых реализованы стандартные или специальные интерфейсы. До недавнего времени подобные адаптеры были выполнены в виде отдельных плат ввода-вывода – Input-Output (I/O) Card, вставляемых в разъемы расширения на системной плате. Современные системные платы, как правило, интегрируют все необходимые адаптеры.
Итак, взаимодействие периферийного устройства с адаптером происходит через один (возможно, один из двух) интерфейс, определяющий, в частности, тип и «род» (розетка или вилка, female или male) соединителя, уровни и длительность электрических сигналов, протоколы обмена.
На практике стандартные последовательный и параллельный интерфейсы часто называют портами ввода-вывода.
Порт – электронная схема, использующаяся для передачи сигналов на другие устройства.
Собственно, до последнего времени в качестве последовательного стандартного интерфейса используется разновидность RS-232C (Recommended Standard), а в качестве параллельного – Centronics.
Порт называют последовательным, когда информационные биты передаются последовательно один за другим и параллельным, когда несколько бит данных передаются одновременно. Если несколько адаптеров (последовательного и параллельного портов, приводов флоппи- и жестких дисков) конструктивно выполнены на отдельной плате, она называется, как правило, многофункциональной платой ввода-вывода (Multi I/O Card).
Через порт процессор получает данные с устройств ввода и посылает данные на устройства вывода. В большинстве случаев к параллельному интерфейсу подключается принтер. Однако имеются еще и другие периферийные устройства, управление которыми осуществляется через этот интерфейс, в ряде случаев это плоттер или сканер. Иногда это внешние дисководы, но чаще внешние стриммеры. При этом возможна передача данных с максимальной скоростью 1 Мбайт/с. Также параллельные интерфейсы используются для обмена информацией между двумя PC.
Параллельный порт
Поскольку параллельный порт в IBM PC-совместимом компьютере чаще всего используется для подключения принтера, то его называют также принтер-портом. В MS-DOS компьютер работает максимум с тремя параллельными портами, которые имеют логические имена LPT1, LPT2 и LPT3. В адресном пространстве компьютера резервируются базовые адреса этих портов: 3ВСh, 378h и 278h. Первый адрес обычно используется, если принтер-порт находится, например, на плате графического адаптера Hercules или EGA. На плате Multi I/O Card адрес LPT1 – 378h, а LPT2 – 278h. Для принтерного порта LPT1 предусмотрено аппаратное прерывание IRQ7, а для LPT2 – IRQ5, хотя на практике они обычно не применяются. Установка базовых адресов портов и возможность использования прерываний настраиваются перестановкой перемычек (jumpers) на плате, описание которых приводится в технической документации для конкретного адаптера или в программе начальной установки SETUP.
Сначала интерфейс Centronics был конструктивно реализован на нескольких ТТЛ-микросхемах. Именно на них в этом случае выполняются декодирование адреса, промежуточное хранение и инвертирование отдельных сигналов. Затем широкое распространение получили адаптеры, в которых практически все функции отдельных ТТЛ-микросхем объединены в одной БИС типа 82С11, выполненной по КМОП-технологии. Теперь все микросхемы портов и адаптеров «спрятаны» обычно в одной СБИС.
Начиная с базового адреса, каждый порт принтера имеет в адресном пространстве три адреса. При этом первый адрес соответствует регистру данных, посылаемых от компьютера к принтеру. Чтение установленных битов данных можно осуществить по тому же адресу. Физически чтение данных происходит через специальный буфер данных.
Следующий адрес (базовый плюс единица) позволяет читать регистр статуса адаптера (расположенный в принтере) через буферную микросхему. Регистр статуса позволяет определить состояние некоторых сигналов интерфейса Centronics.Чтение регистра статуса имеет смысл при передаче данных на принтер для определения состояния принтера и процесса передачи данных.
Адрес третьего порта (базовый адрес плюс 2) соответствует регистру управления интерфейса. Этот регистр (read only – только для чтения) позволяет определить следующие состояния принтера:
- бит 0 = 0: сигнал Strobe активен (описание см. ниже),
- бит 1 = 0: сигнал Auto feed включен (описание см. ниже),
- бит 2 = 0: инициализация принтера,
- бит 3 = 1: принтер выбран,
- бит 4 = 1: прерывание разрешено.
Распределение сигналов
При минимальной конфигурации для реализации параллельного интерфейса было бы достаточно 11 проводов: один провод массы (корпус), два так называемых провода подтверждения (Handshake) и восемь проводов для передачи данных. Поскольку параллельный интерфейс часто отождествляют с разъемом кабеля принтера, приведем назначение выводов соответствующего 36-контактного разъема Centronics.
Данные (линия 2-9 и 18-25)
Восемь линий данных передают восемь битов информации. Для каждой линии данных имеется отдельный проводник заземления (18-25)
Подтверждение (линия 1,10,11)
При передаче данных обе стороны должны сообщать друг другу информацию о своем состоянии. Это осуществляется путем передачи по определенной линии сигнала низкого или высокого уровня (напряжения 0 В или 5 В).
Сигнал Strobe сообщает принтеру о том, что PC установил байт данных на линии данных и принтер может печатать символ.
Сигнал Busy сообщает PC, что принтер занят обработкой данных, которые накопились в его буфере. После обработки байта данных принтер сообщает, что обработка прошла корректно и он готов к приему новой информации.
Контроль принтера (линии 12-17)
Оставшиеся проводники кабеля принтера предназначены для передачи контрольных сигналов о состоянии принтера и конфликтах в его работе, например об ошибках при передаче данных.
Paper End
По линии 12 передается сообщение PC о том, что в принтере нет бумаги. Интерфейс реагирует на это, как на срыв передачи данных, и сигнализирует об этом по другим линиям (Select и Error). В противном случае принтер печатал бы без бумаги прямо по валику, что могло бы привести к серьезному повреждению головки принтера.
Select и Select Input
По линии 13 интерфейсу сообщается о том, в каком из состояний находится принтер, в состоянии On-line (готов) или Off-line (выключен или не готов). Уровень сигнала на линии 13 можно изменять вручную с помощью соответствующих переключателей на панели управления принтера. Сигнал Select Input, передаваемый по линии 17 или 36, устанавливает принтер в режим готовности к работе (On-line), например, после устранения какой-либо ошибки в его работе.
Error
Все ошибки, возникающие во время передачи данных, сообщаются по линии 15 или 32. Состояние линии Error влияет на состояние других линий и может остановить процесс печати.
Часто проявляющаяся ошибка при работе принтера – это так называемая ошибка времени выполнения (Time Out). Если принтер долгое время занят «изнурительной» работой с данными и не может сообщить сигналом Busy о том, что он больше не в состоянии принимать данные, то спустя некоторое время фиксируется ошибка Time Out. Регистрация этой ошибки влияет на все линии. При отсутствии сигнала об ошибке Time Out происходила бы непрерывная передача данных на принтер до тех пор, пока бесконечный цикл не привел бы к зависанию всей системы.
При инициализации (линия Init – 16 или 31) принтер переходит в свое исходное состояние. Для матричного принтера это означает, что его печатающая головка возвращается в исходное состояние. Кроме того, очищается буфер принтера, т. е. данные, обрабатываемые принтером, выгружаются из его памяти.
По линии Auto Feed (автоматический перевод строки, линия 14) передается сигнал, указывающий принтеру, как обрабатывать новую строку при поступлении команды возврата каретки.
Последовательный порт
Последовательный порт используется для подключения большинства периферийных устройств, таких как плоттер, принтер, мышь, внешний модем, программатор ПЗУ и т.д. До настоящего времени для последовательной связи IBM PC-совместимых компьютеров используются адаптеры с интерфейсом RS-232С. Описание этого интерфейса было опубликовано Американской промышленной ассоциацией еще в 1969 году. Европейским аналогом RS-232 являются два стандарта, разработанных Международным союзом электросвязи (International Telecommunications Union, ITU): V.24 (механические характеристики) и V.28 (электрические характеристики). Хотя первоначально RS-232 был предназначен для связи центральной машины с терминалами, его простота и богатые возможности обеспечили ему более широкое применение. В современном IBM PC-совместимом компьютере, работающем под MS-DOS, может использоваться до четырех последовательных портов, имеющих логические имена соответственно СОМ1, COM2, COM3 и COM4.
Выбор устройств, подключаемых к последовательному порту, значительно шире, чем к параллельному, поэтому большинство PC одновременно оборудовано двумя интерфейсными разъемами для последовательной передачи данных. Обычно они различаются по внешнему виду. Разъемы последовательного интерфейса на PC имеют 9 и 25 контактов.
Главный элемент последовательного интерфейса – микросхема 8250 для старых и 16450 UART (Universal Asynchron Receiver Transmitter) для новых плат контроллеров. Контроллер на базе чипа 8250 обеспечивает максимальную скорость передачи данных 9600 бод, а чип 16450 – 115200 бод.
В адресном пространстве IBM PC-совместимых компьютеров последовательный адаптер занимает восемь последовательных адресов, включая базовый. Однако с помощью определенного «трюка» через эти восемь адресов происходит обращение к 11 регистрам, которые программируются соответствующим образом.