Ввод-вывод с отображением на память

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 (Rec­ommended 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 можно изменять вручную с помощью соот­ветствующих переключателей на панели управления принтера. Сигнал Se­lect 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 регистрам, которые программируются соответствующим образом.

Наши рекомендации