Выбрать главу

3. ПУ помещает данные на шину канала и устанавливает признак цикла данных (высокий уровень) или команды (низкий уровень) на линии PeriphAck.

4. ПУ устанавливает низкий уровень на линии PeriphClk, указывая на действительность данных.

5. Хост отвечает установкой высокого уровня на линии HostAck.

6. ПУ устанавливает высокий уровень линии PeriphClk; этот перепад может использоваться для фиксации данных хостом.

7. Хост устанавливает низкий уровень на линии HostAck для указания на готовность к приему следующего байта.

1.3.5. Режимы и регистры ЕСР-порта

Программный интерфейс и регистры ЕСР для адаптеров IEEE 1284 определяет спецификация Microsoft. Порт ЕСР может работать в различных режимах, приведенных в табл. 1.7, где код соответствует полю Mode регистра ECR (биты [7:5]).

Таблица 1.7. Режимы ЕСР-порта

Код Режим
000 SPP mode, стандартный (традиционный) режим
001 Bi-directional mode, двунаправленный порт (тип 1 для PS/2)
010 Fast Centronics, однонаправленный с использованием FIFO и DMA
011 ЕСР Parallel Port mode, собственно режим ЕСР
100 ЕРР Parallel Port mode, режим ЕРР¹
101 Зарезервировано
110 Test mode, тестирование работы FIFO и прерываний
111 Configuration mode, доступ к конфигурационным регистрам

¹ Этот режим не входит в спецификацию Microsoft, но трактуется как ЕРР многими адаптерами портов, если в CMOS Setup установлен режим ЕСР+ЕРР.

Регистровая модель адаптера ЕСР (табл. 1.8) использует свойства архитектуры стандартной шины и адаптеров ISA, где для дешифрации адресов портов ввода-вывода задействуются только 10 младших линий шины адреса. Поэтому, например, обращения по адресам Port, Port+400h, Port+800h… будут восприниматься как обращения к адресу Port, лежащему в диапазоне 0-3FFh. Современные PC и адаптеры декодируют большее количество адресных бит, поэтому обращения по адресам 0378h и 0778Н будут адресованы двум различным регистрам. Помещение дополнительных регистров ЕСР «за спину» регистров стандартного порта (смещение 400-402Н) преследует две цели. Во-первых, эти адреса никогда не использовались традиционными адаптерами и их драйверами, и их применение в ЕСР не приведет к сужению доступного адресного пространства ввода-вывода. Во-вторых, этим обеспечивается совместимость со старыми адаптерами на уровне режимов 000–001 и возможность определения факта присутствия ЕСР-адаптера посредством обращения к его расширенным регистрам.

Таблица 1.8. Регистры ЕСР

Смещение Имя R/W Режимы ECP¹ Название
000 DR R/W 000-001 Data Register
000 ECPAFIFO R/W 011 ЕСР Address FIFO
001 SR R/W Все Status Register
002 CR R/W Все Control Register
400 SDFIFO R/W 010 Parallel Port Data FIFO
400 ECPDFIFO R/W 011 ECP Data FIFO
400 TFIFO R/W 110 Test FIFO
400 ECPCFGA R 111 Configuration Register A
401 ECPCFGB R/W 111 Configuration Register В
402 ECR R/W Все Extended Control Register

¹ Регистры доступны только в данных режимах (указаны значения бит 7–5 регистра ECR)

Каждому режиму ЕСР соответствуют (и доступны) свои функциональные регистры. Переключение режимов осуществляется записью в регистр ECR. «Дежурными» режимами, включаемыми по умолчанию, являются 000 или 001. В любом из них работает полубайтный режим ввода. Из этих режимов всегда можно переключиться в любой другой, но из старших режимов (010–111) переключение возможно только в 000 или 001. Для корректной работы интерфейса перед выходом из старших режимов необходимо дождаться завершения обмена по прямому доступу и очистки FIFO-буфера.

В режиме 000 (SPP) порт работает как однонаправленный программно-управляемый SPP-порт.

В режиме 001 (Bi-Di PS/2) порт работает как двунаправленный порт PS/2 типа 1. От режима 000 отличается возможностью реверса канала данных по биту CR.5.

Режим 010 (Fast Centronics) предназначен только для высокопроизводительного вывода через FIFO-буфер с использованием DMA. Сигналы квитирования по протоколу Centronics вырабатываются аппаратно. Сигнал запроса прерывания вырабатывается по состоянию FIFO-буфера, но не по сигналу Ack# (запрос одиночного байта «не интересует» драйвер быстрого блочного вывода).