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

в начало

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

 

Таблица 3.2. Разъем стандартного LPT-порта

Контакт DB-25S Провод шлейфа Назначение
I/O* Reg. Bit** Сигнал
0/1 CR: 0\ Strobe#
0(1) DR: 0 Data 0
0(1) DR: 1 Data 1
0(1) DR: 2 Data 2
0(1) DR: 3 Data 3
0(1) DR: 4 Data 4
0(1) DR: 5 Data 5
0(1) DR: 6 Data 6
0(1) DR: 7 Data 6
I”* SR: 6 Ack#
I SR: 7\ Busy
I SR: 5 PaperEnd
I SR: 4 Select
0/1 CR: 1\ Auto LF#
I SR: 3 Error#
0/1 CR: 2 Init#
0/1 CR: 3\ Select In#
18-25 10, 12, 14, 16 18, 20, 22, 24, 26 - -

 

Data Register (DR) – регистр данных, адрес=BASE. Данные, записанные в этот порт, выводятся на выходные линии интерфейса. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанные данным, либо сигналам на тех же линиях, что не всегда одно и то же.

Status Register (SR) – регистр состояния, представляющий собой 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7), адрес BASE+1. Бит SR.7 инвертируется – низкому уровню сигнала соответствует единичное значение бита в регистре и наоборот.

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

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

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

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

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

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

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

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

Control Register (CR) – регистр управления, адрес = ВАSЕ+2. Как и регистр данных, этот 4-битный порт вывода допускает запись и чтение (биты 0-3), но его выходной буфер обычно имеет тип “открытый коллектор”. Это позволяет более корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты 0, 1, 3 инвертируются – единичному значению в регистре соответствует низкий уровень сигнала, и наоборот.

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

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

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

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

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

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

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

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

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

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

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

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

3)по получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается (2 цикла IOWR$). Обычно для того, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что добавляет еще один цикл 10Ш.

Из описания этой процедуры видно, что для вывода одного байта требуется по меньшей мере 4-5 операций ввода/вывода с регистрами порта (это в лучшем случае, когда готовность обнаружена по первому чтению регистра состояния). Отсюда и главный недостаток при выводе через стандартный порт – невысокая скорость обмена при значительной загрузке процессора. Стандартный порт удается разогнать лишь до скоростей порядка 100-150 Кбайт/с при полной загрузке процессора, что сегодня уже явно недостаточно для печати на лазерный принтер. Другой недостаток – функциональный – сложность использования в качестве порта ввода.