Интерфейс Centronics и LPT-порт
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Введение

 

Параллельные интерфейсы характеризуются тем, что в них для передачи бит в слове используются отдельные сигнальные линии, и биты передаются одновременно. Параллельные интерфейсы используют логические уровни ТТЛ (транзисторно-транзисторной логики), что ограничивает длину кабеля из-за невысокой помехозащищенности ТТЛ-интерфейса. Гальваническая развязка отсутствует. Параллельные интерфейсы используют для подключения принтеров. Передача данных может быть как однонаправленной (Centronics), так и двунаправленной (Bitronics). Иногда параллельный интерфейс используют для связи между двумя компьютерами - получается сеть, "сделанная на коленке" (LapLink). Ниже будут рассмотрены протоколы интерфейсов Centronics, стандарт IEEE 1284, а также реализующие их порты PC.



Интерфейс Centronics и LPT-порт

 

Для подключения принтера по интерфейсу Centronics в PC был введен порт параллельного интерфейса - так возникло название LPT-порт (Line PrinTer - построчный принтер). Хотя сейчас через этот порт подключаются не только построчные принтеры, название "LPT" осталось.

Интерфейс Centronics

 

Понятие Centronics относится как к набору сигналов и протоколу взаимодействия, так и к 36-контактному разъему на принтерах. Назначение сигналов приведено в табл. 1. Интерфейс Centronics поддерживается принтерами с параллельным интерфейсом. Его отечественным аналогом является интерфейс ИРПР-М. Традиционный порт SPP (Standard Parallel Port) является однонаправленным портом, через который программно реализуется протокол обмена Centronics. Порт вырабатывает аппаратное прерывание по импульсу на входе Ack#. Сигналы порта выводятся на разъем DB-25S (розетка), установленный непосредственно на плате адаптера (или системной плате) или соединяемый с ней плоским шлейфом. Название и назначение сигналов разъема порта (табл. 2) соответствуют интерфейсу Centronics.

Таб. 1. Назначение сигналов Centronics.

Сигнал I/O* Контакт Назначение
Strobe I 1 Строб данных. Данные фиксируются по низкому уровню сигнала
Data [0:7] I 2-9 Линии данных. Data 0 (контакт 2) - младший бит
Ack# 0 10 Acknowledge - импульс подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования запроса прерывания
Busy 0 11 Занято. Прием данных возможен только при низком уровне сигнала
PaperEnd 0 12 Высокий уровень сигнализирует о конце бумаги
Select 0 13 Сигнализирует о включении принтера (обычноно в принтере соединяется резистором с цепью +5 В)
AutoLF# I 14 Автоматический перевод строки. При низком уровне принтер, получив символ CR (Carriage Re turn - возврат каретки), автоматически выполняет и функцию LF (Line Feed - перевод строки)
Error 0 32 Ошибка: конец бумаги, состояние OFF-Line или внутренняя ошибка принтера
lnit# I 31 Инициализация (сброс в режим параметров умолчания, возврат к началу строки)
Select ln#   36 Выбор принтера (низким уровнем). При высоком уровне принтер не воспринимает остальные сигналы интерфейса
GND - 19-30, 33 Общий провод интерфейса

 

Рис. 1. Передача данных по протоколу Centronics

Таб. 2. Название и назначение сигналов разъема порта

Контакт DB-25S

Номер провода в кабеле

Назначение

I/O* Reg. Bit** Сигнал 1 1 0/1 CR.O Strobe 2 3 0(1) DR.0 Data 0 3 5 0(1) DR.1 Data 1 4 7 0(1) DR.2 Data 2 5 9 0(1) DR.3 Data3 6 11 0(1) DR.4 Data 4 7 13 0(1) DR.5 Data 5 8 15 0(1) DR.6 Data 6 9 17 0(1) DR.7 Data 7 10 19 1*** SR.6 Ack# 11 21 1 SR.A Busy 12 23 1 SR.5 PaperEnd 13 25 1 SR.4 Select 14 2 0/1 CR.1 Auto LF# 15 4 1 SR.3 Error* 16 6 0/1 CR.2 lnit# 17 8 0/1 CR.3 Select ln# 18-25 10, 12,14, 16, 18.20, 22, 24, 26 -    

