PortCentronics w trybie EPP ECP

background image

http://www.easy-soft.tsnet.pl/

PortCentronics w trybie EPP / ECP

Wielokrotnie na łamach Elektroniki Praktycznej oraz innych pism dla elektroników -

amatorów poruszany był temat wykorzystania portu LPT (Centronics) dla potrzeb

sterowania i komunikacji z własnymi urządzeniami. Zazwyczaj w prostszych projektach

tego typu wykorzystany jest podstawowy tryb pracy portu (SPP - Standard Parallel Port)

albo tryb dwukierunkowy (Bidirectional, Byte) - w zależności od tego czy chcemy tylko

wysyłać bajty po magistrali danych czy też chcemy je także odczytywać. Dla

przypomnienia :

Tryb standardowy (SPP, Centronics)

- wielokrotnie opisywany - pozwala na

ustawienie poziomów na liniach danych oraz na niektórych liniach kontrolnych,

natomiast tylko część linii kontrolnych potrafi przyjąć poziom wymuszony przez

urządzenie zewnętrzne. Próba wpisania z zewnątrz bajtu na magistralę danych kończy

się niepowodzeniem i może nawet doprowadzić do fizycznego uszkodzenia portu (jeśli

na linii występuje konflikt poziomów mogą płynąć prądy zwarciowe rzędu

kilkudziesięciu miliamperów ). Przekazywanie informacji do komputera w tym trybie

jest ograniczone do połowy bajtu - tyle możemy odczytać w jednym cyklu korzystając

z wejściowych linii kontrolnych (czasem używa się więc dla trybu nazwy „nibble”).

Tryb standardowy jest całkowicie wystarczający dla prostych sterowań ledami lub

przekaźnikami.

Tryb dwukierunkowy (Byte)

jak z samej nazwy wynika pozwala na użycie linii

danych D0 - D7 jako wejściowych. Jest to uzyskane poprzez wyłączenie

wewnętrznego zasilania tych linii - przechodzą one w stan wysokiej impedancji.

Można wtedy podać z zewnątrz cały bajt danych i programowo go odczytać bez

żadnych konfliktów elektrycznych. Oczywiście powinniśmy uzupełnić port

zewnętrznym buforem sterowanym jednym z pinów . Sekwencja sterowania będzie

następująca :

o

przełączenie linii danych do odczytu ,

o

otworcie bufora,

o

odczyt bajtu,

o

zamknięcie bufora,

o

przełączenie linii danych do zapisu.

Poniżej jest przytoczony przykład pascalowej funkcji odczytującej port użytej w

programie Delphi przeznaczonym dla Windows 95/98/ME. Zewnętrzny bufor jest

sterowany linią portu AUTO. Kierunek przełączamy 5. bitem w rejestrze kontrolnym

portu.

function ReadByte:Byte;

var

W:Word;

B:byte;

begin

W:=LptBase+2;

B:=BaseCtrl or $22;

{linia Read = AUTO - bit 1 inwertowany }

asm

MOV DX,W

MOV AL,B

OUT DX,AL { poziom niski na linii Read , DIR = In}

- strona 1/5 -

background image

http://www.easy-soft.tsnet.pl/

end;

W:=LptBase;

asm

MOV DX,W

IN AL,DX { dane z portu danych }

MOV B,AL

end;

Result:=B;

W:=LptBase+2;

B:=BaseCtrl;

asm

MOV DX,W

MOV AL,B

OUT DX,AL { poziom wysoki na linii Read, DIR = Out }

end;

end;

Konstrukcja bufora może być różna. Mogą to być dwie kostki (bufor wejściowy i zatrzask

wyjściowy - jak w jednym z projektów EP), jedna kostka przełączana (np. 74245), czy też

układ wbudowany w gotowe zewnętrzne urządzenie - np. wyświetlacz alfanumeryczny

LCD.

Problem zaczyna się w momencie, gdy chcemy takie wcześniej napisane programy

uruchamiać na nowszym sprzęcie wyposażonym w port ECP / EPP. Zazwyczaj nie chcą

one wtedy działać - konieczne jest ustawienie w biosie dokładnie takiego trybu pracy

portu jaki jest wymagany przez naszą aplikację. Jest to niewygodne a poza tym czasem

