Referate Meniu
Astronomie
Biologie
Chimie
Desen
Diverse
Drept
Economie
Engleza
Filozofie
Fizica
Franceza
Geografie
Germana
Informatica
Istorie
Italiana
Marketing
Matematica
Medicina
Muzica
Psihologie
Romana
Romana1
Spaniola


 


referat, proiect, rezumat, caracterizare, lucrare de nota 10 despre:

Interfata seriala a unui calculator compatibil IBM PC-AT

Interfata seriala a unui calculator compatibil IBM PC-AT

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 is222n7475kssh

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 modem
D0=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 testare
D3- activare OUT2
D2 – activare OUT1
D1- activare RTS
D0 – activare DTR
XFD
Registru de stare linie
citire
D6- registru de serializare gol (transmisie)
D5- registru de transmisie gol
D4- indicator break
D3- eroare de cadrare
D2- eroare de paritate
D1- eroare de supraincarcare
D0- registru de receptie plin
XFE
Registru de stare modem
citire
D7- detectie purtatoare
D6- indicator sonerie
D5- DSR
D4- 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)

{

Initializare_canal() ;

for( i=0, i<Nr_oct ; i++)

{

Citire_reg_stare() ; contor=0 ;

while((stare_reg_transmisie !=gol SAU stare_linie==blocat) SI contor < val_max )

{Citire_reg_stare() ; contor++ ;}

if(contor>=val_max)

{eroare() ; return ;}

else

Scriere_reg_transmisie(Buf[i]) ;

}

}

 

Proc Receptie_seriala(Buf, Nr_oct)

{

Initializare_canal() ;

For(i=0 ; I<Nr_oct ;i++)

{

Citire_reg_stare() ; contor=0 ;

while(stare_reg_receptie ==gol SI contor < val_max)

{Citire_reg_stare() ; contor++ ;}

if(contor>=val_max)

{eroare() ; return ;}

else

Buf[i]= Citire_reg_date() ;

}

}

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).