Порт имеет поддержку на уровне BIOS — поиск установленных портов во время теста POST и сервисы печати Int 17h
(см. п. 8.3.3) обеспечивают вывод символа (по опросу готовности, не используя аппаратных прерываний), инициализацию интерфейса и принтера, а также опрос состояния принтера. Практически все современные системные платы (еще начиная с PCI-плат для процессоров 486) имеют встроенный адаптер LPT-порта. Существуют карты ISA с LPT-портом, где он чаще всего соседствует с парой СОМ-портов, а также с контроллерами дисковых интерфейсов (FDC+IDE). LPT-порт обычно присутствует и на плате дисплейного адаптера MDA (монохромный текстовый) и HGC (монохромный графический «Геркулес»). Есть и карты PCI с дополнительными LPT-портами.
К LPT-портам подключают принтеры, плоттеры, сканеры, коммуникационные устройства и устройства хранения данных, а также электронные ключи, программаторы и прочие устройства. Иногда параллельный интерфейс используют для связи между двумя компьютерами — получается сеть, «сделанная на коленке» (LapLink).
1.1. Традиционный LPT-порт
Традиционный, он же стандартный, LPT-порт называется стандартным параллельным портом (Standard Parallel Port, SPP), или SPP-портом, и является однонаправленным портом, через который программно реализуется протокол обмена Centronics (см. п. 8.3.1). Название и назначение сигналов разъема порта (табл. 1.1) соответствуют интерфейсу Centronics.
Таблица 1.1. Разъем стандартного LPT-порта
Контакт DB-25S |
№ провода в кабеле |
Назначение I/O¹ |
Бит² |
Сигнал |
1 |
1 |
O/I |
CR.0\ |
Strobe# |
2 |
3 |
O(I) |
DR.0 |
Data 0 |
3 |
5 |
O(I) |
DR.1 |
Data 1 |
4 |
7 |
O(I) |
DR.2 |
Data 2 |
5 |
9 |
O(I) |
DR.3 |
Data 3 |
6 |
11 |
O(I) |
DR.4 |
Data 4 |
7 |
13 |
O(I) |
DR.5 |
Data 5 |
8 |
15 |
O(I) |
DR.6 |
Data 6 |
9 |
17 |
O(I) |
DR.7 |
Data 7 |
10 |
19 |
I³ |
SR.6 |
Ack# |
11 |
21 |
I |
SR.7\ |
Busy |
12 |
23 |
I |
SR.5 |
PaperEnd (PE) |
13 |
25 |
I |
SR.4 |
Select |
14 |
2 |
O/I |
CR.1\ |
Auto LF# (AutoFeed#) |
15 |
4 |
I |
SR.3 |
Error# |
16 |
6 |
O/I |
CR.2 |
Init# |
17 |
8 |
O/I |
CR.3\ |
Select In# |
18-25 |
10, 12, 14, 16, 18, 20, 22, 24, 26 |
- |
- |
- |
¹ I/O задает направление передачи (вход-выход) сигнала порта. O/I обозначает выходные линии, состояние которых считывается при чтении из портов вывода; O(I) — выходные линии, состояние которых может быть считано только при особых условиях (см. ниже).
² Символом «\» отмечены инвертированные сигналы (1 в регистре соответствует низкому уровню линии).
³ Вход Ack# соединен резистором (10 кОм) с питанием +5 В.
Адаптер SPP-порта содержит три 8-битных регистра, расположенных по соседним адресам в пространстве ввода-вывода, начиная с базового адреса порта BASE
(3BCh, 378h или 278h).
Data Register ( DR
) — регистр данных , адрес= BASE
. Данные, записанные в этот регистр, выводятся на выходные линии Data[7:0]
. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях, что не всегда одно и то же.
Status Register ( SR
) — регистр состояния (только чтение), адрес= BASE+1
. Регистр отображает 5-битный порт ввода сигналов состояния принтера (биты 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#
вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.
Читать дальше