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#
(запрос одиночного байта «не интересует» драйвер быстрого блочного вывода).