Lucrare de laborator nr.1
TRANSMISIE ASINCRON_ REALIZAT_ CU CIRCUITE SIO-Z80 sau I 8250
Scopul lucr_rii
Lucrarea are ca scop cunoa_terea facilit__ilor pentru comunica_ie _i exersarea transmisiei asincrone între dou_ calculatoare, pe linie serial_, cu ajutorul circuitelor SIO- Z80 sau I 8250.
Considera_ii teoretice
Folosirea circuitului SIO-Z80
Func_ia pricipal_ a circuitului este transformarea serie-paralel, paralel-serie _i comanda transferului de date. Având func_ii multiple programabile, circuitul se poate adapta la cele mai variate moduri de transmisiuni seriale.
Circuitul SIO-Z80 poate realiza transfer asincron sau sincron pe dou_ canale complet independente.
Cele mai importante caracteristici ale circuitului sunt:
-capsula DIP cu 40 de pini;
-alimentare cu o singur_ tensiune +5Vcc;
-ceas cu o singur_ faz_ de 5V tensiune de vârf;
-toate intr_rile _i ie_irile sunt compatibile TTL;
-are doua canale full duplex total independente;
-viteza 0-550 Kbps la ceas de 2.5 MHz;
-registru de intrare cu tampon de 4 caractere;
-registru de ie_ire cu tampon de 2 caractere;
-caracteristici pentru transmisia asincron_:
-caractere de 5,6,7sau 8 bi_i;
-1, 11/2 sau 2 bi_i de STOP;
-paritate par_, impar_ sau f_r_ paritate;
-detectare erori de paritate, de cadru sau dep__ire;
-detectare _i generare de pauz_;
Fuc_ionare în regim asincron
Înainte de a începe un transfer asincron cu SIO-Z80, acest circuit trebuie programat cu parametrii transferului:
-lungime caracter;
-numar bi_i de stop;
-paritate;
-mod întreruper 111m126b e;
-regim de lucru emisie/recep_ie;
Programarea se face prin înscrierea regi_trilor de parametrii (regi_tri de scriere). De re_inut c_ WR4 trebuie înscris înainte de WR1, WR3 _i WR5.
Dac_ datele sosesc prin modem sau interfa_a RS-232C, bitul de validare a transmisiei (TE) trebuie trimis împreuna cu semnalele -RTS _i -DTR. Transferul nu are loc pân_ nu se înscrie bitul de validare a transmisiei. (- înseamn_ c_ semnalul este activ pe 0).
Validarea automat_ a SIO-Z80 permite programatorului s_ transmit_ primul caracter f_r_ s_ a_tepte semnalul -CTS. Dac_ bitul de validare automat_ D5 în WR3 e pe 1 înainte de a începe transferul, SIO-Z80 a_teapt_ ca -CTS s_ treac_ în 0. Semnalele - CTS, -DCD _i -SYNC se pot folosi - pe lâng_ func_iile obi_nuite - _i ca semnale de I/E. (-CTS se poate folosi numai dac_ bitul de validare automat_ e pe 0).
Formatul caracterului asincron este urmatorul:
START |
D0 |
D1 |
. . . |
Dn |
P |
STOP |
STOP 1, 1˝ sau 2 bi_i
n=5,6,7sau 8
P(bit paritate) prezent sau nu
Registrele WR3-WR5 se încarc_ cu parametrii transmisiei. WR2 con_ine vectorul de întreruperi numai pentru canalul B iar WR1 stabile_te modurile de întreruperi _i de transfer. În modul asincron WR6 _i WR7 nu se folosesc.
Se prezint_ în continuare o secven__ tipic_ de program pentru a stabili emisie/recep_ie full duplex pe un canal:
1) STABILIRE CONDI_II INI_IALE
Se execut_ ac_iunile de înscriere:
-în WR0 -_TERGERE CANAL (RESET SIO-Z80)
-în WR0 -POINTER 2 (URMEAZ_ WR2)
-în WR2 -VECTOR DE ÎNTRERUPERE (NUMAI CANAL B)
-în WR0 -POINTER 4 _I RESET ÎNTRERUPERE EXTERN_
-în WR4 -PARAMETRII (mod asincron, paritate, rat_, etc.)
-în WR0 -POINTER 3
-în WR3 -PARAMETRII RECEP_IE
-în WR0 -POINTER 5
-în WR5 -PARAMETRII EMISIE ; aici parametrii emisiei _i recep_iei sunt stabili_i, validarea automat_ a emisiei se face cu -CTS iar a recep_iei cu -DCD
-în WR0 -POINTER 1 _i _tergere întreruperi externe
-în WR1 -validare întreruperi la fiecare caracter recep_ionat, la emisia fiec_rui caracter, validare întreruperi externe; înhibare WAIT/READY; modificare stare vector de întrerupere
OBSERVA_IE: S-a selectat regim de lucru pe baz_ de întreruperi la recep_ie _i emisie. Cu întrerupere extern_ generat_ de intr_rile -CTS, -DCD, -SYNC sau secven_a Break. Modificarea vectorului de întreruperi se refer_ numai la canalul B
-transmisie la SIO-Z80 a primului caracter (altfel nu va fi întrerupere la emisie)
STARE DE A_TEPTARE
;se execut_ orice program care va fi întrerupt de SIO-Z80, vectorul de întrerupere arat_ cauza întreruperii
3a) RUTINA RECEP_IE CARACTER
-la întrerupere se încarc_ RR2 în UCP (aici se g_se_te vectorul de întreruperi )
-citire caracter din SIO-Z80
-refacere parametrii _i pointeri
-întoarcere din întrerupere RTI
3b) RUTINA DE ÎNTRERUPERE "BUFFER EMISIE GOL"
-transmisie caracter la SIO-Z80
-refacere parametrii _i pointeri
-RTI
3c) RUTINA DE ÎNTRERUPERE EXTERN_/STARE
-citire RR0 în UCP
-execu_ie rutin_ eroare corespunz_toare
-RTI
3d) RUTINA DE ÎNTRERUPERE EXTERN_/STARE
-citire RR1 în UCP
-execu_ie rutin_ eroare corespunzatoare
-RTI
TERMINARE
-redefinire mod întreruperi emisie/recep_ie, dac_ s-a terminat emisia sau recep_ia
-înhibare mod emisie _i recep_ie
-stabilire ie_iri modem (la emisie bitul "all sent status" arat_ sfâr_itul transmisiei)
OBSERVA_II PRIVIND TRANSMISIA ASINCRON_
-ie_irea emi__torului în repaus este în '1'; se poate for_a în '0' cu Break (WR5-D4)
-SIO-Z80 adaug_ automat la caracterul de emis primit de la UCP bi_ii START STOP _i de paritate!
-datele seriale apar la ie_irea TxD cu frecven_a 1/1, 1/16, 1/32 sau 1/64 din frecven_a semnalului TxC; datele apar pe frontul c_z_tor al TxC
-la validarea întreruperii externe semnalele -DCD, -CTS _i -SYNC pot cere întrerupere (daca sunt active un anumit timp); La emisie aceast_ proprietate a SIO-Z80 se folose_te pentru verificarea semnalului -CTS al modemului.
OBSERVA_II PRIVIND RECEPTIA ASINCRON_
- recep_ia începe cu pozi_ionarea bitului de validare a recep_iei; dac_ s-a programat validare automat_ e necesar ca _i -DCD s_ fie pe '0'
- pe intrarea RxD nivelul '0' înseamn_ bitul de START care trebuie s_ fie pe '0' 11/2 perioade de ceas
- la ceas de 1/1 sincronizarea trebuie facut_ din exterior
- receptorul testeaz_ linia RxD pe frontul cresc_tor al TxC
- registrul de deplasare de recep_ie are în continuare 3 regi_trii astfel ca UCP s_ aibe suficient timp pentru servirea întreruperii; bi_ii de control _i de eroare se memoreaz_ la fel în 4 regi_trii consecutivi.
- eroarea de paritate se produce (RR1-D4) dac_ paritatea caracterului intrat nu coincide cu paritatea programat_ la receptor.
- se produce eroare de ritm/cadru (framing) (RR1-D6) dac_ caracterul sose_te f_r_ bi_i de stop; aceast_ eroare nu se memoreaz_!
- se produce eroare de suprapunere (overrun) (RR1-D5) daca receptorul prime_te mai mult de 3 caractere _i UCP n-a citit nici un caracter; aceast_ eroare ca _i eroarea de paritate se poate _terge numai prin RESET; la aceast_ eroare penultimul caracter se pierde
- se recomand_ ca în rutinele de servire a diferitelor întreruperi s_ se citeasc_ mai întâi registrul de stare _i apoi datele!
- la modul de transfer programat între SIO-Z80 _i UCP, UCP verific_ bitul 'caracter recep_ionat disponibil' (RR0-D0); dup_ citirea efectiv_ de UCP a acestui caracter, acest bit se _terge automat.
PROGRAMAREA CIRCUITULUI DE COMUNICA_IE
SERIAL_ UART 8250
Circuitele de tip UART (Universal Asynchronous Receiver Transmiter) si de tip USART(Universal Synchronous Asynchronous Receiver Transmiter) îndeplinesc urm_toarele sarcini principale în procesul comunic_rii între calculatoare:
- conversia semnalelor paralele de la unitatea central_ a calculatorului în semnale seriale pentru transmisia spre exterior _i invers
- ad_ugarea la emisie a bi_ilor de START, STOP _i paritate precum _i eliminarea lor la recep_ie
- transmiterea fiec_rui bit la viteza setat_, calculul bitului de paritate dac_ e necesar _i raportarea erorilor generate în timpul comunica_iei
- generarea semnalelor de control a comunica_iei conform protocolului dorit precum _i testarea st_rii lor
Principalii pini de conectare ai unui circuit de tip UART sunt: pinii pentru transferul datelor paralele (în num_r de opt), doi pini pentru recep_ia _i emisia datelor seriale, pini pentru semnalele de ceas dup_ care se calculeaz_ viteza de comunica_ie, pini pentru semnalele de comand_ sau de stare, pini pentru semnale de întrerupere, pin pentru selec_ia circuitului _i pini pentru semnalele de tip 'hand- shake' de sincronizare cu exteriorul.
Circuitul posed_ trei tipuri de registre:
- registre de control
- registre de stare
- registre tampon pentru date
Registrele de control
Exist_ patru registre de control folosite pentru a primi comenzi de la unitatea central_ _i anume: registrul de control al liniei, registrul de control al modemului, registrul pentru întreruperi _i registrele pentru stabilirea vitezei de comunica_ie.
Registrul de control al liniei este folosit pentru stabilirea parametrilor comunica_iei; are urmatoarea specifica_ie:
bi_ii 0 _i 1 sunt folosi_i pentru stabilirea lungimii caracterului astfel:
Bit 0 Bit 1 Lungime caracter (bi_i)
0 0 5
0 1 6
1 0 7
1 1 8
bitul 2 stabile_te num_rul de bi_i de STOP folosi_i, astfel:
bit 2=0 implic_ folosirea unui bit de STOP
bit 2=1 implic_ folosirea a doi bi_i de STOP cu excep_ia cazului în care lungimea caracterului este de 5 bi_i _i când specific_ folosirea a un bit _i jumatate de STOP.
bitul 3 permite folosirea parit__ii, astfel:
bit 3=0 implic_ nefolosirea parit__ii
bit 3=1 implic_ folosirea parit__ii
bitul 4 selecteaz_ tipul parit__ii folosite, astfel:
bit 4=0 selecteaz_ paritate par_
bit 4=1 selecteaz_ paritate impar_
(el este folosit în conjunc_ie cu bitul 3).
bitul 5 este folosit la setarea bitului de paritate, astfel:
bit 5=0 seteaz_ bitul de paritate la 1 logic
bit 5=1 seteaz_ bitul de paritate la 0 logic
bitul 6 este folosit la generarea comenzii de break, respectiv la trecerea ie_irii în zero logic (starea SPACE) cât timp bitul este setat
bitul 7 numit _i 'bit de acces la registrul divizor' are semnifica_ia:
bit 7=0 implic_ ca o opera_ie de citire/scriere s_ acceseze registrele de emisie/recep_ie sau de întreruperi
bit 7=1 implic_ ca o opera_ie de citire/scriere s_ acceseze registrul divizor ce fixeaz_ rata de transmisie
Registrul de control al modemului
Specifica_ia bi_ilor acestui registru este urmatoarea:
bit 0 dac_ este setat la 1 logic pune ie_irea DTR (Data Terminal Ready) la 0 logic permi_ându-se astfel unui dispozitiv extern s_ emit_ c_tre calculatorul a c_rui circuit 8250 îl program_m
bit 1 dac_ este setat la 1 logic opereaz_ în acela_i mod asupra semnalului RTS (Request to Send)
bi_ii 2 _i 3 opereaz_ asupra unor ie_iri definite de utilizator numite OUT1 _i OUT2; pot fi folosi_i pentru controlul semnalelor CD _i RI (Carrier Detect _i Ring Indicator), dar la IBM-PC bitul 3 trebuie s_ fie setat pentru a permite folosirea întreruperilor
bit 4 activeaz_ modul de lucru de test _i diagnostic
bi_ii 5-7 sunt permanent zero
Registrul de permisiune a întreruperilor
Este folosit pentru specificarea cauzei generarii întreruperii:
bit 0 seteaz_ ca _i condi_ie de întrerupere existen_a datelor
bit 1 seteaz_ condi_ia de 'registru de transmisie gol'
bit 2 seteaz_ ca _i condi_ie starea liniei de recep_ie
bit 3 propune modemul ca _i generator de întrerupere
bi_ii 4-7 sunt men_inuti la zero logic
Regi_trii divizori ai ratei de transmisie
Rata de transmisie (baud rate) se stabile_te prin divizarea ceasului (1,84MHz) cu un num_r setat în ace_ti doi regi_tri, rezultând o frecven_a de 16 ori rata de transmisie. Tabelul de mai jos d_ valorile înscrise în registre pentru ob_inerea celor mai uzuale rate:
Baud rate LSB MSB
300 1h 80h
1200 0 60h
2400 0 30h
4800 0 18h
9600 0 0Ch
Registrele de stare
Registrul de stare al liniei
Este folosit pentru ob_inerea de informa_ii asupra corectitudinii emisiei sau recep_iei datelor. Semnifica_ia bi_ilor este urmatoarea:
bit 0 -Data ready-specific_ dac_ este 1 logic ca un caracter a fost recep_ionat _i plasat în registrul de recep_ie
bit 1 -Overrun error-specific_ dac_ este setat ca un caracter a fost recep_ionat înainte ca anteriorul s_ fi fost procesat
bit 2 -Parity error-dac_ este setat indic_ faptul c_ ultimul caracter recep_ionat are bitul de paritate eronat
bit 3-Framing error-dac_ e setat indic_ faptul c_ ultimul bit sosit are bit de stop eronat
bit 4-Break interrupt-indic_ recep_ia unui 'break', adic_ linia de recep_ie a fost _inut_ la zero un timp mai mare decât durata unui caracter
bit 5-Transmitter holding register empty- indic_ faptul c_ circuitul UART este preg_tit s_ primeasc_ un nou caracter pentru a-l emite
bit 6-Transmitter shift register empty-indic_ c_ UART-ul nu este în procesul de emisie a unui caracter; starea acestui bit nu e testat_ de programele de comunica_ie
bit 7- bit _inut la zero
Registrul de stare modem
Con_ine informa_ii despre starea liniilor de comunica_ie cu modemul (cu exteriorul).
bit 0 specific_ dac_ a avut loc o modificare a semnalului CTS
bit 1 se refer_ la modificarea semnalului DSR
bit 2 indic_ trecerea din starea ON în starea OFF a lui RI
bit 3 indic_ schimbare pe linia de recep_ie
bit 4 indic_ starea HIGH pentru linia CTS
bit 5 indic_ starea HIGH pentru linia DSR
bit 6 indic_ starea HIGH pentru linia RI
bit 7 indic_ starea HIGH pentru linia de recep_ie
O parte a bi_ilor (bi_ii 0,1,3)indic_ schimbarea st_rii liniilor respective , lucru folosit la generarea întreruperilor de stare modem.Al_i bi_i (de la 4 la 7) indic_ prin valoarea lor starea liniei :bit=1 indic_ stare HIGH a liniei corespunz_toare, lucru folosit la programarea circuitului în modul interogare (polling).
Registrul de identificare a întreruperii
Registrul de identificare a întreruperii d_ informa_ii despre starea întreruperilor în a_teptare.
bit 0=1 semnific_ neexisten_a întreruperilor în a_teptare
bit 0=0 indic_ întreruperi în a_teptare , tipul ei fiind dat de bi_ii 1 _i 2 conform urm_torului tabel:
bit 2 bit1 tip întrerupere
1 1 stare linie
1 0 data recep_ionat_
0 1 registru de transmisie gol
0 0 stare modem
Bi_ii 3-7 sunt seta_i zero.
Registrele tampon
Circuitul are dou_ registre tampon : unul de recep_ie-care p_streaz_ ultimul caracter recep_ionat, _i unul de emisie - care p_streaz_ urm_torul caracter ce va fi transmis.
Programarea circuitului
1. Folosirea metodei interog_rii (polling)
Dac_ se folose_te metoda interog_rii _i nu se folose_te de loc metoda întreruperilor, primul pas este de inactivare a lor prin setarea la zero a registrului de permisiune a întreruperilor. Dac_ se dore_te transmisia unei secven_e, programul va consta într-o bucla ce va dura cât timp sunt caractere de transmis. În cadrul ei se va citi periodic registrul de stare a liniei _i registrul de stare a modemului. Când registrul tampon de emisie este gol _i semnalele de modem sunt active poate avea loc transmisia caracterului.
Procesul de recep_ie este similar în sensul c_ întâi se activeaz_ semnalele de modem pentru preg_tirea liniei de comunica_ie, apoi se intr_ în bucla în care se testeaz_ registrul de stare linie- bitul ce indic_ recep_ia unui caracter- dup_ care se preia caracterul din registrul buffer de recep_ie.
2. Folosirea metodei întreruperilor
Pentru programarea UART pentru transfer prin întreruperi, pe lânga opera_iile uzuale, este nevoie de una suplimentar_ ce se datoreaz_ unui defect de proiectare în calculatorul IBM-PC. Este vorba de secven_a:
mov dx,3fch ;registrul control modem
mov al,8
out dx,al
care are ca efect pozi_ionarea ie_irii OUT2 a UART pe 1 _i ca atare validarea liniei IRQ4 pe care e conectat UART( ca COM1, c_ci COM2 e legat la IRQ3) . În mod normal OUT2 n-ar trebui s_ influen_eze programarea UART în întreruperi.
E necesara resetarea UART înainte de programare; ea se face prin citiri sau scrieri în registre, astfel:
mov dx,3f9h; registru validare întreruperi
mov al,0
out dx,al
mov dx,3fdh; registru stare linii date
in al,dx
mov dx,3feh; registru stare modem
in al,dx
mov dx,3f8h; registru transmisie/recep_ie
in al,dx
mov dx,3fah; registru identificare întreruperi
in al,dx
Se remarc_ faptul c_ adresele porturilor de intrare / ie_ire pentru comunica_ia serial_ la calculatoarele compatibile PC constituie o serie ce începe de la adresa 3F8H pentru primul adaptor (COM1) _i 2F8H pentru al doilea, la care se adaug_ un offset corespunz_tor pentru adresarea fiec_rui registru UART, dup_ cum se arat_ în tabela urm_toare:
offset adr.COM1 adr.COM2 registru selectat
0 3F8 2F8 TX buffer
0 3F8 2F8 RX buff.
0 3F8 2F8 octet divizor LSB
1 3F9 2F9 octet divizor MSB
1 3F9 2F9 valid. întreruperi
2 3FA 2FA identif. întrerupere
3 3FB 2FB control linii
4 3FC 2FC control modem
5 3FD 2FD stare linii
6 3FE 2FE stare modem
Priorit__ile interne în cadrul sistemului de întreruperi sunt fixe, ele având urmatoarea ordine descresc_toare: stare linie recep_ie, date recep_ie, registru emisie gol, stare modem.
Exemplu de programare:
mov dx,3fbh;registru control linii
in al,dx
mov bl,al
mov al,80h
out dx,al;pozi_ionare registru divizor
mov dx,3f8h;octet divizor inferior
mov al,5;fixare rata de transmisie(23040bd)
out dx,al
mov dx,3f9h;octet divizor superior
xor al,al
out dx,al
mov al,bl;refacere
and al,7bh
or al,1bh ;control linii
mov dx,3fbh
out dx,al
in al,dx
and al,7fh
out dx,al ;validare întreruperi
mov al,1
mov dx, 3f9h
out dx,al
Mersul lucr_rii
1. Se studiaz_ rutinele de programare oferite, încercând în_elegerea lor.
2. Pe baza scheletului prezentat s_ se scrie rutinele pentru 2 calculatoare FELIX-PC (având interfa_a serial_ cu) care s_ transfere un bloc de date de lungime fix_ (de ex. 128 octe_i). Adresele porturilor se vor lua din documenta_ia calculatorului.
3. Se vor compara programele scrise cu cele din laborator, observând _i explicând diferen_ele.
4. Se va r_spunde la urmatoarele întreb_ri :
- cum se stabile_te viteza de transmisie
- ce erori se pot produce _i cum se elimin_ ele
Probleme suplimentare:
5. Completa_i rutinele scrise pentru func_ionare fullduplex
6. Completa_i rutinele scrise pentru a realiza transferul unui fi_ier cu sau f_r_ verificare!
|