³ Вход Ack# соединен резистором (10 кОм) с питанием +5 В.
Адаптер SPP-порта содержит три 8-битных регистра, расположенных по соседним адресам в пространстве ввода-вывода, начиная с базового адреса порта BASE
(3BCh, 378h или 278h).
DR
) — BASE
. Данные, записанные в этот регистр, выводятся на выходные линии Data[7:0]
. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях, что не всегда одно и то же.
SR
) — регистр состояния (только чтение), адрес=BASE+1
. Регистр отображает SR.4-SR.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
— флаг прерывания по сигналу Ack#
(только для порта PS/2). Бит обнуляется, если сигнал Ack#
вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.
♦ SR[1:0]
— зарезервированы.
CR
) — регистр управления, адрес=ВАSЕ+2
, допускает запись и чтение. Регистр связан с
Ниже описано назначение бит регистра управления.
♦ CR[7:6]
— зарезервированы.
♦ CR.5
— Direction
— бит управления направлением передачи (только для портов PS/2, см. ниже). Запись единицы переводит порт данных в режим ввода. При чтении состояние бита не определено.
♦ CR.4
— AckINTEN
(Ack Interrupt Enable) — единичное значение разрешает прерывание по спаду сигнала на линии Ack#
— сигнал запроса следующего байта.
♦ CR.3
— Select In
— единичное значение бита соответствует низкому уровню на выходе Select In#
(17) — сигналу, разрешающему работу принтера по интерфейсу
♦ CR.2
— Init
— нулевое значение бита соответствует низкому уровню на выходе Init#
(16) — сигнал аппаратного сброса принтера.
♦ CR.1
— Auto LF
— единичное значение бита соответствует низкому уровню на выходе Auto LF#
(14) — сигналу на автоматический перевод строки (LF — Line Feed) по приему байта возврата каретки (CR). Иногда сигнал и бит называют AutoFD
или AutoFDXT
.
♦ CR.0
— Strobe
— единичное значение бита соответствует низкому уровню на выходе Strobe#
(1) — сигналу стробирования выходных данных.
IRQ7
или IRQ5
) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Ack#
) при установке CR.4=1
. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.
Перечислим шаги процедуры вывода байта по интерфейсу Centronics с указанием требуемого количества шинных операций процессора.
1. Вывод байта в регистр данных (1 цикл IOWR#
).
2. Ввод из регистра состояния и проверка готовности устройства (бит SR.7
— сигнал Busy
). Этот шаг зацикливается до получения готовности или до срабатывания программного тайм-аута (минимум 1 цикл IORD#
).
3. По получению готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается. Обычно, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что к двум циклам IOWR#
добавляет еще один цикл IORD#
.
Видно, что для вывода одного байта требуется 4–5 операций ввода-вывода с регистрами порта (в лучшем случае, когда готовность обнаружена по первому чтению регистра состояния). Отсюда вытекает главный недостаток вывода через стандартный порт — невысокая скорость обмена при значительной загрузке процессора. Порт удается разогнать до скоростей 100–150 Кбайт/с при полной загрузке процессора, что недостаточно для печати на лазерном принтере. Другой недостаток функциональный — сложность использования в качестве порта ввода.
Стандартный порт асимметричен — при наличии 12 линий (и бит), нормально работающих на вывод, на ввод работает только 5 линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособен
Схемотехника выходных буферов данных LPT-портов отличается большим разнообразием. На многих старых моделях адаптеров SPP-порт данных можно использовать и для организации ввода. Если в порт данных записать байт с единицами во всех разрядах, а на выходные линии интерфейса через микросхемы с выходом типа «открытый коллектор» подать какой-либо код (или соединить ключами какие-то линии со схемной землей), то этот код может быть считан из того же регистра данных. Однако выходным цепям передатчика информации придется «бороться» с выходным током логической единицы выходных буферов адаптера. Схемотехника ТТЛ такие решения не запрещает, но если внешнее устройство выполнено на микросхемах КМОП, их мощности может не хватить для «победы» в этом шинном конфликте. Однако современные адаптеры часто имеют в выходной цепи согласующий резистор с сопротивлением до 50 Ом. Выходной ток короткого замыкания выхода на землю обычно не превышает 30 мА. Простой расчет