port paralel

Upload: ana-maria-tanasa

Post on 06-Jul-2015

38 views

Category:

Documents


0 download

TRANSCRIPT

Proiectarea Sistemelor de Operare

Portul paralel

Descriere generalPortul paralel este o interfa simpl de comunicare cu dispozitivele de intrare/ieire. Este simplu de programat i este folosit n controlul microcontroller-elor sau a dispozitivelor cu complexitate redus. Principalul su uz este (sau, mai degrab, era) conectarea imprimantelor. Portul paralel se gsete n spatele unitii centrale a calculatorului. Este un conector mam DB25 unde se conecteaz imprimanta.

Conectorul DB25Pinii unui conector DB25 sunt prezentai n figura de mai jos:

Liniile unui conector DB25 sunt imprite n trei grupe: linii de date, linii de control i linii de stare.

RegistreleLiniile de date, control i stare sunt conectate la registrele asociate n1

cadrul calculatorului. Prin manipularea acestor registre, se poate citi sau scrie ctre portul paralel folosind un limbaj de programare. Registrele din portul paralel standard sunt registrul de date, registrul de control i registrul de stare. Dup cum indic i numele, registrul de stare este conectat la liniile de date, registrul de control la liniile de control, iar registrul de stare la liniile de stare. Nu este vorba de o conexiune fizic ci de una virtual. Ceea ce se scrie ntr-un registru va aprea pe linia asociat. n cadrul unui PC, registrele folosesc I/O mapping i vor avea adrese unice. Pentru un PC obinuit, adresa de baz pentru LPT1 este 0x378, iar pentru LPT2 0x278. Registrul de date se regsete chiar la adresa de baz, registrul de stare la adresa de baz + 1, iar registrul de control la adresa de baz + 2. n momentul n care avem adresa de baz, putem calcula adresa fiecrui registru. Urmtorul tabel prezint adresele pentru fiecare registru:Registru data register (baseaddress+0) status register (baseaddress+1) control register (baseaddress+2) LPT1 0x378 0x379 0x37a LPT2 0x278 0x279 0x27a

Utilizarea registrelorTabelul de mai jos prezint rolul i modalitatea de control a fiecrui registru:PortR/WIOAddrBitsFunction DataOutWBase+0D0D78LSTTLoutputs StatusInRBase+1S3S75LSTTLinputs ControlOutWBase+2C0C34TTLOpenCollectoroutputs "WBase+2C4internal,IRQenable "WBase+2C5internal,Tristatedata[PS/2] DataFeedbackRBase+0D0D7normallymatchesDataOut* ControlFeedbkRBase+2C0C3normallymatchesControlOut* "RBase+2C4internal,IRQenablereadback

Se observ c citirea, respectiv scrierea de date se realizeaz direct prin utilizarea registrului de date. Pentru activarea ntreruperilor trebuie activat bitul 4 al registrului de control. Cu alte cuvinte, scrierea valorii 0x10 n cadrul registrului de control (Base + 2) duce la activarea ntreruperilor.2

Null-modemPentru testarea portului paralel, se poate configura ca null-modem. Pentru aceasta, se conecteaz unul din pinii 2-9 (pinii de date) cu pinul de ntrerupere (pinul 10 = ACK). La trecerea pinului de date din starea 0 logic n starea 1 logic se genereaz o ntrerupere. Ca model de programare, se scrie valoarea 0x00 n registrul de date, i apoi valoarea 0xFF, generndu-se, astfel, o ntrerupere.

Model de programarePortul paralel poate fi programat att din user-space ct i din kernelspace ca modul. Pentru testarea acestuia, va trebui configurat ca null-modem. n cadrul programului/modulului, se urmrete obinerea unei ntreruperi. Pentru aceasta, se activeaz ntreruperile, se genereaz o ntrerupere i apoi se dezactiveaz. Pe Linux, modelul de programare se traduce ntr-un cod de forma:/*activareintreruperiprinscriereainregistruldecontrol*/ outb(0x10,BASE+2); /*generareintrerupere*/ outb(0x00,BASE); outb(0xFF,BASE); /*dezactivareintreruperi*/ outb(0x00,BASE+2);

3