Łącze równoległe 561
Rozdział 11. Łącze równoległe
Podstawowym zadaniem łącza równoległego, wynikającym z przyjętej architektury systemu, jest obsługa drukarki. Również klasyczna drukarka posiada łącze typu równoległego (zwane także Centronics). Nie jest to oczywiście jedyna możliwość; drukarka może też być dołączona do jednego z łącz szeregowych. Coraz częściej pojawiają się drukarki wyposażone bądź to w oba rodzaje łącz, bądź posiadające możliwość wymiany modułu obsługującego łącze (interfejsu). Warto też zwrócić uwagę, że niektóre drukarki wykraczają poza rolę biernego odbiorcy poleceń i danych i dysponują zdolnością dwustronnej komunikacji z obsługującym je komputerem (elementarne możliwości komunikacji dwustronnej przez uaktywnienie linii BUSY ma każda drukarka), wysyłając np. — w zamian za lakoniczny komunikat o braku papieru - precyzyjną informację o zaistniałym podczas pracy błędzie.
Maksymalna liczba łącz równoległych, a tym samym akceptowanych przez BIOS i DOS drukarek, wynosi cztery. System operacyjny identyfikuje je oznaczeniami LPT l, LPT2, LPT3 i LPT4. Każde z tych łącz musi być zidentyfikowane przez BIOS w trakcie ładowania systemu. Informacja o liczbie łącz równoległych w systemie przechowywana jest w obszarze danych BIOS-u, w bitach 7. i 6. bajtu o adresie 0040:001 Ih. Niektóre starsze odmiany BIOS-u ignorują łącza LPT3 i LPT4.
Poruszając się na poziomie systemu operacyjnego DOS możemy odwoływać się do drukarek przez symbole LPT1-LPT4. Synonimem LPT1 jest PRN - domyślna drukarka systemu. Symbole te stanowią oznaczenia urządzeń i nie jest powiedziane, że z danym łączem LPTn musi współpracować drukarka. Jedynie programy obsługujące przerwania sprzętowe pochodzące od tych łącz (zwykle IRQ5 i IRQ7) ukierunkowane są na specyfikę obsługi drukarki z łączem równoległym.
Niewątpliwą przewagą łącza równoległego nad szeregowym jest szybkość transmisji danych, większa średnio 9 razy. Do wad należy zaliczyć ograniczoną do 5 m długość przewodu połączeniowego (specyfikacja łącza szeregowego dopuszcza transmisję danych na odległość do 200 m).
562
Anatomia PC
Obsługa drukarki z łączem równoległym
Łącze równoległe drukarki może być wykonane jako samodzielna karta rozszerzenia (zawsze 8-bitowa, nawet w standardzie EISA) lub być zintegrowane z innymi układami peryferyjnymi. Najczęściej łącze to wchodzi w skład karty grafiki monochromatycznej (jest wówczas elementem układu wielkiej skali integracji zawierającego cały sterownik), ewentualnie karty Multi I/O, na której realizowane jest zwykle za pomocą układu scalonego UM82C11. Może ono być skonfigurowane (za pomocą mikroprzełączników lub zwór) jako LPT1-3, rzadziej LPT4. Zwykle mamy też możliwość wyboru linii przerwań IRQ7 (standardowo) lub IRQ5. Karta taka dekoduje linie adresowe AO-A9 oraz sygnały ~IOR i -IOW magistrali zewnętrznej, rozpoznając w ten sposób odwołania procesora do jej rejestrów. Sygnały wyjściowe i wejściowe karty skupione są w tzw. „żeńskim" 25-końcówkowym gnieździe typu DB-25. Rozmieszczenie tych sygnałów przedstawia rysunek 11.1.
Rysunek 11.1.
Rozmieszczenie
sygnałów
w 25-końcówkowym
gnieździe łącza
równoległego
STR
DO D1
D3 D4
D7
BUSY
PAP
ONOF
|
gt |
|
V |
|
|
|
|
|
ft |
|
11 |
|
ft |
|
Q |
|
|
|
ffi\ |
|
UJ rtl |
|
1* <P\ |
|
vJ /fl |
|
tt) ^x |
©-
®-
SH
SH
ALF
INI DSL
Połączenie pomiędzy gniazdem łącza równoległego a drukarką realizowane jest przewodem typu Centronics, który od strony drukarki zakończony jest charakterystycznym 36-końcówkowym wtykiem o tej samej nazwie.
Oznaczenia linii przewodu Centronics zebrane są w tabeli 11.1. Znak ~ symbolizuje negację, tzn. stanem aktywnym sygnału jest poziom zera logicznego, odpowiadający napięciu około O V.
Łącze równoległe
563
Tabela 11.1.
Oznaczenia linii przewodu Centronics
Końcówka wtyku DB-25 |
£b«cówfa/ w(y£« Centronics-36 |
Sygnał |
Kierunek transmisji (względem komputera) |
1 |
1 |
~STR |
wyjście |
2 |
2 |
DO |
wyjście |
3 |
3 |
Dl |
wyjście |
4 |
4 |
D2 |
wyjście |
5 |
5 |
D3 |
wyjście |
6 |
6 |
D4 |
wyjście |
7 |
7 |
D5 |
wyjście |
8 |
8 |
D6 |
wyjście |
9 |
9 |
D7 |
wyjście |
10 |
10 |
~ACK |
wejście |
11 |
11 |
BUSY |
wejście |
12 |
12 |
PAP |
wejście |
13 |
13 |
ONOF |
wejście |
14 |
14 |
-ALF |
wyjście |
15 |
32 |
~ERR |
wejście |
16 |
31 |
-INI |
wyjście |
17 |
36 |
~DSL |
wyjście |
18-25 |
19-30, 33 |
GND |
|
|
16 |
OV |
|
|
17 |
obudowa |
|
|
18 |
+5V |
|
|
34,35 |
wolne |
|
Wymienione sygnały sterujące mają następujące znaczenie:
~STR (Strobe) niski poziom logiczny tej linii nakazuje drukarce
odebranie bajtu z linii danych DO-D7;
~ACK (Acknowledge) niskim poziomem logicznym na tej linii drukarka
potwierdza odebranie bajtu i gotowość do przyjęcia następnego;
BUSY (Busy) wysoki poziom logiczny tego sygnału może oznaczać jeden
z następujących faktów:
drukarka jest w stanie off-line (jest logicznie odłączona
od komputera),
wewnętrzny bufor drukarki jest pełny,
drukarka odbiera właśnie znak,
trwa inicjalizacja drukarki,
wystąpił błąd w pracy drukarki;
564 Anatomia PC
PAP (Paper) wysoki poziom logiczny na tej linii sygnalizuje
wyczerpanie się zapasu papieru;
ONOF (On-line/Off-line) wysoki poziom logiczny oznacza, że drukarka
jest w stanie on-line, tj. jest logicznie połączona z komputerem;
~ALF (Auto Linę Feed) niski poziom logiczny na tej linii poleca drukarce
automatyczne dołączanie znaków wysuwu wiersza (LF) po odebraniu znaku powrotu karetki (CR);
—ERĘ. (Error) przyczyną niskiego poziomu logicznego na tej linii może
być:
brak papieru,
przejście drukarki w stan off-line,
inny błąd (np. wyłączenie drukarki);
~INI (Initializatioń) niski poziom logiczny na tej linii uruchamia
w pewnych typach drukarek procedurę inicjalizującą;
~DSL (Device Seleci) niski poziom logiczny powoduje wybranie
drukarki. Zwykle linia ta jest na stałe połączona z masą, tzn. drukarka jest stale wybrana.
Warto wspomnieć, że w kwestii oznaczeń linii łącza równoległego panuje pewna dowolność, na przykład linia ONOF zwana jest czasami ONLINE, linia PAP - PERR, a linia ~DSL - -SLCT.
Dostęp do łącza równoległego
z poziomu systemu operacyjnego DOS
Jak wiadomo, DOS traktuje wszystkie urządzenia na równi z plikami dyskowymi. Polecenie copy plik.a pl i k. b nie różni się od polecenia copy plik.a Ip 12. System operacyjny przegląda listę nazw urządzeń (LPT1, LPT2, LPT3, LPT4, COM1, COM2, COM3, COM4, AUX, CON, PRN, NUL) i odróżnia plik dyskowy od urządzenia, tak więc zawartość pliku plik.a zostaje wysłana do programu sterownika (ang, device dri-ver) obsługującego łącze LPT2. Wspomnieć należy również o poleceniu type plik.a > Ipt2 oraz programie rezydentnym print (print plik.a /d:LPT2), które prowadzą do tego samego celu.
Dla obsługi drukarki programiści mogą korzystać z dwóch funkcji przerwania 21h: 05h i40h.
Funkcja 05h
Działanie:
Funkcja ta jest reliktem z czasów systemu operacyjnego CP/M i obsługuje transmisję pojedynczego znaku wyłącznie do łącza LPT1 (PRN).
Łącze równoległe 565
Parametry wejściowe:
AH 05h;
DL kod ASCII znaku.
Wartości zwracane:
— brak —
Przykład:
mov ah,05h; numer funkcji
mov dl, Och; znak wysuwu strony (FF - Form Feed)
int 21h ; wysuw strony w drukarce
Funkcja 40h
Działanie:
Funkcja ta w ogólnej postaci obsługuje zapis większej liczby znaków do pliku lub urządzenia. Korzysta ona z koncepcji tzw. uchwytów (ang. handle) definiujących jednorazowo i jednoznacznie plik lub urządzenie.
Drukarce PRN (LPT1) przyporządkowany jest standardowo numer uchwytu 4. Urządzenia LPT« wymagają wcześniejszego otwarcia do zapisu funkcją 3Dh przerwania 21 h. Funkcja otwarcia do odczytu (3Fh) nie ma w przypadku drukarki sensu fizycznego.
Parametry wejściowe:
AH 40h;
BX numer uchwytu urządzenia LPTw;
CX liczba przesyłanych znaków;
DS:DX adres bufora zawierającego znaki.
Wartości zwracane:
AX liczba faktycznie przesłanych znaków lub kod błędu w przypadku
CF=1;
CF l w przypadku wystąpienia błędu.
Przykład:
bufor DB 8 DUP('*')
mov ah,40h
mov bx,04h
mov ex,08h
mov dx,OFFSET bufor
int 21h
osiem znaków "*"
numer funkcji
uchwyt urządzenia PRN
przesyłamy 8 znaków
adres (przemieszczenie) bufora
zakładamy, że DS zawiera
adres segmentowy bufora
przerwanie DOS
Funkcja 40h zwraca wprawdzie w rejestrze AX kod błędu, nie mówi natomiast nic o stanie poszczególnych linii łącza. Informacji tych dostarczają funkcje BIOS-u.
566 Anatomia PC
Dostęp do łącza równoległego poprzez funkcje BIOS
BIOS udostępnia trzy funkcje przerwania 17h obsługujące łącze równoległe. Funkcja OOh wysyła jeden znak do łącza, funkcja 01 h inicjalizuje łącze i drukarkę, natomiast funkcja 02h określa aktualny stan łącza.
Funkcja OOh
Działanie:
Funkcja ta wysyła jeden znak do dowolnego z zainstalowanych w systemie łącz równoległych.
Parametry wejściowe:
AH OOh;
AL kod ASCII znaku;
DX numer łącza:
= LPT1,
= LPT2,
= LPT3,
4 = LPT4.
Wartości zwracane:
AH bajt statusowy.
Przykład:
mov ah,00h ; numer funkcji
mov al,'D ; znak "D"
mov dx,03h ; port LPT4
int 17h ; wyprowadź znak "D" na drukarkę LPT4
Funkcja 01 h
Działanie:
Funkcja Olh przeprowadza tzw. sprzętową inicjalizację drukarki i łącza (ang. hardware reset). Linia -INI jest aktywowana poprzez wystawienie na niej zera logicznego. Podobny efekt uzyskać można wysyłając tzw. sekwencję inicjalizującą (ang. software reset), na ogół <ESC>'@', przy czym korzystamy wówczas ze wszystkich 8 linii danych i linii sterujących. Należy jednak pamiętać, że nie każda drukarka reaguje na sygnał -INI.
Parametry wejściowe:
AH Olh;
Łącze równoległe
567
DX numer łącza:
= LPT1,
= LPT2,
= LPT3,
4 = LPT4.
Wartości zwracane:
AH bajt statusowy.
Przykład:
mov ah,Olh mov dx,OOh
int 17h
numer funkcji
LPT1
inicjalizuj drukarkę dołączoną do portu LPT1
Funkcja 02h
Działanie:
Funkcja ta zwraca w rejestrze AH bajt statusowy, odwzorowujący stan łącza i drukarki. Nie są wykonywane żadne inne operacje.
Parametry wejściowe:
AH 02h;
DX numer łącza:
= LPT1,
= LPT2,
= LPT3,
4 = LPT4.
Wartości zwracane:
AH bajt statusowy.
Przykład:
mov ah,02h mov dx,Olh int 17h
numer funkcji
LPT2
bajt statusowy znajdzie się w AH
Wymieniany w opisie funkcji OOh, Olh i 02h bajt statusowy zawiera następujące dane:
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit l bit O
bit?
bito
bit 5
stan linii BUSY; l = drukarka zajęta,
0 = drukarka wolna;
stan linii ~ACK;
1 = nadszedł sygnał potwierdzenia,
0 = łącze oczekuje na sygnał potwierdzenia;
stan linii PAP;
1 = w drukarce brak papieru;
568
Anatomia PC
bit 4 stan linii ONOF;
l = drukarka w stanie on-line,
0 = drukarka w stanie off-line;
bit 3 stan linii ERR;
1 = drukarka zajęta, off-line lub inny błąd, np. drukarka wyłączona;
bity 2-1 zarezerwowane (zwykle równe 1);
bit O przekroczenie limitu czasu (ang. time-out) w oczekiwaniu na
reakcję drukarki.
Maksymalne czasy oczekiwania systemu na reakcję drukarki definiowane są przez BIOS i przechowywane w jego obszarze danych.
Adres |
Znaczenie |
0040:0078h |
limit czasu dla łącza LPT1 (w sekundach) |
0040:0079h |
limit czasu dla łącza LPT2 (w sekundach) |
0040:007Ah |
limit czasu dla łącza LPT3 (w sekundach) |
0040:007Bh |
limit czasu dla łącza LPT4 (w sekundach) |
Wartością domyślną przyjmowaną przez BIOS jest 20 sekund. Czas ten można zmienić na nieskończenie długi (ma to znaczenie przy obsłudze drukarek laserowych) poleceniem DOS-u modę iptn,, p. Po upływie zdefiniowanego wcześniej czasu oczekiwania dane będą wysyłane ponownie.
Ogólne zastosowanie łącza równoległego - dostęp do portów
Zastosowanie łącza równoległego jako portu drukarki wykorzystuje w niewielkim stopniu jego możliwości. Zapomnijmy na chwilę o drukarce i potraktujmy 25-końcówkowe gniazdo LPT« jako programowalny port dwukierunkowy.
Z rysunku 11.2. widać, że port taki dysponuje siedemnastoma wejściami X1-X17 oraz dwunastoma wyjściami YI—Y12. Mamy więc w zasadzie nieograniczone możliwości sterowania różnorodnych prostych układów automatyki. Mowa tu naturalnie o sterowaniu typu „włącz-wyłącz"; również informacja dostarczana od zewnętrznych czujników liniami X nie może mieć charakteru ciągłego - możliwe są tylko dwa stany. Linie danych można oczywiście wykorzystać do sterowania prostego przetwornika cyfrowo-analogowego, uzyskując w ten sposób możliwość regulacji wielostopniowej.
Stan każdej z linii Y może być w każdej chwili zmieniany. Mamy również możliwość kontroli poziomu logicznego na każdej z linii X.
Łącze równoległe
569
Y10
Rysunek 11.2.
Rozmieszczenie wejść i wyjść w gnieździe łącza równoległego
WEJŚCIA
WYJŚCIA
Początek obszaru przestrzeni adresowej przeznaczonej na rejestry sterujące poszczególnych (zaakceptowanych przez BIOS w fazie ładowania systemu) łącz równoległych (tzw. adres bazowy) definiowany jest w obszarze danych BIOS-u:
Adres |
Szerokość |
Znaczenie |
Standardowy adres bazowy (port) |
0040:0008h |
słowo |
adresu bazowy łącza LPT1 |
378h (3BCh) |
0040:OOOAh |
słowo |
adresu bazowy łącza LPT2 |
278h (378h) |
0040:OOOCh |
słowo |
adresu bazowy łącza LPT3 |
3BCh (278h) |
0040:OOOEh |
słowo |
adresu bazowy łącza LPT4 |
2BCh (2BCh) |
Wartości adresów podane w nawiasach aktualne są w przypadku zainstalowania w systemie karty grafiki monochromatycznej z portem drukarki (MGP, Hercules). Procedury inicjalizujące BIOS-u przeglądają standardowe adresy bazowe i w przypadku wykrycia tam rejestru przyporządkowują mu kolejny numer LPT«.
Każde łącze równoległe posiada trzy własne rejestry. Ich adresy podaje się w odniesieniu macierzystego adresu bazowego (tj. jako przemieszczenie - offset). Przemieszczenie O oznacza adres bazowy.
570
Anatomia PC
Rejestr danych
Rejestr danych (umieszczony pod przemieszczeniem OOh) umożliwia dostęp do końcówek 2-9 (wejścia X2-X9 lub wyjścia Y2-Y9).
bit? [ bito | bit 5 [ bit 4 [bit 3 bit 2 [ bit l | bit O |
bit?
bito
bit 5
bit 4
bit 3
bit 2
bit l
bitO
poziom sygnału na końcówce 9:
= niski,
= wysoki;
poziom sygnału na końcówce 8:
= niski,
= wysoki;
poziom sygnału na końcówce 7:
= niski,
= wysoki;
poziom sygnału na końcówce 6:
= niski,
= wysoki;
poziom sygnału na końcówce 5:
= niski,
= wysoki;
poziom sygnału na końcówce 4:
= niski,
= wysoki;
poziom sygnału na końcówce 3:
= niski,
= wysoki;
poziom sygnału na końcówce 2:
= niski,
= wysoki.
Ustawienie dowolnego bitu tego rejestru powoduje pojawienie się napięcia +5 V na stowarzyszonej z nim końcówce skonfigurowanej jako Y (wyjście). Trochę inaczej wygląda sprawa odczytu stanu końcówki. Rejestr danych jest rejestrem dwukierunkowym, a dane zapisane do niego (np. rozkazem out rejestr, al) są w nim „zatrzaskiwane". Odczyt z tego rejestru (np. rozkazem in al, rejestr) powoduje w efekcie przeczytanie tych samych danych, które były uprzednio tam zapisane. Mechanizm ten został wprowadzony w celu umożliwienia wykrywania przekłamań spowodowanych np. zwarciami na magistrali danych portu równoległego. Niektóre karty, zgodne ze standardem firmy IBM, wyposażone są również w bufor wejściowy (zestaw bramek trój stanowych, nie rejestr zatrzaskowy!), umożliwiający transmisję danych w kierunku do komputera. Bajt danych, który pojawi się na liniach X2-X9, jest wówczas dostępny w porcie danych drukarki. Karty niezgodne ze standardem IBM na ogół nie umożliwiają transmisji dwukierunkowej. Po starcie komputera w rejestrze danych znajduje się wartość OOh.
Łącze równoległe
571
Musimy również brać pod uwagę inwersję sygnałów na liniach l, 11, 14 i 17, dokonywaną przez układy logiczne łącza.
Rejestr stanu
Stan końcówek wejściowych X10-X13 i X15 można odczytać z rejestru stanu zlokalizowanego pod przemieszczeniem Olh. Rejestr ten można tylko odczytywać.
bit? bito bit 5 bit 4 bit 3 bit 2
bit?
bito
bit 5
bit 4
bit 3
bity 2-0
(zanegowany!), poziom napięcia na końcówce Xli: l = niski, O = wysoki;
poziom napięcia na końcówce X10:
= niski,
= wysoki;
poziom napięcia na końcówce X12:
= niski,
= wysoki;
poziom napięcia na końcówce Xl3:
= niski,
= wysoki;
poziom napięcia na końcówce Xl5:
= niski,
= wysoki;
bez znaczenia, zwykle równe l.
Rejestr sterujący
Łącze równoległe może być źródłem przerwania sprzętowego IRQ5 lub IRQ7, jeżeli sygnał na linii Xl O (~ACK) zmieni stan z wysokiego na niski. Definiuje to rejestr sterujący umieszczony pod przemieszczeniem 02h.
bit 4
bit 3
bit2 bit l bitO
bity 7-5 bit 4
bit 3
bit 2
bez znaczenia;
generacja sygnałów IRQ: l = dozwolona,
0 = zabroniona;
(zanegowany!), poziom napięcia na końcówce 17:
1 = niski,
O = wysoki;
poziom napięcia na końcówce 16:
= niski,
= wysoki;
572 Anatomia PC
bit l (zanegowany!), poziom napięcia na końcówce 14:
l = niski,
0 = wysoki;
bit O (zanegowany!), poziom napięcia na końcówce l:
1 = niski,
O = wysoki.
Rejestr sterujący jest dwukierunkowy w swej mniej znaczącej połowie (bity 3-0), co umożliwia dostęp do końcówek l, 14, 16, 17 jako wejść lub wyjść. Dla bitu 4 (generacja sygnału IRQ) obowiązuje tylko jeden kierunek - zapis. Odczyt tej pozycji bitowej dostarcza zawsze ostatnio ustawionej wartości i nie ma sensu fizycznego jako wartość zwracana. Numer linii IRQ (zwykle 5 lub 7) ustawiany jest przełącznikiem konfigura-cyjnym na karcie łącza równoległego.