* I/O задает направление передачи (вход/выход) сигнала порта. 0/1 обозначает выходные линии, состояние которых считывается при чтении из портов вывода; (I) - выходные линии, состояние которых может быть считано только при особых условиях (см. ниже).

** Символом "\" отмечены инвертированные сигналы (1 в регистре соответствует низкому уровню линии).

*** Вход Ack# соединен резистором (10 кОм) с питанием +5 В.

Традиционный LPT-порт

 

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в пространстве ввода/вывода. Регистры порта адресуются относительно базового адреса порта, стандартными значениями которого являются 3BCh, 378h и 278h. Порт может использовать линию запроса аппаратного прерывания, обычно IRQ7 или IRQ5. Порт имеет внешнюю 8-битную шину данных, 5-битную шину сигналов состояния и 4-битную шину управляющих сигналов, BIOS поддерживает до четырех (иногда до трех) LPT-портов (LPT1-LPT4) своим сервисом - прерыванием INT 17h, обеспечивающим через них связь с принтером по интерфейсу Centronics. Этим сервисом BIOS осуществляет вывод символа (по опросу готовности, не используя аппаратных прерываний), инициализацию интерфейса и принтера, а также опрос состояния принтера.

Стандартный порт имеет три 8-битных регистра, расположенных по соседним адресам в пространстве ввода/вывода, начиная с базового адреса порта (BASE). Data Register (DR) - регистр данных, адрес=ВЛ5Е. Данные, записанные в этот порт, выводятся на выходные линии интерфейса. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях, что не всегда одно и то же. Если в порт записать байт с единицами во всех разрядах, а на выходные линии интерфейса через микросхемы с выходом типа "открытый коллектор" подать какой-либо код (или соединить ключами какие-то линии со схемной землей), то этот код может быть считан из того же регистра данных. Таким образом, на многих старых моделях адаптеров можно реализовать порт ввода дискретных сигналов, однако выходным цепям передатчика информации придется "бороться" с выходным током логической единицы выходных буферов адаптера. Схемотехника ТТЛ такие решения не запрещает, но если внешнее устройство выполнено на микросхемах КМОП, их мощности может не хватить для "победы" в этом шинном конфликте. Однако современные адаптеры часто имеют в выходной цепи согласующий резистор с сопротивлением до 50 Ом. Выходной ток короткого замыкания выхода на землю обычно не превышает 30 мА. Простой расчет показывает, что в случае короткого замыкания контакта разъема на землю при выводе "единицы" на этом резисторе падает напряжение 1,5 В, что входной схемой приемника будет воспринято как "единица". Так что такой способ ввода не будет работать на всех компьютерах. На некоторых адаптерах портов выходной буфер отключается перемычкой на плате. Тогда порт превращается в обыкновенный порт ввода.

Status Register (SR) - регистр состояния; представляет собой 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7), адрес==8ЛЗЕ+7. Бит SR. 7 инвертируется - низкому уровню сигнала соответствует единичное значение бита в регистре, и наоборот.

Назначение бит регистра состояния (в скобках даны номера контактов разъема):

SR. 7 - Busy - инверсные отображения состояния линии Busy (11): при низком уровне на линии устанавливается единичное значения бита - разрешение на вывод очередного байта.

SR.6 - Ack (Acknowledge) - отображения состояния линии Ack# (10).

SR.5 - РЕ (Paper End) - отображения состояния линии Paper End (12). Единичное значение соответствует высокому уровню линии - сигналу о конце бумаги в принтере.

SR.4 - Select - отображения состояния линии Select (13). Единичное значение соответствует высокому уровню линии - сигналу о включении принтера.

SR.3 - Error - отображения состояния линии Error (15). Нулевое значение соответствует низкому уровню линии - сигналу о любой ошибке принтера.

