În cadrul acestei lucrări se va prezenta interfața serială bazată pe circuitul 8250.
Prin interfața serială se înțelege ansamblul circuitelor și programelor de bază care asigură comunicația între unitatea centrală (procesor) și un dispozitiv periferic care transferă informașia bit după bit.
Interfața serie se folosește atunci când distanța de comunicație este mare (> 1.50 m). Pe distanțe mari riscul de perturbare a informației este mare; cu cât numărul de linii este mai mic cu atât posibilitatea de perturbare scade.
Vitezele de transfer pe linie au fost standardizate, există anumite trepte de viteză bine determinate. Unitatea de măsură a vitezei de transfer pe liniile seriale este 1 baud = 1 bit/sec.
Transferul serie este de trei tipuri:
- simplex
- semiduplex
- dulpex
Din punctul de vedere al organizării comunicația serială poate fi:
- asincronă - caracterizată prin transferul unui caracter la un moment dat. Când pe linia de comunicație nu circulă informații ea este în starea inactivă (1). În momentul în care emițătorul dorește să transfere un caracter el începe prin activarea la 0 a liniei pentru o perioadă corespunzătoare cu durata unui bit. Acest bit de 0 are rol de start și folosește la sincronizarea receptorului. Receptorul testează în permanenșă linia iar în momentul în care sesizează apariția unui 0 repetă testul după o durată egală cu 1/2 din durata unui bit. Dacă regăsește linia pe 0 consideră că acesta este bitul de start și în continuare citește linia cu o perioadă egală cu durata unui bit. Deci receptorul va citi bișii de pe linie la aproximativ 1/2 din durata lor. Transmițătorul după ce a plasat bitul de start, plasează rangurile de date după care plasează un eventual rang opțional de paritate după care transferul se încheie prin plasarea pe linie a 1, 1 1/2 sau 2 biți de stop (1).
- sincronă - constă în transferul datelor fără informația de cadrare, dar numai sub formă de blocuri și precedate de 1-5 octeți de sincronizare. Octeții de sincronizare au rolul pe care îl are bitul de start de la transferul asincron. Receptorul citește linia, asamblează informația ce sosește pe linie și compară caracterul sosit cu cel de sincronizare, pe care-l știe din faza de programare. Dacă au fost identificași octeții de sincronizare se vor prelua în continuare datele. Datele pleacă pe linie cu cadență fixă dată de un tact. Și aici emițătorul poate începe o transmisie când dorește, dar trebuie să transmită tot blocul de date.
- izocronă - fiecare caracter are informația de cadrare, dar distanța în timp dintre două caractere succesive trebuie să fie un multiplu al duratei unui caracter.
8250 este un circuit specializat pentru realizarea comunicțiilor seriale. Circuitul este programabil și suportă doar modul de comunicație asincron. Acesta va adăuga biții de start, biții de stop și cei de control al parității. Viteza de comunicație este programabilă și este cuprinsă între 50 baud și 9600 baud. Lungimea cuvântului este și ea programabilă și poate fi de 5, 6, 7 sau 8 biți cu 1, 1 1/2 sau 2 biți de stop.
CS0, CS1, /CS2 (Chip Select) - când CS0 = CS1 = 1 și /CS2 = 0, circuitul este selectat. Selectarea circuitului este completă atunci când semnalul de selecție de la decodificator este însoțit de un semnal /ADS (Address Strobe) activ pe 0. Acesta permite comunicarea între 8250 și procesor.
DISTR, /DISTR (Data Input Strobe) - dacă semnalele sunt active în timp ce circuitul este selectat are loc citirea informației din registrul de stare sau a unei date din registrul selectat. Numai una din cele două intrări trebuie să fie activă la un moment dat.
DOSTR, /DOSTR (Data Output Strobe) - când unul dintre semnale este activ și circuitul este selectat procesorul poate înscrie o dată sau un cuvânt de comandă în registrul selectat.
/ADS (Address Strobe)
A0, A1, A2 (Register Select) - intrări pentru selecția registrelor.
DLAB |
A2 |
A1 |
A0 |
Register |
0 |
0 |
0 |
0 |
Receiver Buffer (Read)/ Transmitter Holding Register (Write) |
0 |
0 |
0 |
1 |
Interrupt Enable |
x |
0 |
1 |
0 |
Interrupt Identification Register (Read Only) |
x |
0 |
1 |
1 |
Line Control |
x |
1 |
0 |
0 |
Modem Control |
x |
1 |
0 |
1 |
Line Status |
x |
1 |
1 |
0 |
Modem Status |
x |
1 |
1 |
1 |
None |
1 |
0 |
0 |
0 |
Divisor Latch (Least Significant Byte) |
1 |
0 |
0 |
1 |
Divisor Latch (Most Significant Byte) |
Tabelul 5.1
MR (Master Reset) - intrare de reset. Când este activă șterge toate registrele cu excepția registrelor de recepție și a celor de divizare.
RCLK (Receiver Clock) - intrare de tact pentru recepție (este 16*rata de transfer).
SIN (Serial Input) - intrare de date de pe linia serială.
/CTS (Clear to Send) - linie de contro în comunicația cu modemul.
/DSR (Data Set Ready) - linie de contro în comunicația cu modemul.
/RLSD (Received Line Signal Detect) - linie de control în comunicația cu modemul.
/RI (Ring Indicator) -
/DTR (Data Terminal Ready) -
/RTS (Request to Send) -
/OUT1, /OUT2 (Output) -
CSOUT (Chip Select Out) - este răspunsul circuitului la o activare a semnalelor CS0, CS1, /CS2. Nu se poate face nici un transfer cu 8250 până când acest semnal nu este activat.
DDIS (Driver Disable) - acest semnal este pus pe 0 când procesorul citește date de la circuitul 8250. El poate fi utilizat pentru comanda unui transceiver, dacă există pe magistrala de date între procesor și 8250.
/BAUDOUT (Baud Out) - semnal de tact pentru transmisie.
INTRPT (Interrupt) - semnal activ pe 1 și lansează o cerere de întrerupere l procesor când apare unul din următoarele evenimente: eroare la recepție, dată recepționată disponibilă, buffer de transmisie gol, modificare stare modem.
SOUT (Serial Output) - linie de transmisie serială de date.
D0-D7 (Data) - linii de conectare la magistrala de date.
XTAL1, XTAL2 (External Clock Input/Output) - intrări pentru semnal de tact extern.
Procesorul poate avea acces la oricare din registrele circuitului 8250.
Registrul de control (Line Control Register)
Biții 1 și 0 indică lungimea caracterului transmis:
WLS1 |
WLS0 |
Lungimea caracterului |
0 |
0 |
5 Biți |
0 |
1 |
6 Biți |
1 |
0 |
7 Biți |
1 |
1 |
8 Biți |
Tabelul 5.2
Bitul 2 indică numărul de biți de stop:
Bitul 3 indică dacă se folosește sau nu un bit de paritate în transmisie sau recepție.
Bitul 4 selectează tipul de paritate.
Bitul 5 - dacă bitul 3 este pe 1 și bitul 5 este tot pe 1 atunci bitul de paritate este transmis și este detectat la recepție ca 0 dacă EPS=1 sau ca și 1 dacă EPS=0.
Bitul 6 - set break control bit. Când este pe 1, linia de ieșire serială (SOUT) este forșată pe 0 și rămâne așa indiferent de aparișia altor activități de tramsmisie. Această stare este dezactivată prin punerea acestui bit pe 0. Această caracteristică permite procesorului să alerteze un terminal într-un sistem de comunicație.
Bitul 7 este bitul de acces la registrul pentru divizarea ratei:
Registrele de divizare
Generatorul ratei de transfer preia tactul de intrare și îl împarte cu orice număr cuprins între 1 și 216 - 1, număr aflat în registrele de divizare. Frecvența de ieșire a generatorului este 16x rata.
divisor = (frecvența de intrare) / (baud rate x 16)
Numărul cu care se divide tactul este stocat în două registre, care se încarcă în timpul inițializării, cu valorile corespunzătoare ratei de transfer dorite.
Registrul de stare
Bitul 0 = 1 - s-a recepționat un caracter și a fost transferat în buffer-ul de recepție.
Bitul 1 = 1 - indică faptul că data din buffer-ul de recepție nu a fost citită de către procesor înaintea recepționării unui alt caracter. Astfel că acest prim cuvânt a fost pierdut. Bitul OE este pus pe 0 la citirea registrului de stare de către procesor.
Bitul 2 - indică apariția unei erori de paritate.
Bitul 3 - apariția unei erori de cadru. Caracterul recepționat nu are bitul de stop valid. Acest bit este pus pe 1 de fiecare dată când bitul de stop ce urmează după ultimul bit de date sau după bitul de paritate, este 0.
Bitul 4 - indică dacă linia de recepție este în starea 0 o perioadă de timp mai mare decât timpul necesar transmisiei complete a unui caracter. Înseamnă că transmițătorul a forțat linia pe 0 (Set Break).
Bitul 5 - indică procesorului că 8250 este pregătit pentru a primi un nou caracter ce trebuie transmis. Acest bit este setat la 1 când un caracter este transferat din buffer-ul de transmisie în registrul de serializare. Bitul este resetat la 0 când procesorul încarcă buffer-ul de transmisie cu un nou caracter.
Bitul 6 - indică faptul că registrul de serializare este gol. Bitul este pus pe 0 odată cu încărcare unui nou caracter din buffer-ul de transmisie.
Registrul de identificare a întreruperii
Modul de lucru al circuitul 8250 cu întreruperile oferă o flexibilitate ridicată și permite interfațarea lui cu aproape toate procesoarele cunoscute. Pentru a minimiza încărcarea programului de comunicație serială, 8250 realizează o prioritizare a întreruperilor în patru nivele:
Când acest registru este citit de către procesor el indică doar cererea de întrerupere cea mai prioritară care este în așteptare și numai după ce a fost satisfăcută această cerere el va indica și celelalte cereri ce așteaptă dar care au nivel de prioritate mai mic.
Dacă bitul 0 este pe 1 nici o cerere de întrerupere nu este în așteptare.
Bitul 2 |
Bitul 1 |
Bitul 0 |
Nivel de prioritate |
Tipul întreruperii |
Sursa întreruperii |
ªtergerea întreruperii |
0 |
0 |
1 |
- |
- |
- |
- |
1 |
1 |
0 |
1 |
Starea liniei la recepție |
Eroare de ritm Eroare de paritate Eroare de cadrare Break interrupt |
Citirea registrului de stare |
1 |
0 |
0 |
2 |
Caracter recepționat disponibil |
Caracter recepționat disponibil |
Citirea buffer-ului de recepție |
0 |
1 |
0 |
3 |
Buffer de transmisie gol |
Buffer de transmisie gol |
Citirea IIR sau Scrierea unui nou caracter în buffer-ul de transmisie |
0 |
0 |
0 |
4 |
Stare modem |
Clear to Send Data Set Ready Ring Indicator Received Line Signal Detect |
Citirea registrului de stare pentru modem |
Tabelul 5.3
Registrul de validare a intreruperilor
Acest registru permite ca cele patru surse de întrerupere să activeze separat linia de cerere de întrerupere INTRPT. Sistemul de întreruperi se poate dezactiva prin resetarea biților 3-0 ai acestui registru.
În cadrul laboratorului se va realiza interfațarea sistemului cu microprocesorul Z80 cu un terminal prin intermediul interfeței seriale. Pentru aceasta se vor realiza: