c6i7ik
In mod uzual, pentru implementarea unei interfete seriale se foloseste un circuit
(controlor) specializat care indeplineste functiile de baza ale interfetei : serializarea
datelor de iesire, generarea informatiilor de control ( biti de start, stop, paritate
la transmisia pe caracter sau cimuri de control la transmisia pe cadre), deserializarea
datelor receptionate, generarea semnalelor de control conform standardului utilizat,
pastrarea temporara a datelor receptionate si acelor ce urmeaza a fi transmise,
si altele. Procesorul are acces la canalul serial de comunicatie prin intermediul
registrelor de date, control si stare ale controlorului. In tabelul de mai jos
se prezinta registrele interfetei seriale a unui calculator compatibil IBM PC-AT.
Tabelul 2
Adresa Tip registru Tip operatie Descriere registru
XF8 Registru de date citire contine data receptionata (registru de receptie) scriere contine data ce trebuie transmisa (registru de transmisie)daca XFB.bit7=1
atunci contine partea mai putin semnificativa a divizorului de frecventa
XF9 Registru de validare intrerupere scriere D3=1- validare intrerupere generata
de modificarea starii modemului (CTS, DSR, RI)D2=1 -; validare intrerupere
generata la modificarea starii liniei (eroare sau break)D1=1 -; validare
intrerupere generata la golirea registrului de transmisie D0=0 -; validare
intrerupere generata la receptia unui caracter daca XFB.bit7=1 atunci contine
partea mai semnificativa a divizorului de frecventa
XFA Registru de identificare a intreruperii citire D2,1=00- modificare stare
linie (eroare sau break) =01- caracter receptionat =10- registru de transmisie
gol =11- modificare stare modemD0=0 -; lipsa intrerupere =1 -; prezenta
intrerupere
XFB Registru de control linie citire/ scriere D7- determina modul de utilizare
a registrelor XF8 si XF9 (D7=0 registru de date ; D7=1 registre pt. divizarea
frecventei de transmisie)D6- generare semnal de break (se genereaza zero in
mod continuu)D4,3 -; paritate (x0- fara paritate, 10-para, 11-inpara)D2-
biti de stop (0-un bit, 1- doi biti)D1,0 -; lungime caracter (00-5biti,
01-6 biti, 10-7 biti, 11-8 biti)
XFC Registru de control modem scriere D4 -; activare bucla inversa pentru
testareD3- activare OUT2D2 -; activare OUT1D1- activare RTSD0 -; activare
DTR
XFD Registru de stare linie citire D6- registru de serializare gol (transmisie)D5-
registru de transmisie golD4- indicator breakD3- eroare de cadrareD2- eroare
de paritateD1- eroare de supraincarcareD0- registru de receptie plin
XFE Registru de stare modem citire D7- detectie purtatoareD6- indicator sonerieD5-
DSRD4- CTS
Obs : X poate lua valoarea 2 sau 3.
In mod uzual un calculator compatibil IBM PC contine doua canale seriale plasate
incepind de la adresele 2F8 si 3F8. In faza de initializare a sistemului se
testeaza prezenta interfetelor seriale, si in caz afirmativ adresele canalelor
detectate se inscriu in memoria RAM, incepind de la adresa 40:00. Sistemul de
operare va asigna nume logice COM1 si COM2 adreselor de canale seriale in ordinea
in care ele sunt prezente la adresa 40:00.
Un transfer serial se poate realiza prin controlul direct al programului sau
prin intreruperi. In continuare sunt descrise in pseudocod algoritmii de transmisie
si respectiv de receptie seriala pentru primul mod de transfer (transfer prin
program).
Proc Transmisie-seriala(Buf, Nr_car)
A
Initializare_canal() ; for( i=0, i<Nr_oct ; i++)
A
Citire_reg_stare() ; contor=0 ;
while((stare_reg_transmisie !=gol SAU stare_linie==blocat) SI contor < val_max
)
ACitire_reg_stare() ; contor++ ;S if(contor>=val_max)
Aeroare() ; return ;S else
Scriere_reg_transmisie(Bufaii) ;
S
S
Proc Receptie_seriala(Buf, Nr_oct)
A
Initializare_canal() ;
For(i=0 ; I<Nr_oct ;i++)
A
Citire_reg_stare() ; contor=0 ;
while(stare_reg_receptie ==gol SI contor < val_max)
ACitire_reg_stare() ; contor++ ;S if(contor>=val_max)
Aeroare() ; return ;S else
Bufaii= Citire_reg_date() ;
S
S
In algoritmii prezentati s-au folosit urmatoarele apeluri de rutine :
- Initializare_canal() -; efecueaza programarea controlorului serial la
parametri ceruti de transmisie ; se programeaza : frecventa de transmisie, numar
de biti de date pe un caracter, numarul de biti de stop (1 sau 2), tip paritate
(fara paritate, paritate indiferenta, paritate para sau inpara),etc.
- Citire_reg_stare() -; realizeaza citirea registrului de stare linie si
stare modem si pozitioneaza corespunzator variabilele de stare ( stare_reg_receptie,
stare_reg_transmisie, stare_linie)
- Citire_reg_date() -; citeste registrul de receptie al controlorului
- Scriere_reg_date() -; scrie caracter nou in registrul de transmisie
- eroare() -; semnalizarea unei erori de transfer
Variabila contor se utilizeaza cu scopul de a limita timpul de asteptare la
transmisia sau receptia unui caracter, datorita neindepliniri conditiilor de
transmisie.
Algoritmii prezentati nu contin o schema de control al fluxului de date. Se
presupune ca unitatea receptoare poate sa prelucreze datele receptionate in
ritmul in care ele sunt receptionate pe canalul serial (timpul necesar pentru
transmiterea seriala a urmatorului caracter este suficienta pentru prelucrarea
celui precedent).