SR.2 - PIRQ - флаг прерывания по сигналу Ackft (только для порта PS/2). Бит обнуляется, если сигнал Ack# вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.

SR[1:O] - зарезервированы.

Control Register (CR) - регистр управления, wpec^BASE+2. Как и регистр данных, этот 4-битный порт вывода допускает запись и чтение (биты 0-3), но его выходной буфер обычно имеет тип "открытый коллектор". Это позволяет корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты О, 1, 3 инвертируются.

Назначение бит регистра управления:

CR[7:6] - зарезервированы.

CR.5 - Direction - бит управления направлением передачи (только для портов PS/2). Запись единицы переводит порт данных в режим ввода. При чтении состояние бита не определено.

CR.4 - AcklntEn (Ack Interrupt Enable) - единичное значение разрешает прерывание по спаду сигнала на линии Ack# - сигнал запроса следующего байта.

CR.3 - Select In - единичное значение бита соответствует низкому уровню на выходе Select ln# (17) - сигналу, разрешающему работу принтера по интерфейсу Centronics.

CR.2 - Init - нулевое значение бита соответствует низкому уровню на выходе - сигналу аппаратного сброса принтера.

CR. 1 - Auto LF - единичное значение бита соответствует низкому уровню на выходе Auto LF# (14) - сигналу на автоматический перевод строки (LF - Line Feed) по при ему байта возврата каретки (CR). Иногда сигнал и бит называют AutoFD или AutoFDXT.

CR.O - Strobe - единичное значение бита соответствует низкому уровню на выходе Strobeft (1) - сигналу стробирования выходных данных.

Запрос аппаратного прерывания (обьлно IRQ7 или IRQ5) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Ack#) при установке CR.4=i. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.

Процедура вывода байта по интерфейсу Centronics включает следующие шаги (в скобках приведено требуемое количество шинных операций процессора):

