LUCRAREA NR. 6


Interfața paralelă

1. Obiectivul lucrării

În cadrul acestei lucrări se urmărește prezentarea interfeței paralele și a circuitului specializat programabil Z80 PIO, precum și modul de implementare a unui protocol CENTRONIX între un sistem cu microprocesorul Z80 și o imprimantă cu ace.

2. Considerente teoretice

Prin interfața paralelă se înțelege totalitatea circuitelor electronice și a programelor necesare pentru a realiza transfer de informații simultan pe mai multe linii. Informațiile ce se transferă sunt însoțite întotdeauna de cel puțin un semnal de control și comandă. Există întotdeauna și un răspuns din partea perifericului cu care se desfășoară comunicația.

2.1 Circuitul Z80 PIO

Există circuite programabile specializate cu ajutorul cărora se poate implementa în mod destul de simplu o interfață paralelă. Un astfel de circuit este Z80 PIO. Z80 PIO are două canale bidirecționale independente A și B, care dispun fiecare de opt linii de date bidirecționale și două linii de conversație, care controlează transferul de date.

2.1.1 Moduri de funcționare

Circuitul Z80 PIO poate funcționa în patru moduri:

  1. Modul 0 (ieșire pe octet): - oricare dintre porturile A sau B poate fi programat pentru o ieșire de date, ambele porturi având registre de ieșire adresate individual de CPU și în care data poate fi înscrisă în orice moment. Portul căruia i s-a cerut acest mod de lucru va activa linia RDY proprie atunci când a fost încărcat de procesor cu o constantă, comunicând perifericului că pe liniile de date informația este validă. Perifericul răspunde cu linia STB indicând că a preluat datele.
  2. Modul 1 (intrare pe octet): - porturile A sau B iau configurația de intrare. Fiecare are un registru de intrare direct adresabil de către CPU. În momentul în care procesorul a preluat datele de la port, acesta activează linia RDY cerând date de la periferic. Perifericul plasează datele și le încarcă în registrul de intrare al lui Z80 PIO cu linia STB.
  3. Modul 2 (intrare/ieșire pe octet): - este valabil doar pentru portul A, și va utiliza semnalele de conversație ale ambelor porturi. În acest caz portul B poate fi programat în modul 3. Ieșirea portului A programat în acest mod este asemănătoare celei din modul 0, dar data apare la portul A doar când ASTB este “0”. Intrarea este similară celei din modul 1, dar se utilizează semnalele de conversație și întrerupere ale portului B.
  4. Modul 3 (pe bit): - pot fi folosite ambele porturi, biții individuali ai lor fiind definiți fie ca ieșiri fie ca intrări. Semnalele RDY și STB nu sunt utilizate.

2.1.2 Structura internă

Circuitul Z80 PIO conține o interfață pentru magistrala unității centrale, o parte logică internă de control, logica de intrare/ieșire pentru portul A și pentru portul B și logica de control a întreruperilor (figura 6.1).

Fiecare port are registre de intrare și de ieșire și o logică de control a conversației. Transferurile de date între dispozitivul periferic și CPU utilizează registrele de intrare și de ieșire a datelor. Logica de conversație asociată fiecărui port controlează transferul de date prin registrul de intrare sau de ieșire.

2.1.3 Terminalele circuitului

A0-7 – magistrala bidirecțională cu trei stări a portului A;

ARDY – ieșire RDY a portului A;

/ASTB – intrarea STB a portului A;

B0-7 – magistrala bidirecțională cu trei stări a portului B;

BRDY – ieșire RDY a portului B;

/BSTB – intrarea STB a portului B;

B/ /A – intrare de selecție care definește portul făcut accesibil în timpul unui transfer de date între unitatea centrală și circuitul PIO; un “0” pe această linie selectează portul A, iar “1” selectează portul B;

C/ /D – intrare de selecție care definește tipul datei ce se transferă între unitatea centrală și PIO; un “1” în timpul unei scrieri face ca informația de pe magistrala de date să fie interpretată ca o comandă pentru portul selectat de linia B/ /A; un “0” arată că pe magistrala de date se transferă date între CPU și PIO;

/CE – intrare de validare a circuitului PIO;

CLK – intrare de tact;

C/ /D

B/ /A

Semnificație

0

0

Date pentru portul A

0

1

Date pentru portul B

1

0

Comenzi pentru portul A

1

1

Comenzi pentru portul B

Tabelul 6.1

D0-7 – magistrala de date utilizată pentru transferul de date și comenzi între CPU și PIO;

IEI – intrare de validare a întreruperilor;

IEO – ieșire de validare a întreruperilor;

/INT – ieșire pentru cerere de întrerupere;

/IORQ – cerere de intrare/ ieșire, activat de CPU și este folosit la selecția circuitului;

/M1 – intrare care indică primul ciclu mașină; provine de la CPU și este utilizat la controlul unor operații interne;

/RD – intrare care indică o operație de citire.

2.1.3 Programarea circuitului

Fiecare canal din Z80 PIO are asociat câte un port de comandă și unul de date. Distincția între ele se face prin linia C//D.

Cuvântul de comandă:

2.2 Protocolul CENTRONIX

Acest protocol permite comunicarea cu o imprimantă prin intermediul unei interfețe paralele.

t1 = min 500ns; t2 = min 500ns; t3 = min 500ns

Semnalul /STB validează datele plasate pe magistrala de date. Este semnal de intrare pentru imprimantă. Semnalul BUSY este de ieșire. Prin intermediul lui imprimanta indică faptul că este ocupată și nu poate recepționa date.

3. Mersul lucrării

Să se realizeze tipărirea la imprimantă a unui șir de caractere (v. Anexa 3.). Pentru comunicația dintre sistem și imprimantă este folosit protocolul CENTRONIX. Se va realiza o rutină de afișare a unui caracter, rutină ce va fi apelată din cadrul programului principal. Se vor vizoaliza liniile de comunicație cu ajutorul osciloscopului.

Obs. Imprimanta va tipări textul primit doar la umplerea tamponului sau la primirea unei secvențe <CR><LF>.