trudno jest zidentyfikować w menu biosu potrzebną opcję gdyż występuje tam dosyć

zróżnicowane nazewnictwo (normal, bi-dir, compatible itd.). Dodatkowo należy pamiętać

o przywróceniu na końcu poprzednich ustawień aby nie zakłócić wcześniej konfigurowanej

komunikacji np. z drukarką czy skanerem.

W takich sytuacjach dopomoże nam wykorzystanie rozszerzonych możliwości

konfiguracyjnych portu ECP (Extended Capabilities Port). Port ECP poza

dotychczasowymi rejestrami (dane - pod adresem bazowym portu LptBase - np. $378,

status - LptBase+1 oraz kontrola - LptBase+2) posiada trzy rejestry dodatkowe,

adresowane z przesunięciem $400 (ustawiony 2. bit w starszym bajcie adresu) :

Adres

Rejestr

LptBase

Dane w trybie SPP lub dwukierunkowym

Buforowany adres w trybie ECP

LptBase + 1

Rejestr statusu ( wszystkie tryby )

LptBase + 2

Rejestr kontrolny ( wszystkie tryby )

LptBase + 400h

Dane w trybie buforowanego SPP ( SPP FIFO )

Dane w trybie ECP (ECP FIFO )

Test bufora FIFO (w trybie testowym )

Rejestr konfiguracyjny A ( w trybie konfiguracji )

LptBase + 401h

Rejestr konfiguracyjny B ( w trybie konfiguracji )

LptBase + 402h

Rozszerzony rejestr kontrolny ( wszystkie tryby )

- strona 2/5 -

background image

http://www.easy-soft.tsnet.pl/

Dla naszych powyżej opisanych potrzeb najbardziej istotny jest rozszerzony rejestr

kontrolny ( LptBase + $402 ) :

Bit

Funkcja

7:5 Ustawienie trybu pracy portu.

000

Tryb standardowy SPP

001

Tryb dwukierunkowy Byte

010

Tryb buforowany SPP FIFO

011

Tryb buforowany ECP FIFO

100

Tryb EPP

101

Pozycja zarezerwowana

110

Tryb testowania FIFO

111

Tryb konfiguracyjny

4 Zezwolenie na wykorzystanie przerwań

3 Zezwolenie na wykorzystanie DMA

2 Flaga zgłoszenia przerwania

1 Bufor FIFO pełny

0 Bufor FIFO pusty.

Jeśli port jest typu ECP ( tzn. posiada odpowiednie wyposażenie konstrukcyjne oraz jest

tak ustawiony w biosie ) - możemy programowo zmieniać jego tryb pracy poprzez

manipulację bitami 7-5 rozszerzonego rejestru kontrolnego. Przykładowo ustawiając je na

000 powodujemy, że port będzie się zachowywać jak zwyczajny jednokierunkowy

Centronics itd.

Podczas pisania nowego programu korzystającego z LPT możemy od razu w nim umieścić

odpowiednie sekwencje. Natomiast dla ułatwienia użytkowania starszych programów

powstała niewielka aplikacja ( Windows 9x ) umozliwiająca szybkie i proste przełączanie

trybu pracy portu.

Po starcie program lokalizuje porty równoległe zainstalowane w systemie:

Po wybraniu portu z listy możemy odczytać tryb jego pracy ( przycisk „Tryb pracy”).

W tym momencie program sprawdza, czy port posiada niezbędne możliwości

konfiguracyjne charakterystyczne dla ECP. Sekwencja postępowania zalecana przez

Microsoft jest następująca :

odczytujemy rozszerzony rejestr kontrolny i sprawdzamy, czy flaga zapełnionego

bufora FIFO jest zgaszona a flaga pustego bufora zapalona (bit 0. ustawiony a

bit 1. zgaszony ),

zapisujemy do rejestru wartość $34,

ponownie odczytujemy rejestr i sprawdzamy czy zawiera wartość $35 (bit 0. ma

własność „tylko do odczytu” - chociaż próbujemy go wyzerować jego wartość

powinna pozostac równa 1).

- strona 3/5 -

background image

http://www.easy-soft.tsnet.pl/

Jeśli powyższe warunki zostaną spełnione - mamy do czynienia z portem ECP. Przykład