- Вывод байта в регистр данных (1 цикл IOWR#).

- Ввод из регистра состояния и проверка готовности устройства (бит SR. 7 - сигнал Busy). Этот шаг зацикливается до получения готовности или до срабатывания программного тайм-аута (минимум 1 цикл IORD#).

По получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается (2 цикла IOWR#). Обычно, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что добавляет еще один цикл IORD#. Видно, что для вывода одного байта требуется 4-5 операций ввода/вывода с регистрами порта (в лучшем случае, когда готовность обнаружена по первому чтению регистра состояния). Отсюда вытекает главный недостаток вывода через стандартный порт - невысокая скорость обмена при значительной загрузке процессора. Порт удается разогнать до скоростей 100-150 Кбайт/с при полной загрузке процессора, что недостаточно для печати на лазерном принтере. Другой недостаток - функциональный - сложность использования в качестве порта ввода.

Стандартный порт асимметричен - при наличии 12 линий (и бит), нормально работающих на вывод, на ввод работают только 5 линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособен режим полубайтного обмена - Nibble Mode. В этом режиме, называемом также Hewlett Packard Bitronics, одновременно передаются 4 бита данных, пятая линия используется для квитирования. Таким образом, каждый байт передается за два цикла, а каждый цикл требует по крайней мере 5 операций ввода/вывода.

Стандарт IEEE 1284

 

Стандарт на параллельный интерфейс IEEE 1284, принятый в 1994 году, определяет порты SPP, ЕРР и ЕСР. Стандарт определяет 5 режимов обмена данными, метод согласования режима, физический и электрический интерфейсы. Согласно IEEE 1284, возможны следующие режимы обмена данными через параллельный порт:

- режим совместимости (Compatibility Mode) - однонаправленный (вывод) по протоколу Centronics. Этот режим соответствует стандартному порту SPP.

- Полубайтный режим (Nibble Mode) - ввод байта в два цикла (по 4 бита), используя для приема линии состояния. Этот режим обмена может использоваться на любых адаптерах.

- Байтный режим (Byte Mode) - ввод байта целиком, используя для приема линии данных. Этот режим работает только на портах, допускающих чтение выходных данных (Bi-Directional или PS/2 Type 1).

- Режим ЕРР (Enhanced Parallel Port) (EPP Mode) - двунаправленный обмен данными. Управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту. Эффективен при работе с устройствами внешней памяти и адаптерами локальных сетей.

- Режим ЕСР (Extended Capability Port) (ECP Mode) - двунаправленный обмен данными с возможностью аппаратного сжатия данных по методу RLE (Run Length Encoding) и использования FIFO-буферов и DMA. Управляющие сигналы интерфейса генерируются аппаратно. Эффективен для принтеров и сканеров.

В компьютерах с LPT-портом на системной плате режим - SPP, ЕРР, ЕСР или их комбинация - задается в BIOS Setup.

Режим совместимости полностью соответствует стандартному порту SPP. Остальные режимы подробно рассмотрены ниже.

Внутренности LPT порта

 

Если говорить на бытовом уровне, то можно сказать, что LPT порт это набор контактов, на которых мы можем установить напряжение 0 или +5 В (логическая 0 и 1) из программы или это может сделать внешнее устройство снаружи. Давайте разберемся, какими контактами мы можем оперировать, а какими нет. В этом нам поможет рис. ниже (его рисовал не я, автор мне неизвестен. Но он уж больно хорош, я и сам им постоянно пользуюсь)

 

 

Из рис. видно, что выводы порта можно разделить на четыре группы: это 'земляные' выводы (не понятно чем руководствовались разработчики интерфейса LPT, сделав этих выводов аж 8 штук). Они обозначены черным цветом (контакты 18-25). Все они соединены между собой, поэтому для своих разработок в качестве земли можно использовать любой из них.

Красным цветом обозначены выводы так называемого регистра Data (контакты 2-9). Под регистром будем понимать (на бытовом уровне) объединение группы контактов LPT порта. В регистре Data их 8 штук. Это самый толковый регистр - он позволяет нам как из программы, так и из внешнего устройства установить на его контактах логическую 0 или 1, т.е. он двунаправленный. Именно его мы и использовали в нашей первой программе Port.exe - подключали светодиод ко 2-му выводу порта (как теперь понятно, этот вывод принадлежит регистру Data, является его нулевым битом) и 25 выводу (земля), и с помощью программы управляли подачей напряжения на вывод 2 относительно земли. Чтобы обращаться к этому регистру, надо знать его адрес: 0x378 - в 16-ричной системе или 888 в десятичной (на рис. написано &H378 - это тоже самое что и 0x378, просто первое обозначение присуще языку Pasсal и ему подобным, мы же пишем на Си).

Опять вспоминая программу Port.exe, заметим, что обращались мы к регистру с помощью следующей функции _outp(Address, 0); где переменная Address была предварительно определена как 888. Теперь понятно, что этим мы указывали функции _outp, что мы хотим работать именно с регистром Data.

Продолжим рассмотрение порта. Осталось еще два регистра. Следующим будет регистр Status (контакты 10-13, 15). Это однонаправленный регистр. Управлять им можно только из снаружи, через внешнее устройство (имеется в виду изменять данные на нем, читать можно из любого регистра в любую строну). Он имеет адрес 0x379 - в 16-ричной системе или 889 в десятичной. И регистр Control (контакты 1, 14, 16-17). Он имеет всего 4 контакта и может управляться только программой. Его адрес: 890 в десятичной системе.

В итоге мы получили:

8 двунаправленых контактов (регистр Data) - данные туда может записать и программа и внешнее устройство

5 однонаправленных контактов (регистр Status) - данные туда может записать только внешнее устройство

4 однонаправленных контакта (регистр Control) - данные туда может записать только программа

Чтение данных

 

Теперь давайте получим данные из порта, а именно из его регистра Data, к нам в программу. Мы хоти узнать, на каких выводах регистра Data сейчас высокий уровень напряжения, а на каких низкий. Помните, выше мы записали в порт число 245? Давайте его сейчас получим из порта. Пишем код:

int Address=888;

int data;

data = Inp32(Address);

Inp32 это функция для чтения данных из порта библиотеки inpout32.dll. Единственным параметром для нее является адрес того регистра, откуда мы хотим прочесть данные. На выходе она возвращает десятичное число, соответствующее текущему содержимому регистра. Выполнив этот код, переменная data будет содержать число 245. Что это значит? Чтобы разобраться, переводим число 245 из десятичной в двоичную и смело можем сказать что на выводах порта 2,4,6-9 сейчас +5 В а на выводах 3,5 0 В. (см. рис. выше)

Как я уже упомянул выше, в регистр Data данные записать может и внешнее устройство. Однако рассмотрение этого вопроса пока оставим, т.к. это потребует внешних источников питания. Сначала, давайте полностью разберемся с базовыми операциями.

 



Введение

 

Параллельные интерфейсы характеризуются тем, что в них для передачи бит в слове используются отдельные сигнальные линии, и биты передаются одновременно. Параллельные интерфейсы используют логические уровни ТТЛ (транзисторно-транзисторной логики), что ограничивает длину кабеля из-за невысокой помехозащищенности ТТЛ-интерфейса. Гальваническая развязка отсутствует. Параллельные интерфейсы используют для подключения принтеров. Передача данных может быть как однонаправленной (Centronics), так и двунаправленной (Bitronics). Иногда параллельный интерфейс используют для связи между двумя компьютерами - получается сеть, "сделанная на коленке" (LapLink). Ниже будут рассмотрены протоколы интерфейсов Centronics, стандарт IEEE 1284, а также реализующие их порты PC.



Интерфейс Centronics и LPT-порт

 

Для подключения принтера по интерфейсу Centronics в PC был введен порт параллельного интерфейса - так возникло название LPT-порт (Line PrinTer - построчный принтер). Хотя сейчас через этот порт подключаются не только построчные принтеры, название "LPT" осталось.

Интерфейс Centronics

 

Понятие Centronics относится как к набору сигналов и протоколу взаимодействия, так и к 36-контактному разъему на принтерах. Назначение сигналов приведено в табл. 1. Интерфейс Centronics поддерживается принтерами с параллельным интерфейсом. Его отечественным аналогом является интерфейс ИРПР-М. Традиционный порт SPP (Standard Parallel Port) является однонаправленным портом, через который программно реализуется протокол обмена Centronics. Порт вырабатывает аппаратное прерывание по импульсу на входе Ack#. Сигналы порта выводятся на разъем DB-25S (розетка), установленный непосредственно на плате адаптера (или системной плате) или соединяемый с ней плоским шлейфом. Название и назначение сигналов разъема порта (табл. 2) соответствуют интерфейсу Centronics.

Таб. 1. Назначение сигналов Centronics.

Сигнал I/O* Контакт Назначение
Strobe I 1 Строб данных. Данные фиксируются по низкому уровню сигнала
Data [0:7] I 2-9 Линии данных. Data 0 (контакт 2) - младший бит
Ack# 0 10 Acknowledge - импульс подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования запроса прерывания
Busy 0 11 Занято. Прием данных возможен только при низком уровне сигнала
PaperEnd 0 12 Высокий уровень сигнализирует о конце бумаги
Select 0 13 Сигнализирует о включении принтера (обычноно в принтере соединяется резистором с цепью +5 В)
AutoLF# I 14 Автоматический перевод строки. При низком уровне принтер, получив символ CR (Carriage Re turn - возврат каретки), автоматически выполняет и функцию LF (Line Feed - перевод строки)
Error 0 32 Ошибка: конец бумаги, состояние OFF-Line или внутренняя ошибка принтера
lnit# I 31 Инициализация (сброс в режим параметров умолчания, возврат к началу строки)
Select ln#   36 Выбор принтера (низким уровнем). При высоком уровне принтер не воспринимает остальные сигналы интерфейса
GND - 19-30, 33 Общий провод интерфейса

 

Рис. 1. Передача данных по протоколу Centronics

Таб. 2. Название и назначение сигналов разъема порта

Контакт DB-25S

Номер провода в кабеле

Назначение

I/O* Reg. Bit** Сигнал 1 1 0/1 CR.O Strobe 2 3 0(1) DR.0 Data 0 3 5 0(1) DR.1 Data 1 4 7 0(1) DR.2 Data 2 5 9 0(1) DR.3 Data3 6 11 0(1) DR.4 Data 4 7 13 0(1) DR.5 Data 5 8 15 0(1) DR.6 Data 6 9 17 0(1) DR.7 Data 7 10 19 1*** SR.6 Ack# 11 21 1 SR.A Busy 12 23 1 SR.5 PaperEnd 13 25 1 SR.4 Select 14 2 0/1 CR.1 Auto LF# 15 4 1 SR.3 Error* 16 6 0/1 CR.2 lnit# 17 8 0/1 CR.3 Select ln# 18-25 10, 12,14, 16, 18.20, 22, 24, 26 -    

* I/O задает направление передачи (вход/выход) сигнала порта. 0/1 обозначает выходные линии, состояние которых считывается при чтении из портов вывода; (I) - выходные линии, состояние которых может быть считано только при особых условиях (см. ниже).

** Символом "\" отмечены инвертированные сигналы (1 в регистре соответствует низкому уровню линии).

*** Вход Ack# соединен резистором (10 кОм) с питанием +5 В.

Традиционный LPT-порт

 

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в пространстве ввода/вывода. Регистры порта адресуются относительно базового адреса порта, стандартными значениями которого являются 3BCh, 378h и 278h. Порт может использовать линию запроса аппаратного прерывания, обычно IRQ7 или IRQ5. Порт имеет внешнюю 8-битную шину данных, 5-битную шину сигналов состояния и 4-битную шину управляющих сигналов, BIOS поддерживает до четырех (иногда до трех) LPT-портов (LPT1-LPT4) своим сервисом - прерыванием INT 17h, обеспечивающим через них связь с принтером по интерфейсу Centronics. Этим сервисом BIOS осуществляет вывод символа (по опросу готовности, не используя аппаратных прерываний), инициализацию интерфейса и принтера, а также опрос состояния принтера.

Стандартный порт имеет три 8-битных регистра, расположенных по соседним адресам в пространстве ввода/вывода, начиная с базового адреса порта (BASE). Data Register (DR) - регистр данных, адрес=ВЛ5Е. Данные, записанные в этот порт, выводятся на выходные линии интерфейса. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях, что не всегда одно и то же. Если в порт записать байт с единицами во всех разрядах, а на выходные линии интерфейса через микросхемы с выходом типа "открытый коллектор" подать какой-либо код (или соединить ключами какие-то линии со схемной землей), то этот код может быть считан из того же регистра данных. Таким образом, на многих старых моделях адаптеров можно реализовать порт ввода дискретных сигналов, однако выходным цепям передатчика информации придется "бороться" с выходным током логической единицы выходных буферов адаптера. Схемотехника ТТЛ такие решения не запрещает, но если внешнее устройство выполнено на микросхемах КМОП, их мощности может не хватить для "победы" в этом шинном конфликте. Однако современные адаптеры часто имеют в выходной цепи согласующий резистор с сопротивлением до 50 Ом. Выходной ток короткого замыкания выхода на землю обычно не превышает 30 мА. Простой расчет показывает, что в случае короткого замыкания контакта разъема на землю при выводе "единицы" на этом резисторе падает напряжение 1,5 В, что входной схемой приемника будет воспринято как "единица". Так что такой способ ввода не будет работать на всех компьютерах. На некоторых адаптерах портов выходной буфер отключается перемычкой на плате. Тогда порт превращается в обыкновенный порт ввода.

Status Register (SR) - регистр состояния; представляет собой 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7), адрес==8ЛЗЕ+7. Бит SR. 7 инвертируется - низкому уровню сигнала соответствует единичное значение бита в регистре, и наоборот.

Назначение бит регистра состояния (в скобках даны номера контактов разъема):

SR. 7 - Busy - инверсные отображения состояния линии Busy (11): при низком уровне на линии устанавливается единичное значения бита - разрешение на вывод очередного байта.

SR.6 - Ack (Acknowledge) - отображения состояния линии Ack# (10).

SR.5 - РЕ (Paper End) - отображения состояния линии Paper End (12). Единичное значение соответствует высокому уровню линии - сигналу о конце бумаги в принтере.

SR.4 - Select - отображения состояния линии Select (13). Единичное значение соответствует высокому уровню линии - сигналу о включении принтера.

SR.3 - Error - отображения состояния линии Error (15). Нулевое значение соответствует низкому уровню линии - сигналу о любой ошибке принтера.

SR.2 - PIRQ - флаг прерывания по сигналу Ackft (только для порта PS/2). Бит обнуляется, если сигнал Ack# вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.

SR[1:O] - зарезервированы.

Control Register (CR) - регистр управления, wpec^BASE+2. Как и регистр данных, этот 4-битный порт вывода допускает запись и чтение (биты 0-3), но его выходной буфер обычно имеет тип "открытый коллектор". Это позволяет корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты О, 1, 3 инвертируются.

Назначение бит регистра управления:

CR[7:6] - зарезервированы.

CR.5 - Direction - бит управления направлением передачи (только для портов PS/2). Запись единицы переводит порт данных в режим ввода. При чтении состояние бита не определено.

CR.4 - AcklntEn (Ack Interrupt Enable) - единичное значение разрешает прерывание по спаду сигнала на линии Ack# - сигнал запроса следующего байта.

CR.3 - Select In - единичное значение бита соответствует низкому уровню на выходе Select ln# (17) - сигналу, разрешающему работу принтера по интерфейсу Centronics.

CR.2 - Init - нулевое значение бита соответствует низкому уровню на выходе - сигналу аппаратного сброса принтера.

CR. 1 - Auto LF - единичное значение бита соответствует низкому уровню на выходе Auto LF# (14) - сигналу на автоматический перевод строки (LF - Line Feed) по при ему байта возврата каретки (CR). Иногда сигнал и бит называют AutoFD или AutoFDXT.

CR.O - Strobe - единичное значение бита соответствует низкому уровню на выходе Strobeft (1) - сигналу стробирования выходных данных.

Запрос аппаратного прерывания (обьлно IRQ7 или IRQ5) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Ack#) при установке CR.4=i. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.

Процедура вывода байта по интерфейсу Centronics включает следующие шаги (в скобках приведено требуемое количество шинных операций процессора):

- Вывод байта в регистр данных (1 цикл IOWR#).

- Ввод из регистра состояния и проверка готовности устройства (бит SR. 7 - сигнал Busy). Этот шаг зацикливается до получения готовности или до срабатывания программного тайм-аута (минимум 1 цикл IORD#).

По получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается (2 цикла IOWR#). Обычно, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что добавляет еще один цикл IORD#. Видно, что для вывода одного байта требуется 4-5 операций ввода/вывода с регистрами порта (в лучшем случае, когда готовность обнаружена по первому чтению регистра состояния). Отсюда вытекает главный недостаток вывода через стандартный порт - невысокая скорость обмена при значительной загрузке процессора. Порт удается разогнать до скоростей 100-150 Кбайт/с при полной загрузке процессора, что недостаточно для печати на лазерном принтере. Другой недостаток - функциональный - сложность использования в качестве порта ввода.

Стандартный порт асимметричен - при наличии 12 линий (и бит), нормально работающих на вывод, на ввод работают только 5 линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособен режим полубайтного обмена - Nibble Mode. В этом режиме, называемом также Hewlett Packard Bitronics, одновременно передаются 4 бита данных, пятая линия используется для квитирования. Таким образом, каждый байт передается за два цикла, а каждый цикл требует по крайней мере 5 операций ввода/вывода.

Дата: 2019-07-30, просмотров: 247.