Таблица 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#
(запрос одиночного байта «не интересует» драйвер быстрого блочного вывода).
Режим 011 является собственно режимом ЕСР, описанным выше, Поток данных и команд
, передаваемых в ПУ, помещается в FIFO-буфер через регистры ECPDFIFO
и ECPAFIFO соответственно. Из FIFO они выводятся с соответствующим признаком цикла (состояние линии HostAck
). Принимаемый поток данных от ПУ извлекается из FIFO-буфера через регистр ECPDFIFO
. Получение адреса в командном цикле от ПУ не предусматривается. Обмен с регистром ECPDFIFO
может производиться и по каналу DMA.
Компрессия по методу RLE при передаче выполняется программно. Для передачи подряд более двух одинаковых байт данных в регистр ЕСPAFIFO
записывается байт, у которого младшие 7 бит содержат счетчик RLC (значение RLC=127 соответствует 128 повторам), а старший бит нулевой. После этого в ECPDFIFO
записывается сам байт. Принимая эту пару байт (командный байт и байт данных), ПУ осуществляет декомпрессию. При приеме потока от ПУ адаптер ЕСР декомпрессию осуществляет аппаратно и в FIFO-буфер помещает уже декомпрессированные данные. Отсюда очевидно, что вывод данных с одновременным использованием компрессии и DMA невозможен.
Режим 100 (EPP) — один из способов включения режима EPP (если таковой поддерживается адаптером и разрешен в CMOS Setup).
Режим 110 (Test Mode) предназначен для тестирования взаимодействия FIFO и прерываний. Данные могут передаваться в регистр TFIFO и из него с помощью DMA или программным способом. На внешний интерфейс обмен не воздействует. Адаптер отрабатывает операции вхолостую на максимальной скорости интерфейса (как будто сигналы квитирования приходят без задержек). Адаптер следит за состоянием буфера и по мере необходимости вырабатывает сигналы запроса прерывания. Таким образом программа может определить максимальную пропускную способность канала.
Режим 111 (Configuration mode) предназначен для доступа к конфигурационным регистрам. Выделение режима защищает адаптер и протокол от некорректных изменений конфигурации в процессе обмена.
Как уже упоминалось, каждому режиму ЕСР соответствуют свои функциональные регистры (табл. 1.8).
Регистр данных DR
используется для передачи данных только в программно-управляемых режимах (000 и 001).
Регистр состояния SR
передает значение сигналов на соответствующих линиях (как в SPP).
Регистр управления CR
имеет назначение бит, совпадающее с SPP. В режимах 010, 011 запись в биты 0, 1 (сигналы AutoLF#
и Strobe#
) игнорируется.
Регистр ECPAFIFO
служит для помещения информации командных циклов (канального адреса или счетчика RLE
, в зависимости от бита 7) в FIFO-буфер. Из буфера информация будет выдана в командном цикле вывода.
Читать дальше