użytej w Delphi funkcji sprawdzającej jest podany poniżej :

function TMainForm.CheckECPMode(LPTNumber:Integer):Boolean;

var

EcrValue:Byte;

CtrlValue:Byte;

BaseAddr:Word;

ECRAddr:Word;

begin

if ((LPTNumber<1) or (LPTNumber>3)) then begin

MessageBeep(0);

Result:=False;

Exit;

end;

case LPTNumber of

1: BaseAddr:=Lpt1Addr;

2: BaseAddr:=Lpt2Addr;

3: BaseAddr:=Lpt3Addr;

end;

ECRAddr:=BaseAddr + $402;

asm

mov dx,ECRAddr

in al,dx

mov EcrValue,al

end;

if (((EcrValue and $01) <> $01) or ((EcrValue and $02) <> 0)) then begin

Result:= False;

Exit;

end;

asm

mov dx,ECRAddr

mov al,$34

out dx,al

end;

asm

mov dx,ECRAddr

in al,dx

mov CtrlValue,al

end;

if CtrlValue=$35 then begin

Result:=True;

asm

mov dx,ECRAddr

mov al,EcrValue

out dx,al

end;

end else Result:=False;

end;

- strona 4/5 -

background image

http://www.easy-soft.tsnet.pl/

Gdy powyższa funkcja zwróci False program wyświetla okienko informujące, że wybrany

port nie da się programowo skonfigurować . Jeśłi ECP zostanie pomyślnie wykryte -

otwiera się panel zmiany trybu :

Aktualnie ustawiony tryb jest podświetlony. Klikając na odpowiednich polach wybieramy

tryb, który jest nam potrzebny. Panel ograniczyłem do trybów zazwyczaj używanych w

amatorskich konstrukcjach. Nic nie stoi na przeszkodzie aby go sobie rozbudować - na

stronie EP jest zamieszczony kod źródłowy projektu Delphi.

Na sprawdzanych przeze mnie maszynach po starcie port ECP jest inicjalizowany jako

SPP - nic więc dziwnego, że bez przestawienia nie chciały funkcjonować aplikacje

używające trybu dwukierunkowego.

Powyższy opis tylko w bardzo wyrywkowym i ograniczonym stopniu prezentuje

rozszerzone możliwości portu ECP. Zainteresowani znajdą sporo informacji w Internecie.

Zwłaszcza godne polecenia są strony:

http://www.beyondlogic.org/ecp/ecp.htm

http://www.lvr.com/parport.htm

gdzie oprócz informacji merytorycznych znajdziemy wiele linków do dalszych źródeł.

Jerzy Szczesiul

jerzy.szczesiul@ep.com.pl

- strona 5/5 -


Wyszukiwarka

Podobne podstrony:
O trybie rozkazującym w języku polskim, Język
Wniosek o udzielenie poręczenia w trybie uproszczonym (załącznik nr 3 do Regulaminu udzielania po
epp
Laborka nr 1 z diod EPP
ECP DMA Select, ECP DMA Select
Kolorowanie w trybie Lab
ECP Keys to the Kingdom [OCR]
6. Przygot. do zabiegu oper. w trybie nagłym., ratownictwo med, Chirurgia urazowa
Doręczenie i odbiór SMS w trybie PDU Doręczenie i odbiór SMS w trybie PDU
ECP Lost Teachings on Your Higher Self [OCR perfect]
Przetwarzanie tekstów w trybie graficznym, Programowanie
Praca w trybie MS dos, Notatki z systemów
epp 3GX4TCYVK7ULUVOBCWGOO4YK7Y6T2GEM73MNDFI
wniosek o wycenę udziałów i wskazaniu innego nabywcy przez spółkę w trybie art5 ksh U7TY4HOMQ4HR5ZU
Rwetes wokół świadczeń w trybie jednego dnia, MEDYCYNA, RATOWNICTWO MEDYCZNE, BTLS+chirurgia
ECP Alchemy of the Heart How to Give and Receive More Love [OCR]
Jak połączyć CA8 4 CA8 4 PRO Ovislinka WLA 5000AP do MikroTik'a w przezroczystym trybie WDS
Laborka nr 2 z epp dioda zenera

więcej podobnych podstron