Sunteți pe pagina 1din 28

Sisteme de intrare/ieire i echipamente periferice 1

1. PORTUL SERIAL

Aceast lucrare de laborator prezint principiile comunicaiei seriale i descrie contro-


lerele utilizate de porturile seriale ale calculatoarelor personale. Mai nti, este introdus mode-
lul comunicaiei seriale, sunt prezentai parametrii comunicaiei seriale i sunt explicate cele
dou tipuri de baz de comunicaie serial, asincron i sincron. n continuare, sunt prezenta-
te semnalele interfeei seriale, sunt explicate metodele pentru controlul fluxului de date i sunt
descrise tipurile de conectori i cabluri. Dup prezentarea principalelor caracteristici ale unor
circuite UART, sunt descrise detaliat registrele familiei de circuite UART 16x50. Aplicaiile
propuse au ca scop transferul unor mesaje ntre dou calculatoare prin portul serial COM1.

1.1. Modelul comunicaiei seriale


Un exemplu de sistem pentru comunicaia serial este ilustrat n figura 1.1.

Figura 1.1. Sistem de comunicaie serial.

Componentele unui sistem de comunicaie serial sunt urmtoarele:


1. ETD Echipamente terminale de date (calculatoare, terminale de date). Acestea con-
in i interfeele seriale sau controlerele de comunicaie.
2. ECD Echipamente pentru comunicaia de date. Aceste echipamente se numesc mo-
demuri i permit calculatorului s transmit informaii printr-o linie telefonic analo-
gic. Funciile principale realizate de un modem sunt urmtoarele:
Conversia digital/analogic a informaiilor din calculator i conversia ana-
log/digital a semnalelor de pe linia telefonic analogic.
Modularea/demodularea unui semnal purttor. La transmisie, modemul suprapune
(moduleaz) semnalele digitale ale calculatorului peste semnalul purttor al liniei
telefonice. La recepie, modemul extrage (demoduleaz) informaiile transportate
de semnalul purttor i le transfer calculatorului.
3. Linia de comunicaie reprezint o linie fizic sau o linie telefonic. Linia telefonic
poate fi o linie comutat (conectat la o central telefonic) sau o linie nchiriat (de-
dicat).
4. Circuitul de date cuprinde poriunea dintre dou echipamente terminale de date, deci,
modemurile i linia de comunicaie. Pe distane reduse, este posibil comunicaia se-
2 1. Portul serial

rial direct ntre dou echipamente terminale de date prin linii fizice, fr utilizarea
unor modemuri. n acest caz, circuitul de date este reprezentat de aceste linii.
5. Legtura de date conine circuitul de date i interfeele seriale ale echipamentelor
terminale de date.
n funcie de numrul de echipamente interconectate, o legtur serial poate fi punct
la punct (dou echipamente) sau multi-punct (mai mult de dou echipamente).

1.2. Parametrii comunicaiei seriale


Viteza de comunicaie (numit i debit binar) este msurat n bii/s (bps):
1
D [bii/s] (1)
T
unde T este perioada de timp necesar pentru transmisia sau recepia unui singur bit.
Modemul reprezint semnalele de date prin diferite stri electrice, n funcie de tipul de
modulaie pe care l utilizeaz: frecven, amplitudine, sau faz. Fiecare stare electric este
meninut la ieirea modemului pentru un interval de timp numit perioad de modulaie ().
Viteza de modulaie este inversul perioadei de modulaie, reprezentnd numrul schimbrilor pe
secund ale strii electrice a modemului:
1
Vm [baud] (2)

Unitatea de msur a vitezei de modulaie este baud, dup numele inginerului i tele-
grafistului francez Jean-Maurice Baudot. Relaia dintre viteza de comunicaie D i viteza de
modulaie Vm este:
D = Vm log2 n [bii/s] (3)
unde n este numrul strilor electrice distincte ale modemului. n cazul particular cnd exist
doar dou stri electrice distincte ale modemului, viteza de comunicaie este egal cu viteza
de modulaie. n general ns, exist un numr mai mare de stri electrice ale modemului,
astfel nct viteza de comunicaie este un multiplu al vitezei de modulaie.
Viteza de modulaie este confundat adesea cu viteza de comunicaie (debitul binar).
Viteza de modulaie (exprimat n baud) este rata cu care se modific strile electrice ale
modemului ntr-o secund. De exemplu, dac se utilizeaz modulaia n frecven, iar frecvena
semnalului purttor se poate modifica de ctre modem cu o rat de 2.400 de ori pe secund,
viteza de modulaie este de 2.400 baud. Primele modemuri codificau un bit de 0 printr-o anumit
frecven i un bit de 1 printr-o alt frecven. n acest caz particular, viteza de modulaie are
aceeai valoare cu viteza de comunicaie. n general ns, modemurile codific mai muli bii de
informaie printr-o stare electric. De exemplu, dac modemul codific 4 bii de informaie
printr-o anumit frecven, pentru exemplul anterior viteza de comunicaie va fi de 4 2.400 =
9.600 bii/s.

1.3. Tipuri de comunicaie serial


Din punctul de vedere al direciei de transfer, se pot distinge urmtoarele tipuri de
comunicaie serial:
Simplex;
Semiduplex;
Duplex.
n cazul comunicaiei simplex, datele sunt transferate ntotdeauna n aceeai direcie,
de la echipamentul transmitor la cel receptor. La comunicaia semiduplex, fiecare echipa-
ment terminal de date funcioneaz alternativ ca transmitor, iar apoi ca receptor. Pentru
Sisteme de intrare/ieire i echipamente periferice 3

acest tip de conexiune, este suficient o singur linie de transmisie (dou fire de legtur).
ntr-o comunicaie duplex (numit i duplex integral), datele se transfer simultan n ambele
direcii. Primele conexiuni duplex necesitau dou linii de transmisie (patru fire de legtur),
dar conexiunile ulterioare necesit o singur linie.
Din punctul de vedere al sincronizrii dintre transmitor i receptor, exist dou tipuri
de comunicaie serial:
Asincron;
Sincron.

1.3.1. Comunicaia asincron


Pentru a asigura sincronizarea dintre transmitor i receptor, fiecare caracter transmis
este precedat de un bit de START, cu valoarea logic 0 (space), i este urmat de cel puin
un bit de STOP, cu valoarea logic 1 (mark). Biii de START i de STOP ncadreaz deci
fiecare caracter transmis; caracterul transmis ntre aceti doi bii reprezint un cadru de date.
Un asemenea cadru reprezint informaia digital de baz ntr-un sistem de comunicaie seria-
l. n cazul comunicaiei asincrone, intervalul de timp ntre transmisia a dou caractere succe-
sive este variabil, pe durata acestui interval linia de comunicaie fiind n starea 1 logic. Acest
mod de comunicaie este numit i start-stop.
Sincronizarea la nivel de bit se realizeaz cu ajutorul semnalelor de ceas locale cu
aceeai frecven. Atunci cnd receptorul detecteaz nceputul unui caracter indicat prin bitul de
START, pornete un oscilator de ceas local, care permite eantionarea corect a biilor
individuali ai caracterului. Eantionarea biilor se realizeaz aproximativ la mijlocul intervalului
corespunztor fiecrui bit.
Figura 1.2 ilustreaz transmisia caracterului cu codul ASCII 0x61. Dup bitul de
START, avnd durata T corespunztoare unui bit, transmisia caracterului ncepe cu bitul cel
mai puin semnificativ b0. Dup transmisia bitului cel mai semnificativ b7, se transmite un bit
de paritate p; n acest exemplu, paritatea este impar. Bitul de paritate este opional, iar n
cazul n care se adaug la caracterul transmis, paritatea poate fi selectat pentru a fi par sau
impar. Exist i posibilitatea ca bitul de paritate s fie setat la 0 sau 1, indiferent de paritatea
efectiv a caracterului. n exemplul ilustrat, la sfritul caracterului se transmit doi bii de
STOP s1 i s2, dup care linia rmne n starea 1 logic un timp nedefinit. Acest timp cores-
punde unui interval de pauz.

Figura 1.2. Comunicaie asincron.

n cazul comunicaiei asincrone, sincronizarea la nivel de bit este asigurat numai pe


durata transmisiei efective a fiecrui caracter. O asemenea comunicaie este orientat pe ca-
ractere individuale i are dezavantajul c necesit informaii suplimentare n proporie de cel
puin 25% pentru identificarea fiecrui caracter.

1.3.2. Comunicaia sincron


n cazul comunicaiei sincrone, un cadru nu conine un singur caracter, ci un bloc de
caractere sau un mesaj. Sincronizarea la nivel de bit trebuie asigurat permanent, nu numai n
timpul transmisiei propriu-zise, ci i n intervalele de pauz. De aceea, timpul este divizat n
mod continuu n intervale elementare la transmitor, intervale care trebuie regsite apoi la
4 1. Portul serial

receptor. Aceasta pune anumite probleme. Dac ceasul local al receptorului are o frecven
care difer ntr-o anumit msur de frecvena transmitorului, vor apare erori la recunoate-
rea caracterelor, din cauza lungimii blocurilor de caractere.
Pentru a se evita asemenea erori, ceasul receptorului trebuie resincronizat frecvent cu cel
al transmitorului. Aceasta se poate realiza dac se asigur c exist suficiente tranziii de la 1 la
0 i de la 0 la 1 n mesajul transmis. Dac datele de transmis constau din iruri lungi de 1 sau de
0, trebuie inserate tranziii suficiente pentru resincronizarea ceasurilor. Asemenea tehnici sunt
dificil de implementat, astfel nct se utilizeaz de obicei o tehnic numit comunicaie asincron
sincronizat (numit n mod simplu comunicaie sincron).
Acest tip de comunicaie este caracterizat de faptul c, dei mesajul este transmis ntr-un
mod sincron, nu exist o sincronizare n intervalul de timp dintre dou mesaje. Informaia este
transmis sub forma unor blocuri de caractere sau a unor bii succesivi, fr bii de START i
STOP. Pentru ajustarea oscilatorului local la nceputul unui mesaj, fiecare mesaj este precedat de
un numr de caractere speciale de sincronizare, de exemplu, caracterul SYN (0x16). Pentru
meninerea sincronizrii, se pot insera caractere de sincronizare suplimentare n mesajul transmis,
la anumite intervale de timp.
La receptor exist trei nivele de sincronizare:
Sincronizare la nivel de bit, utiliznd circuite cu calare de faz PLL (PhaseLocked
Loop)1, pe baza tranziiilor existente n semnalul recepionat;
Sincronizare la nivel de caracter, asigurat prin recunoaterea anumitor caractere de
sincronizare;
Sincronizare la nivel de bloc sau mesaj, care depinde de protocolul de date utilizat.

1.4. Standardul RS-232C


Specificaiile electrice ale portului serial utilizat la calculatoarele IBM PC au fost
definite n standardul RS-232C (Reference Standard No. 232, Revision C), elaborat n anul
1969 de ctre Comitetul de Standarde din SUA, cunoscut azi sub numele de Asociaia Indus-
triei Electronice (EIAElectronic Industries Association). Standardul a fost elaborat pentru
comunicaia digital ntre un calculator i un terminal aflat la distan sau ntre dou termina-
le, fr utilizarea unui calculator. Terminalele erau conectate prin linii telefonice, astfel nct
erau necesare modemuri la ambele capete ale liniei de comunicaie.
Standardul RS-232C a suferit diferite modificri, fiind elaborate mai multe revizii ale
acestuia. De exemplu, n anul 1987 a fost elaborat o nou revizie a standardului, numit EIA
RS-232D. n anul 1991, EIA i Asociaia Industriei de Telecomunicaii (TIATelecommu-
nications Industry Association) au elaborat revizia E a standardului (EIA/TIA RS-232E). Revizia
curent este EIA RS-232F, publicat n anul 1997. Totui, indiferent de revizia acestuia,
standardul este numit de cele mai multe ori RS-232C sau RS-232.
n Europa, versiunea echivalent standardului RS-232C este V.24, elaborat de comitetul
CCITT (Comit Consultatif International pour Tlphonie et Tlgraphie). Denumirea acestui
comitet a fost schimbat la nceputul anilor 1990 n International Telecommunications Union
(ITU). Ambele standarde specific semnalele utilizate pentru comunicaie, nivelele de tensiune,
protocolul utilizat pentru controlul fluxului de date i conectorii interfeei seriale.
Standardul RS-232C definete att o comunicaie asincron, ct i una sincron. Nu sunt
definite detalii cum sunt codificarea caracterelor (ASCII, Baudot, EBCDIC), ncadrarea
caracterelor (lungimea caracterului, numrul biilor de stop, paritatea) i nici vitezele de
comunicaie, dei standardul este destinat pentru viteze mai mici de 20.000 bii/s. Echipamentele
actuale permit ns viteze superioare de comunicaie, utiliznd nivele de tensiune care sunt
compatibile cu cele specificate de standard. Porturile seriale ale calculatoarelor permit, de obicei,
selecia uneia din urmtoarele viteze de comunicaie: 150; 300; 600; 1.200; 2.400; 4.800; 9.600;
19.200; 38.400; 57.600; 115.200 bii/s.

1
Un circuit PLL reprezint un sistem n bucl nchis pentru controlul frecvenei unui oscilator. Func-
ionarea sa se bazeaz pe detectarea diferenei de faz ntre semnalele de intrare i de ieire ale oscilato-
rului controlat.
Sisteme de intrare/ieire i echipamente periferice 5

O legtur de baz RS-232C necesit doar trei conexiuni: una pentru transmisie, una
pentru recepie i una pentru masa electric comun. Cele mai multe legturi seriale utilizeaz
ns i semnale pentru controlul fluxului de date.
Spre deosebire de alte tipuri de comunicaie serial care sunt difereniale2, comunicaia
RS-232C este una obinuit, utiliznd cte un fir pentru fiecare semnal. Dei astfel se simplific
circuitele necesare interfeei, n acelai timp se reduce i distana maxim de comunicaie n cazul
unei legturi directe, fr utilizarea modemurilor. Standardul RS-232C specific o distan
maxim de 15 m. Distana poate fi mrit dac se utilizeaz viteze de comunicaie mai reduse.
Tensiunile electrice specificate de standardul RS-232C sunt urmtoarele:
Valoarea logic 0 corespunde unei tensiuni pozitive ntre +3 V i +25 V;
Valoarea logic 1 corespunde unei tensiuni negative ntre 3 V i 25 V.

1.5. Semnalele interfeei seriale


Interfaa serial utilizeaz att semnale pentru transmisia i recepia datelor, ct i
semnale pentru controlul fluxului de date ntre un echipament terminal de date i un echipa-
ment pentru comunicaia de date. Figura 1.3 prezint semnalele interfeei seriale conform
standardului RS-232C. Legtura ilustrat este cea pentru care a fost conceput iniial portul
serial, i anume, conectarea unui modem la calculator. Figura indic numrul pinilor conecto-
rilor DB-25 utilizai n cazul unei asemenea legturi prin modemuri; numerele din paranteze
reprezint semnalele conform standardului V.24.

Figura 1.3. Semnalele interfeei seriale.

Cele mai importante semnale sunt descrise n continuare.

2
O comunicaie diferenial utilizeaz cte o pereche de fire pentru fiecare semnal. Exemple de interfe-
e care utilizeaz comunicaia diferenial sunt interfeele RS-422 i RS-485, sau magistralele USB i
IEEE 1394.
6 1. Portul serial

Transmit Data, TD (Transmisie Date)


Datele sunt transmise serial pe aceast linie de ctre calculator. Dup bitul de start, se
transmite bitul cel mai puin semnificativ al unui caracter. n general, pentru transmisia date-
lor este necesar ca semnalele RTS, CTS, DTR i DSR s fie active. Aceste semnale sunt activa-
te n cadrul unei secvene de stabilire a legturii cu modemul.
Receive Data, RD (Recepie date)
Aceast linie este utilizat de calculator pentru recepia datelor de la modem sau de la
un echipament extern.
Data Terminal Ready, DTR (Terminal de date operaional)
Atunci cnd calculatorul este operaional i pregtit pentru comunicaia de date, acti-
veaz semnalul DTR. Modemul va rspunde la semnalul DTR prin activarea semnalului DSR.
Data Set Ready, DSR (Modem operaional)
Atunci cnd modemul sau echipamentul extern este operaional i pregtit pentru
comunicaia de date, activeaz semnalul DSR. Acest semnal este activat de modem ca rspuns
la activarea semnalului DTR de ctre calculator. Calculatorul va transmite date ctre modem
doar n cazul n care semnalul DSR este activ.
Request To Send, RTS (Cerere de emisie)
Atunci cnd calculatorul este pregtit pentru transmisia datelor, activeaz semnalul
RTS. Acest semnal indic modemului faptul c poate transmite date ctre calculator. Un sem-
nal RTS inactiv va preveni modemul de a transmite date ctre calculator. Aceasta permite
calculatorului s controleze fluxul datelor transmise de modem. Rspunsul la semnalul RTS se
recepioneaz de calculator pe linia CTS.
Clear To Send, CTS (Gata de emisie)
Prin activarea acestui semnal, modemul sau echipamentul extern indic faptul c este
pregtit pentru recepia datelor de la calculator. Semnalul CTS este activat de modem ca rs-
puns la activarea semnalului RTS de ctre calculator. Un semnal CTS inactiv va preveni calcu-
latorul de a transmite date ctre modem. Aceasta permite modemului s controleze fluxul
datelor transmise de calculator.
Carrier Detect, CD (Detectare purttoare de semnal)
Prin activarea acestui semnal, modemul semnaleaz calculatorului faptul c a detectat
semnalul purttor al altui modem pe linia telefonic, deci, exist o conexiune cu un modem
aflat la distan. ntr-o legtur serial fr modemuri, activarea semnalului CD indic faptul
c este posibil comunicaia cu un echipament de la cellalt capt al liniei. De multe ori, acest
semnal este ignorat de calculator.
Ring Indicator, RI (Indicator de apel)
Atunci cnd modemul detecteaz pe linia telefonic semnalul de apel de la un alt
modem, activeaz semnalul RI. Acest semnal permite programului care ruleaz pe calculator
s rspund n mod automat la un apel telefonic de la distan.
Transmit Clock, TC (Ceas pentru transmisie)
Reprezint semnalul de ceas pentru transmisie furnizat calculatorului de ctre modem
n cazul unei comunicaii sincrone. Nu este utilizat pentru comunicaia asincron.
Receive Clock, RC (Ceas pentru recepie)
Reprezint semnalul de ceas pentru recepie furnizat calculatorului de ctre modem n
cazul unei comunicaii sincrone. Nu este utilizat pentru comunicaia asincron.
Sisteme de intrare/ieire i echipamente periferice 7

Transmit Current Loop Data


Transmit Current Loop Return
Receive Current Loop Data
Receive Current Loop Return
Aceste semnale permit comunicaia ntre echipamente apropiate ntre ele, fr utiliza-
rea unor modemuri. Metoda utilizat se numete transmisie prin bucl de curent. Nivelul lo-
gic 0 este indicat printr-un curent de 20 mA, iar nivelul logic 1 este indicat prin absena aces-
tui curent. Conectarea unui echipament care utilizeaz comunicaia n bucl de curent la un
port serial compatibil RS-232C necesit un translator al nivelului de tensiune.
Secondary Transmit Data, STD
Secondary Receive Data, SRD
Reprezint semnalele de date pentru o a doua legtur serial. Dei teoretic sunt posi-
bile dou legturi seriale duplex printr-un singur cablu, n practic a doua legtur este im-
plementat foarte rar.
Secondary Request To Send, SRTS
Secondary Clear To Send, SCTS
Secondary Carrier Detect, SCD
Reprezint semnalele RTS, CTS, respectiv CD pentru a doua legtur serial.
Secvena de stabilire a legturii ntre calculator i modem const din urmtoarele
operaii: programul activeaz semnalul DTR i ateapt rspunsul de la modem, reprezentat de
activarea semnalului DSR. n continuare, programul activeaz semnalul RTS i ateapt rs-
punsul de la modem, reprezentat de activarea semnalului CTS.

1.6. Controlul fluxului de date


Pentru a fi posibil comunicaia ntre dispozitive cu viteze diferite, proiectanii inter-
feei seriale au prevzut semnale speciale pentru controlul fluxului de date. Aceste semnale
permit unui echipament oprirea i apoi reluarea transmiterii datelor la cererea echipamentului
de la cellalt capt al liniei de comunicaie serial. Pe lng aceast metod hardware pentru
controlul fluxului de date, exist i o metod software, bazat pe transmiterea unor caractere
speciale ntre cele dou echipamente. Atunci cnd echipamentul receptor (de exemplu, o im-
primant) nu mai poate primi date deoarece bufferul acestuia este plin, transmite un anumit
caracter de control echipamentului transmitor (de exemplu, calculatorului). Atunci cnd
echipamentul receptor poate primi noi date, transmite un alt caracter de control care semna-
leaz echipamentului transmitor c poate relua transmiterea datelor.
De obicei, metoda de control care va fi utilizat de calculator poate fi selectat prin
intermediul driverului software al controlerului serial. Unele programe pot utiliza n mod implicit
o anumit metod. n cazul perifericelor, metoda de control poate fi selectat fie prin program, fie
printr-un comutator. Este important s se utilizeze aceeai metod de control att pentru
calculator, ct i pentru periferic pentru a evita pierderile de date.

1.6.1. Metoda de control hardware


Metoda de control hardware presupune utilizarea unui protocol de comunicaie cu
ajutorul semnalelor de control ale interfeei seriale. Protocolul utilizat se bazeaz pe comuni-
caia serial prin intermediul unor modemuri i a unei linii telefonice, pentru care a fost elabo-
rat interfaa serial original. Acest protocol implic stabilirea conexiunii ntre dou mode-
muri prin linia telefonic i meninerea fluxului de date dintre acestea ct timp conexiunea
este activ. Etapele acestui protocol sunt descrise n continuare. ntr-o form simplificat,
acest protocol este utilizat i n cazul comunicaiei seriale directe ntre dou echipamente, fr
utilizarea unor modemuri i a unei linii telefonice.
1. Atunci cnd un modem aflat la distan dorete stabilirea conexiunii cu modemul lo-
cal, transmite semnalul de apel pe linia telefonic. Acest semnal este detectat de ctre
8 1. Portul serial

modemul local, care activeaz semnalul RI pentru a informa calculatorul local asupra
existenei unui apel telefonic.
2. La detectarea activrii semnalului RI, pe calculatorul local se lanseaz n execuie un
program de comunicaie. Acest program indic disponibilitatea calculatorului de a n-
cepe comunicaia prin activarea semnalului DTR.
3. Atunci cnd modemul local sesizeaz faptul c terminalul de date (calculatorul) este
pregtit, rspunde la apelul telefonic i ateapt activarea semnalului purttor de ctre
modemul aflat la distan. Atunci cnd modemul local detecteaz semnalul purttor,
activeaz semnalul CD.
4. Modemul local negociaz cu modemul aflat la distan o conexiune cu anumii para-
metri. De exemplu, cele dou modemuri pot determina viteza optim de comunicaie
n funcie de calitatea legturii telefonice. Dup aceast negociere, modemul local ac-
tiveaz semnalul DSR.
5. La sesizarea activrii semnalului DSR, programul de pe calculatorul local activeaz
semnalul RTS pentru a indica modemului c poate transmite date ctre calculator.
6. Atunci cnd modemul sesizeaz activarea semnalului RTS, activeaz semnalul CTS
pentru a indica faptul c este pregtit pentru recepia datelor de la calculator.
7. n continuare, datele sunt transferate n ambele sensuri ntre echipamentele aflate la
distan, pe liniile TD i RD.
8. Deoarece viteza liniei telefonice este mai redus dect cea a legturii dintre calculator
i modemul local, bufferul modemului se va umple. Modemul local solicit calculato-
rului oprirea transmiterii datelor prin dezactivarea semnalului CTS. La golirea buffe-
rului, modemul reactiveaz semnalul CTS.
9. n cazul n care calculatorul nu mai poate primi date de la modem, dezactiveaz sem-
nalul RTS. Atunci cnd calculatorul poate primi din nou date de la modem, reactivea-
z semnalul RTS.
10. La ncheierea sesiunii de comunicaie, semnalul purttor este dezactivat, iar modemul
local dezactiveaz semnalele CD, CTS i DSR.
11. Atunci cnd sesizeaz dezactivarea semnalului CD, calculatorul local dezactiveaz
semnalele RTS i DTR.
Din protocolul descris mai sus, rezult urmtoarele:
Calculatorul trebuie s detecteze activarea semnalelor DSR i CTS nainte de a tran-
smite date ctre modem. Dezactivarea oricruia din aceste semnale va opri, de obicei,
fluxul de date de la calculator.
Modemul trebuie s detecteze activarea semnalelor DTR i RTS nainte de a transmite
date pe linia serial sau ctre calculator. Dezactivarea semnalului DTR va opri tran-
smiterea datelor pe linia serial, iar dezactivarea semnalului RTS va opri transmiterea
datelor ctre calculator.
Starea semnalului CD nu este interpretat de toate sistemele de comunicaie serial.
La anumite sisteme, semnalul CD trebuie s fie activat nainte ca terminalul de date s ncea-
p transmiterea datelor. La alte sisteme, starea semnalului CD este ignorat.

1.6.2. Metoda de control software


Metoda software pentru controlul fluxului de date presupune transmiterea unor carac-
tere de control ntre cele dou echipamente. De exemplu, perifericul va transmite un anumit
caracter de control pentru a indica faptul c nu mai poate primi date de la calculator i va tran-
smite un alt caracter de control pentru a indica faptul c transmiterea datelor poate fi reluat
Sisteme de intrare/ieire i echipamente periferice 9

de calculator. Exist dou variante ale acestei metode. Prima variant utilizeaz caracterele de
control XON/XOFF, iar a doua variant utilizeaz caracterele de control ETX/ACK.
n cazul utilizrii variantei XON/XOFF, perifericul transmite caracterul XOFF pentru a
indica faptul c bufferul su este plin i transmiterea datelor trebuie oprit de calculator. Acest
caracter mai este denumit DC1 (Device Control 1) i are codul ASCII 0x13, fiind echivalent cu
caracterul Ctrl-S. Caracterul Ctrl-S poate fi introdus i de utilizator la anumite programe de
comunicaie pentru a opri transmiterea datelor de ctre un echipament cu care este conectat
calculatorul. Atunci cnd perifericul este pregtit pentru a primi noi date, transmite calculatorului
caracterul XON. Acest caracter mai este denumit DC3 (Device Control 3) i are codul ASCII
0x11, fiind echivalent cu caracterul Ctrl-Q. La anumite programe de comunicaie, introducerea
caracterului Ctrl-Q anuleaz efectul caracterului Ctrl-S.
n cazul utilizrii variantei ETX/ACK, transmiterea caracterului ETX (End of TeXt) de
ctre periferic indic faptul c transmiterea datelor trebuie oprit de calculator. Acest caracter are
codul ASCII 0x03 i este echivalent cu caracterul Ctrl-C. Transmiterea caracterului ACK
(ACKnowledge) indic posibilitatea relurii transmiterii datelor de ctre calculator. Acest caracter
are codul ASCII 0x06 i este echivalent cu caracterul Ctrl-F.

1.7. Conectori
Porturile seriale pot utiliza unul din dou tipuri de conectori. Conectorul DB-25 cu 25
de pini a fost utilizat la calculatoarele din generaiile anterioare. La calculatoarele mai noi se
utilizeaz conectorul DB-9 cu 9 pini. Pentru porturile seriale ale calculatoarelor se utilizeaz
conectori tat, iar pentru porturile seriale ale echipamentelor periferice se utilizeaz conectori
mam.
Figura 1.4 ilustreaz conectorul DB-25 al portului serial.

Figura 1.4. Conectorul DB-25 utilizat pentru porturile seriale ale calculatoarelor personale din generaiile
anterioare.

Din cele 25 de semnale ale conectorului DB-25, se utilizeaz cel mult 10 semnale pentru
o conexiune serial obinuit. Tabelul 1.1 indic numele acestor semnale i asignarea lor la pinii
conectorului DB-25.

Tabelul 1.1. Asignarea semnalelor la pinii conectorului DB-25 al portului serial.

In
Pin Semnal Semnificaie
Out
1 PG Protective Ground
2 TD Transmit Data
3 RD Receive Data
4 RTS Request To Send
5 CTS Clear To Send
6 DSR Data Set Ready
7 SG Signal Ground
8 CD Carrier Detect
20 DTR Data Terminal Ready
22 RI Ring Indicator

Pentru a se reduce spaiul ocupat de conectorul portului serial, conectorul DB-25 a


fost nlocuit cu un conector de dimensiuni mai reduse, conectorul cu 9 pini DB-9 (figura 1.5).
10 1. Portul serial

Figura 1.5. Conectorul DB-9 utilizat pentru porturile seriale ale calculatoarelor IBM PC.

Tabelul 1.2 indic asignarea semnalelor portului serial la pinii conectorului DB-9.
Tabelul 1.2. Asignarea semnalelor la pinii conectorului DB-9 al portului serial.

In
Pin Semnal Semnificaie
Out
1 CD Carrier Detect
2 RD Receive Data
3 TD Transmit Data
4 DTR Data Terminal Ready
5 SG Signal Ground
6 DSR Data Set Ready
7 RTS Request To Send
8 CTS Clear To Send
9 RI Ring Indicator

1.8. Cabluri
Exist mai multe variante de cabluri care se pot utiliza pentru comunicaia serial.
Pentru viteze de comunicaie reduse i lungimi scurte, se pot utiliza cabluri obinuite, care nu
sunt ecranate. Pentru a reduce interferenele cu alte echipamente, trebuie utilizate cabluri
ecranate care conin un nveli sub forma unei folii de aluminiu. n mod ideal, ecranul cablu-
lui trebuie conectat la masa de protecie a conectorului, dac acesta este de tip DB-25. Conec-
torul DB-9 nu conine un pin pentru masa de protecie. n cazul utilizrii conectorilor de acest
tip, ecranul cablului se poate conecta la masa electric.
Observaii
n cazul cablului serial care utilizeaz conectori DB-25, masa electric sau masa de
semnal SG (Signal Ground) este separat de masa mecanic sau masa de protecie PG
(Protective Ground). Masa de protecie este conectat direct la carcasa conectorului
(i a echipamentului), avnd un rol de protecie. Prin realizarea acestei conexiuni,
carcasele metalice ale celor dou echipamente conectate prin cablul serial se vor afla
la acelai potenial, evitndu-se formarea unor diferene de tensiune ntre cele dou
echipamente, tensiuni care pot fi periculoase pentru acestea. Deseori, conexiunea me-
sei de protecie lipsete din cablurile seriale.
Masa de protecie PG nu trebuie conectat niciodat la masa electric SG.
Semnalele interfeei seriale au fost prevzute n scopul conectrii unui echipament
terminal de date (ETD) la un echipament pentru comunicaia de date (ECD). Atunci cnd se
conecteaz dou asemenea echipamente, de exemplu, un calculator cu un modem, care dispun
de conectori de acelai tip (de exemplu, DB-25), este necesar un cablu care conecteaz pinii
cu acelai numr ai conectorilor de la cele dou capete. Acesta este un cablu direct. Dac se
conecteaz dou echipamente cu conectori diferii, este necesar un cablu adaptor. Dac se
conecteaz dou echipamente terminale de date, de exemplu, dou calculatoare, datele tran-
smise pe pinul TD al unui echipament trebuie recepionate pe pinul RD al celuilalt echipa-
ment. De aceea, conexiunile acestor pini trebuie inversate la cele dou capete ale cablului; un
asemenea cablu este numit cablu inversor.
Sisteme de intrare/ieire i echipamente periferice 11

1.8.1. Cabluri directe


ntr-un cablu direct, fiecare pin corespunztor unui anumit semnal de la un capt este
conectat cu pinul corespunztor aceluiai semnal de la cellalt capt. n mod frecvent, se utili-
zeaz doar o parte a semnalelor interfeei seriale. Chiar n cazul n care fluxul de date este
controlat prin metoda hardware, trebuie conectate doar un numr de nou semnale ntre un
calculator i un modem, presupunnd o comunicaie asincron. De exemplu, dac se utilizea-
z conectori DB-25 la ambele capete ale cablului, pinii care trebuie conectai sunt: 2, 3, 4, 5,
6, 7, 8, 20 i 22. Pentru o comunicaie sincron, sunt necesare dou conexiuni suplimentare,
reprezentnd semnalele de ceas pentru transmisie i recepie, care sunt generate de modemul
sincron. Dac se utilizeaz conectori DB-9, toi pinii trebuie conectai, cu excepia pinului 9
(semnalul RI).
Figura 1.6 ilustreaz conexiunile necesare pentru un cablu serial n cazul conectrii
unui modem sincron la un calculator, presupunnd c se utilizeaz conectori DB-25 la ambele
echipamente.

Figura 1.6. Conectarea unui modem sincron la un calculator (conectori DB-25).

1.8.2. Cabluri adaptoare


n cazul n care cei doi conectori ai unei legturi seriale sunt de tipuri diferite, de
exemplu, DB-25 la un capt i DB-9 la cellalt capt, este necesar un cablu adaptor. Dei la
calculatoarele IBM PC actuale se utilizeaz numai conectori DB-9, la unele periferice, ca
imprimante seriale, plottere sau modemuri, se utilizeaz conectori DB-25. Adaptorul poate fi
de forma unei cuple avnd doi conectori de tipuri diferite, sau a unui cablu adaptor avnd
conectori de tipuri diferite la cele dou capete.
Tabelul 1.3 prezint conexiunile necesare pentru un cablu adaptor ntre un conector DB-
25 i un conector DB-9.
Tabelul 1.3. Conexiunile pentru un cablu adaptor ntre un conector DB-25 i un conector DB-9.

Pin DB-25 Pin DB-9 Semnal Semnificaie


2 3 TD Transmit Data
3 2 RD Receive Data
4 7 RTS Request To Send
5 8 CTS Clear To Send
6 6 DSR Data Set Ready
7 5 SG Signal Ground
8 1 CD Carrier Detect
20 4 DTR Data Terminal Ready
22 9 RI Ring Indicator

1.8.3. Cabluri inversoare


Cablurile inversoare sunt necesare pentru conectarea a dou echipamente terminale de
date, cum sunt dou calculatoare. Aceste cabluri sunt necesare i pentru conectarea unor tipuri
12 1. Portul serial

de periferice la calculator, cum sunt imprimantele i plotterele seriale, deoarece atunci cnd a
fost conceput interfaa serial, aceste periferice au fost considerate ca echipamente terminale
de date.
n continuare se prezint dou tipuri de cabluri inversoare. Primul tip se poate utiliza
atunci cnd controlul fluxului de date se realizeaz prin metoda software, iar al doilea tip se
poate utiliza atunci cnd controlul fluxului de date se realizeaz prin metoda hardware.
Multe sisteme de comunicaie serial nu utilizeaz toate semnalele pentru controlul
fluxului de date, astfel nct la aceste sisteme conexiunile pot fi simplificate. n cazul cel mai
simplu, cnd se utilizeaz metoda software pentru controlul fluxului de date, sunt necesare
doar trei conexiuni, pentru datele transmise, datele recepionate i masa electric. De exem-
plu, dac se utilizeaz conectori DB-25, pinii care trebuie conectai sunt 2, 3 i 7, iar dac se
utilizeaz conectori DB-9, aceti pini sunt 2, 3 i 5. Un asemenea cablu se numete cablu null-
modem.
Un cablu null-modem se poate utiliza pentru conectarea direct a dou echipamente
terminale de date, de exemplu, a dou calculatoare. Conexiunile sunt realizate astfel nct, din
punctul de vedere al calculatorului, comunicaia s se desfoare ca i cum la cellalt capt
s-ar afla un modem, i nu un alt calculator. Datele transmise de primul calculator trebuie re-
cepionate de al doilea calculator, astfel nct pinul TD de la primul calculator este conectat cu
pinul RD de la cel de-al doilea calculator, i invers. Cei doi pini pentru masa electric SG
trebuie conectai mpreun. La ambii conectori, pinul DTR este conectat cu pinii DSR i CD
de la acelai capt al conexiunii. Astfel, atunci cnd semnalul DTR este activat, semnalele
DSR i CD sunt activate i ele. Semnalele DSR i CD se activeaz deci n acelai mod ca i
cum la cellalt capt al conexiunii s-ar afla un modem. n mod similar, la ambii conectori
pinul RTS este conectat cu pinul CTS de la acelai capt al conexiunii. Deoarece calculatoare-
le comunic cu aceeai vitez, controlul fluxului de date nu este necesar.
Figura 1.7 ilustreaz conexiunile necesare pentru un cablu null-modem, presupunnd
c se utilizeaz conectori DB-9 la ambele capete.

Figura 1.7. Conectarea a dou echipamente terminale de date printr-un cablu null-modem (conectori DB-9).

Atunci cnd se utilizeaz metoda hardware de control a fluxului de date, cele trei linii
ale cablului null-modem prezentat anterior nu sunt suficiente. n acest caz, trebuie s se utili-
zeze un cablu inversor cu conexiuni suplimentare pentru aceast metod de control. Pinii de
date i pinul pentru masa electric sunt conectai n acelai fel ca i la cablul null-modem. La
ambii conectori, pinul DTR este conectat cu pinii DSR i CD de la cellalt capt al conexiunii.
Prin aceast conexiune, fiecare din cele dou echipamente terminale de date poate determina
momentul n care cellalt echipament terminal de date este pregtit. Semnalele utilizate pentru
controlul fluxului de date sunt RTS i CTS. La ambii conectori, pinul RTS este conectat cu
pinul CTS de la cellalt capt al conexiunii. Aceast conexiune asigur controlul fluxului de
date prin metoda hardware, n modul descris n seciunea 1.6.1.
Figura 1.8 ilustreaz legturile necesare pentru un cablu inversor care permite un control
hardware al fluxului de date, presupunnd c se utilizeaz conectori DB-9 la ambele capete.
Sisteme de intrare/ieire i echipamente periferice 13

Figura 1.8. Conectarea a dou echipamente terminale de date printr-un cablu inversor cu controlul fluxului de date
prin hardware (conectori DB-9).

Observaie
De multe ori, cablul inversor cu conexiunile ilustrate n figura 1.8 este numit, n mod
eronat, cablu null-modem.

1.9. Circuite UART


Componenta principal a unui port serial este un circuit UART (Universal Asynchro-
nous Receiver/Transmitter). Acest circuit realizeaz conversia datelor paralele de la calculator
n formatul necesar pentru transmisia serial i conversia datelor seriale recepionate n forma-
tul paralel utilizat de calculator. Circuitul adaug bitul de start, bitul de stop i bitul de paritate
la datele seriale transmise i detecteaz aceti bii n cadrul datelor seriale recepionate.
La calculatoarele IBM PC i calculatoarele IBM PC/XT originale au fost utilizate
circuite UART din familia 8250. ncepnd cu primele sisteme de 16 bii, a fost utilizat circuitul
UART 16450, produs de firma National Semiconductor. Acest circuit este compatibil cu
circuitele din familia 8250 la nivelul registrelor, dar permite comunicaia cu viteze mai ridicate.
La calculatoarele IBM PS/2 a fost utilizat circuitul UART 16550, care a fost adoptat i pentru
sistemele bazate pe procesorul 80386 i urmtoarele. Circuitul 16550 funcioneaz similar cu
circuitele 8250 i 16450, dar conine n plus cte o memorie FIFO de 16 octei pentru transmisie
i recepie. Aceast memorie permite viteze de comunicaie superioare fa de vitezele permise
de circuitele anterioare. ncepnd cu sistemele bazate pe procesorul Pentium, circuitul UART
16550 (sau o versiune mai recent a acestuia) a fost inclus n setul de circuite de pe placa de baz.
Versiuni mbuntite ale circuitului UART 16550 sunt circuitele 16650, 16750 i 16850.
n continuare se descriu principalele caracteristici ale unor circuite UART.
8250
Circuitul 8250 a fost utilizat la primele calculatoare IBM PC. Circuitul nu coninea un
buffer de transmisie i nici un buffer de recepie, motiv pentru care viteza de comunicaie
asigurat era redus. Circuitul avea mai multe erori de funcionare. Programele ROM BIOS
ale calculatoarelor IBM PC i PC/XT au fost realizate astfel nct s in cont de aceste erori.
8250A
La aceast versiune, s-au corectat unele erori ale circuitului UART 8250, printre care
i o eroare de funcionare a registrului de validare a ntreruperilor. Deoarece programele ROM
BIOS ale calculatoarelor IBM PC i PC/XT ineau cont de aceast eroare, circuitul 8250A nu
funciona corect cu acele calculatoare. Circuitul 8250A funciona cu calculatoarele IBM
PC/AT, dar nu funciona corespunztor la viteze de 9.600 bii/s i mai mari, din cauza lipsei
bufferelor de transmisie i de recepie.
8250B
La aceast ultim versiune a circuitelor din familia 8250, s-au corectat erorile ntlnite
la cele dou versiuni anterioare. Eroarea de funcionare a registrului de validare a ntreruperi-
14 1. Portul serial

lor din versiunea original 8250 a fost reintrodus, pentru ca circuitul s funcioneze n modul
ateptat de programele ROM BIOS ale calculatoarelor IBM PC i PC/XT. Nici acest circuit
nu funciona corespunztor la viteze de 9.600 bii/s i mai mari.
16450
Acest circuit a fost utilizat la primele calculatoare IBM PC/AT. Circuitul permitea
viteze de comunicaie superioare datorit unor buffere de transmisie i de recepie de cte un
octet. La acest circuit, a fost adugat la setul de registre un registru de lucru de un octet, utili-
zat ca memorie temporar.
16550
Reprezint varianta mbuntit a circuitului 16450, coninnd buffere de transmisie
i de recepie de cte 16 octei, organizate sub forma unor memorii FIFO. Circuitul permite i
transferuri prin canale multiple DMA. Versiunea iniial a acestui circuit nu permitea utiliza-
rea memoriilor FIFO, eroare care a fost corectat n versiunea 16550A. Ultima versiune pro-
dus de National Semiconductor este 16550D. Prin utilizarea memoriilor FIFO, vitezele de
comunicaie pot fi crescute in mod semnificativ, eliminndu-se posibilitatea pierderii unor
caractere la vitezele mai ridicate. Viteza maxim de comunicaie permis de circuitul 16550
este de 115.200 bii/s.
16650, 16750 i 16850
Au fost produse diferite versiuni mbuntite ale circuitului 16550, care sunt compa-
tibile cu acesta, dar conin memorii FIFO de dimensiuni mai mari:
Circuitul 16650 conine dou memorii FIFO de cte 32 octei;
Circuitul 16750 conine dou memorii FIFO de cte 64 octei;
Circuitul 16850 conine dou memorii FIFO de cte 128 octei.
Aceste circuite permit viteze de comunicaie superioare, de 230,4 Kbii/s (16650),
460,8 Kbii/s (16750) i 921,6 Kbii/s (16850). Utilizarea acestor circuite este recomandat n
cazul unor legturi seriale externe de vitez ridicat, cum sunt cele realizate printr-un adaptor
ISDN.

1.10. Porturile seriale ale calculatoarelor personale


Programul BIOS al calculatoarelor IBM PC originale permitea utilizarea a dou por-
turi seriale, cu numele COM1 i COM2. Ulterior, numrul porturilor a fost extins cu nc dou,
cu numele COM3 i COM4. ncepnd cu sistemul de operare Windows 95, numrul porturilor
seriale a fost extins la 128. Aceste porturi sunt gestionate cu ajutorul driverelor de dispozitiv
care le controleaz.
Accesul la porturile seriale se poate realiza prin funcii BIOS (ntreruperea 0x14), prin
funcii ale sistemului de operare, sau direct prin registrele circuitelor UART. Fiecare circuit
UART asociat unui port serial dispune de un numr de opt registre de I/E ncepnd de la adresa
de baz a portului serial. Programul BIOS memoreaz adresele de baz ale porturilor seriale
COM1..COM4 n patru cuvinte succesive de 16 bii, ncepnd cu adresa 0x0000:0x0400
corespunztoare portului COM1.
Adresele de baz ale porturilor seriale COM1..COM4 sunt indicate n tabelul 1.4. n
general, adresele porturilor COM1 i COM2 sunt fixe, avnd valorile indicate n acest tabel.
Adresele porturilor COM3 i COM4 pot fi diferite de cele indicate. n tabelul 1.4 se indic i
nivelele de ntrerupere utilizate de porturile seriale COM1..COM4.
Tabelul 1.4. Asignarea standard a adreselor de baz i a nivelelor de ntrerupere la porturile seriale.

Port serial Adresa de baz ntrerupere


COM1 0x3F8 IRQ 4
COM2 0x2F8 IRQ 3
COM3 0x3E8 IRQ 4
COM4 0x2E8 IRQ 3
Sisteme de intrare/ieire i echipamente periferice 15

n principiu, fiecare port serial necesit propriul nivel de ntrerupere. n cazul n care
exist mai mult de dou porturi seriale n calculator, poate fi necesar partajarea unor nivele de
ntrerupere. De exemplu, portul COM3 partajeaz ntreruperea de nivel 4 (IRQ 4) cu portul
COM1, iar portul COM4 partajeaz ntreruperea de nivel 3 (IRQ 3) cu portul COM2. Magistrala
PCI permite partajarea nivelelor de ntrerupere, astfel nct pentru plcile de extensie bazate pe
magistrala PCI sau PCI Express este posibil utilizarea unui singur nivel de ntrerupere fr
apariia unor conflicte.

1.11. Registrele circuitelor UART 16x50


Registrele circuitelor UART sunt accesibile prin instruciuni de I/E. Pentru primul port
serial, registrele au adrese cuprinse ntre 0x3F8 i 0x3FF, iar pentru al doilea port registrele au
adrese ntre 0x2F8 i 0x2FF. Primele dou adrese permit accesul la mai multe registre ale
circuitului. Exist anumite registre care nu sunt accesibile prin program.
Adresele registrelor accesibile prin program pentru primele dou porturi seriale, modul
de acces la acestea (R citire, W scriere, R/W citire/scriere), abrevierile i denumirile lor sunt
prezentate n tabelul 1.5. Coloana Offset indic deplasamentul adresei fiecrui registru fa de
adresa de baz a portului serial. Coloana DLAB (Divisor Latch Access Bit) reprezint valoarea
bitului 7 al registrului de control al liniei (LCR). Atunci cnd este setat la 1, acest bit permite
accesul la dou registre utilizate pentru setarea vitezei de comunicaie.
Tabelul 1.5. Registrele circuitelor UART 16x50.

COM1 COM2 Offset DLAB Acces Abreviere Denumire


0 W THR Transmitter Holding Register
0x3F8 0x2F8 +0 0 R RBR Receiver Buffer Register
1 R/W Divisor Latch Register LSB
0 R/W IER Interrupt Enable Register
0x3F9 0x2F9 +1
1 R/W Divisor Latch Register MSB
X R IIR Interrupt Identification Register
0x3FA 0x2FA +2
X W FCR FIFO Control Register
0x3FB 0x2FB +3 X R/W LCR Line Control Register
0x3FC 0x2FC +4 X R/W MCR Modem Control Register
0x3FD 0x2FD +5 X R LSR Line Status Register
0x3FE 0x2FE +6 X R MSR Modem Status Register
0x3FF 0x2FF +7 X R/W Scratch Register

Observaie
Circuitele 16650, 16750 i 16850 conin registre suplimentare fa de cele indicate n
tabelul 1.5. Structura acestor registre poate varia de la un productor la altul, motiv
pentru care aceste registre nu sunt descrise n aceast lucrare de laborator.

THR - Transmitter Holding Register


Reprezint bufferul de transmisie, care este selectat dac bitul DLAB al registrului
LCR este 0. Caracterul care urmeaz a fi transmis trebuie nscris n acest registru. Dac regis-
trul TSR (Transmitter Shift Register) se golete (deci, circuitul poate ncepe transmisia unui
nou caracter), coninutul registrului THR (sau, dac memoriile FIFO sunt validate, un octet
din memoria FIFO de transmisie) este transferat n registrul TSR i se ncepe transmisia ca-
racterului.
Dac registrul THR se golete (deci, poate fi nscris cu un nou caracter), circuitul ge-
nereaz o cerere de ntrerupere dac generarea acestui tip de ntrerupere este validat. Starea
acestui registru se poate determina prin testarea bitului 5 al registrului LSR.
TSR - Transmitter Shift Register
Este un registru intern care nu este accesibil prin program. La terminarea transmisiei
unui caracter, coninutul registrului THR (sau, dac memoriile FIFO sunt validate, un octet
din memoria FIFO de transmisie) este transferat n mod automat n registrul TSR i se ncepe
transmisia acestuia.
16 1. Portul serial

Dac registrul TSR se golete (deci, poate ncepe transmisia unui nou caracter), dar
registrul THR este gol (sau, dac memoriile FIFO sunt validate i memoria FIFO de transmi-
sie se golete sub un anumit nivel de prag), circuitul genereaz o cerere de ntrerupere n cazul
n care acest tip de ntrerupere este validat. Starea acestui registru se poate determina prin
testarea bitului 6 al registrului LSR.
RBR - Receiver Buffer Register
Reprezint bufferul de recepie, fiind selectat dac bitul DLAB al registrului LCR este
0. Un caracter recepionat este depus n acest registru. Prezena unui caracter n registrul RBR
se poate determina prin testarea bitului 0 al registrului LSR. Dac memoriile FIFO sunt inva-
lidate, caracterul recepionat trebuie citit de program din registrul RBR naintea recepiei unui
nou caracter; n caz contrar, va apare o eroare de suprapunere (overrun error). Recepia unui
caracter determin generarea unei cereri de ntrerupere, dac acest tip de ntrerupere este vali-
dat. Dac memoriile FIFO sunt validate, este posibil ca ntreruperea de recepie s fie gene-
rat doar dup recepionarea unui anumit numr de caractere n memoria FIFO de recepie.
Aceast valoare de prag poate fi programat prin setarea biilor 7..6 ai registrului FCR.
RSR - Receiver Shift Register
Este un registru intern care nu este accesibil prin program. Fiecare caracter este recep-
ionat n acest registru. La terminarea recepiei unui caracter, coninutul registrului RSR este
transferat n mod automat n registrul RBR dac memoriile FIFO sunt invalidate. Dac aceste
memorii sunt validate, caracterele recepionate sunt depuse n memoria FIFO de recepie.
Divisor Latch Register LSB & MSB
Aceste registre conin valoarea cu care trebuie divizat frecvena ceasului propriu al
circuitului 16x50 (1,8432 MHz) pentru a se obine debitul binar dorit. Registrul LSB conine
octetul mai puin semnificativ al divizorului, iar registrul MSB conine octetul mai semnifica-
tiv al divizorului. Cele dou registre divizor sunt accesibile dac bitul DLAB al registrului
LCR este 1. Pentru calculul valorii divizorului, trebuie s se in cont de factorul de ceas al
circuitului 16x50. De obicei, acest factor este 16 (debitul binar este de 16 ori mai mic dect
frecvena obinut prin divizare). Se poate utiliza urmtoarea formul:
Divizor = 1.843.200 / (DebitBinar 16)
Tabelul 1.6 conine divizorii corespunztori diferitelor debite binare.
Tabelul 1.6. Divizorii frecvenei de 1,8432 MHz pentru diferite debite binare.

Debit binar Debit binar


Divizor Divizor
(bii/s) (bii/s)
50 0x0900 4.800 0x0018
150 0x0300 9.600 0x000C
300 0x0180 19.200 0x0006
600 0x00C0 38.400 0x0003
1.200 0x0060 57.600 0x0002
2.400 0x0030 115.200 0x0001

IER - Interrupt Enable Register


Reprezint registrul de validare a ntreruperilor, fiind accesibil dac bitul DLAB al
registrului LCR este 0. Circuitul UART poate genera cinci tipuri de cereri de ntrerupere, cu
nivele de prioritate diferite. Registrul IER permite validarea individual a acestor ntreruperi.
Structura acestui registru este ilustrat n figura 1.9.
Biii registrului IER sunt descrii n continuare.
Biii 7..4 sunt neutilizai (setai la 0).
Bitul 3 (Enable Modem Status Interrupt) valideaz prin valoarea 1 generarea unei ce-
reri de ntrerupere la modificarea registrului de stare al modemului (MSR).
Sisteme de intrare/ieire i echipamente periferice 17

Figura 1.9. Registrul de validare a ntreruperilor (IER).

Bitul 2 (Enable Receiver Line Status Interrupt) valideaz prin valoarea 1 generarea
unei cereri de ntrerupere la modificarea registrului de stare a liniei ( LSR), de obicei,
la apariia unor erori de recepie.
Bitul 1 (Enable Transmitter Holding Register Empty Interrupt) valideaz prin valoarea
1 generarea unei cereri de ntrerupere la golirea registrului THR, deci, dup transfera-
rea coninutului acestui registru n registrul TSR. La apariia acestei ntreruperi se
poate nscrie un nou caracter n registrul THR.
Bitul 0 (Enable Received Data Available Interrupt) valideaz prin valoarea 1 genera-
rea unei cereri de ntrerupere la recepia unui caracter. Dac memoriile FIFO sunt va-
lidate, acest bit valideaz i generarea ntreruperii de depire a timpului (time-out).
Aceast ntrerupere este descris n seciunea urmtoare.
IIR - Interrupt Identification Register
Reprezint registrul de identificare a ntreruperilor. Acest registru poate fi accesat
doar pentru citire. Dei ntreruperile generate de circuitul 16x50 apar pe un singur nivel de
ntrerupere (IRQ 4 pentru primul port serial i IRQ 3 pentru portul al doilea), aceste ntreruperi
pot avea patru tipuri de cauze, cu nivele de prioritate diferite. Identificarea cauzei ntreruperii
se poate realiza prin testarea biilor 3..0 din registrul de identificare a ntreruperilor (IIR). Cei-
lali bii ai acestui registru indic starea memoriilor FIFO.
Semnificaia biilor registrului IIR care permit identificarea cauzei unei ntreruperi
este indicat n tabelul 1.7.

Tabelul 1.7. Biii registrului IIR utilizai pentru identificarea cauzei unei ntreruperi.

Bii 3..0 Prioritate Tip ntrerupere Cauza ntreruperii Resetarea ntreruperii


0001 Nu exist ntrerupere
Semnalul CTS sau DSR
Modificare stare
0000 3 (minim) sau RI sau CD s-a Citirea registrului MSR
modem
modificat
Terminare Citirea IIR sau scrierea
0010 2 Registrul THR este gol
transmisie caracter unui caracter n THR
Registrul RBR conine un
Citirea registrului RBR
caracter recepionat sau
sau golirea memoriei
0100 1 Recepie caracter memoria FIFO de recepie
FIFO de recepie sub
s-a umplut peste nivelul de
nivelul de prag
prag
Nu s-au citit sau depus
caractere din/n memoria
Depirea timpului FIFO de recepie pe durata
1100 1 Citirea registrului RBR
(time-out) a patru caractere i exist
cel puin un caracter n
memoria FIFO
Eroare de suprapunere, de
Modificare stare
0110 0 (maxim) ncadrare sau de paritate, Citirea registrului LSR
linie
sau ntrerupere Break
18 1. Portul serial

Circuitul UART se poate utiliza i prin interogare software, testnd periodic bitul 0 al
registrului de identificare a ntreruperilor. Dac acest bit este 0, nseamn c a aprut o ntrerupe-
re.
Nivelul de prag al memoriei FIFO de recepie se refer la numrul de caractere care
trebuie recepionate nainte ca circuitul s genereze o ntrerupere de recepie, dac acest tip de
ntrerupere este validat. Setarea acestui nivel de prag este descris n seciunea dedicat registru-
lui de control al memoriilor FIFO (FCR).
La o operaie de recepie cu memoriile FIFO validate, circuitul UART va genera o cerere
de ntrerupere chiar dac memoria FIFO de recepie conine un numr de caractere mai mic dect
valoarea de prag, dar nu s-au mai recepionat caractere ntr-un timp egal cu durata necesar tran-
sferului a patru caractere. Aceasta reprezint ntreruperea de depire a timpului (time-out) i a
fost prevzut pentru cazul n care transmitorul oprete transmisia caracterelor pentru a atepta
un rspuns de la receptor. Fr aceast ntrerupere, ar fi posibil ca receptorul s nu sesizeze faptul
c au fost recepionate caractere, deoarece memoria FIFO de recepie nu conine un numr sufi-
cient de caractere pentru a se genera o ntrerupere de recepie. Combinaia de bii din registrul IIR
care indic aceast cauz de ntrerupere poate fi ignorat, deoarece circuitul UART va indica i
faptul c sunt disponibile caractere n bufferul de recepie.

Biii 7..4 ai registrului IIR sunt descrii n continuare.


Biii 7..6 indic starea memoriilor FIFO:
00: Nu exist memorii FIFO (circuitul este de tip 8250 sau 16450).
01: Combinaie rezervat.
10: Memoriile FIFO sunt validate, dar nu sunt utilizabile. Aceast situaie poate apare
la circuitul 16550, din cauza erorii de utilizare a memoriilor FIFO.
11: Memoriile FIFO sunt validate i operaionale.
Biii 5..4 sunt rezervai (setai la 0).
FCR - FIFO Control Register
Reprezint registrul de control al memoriilor FIFO, fiind disponibil la circuitul UART
16550 i la urmtoarele. Structura registrului FCR este ilustrat n figura 1.10.

Figura 1.10. Registrul de control al memoriilor FIFO FCR.

Biii registrului FCR sunt descrii n continuare.


Biii 7..6 (Receiver Trigger) permit setarea numrului de caractere recepionate n
memoria FIFO de recepie dup care circuitul va genera o ntrerupere de recepie, da-
c acest tip de ntrerupere este validat. Dac acest numr este setat la o valoare mai
mare dect 1, circuitul nu va genera o cerere de ntrerupere dup fiecare caracter re-
cepionat, ceea ce va reduce timpul necesar tratrii ntreruperilor. Semnificaia biilor
7..6 este urmtoarea:
00: Cererea de ntrerupere se genereaz dup fiecare caracter recepionat;
01: Cererea de ntrerupere se genereaz dup 4 caractere recepionate;
10: Cererea de ntrerupere se genereaz dup 8 caractere recepionate;
11: Cererea de ntrerupere se genereaz dup 14 caractere recepionate.
Sisteme de intrare/ieire i echipamente periferice 19

Biii 5..4 sunt rezervai (setai la 0).


Bitul 3 (DMA Mode Select), prezent la circuitul 16550 i urmtoarele, permite selec-
tarea modului de transfer prin DMA. Atunci cnd memoriile FIFO sunt validate, exis-
t dou moduri de transfer prin DMA care pot fi selectate, modul 0 i modul 1. Modul
0, selectat dac bitul 3 al registrului FCR este 0, permite transferuri DMA singulare,
de cte un singur cuvnt. Modul 1, selectat dac bitul 3 al registrului FCR este 1,
permite transferuri DMA multiple, care sunt executate n mod continuu pn cnd
memoria FIFO de recepie se golete sau memoria FIFO de transmisie se umple. La
circuitul 16450, este permis doar modul 0.
Bitul 2 (Transmitter FIFO Reset) permite tergerea memoriei FIFO de transmisie prin
setarea acestui bit la 1.
Bitul 1 (Receiver FIFO Reset) permite tergerea memoriei FIFO de recepie prin seta-
rea acestui bit la 1.
Bitul 0 (FIFO Enable) valideaz prin valoarea 1 memoriile FIFO de transmisie i de
recepie. n mod implicit, aceste memorii sunt invalidate, pentru compatibilitate cu
circuitele UART 8250 i 16450. Prin setarea acestui bit la 0 se vor invalida memoriile
FIFO, datele memorate n acestea fiind pierdute.
Observaie
n cazul n care nu se utilizeaz memoriile FIFO, sau biii 7..6 ai registrului FCR sunt
setai astfel nct s se genereze o cerere de ntrerupere dup fiecare caracter recepio-
nat, n rutina de tratare ntreruperii de recepie este suficient s se citeasc registrul de
recepie RBR o singur dat. Dac se utilizeaz memoriile FIFO, n rutina de tratare a
ntreruperii de recepie trebuie implementat o bucl de program pentru citirea cte
unui caracter din registrul de recepie RBR, ct timp exist cel puin un caracter n
acest registru. Prezena unui caracter n registrul de recepie RBR este indicat prin
faptul c bitul 0 din registrul LSR este setat la 1. Dup citirea unui caracter din regis-
trul RBR, circuitul va ncrca n mod automat urmtorul caracter din memoria FIFO,
dac mai exist caractere n aceast memorie.
LCR - Line Control Register

Figura 1.11. Registrul de control al liniei LCR.

Prin nscrierea registrului de control al liniei se pot stabili parametrii comunicaiei


seriale. Structura registrului LCR este ilustrat n figura 1.11.
Semnificaia biilor registrului LCR este urmtoarea:
Bitul 7 (Divisor Latch Access Bit) modific funcia registrelor accesibile prin adresele
0x3F8 (0x2F8) i 0x3F9 (0x2F9). Dac acest bit este 0, registrele accesibile sunt
Transmitter / Receiver Buffer Register, respectiv Interrupt Enable Register. Dac bi-
tul 7 este 1, registrele accesibile sunt cele utilizate pentru nscrierea divizorului care
stabilete debitul binar (LSB, respectiv MSB).
20 1. Portul serial

Bitul 6 (Set Break). Dac este setat la 1, circuitul foreaz linia de comunicaie la ni-
velul 0 logic (spaiu). Aceasta corespunde strii break a liniei, care permite atenio-
narea unui terminal aflat la distan printr-o ntrerupere generat la detectarea acestei
stri a liniei. Linia poate fi adus n starea normal prin setarea bitului 6 la 0.
Bitul 5 (Stick Parity) permite transmiterea sau ateptarea unor bii de paritate cu va-
loare fix, 0 sau 1:
0: Paritatea este testat n mod obinuit, conform biilor Parity Enable i Even Parity
Select;
1: Dac bitul Parity Enable este 1, se transmit sau se verific bii cu valoare fix n lo-
cul bitului de paritate, conform bitului Even Parity Select. Dac bitul Even Parity
Select este 0, bitul de paritate este ntotdeauna 1, iar dac bitul Even Parity Select
este 1, bitul de paritate este ntotdeauna 0.
Bitul 4 (Even Parity Select) indic tipul paritii utilizate, dac generarea i verifica-
rea paritii este validat prin bitul Parity Enable:
0: Paritate impar;
1: Paritate par.
Bitul 3 (Parity Enable) valideaz sau invalideaz generarea i verificarea paritii:
0: Generarea i verificarea paritii este invalidat;
1: Generarea i verificarea paritii este validat.
Bitul 2 (Number of Stop Bits) indic numrul biilor de stop generai sau ateptai de
circuitul UART:
0: 1 bit de stop;
1: 2 bii de stop (1,5 bii dac lungimea caracterelor este de 5 bii).
Receptorul testeaz doar primul bit de stop, indiferent de numrul biilor de stop se-
lectai.
Biii 1..0 (Word Length Select) specific lungimea caracterelor transmise sau recepi-
onate:
00: 5 bii/caracter;
01: 6 bii/caracter;
10: 7 bii/caracter;
11: 8 bii/caracter.
MCR - Modem Control Register
Registrul de control al modemului MCR (figura 1.12) se utilizeaz pentru controlul
comunicaiei cu modemul.

Figura 1.12. Registrul de control al modemului MCR.

Semnificaia biilor registrului MCR este urmtoarea:


Biii 7..5 sunt neutilizai (setai la 0).
Sisteme de intrare/ieire i echipamente periferice 21

Bitul 4 (Loop) permite testarea circuitului UART i a programelor de comunicaie.


Prin setarea acestui bit la 1 se vor efectua urmtoarele operaii:
1. Ieirea serial a transmitorului este plasat n starea logic 1.
2. Intrarea serial a receptorului este deconectat.
3. Datele de la ieirea registrului TSR vor fi recepionate n bufferul de recepie
RBR.
4. Liniile de intrare pentru controlul modemului DSR, CTS, RI i DCD sunt deco-
nectate, iar comanda lor se poate realiza cu biii 0..3 ai registrului MCR (Data
Terminal Ready, Request To Send, OUT1, respectiv OUT2). Dac ntreruperile
sunt validate, modificrile acestor bii vor genera cereri de ntrerupere ca i n
cazul n care semnalele ar fi activate de modem.
Biii 2 i 3 (OUT1 i OUT2) se pot utiliza pentru implementarea unei comunicaii
definite de utilizator.
Bitul 1 (Request To Send) activeaz prin valoarea 1 semnalul RTS al interfeei.
Bitul 0 (Data Terminal Ready) activeaz prin valoarea 1 semnalul DTR al interfe-
ei.
Observaie
Semnalele DTR, RTS, OUT1 i OUT2 sunt active n starea logic 0.

LSR - Line Status Register


Acest registru indic starea liniei de comunicaie. Biii 6..5 se refer la transmisie, iar
biii 4..0 se refer la recepie (figura 1.13).

Figura 1.13. Registrul de stare a liniei LSR.

Semnificaia biilor registrului LSR este urmtoarea:


Bitul 7 (Error in Receiver FIFO) este setat la 1 atunci cnd memoriile FIFO sunt vali-
date i a aprut cel puin o eroare de paritate, eroare de ncadrare sau o condiie de
break n timpul recepiei caracterelor aflate n memoria FIFO de recepie.
Bitul 6 (Transmitter Shift Register Empty) este setat la 1 dac att registrul THR ct i
registrul TSR s-au golit. Dac memoriile FIFO sunt validate, acest bit este setat la 1
atunci cnd att memoria FIFO de transmisie ct i registrul TSR s-au golit.
Bitul 5 (Transmitter Holding Register Empty) este setat la 1 atunci cnd coninutul re-
gistrului THR este transferat n registrul TSR i se ncepe transmisia caracterului.
Aceasta indic faptul c circuitul UART este pregtit pentru a accepta un nou caracter
pentru transmisie. Atunci cnd registrul THR se golete, circuitul UART genereaz o
cerere de ntrerupere dac acest tip de ntrerupere este validat. Acest bit este resetat
la 0 atunci cnd se nscrie un nou caracter n registrul THR. Dac memoriile FIFO
22 1. Portul serial

sunt validate, acest bit este setat la 1 atunci cnd memoria FIFO de transmisie se go-
lete i este resetat la 0 atunci cnd se nscrie cel puin un caracter n memoria FIFO
de transmisie.
Bitul 4 (Break Interrupt) este setat la 1 dac sunt sesizate spaii (0 logic) pe linie pen-
tru o perioad mai mare dect cea necesar pentru transmisia unui caracter. n acest
caz, se nscrie un octet cu valoarea 0 n bufferul de recepie i se genereaz o cerere
de ntrerupere. Acest bit este resetat prin citirea registrului LSR.
Bitul 3 (Framing Error) indic o eroare de ncadrare, fiind setat la 1 dac un caracter
se recepioneaz fr biii de stop corespunztori. Receptorul testeaz numai primul
bit de stop, indiferent de numrul biilor de stop programai. La detectarea acestei
erori, circuitul ncearc s se resincronizeze. Acest bit este resetat la 0 prin citirea re-
gistrului LSR.
Bitul 2 (Parity Error) indic o eroare de paritate, fiind setat la 1 dac se recepioneaz
un caracter cu paritatea diferit de cea ateptat. Acest bit este resetat la 0 prin citirea
registrului LSR.
Bitul 1 (Overrun Error) indic o eroare de suprapunere. Este setat la 1 dac se recepi-
oneaz un nou caracter naintea citirii caracterului din registrul RBR de ctre pro-
gram. n acest caz, se pierd unul sau mai multe caractere. Eroarea de suprapunere, ca
i celelalte erori, genereaz o cerere de ntrerupere. Acest bit este resetat la 0 prin citi-
rea registrului LSR. Dac memoriile FIFO sunt validate i memoria FIFO de recepie
se umple peste nivelul de prag, o eroare de suprapunere va fi semnalat doar dup ce
memoria FIFO s-a umplut i urmtorul caracter a fost recepionat n registrul RSR.
Bitul 0 (Data Ready) este setat la 1 atunci cnd a fost recepionat un caracter i acesta
a fost transferat n registrul RBR sau n memoria FIFO. Acest bit este resetat la 0 prin
citirea caracterului din registrul RBR sau n urma citirii tuturor caracterelor din me-
moria FIFO de recepie. Recepia unui caracter va genera o cerere de ntrerupere dac
acest tip de ntrerupere este validat.

MSR - Modem Status Register


Acest registru conine informaii despre starea modemului (figura 1.14).

Figura 1.14. Registrul de stare a modemului MSR.

Semnificaia biilor registrului MSR este urmtoarea:


Biii 7..4 indic starea curent a semnalelor CD, RI, DSR, respectiv CTS. Un semnal
activ este indicat prin bitul corespunztor din registrul MSR setat la 1. Dac bitul Lo-
op al registrului MCR este 1, starea biilor 7, 6, 5, 4 din registrul MSR este echivalent
cu starea biilor OUT2, OUT1, Data Terminal Ready, respectiv Request To Send din
registrul MCR.
Biii 3..0 indic modificarea strii semnalelor CD, RI, DSR, respectiv CTS, de la ulti-
ma citire a registrului MSR. Aceti bii sunt resetai la citirea registrului MSR.
Sisteme de intrare/ieire i echipamente periferice 23

Observaie
Semnalele CTS, DSR, RI i CD sunt active n starea logic 0.

Scratch Register
Acest registru nu este utilizat pentru comunicaie; poate fi utilizat pentru memorarea
temporar a unui octet.

1.12. Accesul la porturi sub sistemele de operare Windows


1.12.1. Problema accesului la porturile de I/E
Sistemele de operare Windows ncepnd cu versiunea NT vor genera o excepie de in-
struciune privilegiat n cazul n care se ncearc accesul la un port de I/E dintr-un program care
ruleaz n modul utilizator. Aceasta se datoreaz restriciilor impuse de procesorul care funcio-
neaz n modul protejat.
n modul protejat, accesul la porturile de I/E este controlat de nivelul privilegiilor de I/E
(IOPL I/O Privilege Level) din registrul indicatorilor de condiii (EFLAGS) i de harta dreptu-
rilor de I/E din segmentul de stare al procesului TSS (Task State Segment).
Procesorul recunoate patru nivele de privilegiu ale programelor, de la 0 la 3, 0 fiind
nivelul cel mai privilegiat. Cei doi bii IOPL indic nivelul de privilegiu pe care trebuie s l aib
un proces pentru a putea executa instruciunile privilegiate; asemenea instruciuni sunt i cele de
I/E IN i OUT. De exemplu, dac ambii bii IOPL sunt 1, instruciunile privilegiate pot fi executa-
te numai de procesele cu nivelele de privilegiu 0 i 1.
n sistemele de operare Windows se utilizeaz numai dou nivele de privilegiu din cele
patru ale procesorului. Programele n mod utilizator ruleaz cu nivelul de privilegiu 3, n timp ce
nucleul sistemului de operare i driverele de dispozitive ruleaz cu nivelul de privilegiu 0. De
aceea, instruciunile privilegiate pot fi executate de programele utilizator doar prin intermediul
sistemului de operare sau al driverelor de dispozitiv.
Harta drepturilor de I/E conine cte un bit pentru fiecare adres de I/E. Dac bitul cores-
punztor unei adrese de I/E este setat, o instruciune de I/E cu acea adres va genera o excepie,
iar n caz contrar operaia de I/E va fi permis. Aceast hart poate fi utilizat pentru a permite
anumitor programe utilizator accesul la anumite porturi de I/E. Procesorul testeaz harta drepturi-
lor de I/E atunci cnd se execut o instruciune de I/E ntr-un proces, iar procesul respectiv nu are
un nivel de privilegiu suficient pentru execuia instruciunii.
Pe lng restriciile impuse de ctre sistemele de operare asupra accesului la porturi, o
alt problem este c cele mai multe medii de programare actuale pentru limbajele de nivel nalt
nu mai pun la dispoziie funcii pentru accesul direct la porturile de I/E, funcii existente n versi-
unile anterioare ale acestor medii de programare.
Exist dou soluii la problema accesului la porturile de I/E sub sistemele de operare
Windows. Prima soluie este de a se utiliza un driver de dispozitiv care ruleaz cu nivelul de pri-
vilegiu 0 i care realizeaz accesul la porturi. Datele sunt transferate ntre un program utilizator i
driverul de dispozitiv prin intermediul apelurilor funciei sistem DeviceIoControl; operaia
care trebuie executat de driver este specificat printr-un cod de control IOCTL (I/O Control).
Pentru simplificarea programelor utilizator, driverul poate pune la dispoziie i unele funcii de
I/E similare cu funciile inportb() i outportb() puse la dispoziie de versiunile anterioare
ale mediilor de programare pentru limbajul C. De exemplu, aceste funcii pot fi furnizate sub
forma unor biblioteci DLL (Dynamic Link Library). Astfel, nu va mai fi necesar apelul direct al
funciei sistem DeviceIoControl.
Aceast soluie este cea recomandat pentru accesul la porturile de I/E. Totui, dezavan-
tajul utilizrii unui asemenea driver de dispozitiv este c eficiena transferurilor de date va fi re-
dus. La fiecare apel al unei funcii pentru citirea sau scrierea unui octet sau cuvnt, procesorul
trebuie s comute de la nivelul de privilegiu 3 la nivelul 0, iar dup execuia operaiei s se reali-
zeze comutarea invers. ns, driverul poate pune la dispoziie i funcii pentru citirea i scrierea
unui bloc de date, n locul citirii i scrierii unui singur octet.
24 1. Portul serial

A doua soluie pentru accesul la porturile de I/E const n modificarea hrii drepturilor
de I/E pentru a permite unui anumit proces s acceseze unele porturi. Dei aceast metod nu este
recomandat, ea permite rularea unor aplicaii existente sub sistemele de operare Windows.

1.12.2. Driverul Marvin HW


Exist mai multe drivere disponibile pentru accesul la porturile de I/E sub sistemele de
operare Windows. Pentru aplicaiile de laborator se va utiliza driverul Marvin HW dezvoltat de
firma Marvin Test Solutions Inc. (http://www.marvintest.com/Product.aspx?Model=HW). Versi-
unea curent (n anul 2015) a driverului este 4.8.2.
Driverul Marvin HW poate fi utilizat pe platforme Windows de 32 de bii i 64 de bii.
Driverul conine fiiere DLL de 32 de bii i 64 de bii care utilizeaz apeluri IOCTL pentru acce-
sul la driverele n modul kernel. Pentru interfaarea cu fiierele DLL, este disponibil un fiier
antet C/C++ (Hw.h). Fiierul antet definete funcii pentru citirea unui octet, a unui cuvnt de 16
bii sau a unui cuvnt dublu de 32 de bii de la un port de intrare, i pentru scrierea unui octet, a
unui cuvnt sau a unui cuvnt dublu ntr-un port de ieire. Pe lng aceste funcii, fiierul antet
definete i funcii pentru citirea i scrierea unui octet, a unui cuvnt sau a unui cuvnt dublu
din/n memorie. Funciile pentru memorie sunt utile pentru accesul la memoria fizic. De exem-
plu, ele se pot utiliza pentru accesul la spaiul de configuraie al unui dispozitiv PCI sau a regis-
trelor mapate n memorie ale unui controler de I/E.
n fiierul antet Hw.h, funciile pentru citirea unui octet, a unui cuvnt sau a unui cuvnt
dublu de la un port de intrare sunt definite dup cum urmeaz:
INT __inp(WORD wPort);
WORD __inpw(WORD wPort);
DWORD __inpd(WORD wPort);
Aceste funcii returneaz valoarea citit de la portul specificat. Singurul parametru al
acestor funcii (wPort) reprezint adresa portului, care este ntotdeauna o valoare de 16 bii.
Funcia __inp() citete un octet de la port, funcia __inpw() citete un cuvnt de la port, iar
funcia __inpd() citete un cuvnt dublu de la port.
Observaii
Dei funcia __inp() returneaz o valoare INT, funcia este utilizat pentru citirea
unui singur octet de la un port de 8 bii.
Numele acestor funcii ncepe cu dou caractere de subliniere. Aceste funcii nu tre-
buie confundate cu funciile _inp(), _inpw() i _inpd(), ale cror nume ncepe
cu un singur caracter de subliniere i care sunt disponibile atunci cnd fiierul antet
conio.h este inclus n codul surs. Funciile definite n fiierul antet conio.h nu pot fi
apelate n programe rulate n mod utilizator, deoarece fiecare apel ar genera o excep-
ie de instruciune privilegiat.
n fiierul antet Hw.h, funciile pentru scrierea unui octet, a unui cuvnt sau a unui cuvnt
dublu ntr-un port de ieire sunt definite dup cum urmeaz:
INT __outp(WORD wPort, INT iData);
WORD __outpw(WORD wPort, WORD wData);
DWORD __outpd(WORD wPort, DWORD dwData);
Primul parametru al acestor funcii (wPort) reprezint adresa portului, care este ntot-
deauna o valoare de 16 bii. Al doilea parametru reprezint data care trebuie scris n portul spe-
cificat. Funcia __outp() scrie un octet n port, funcia __outpw() scrie un cuvnt n port, iar
funcia __outpd() scrie un cuvnt dublu n port.
Observaii
Dei al doilea parametru al funciei __outp() este specificat cu tipul INT, aceast
funcie este utilizat pentru scrierea unui singur octet ntr-un port de 8 bii.
Sisteme de intrare/ieire i echipamente periferice 25

Fiecare din aceste funcii returneaz data scris n port. Totui, de obicei valoarea re-
turnat este ignorat.
Numele acestor funcii ncepe cu dou caractere de subliniere. Aceste funcii nu tre-
buie confundate cu funciile _outp(), _outpw() i _outpd(), care au restricii si-
milare cu cele ale funciilor _inp(), _inpw() i _inpd().
Sunt disponibile urmtoarele funcii pentru citirea unui octet, a unui cuvnt sau a unui
cuvnt dublu dintr-o locaie de memorie:
BYTE _inm(DWORD_PTR dwAddress);
WORD _inmw(DWORD_PTR dwAddress);
DWORD _inmdw(DWORD_PTR dwAddress);
Aceste funcii returneaz valoarea citit din locaia de memorie cu adresa specificat
(dwAddress). Parametrul acestor funcii este definit cu tipul DWORD_PTR, care este un ntreg
fr semn de 64 de bii.
Pentru scrierea unui octet, a unui cuvnt sau a unui cuvnt dublu ntr-o locaie de memo-
rie sunt disponibile urmtoarele funcii:
BOOL _outm(DWORD_PTR dwAddress, INT iData);
BOOL _outmw(DWORD_PTR dwAddress, WORD wData);
BOOL _outmdw(DWORD_PTR dwAddress, DWORD dwData);
Primul parametru al acestor funcii (dwAddress) reprezint adresa de memorie, care
este definit ca un ntreg fr semn de 64 de bii. Al doilea parametru reprezint data care trebuie
scris la adresa specificat. Aceste funcii returneaz valoarea TRUE dac execuia a fost cu suc-
ces.
Observaie
Dei al doilea parametru al funciei __outm()este specificat cu tipul INT, aceast
funcie este utilizat pentru scrierea unui singur octet ntr-o locaie de memorie.
Presupunnd c driverul Marvin HW de 64 de bii este instalat, pentru utilizarea func-
iilor puse la dispoziie de acest driver ntr-o aplicaie de 64 de bii sunt necesare urmtoarele
operaii:
1. Dup crearea proiectului aplicaiei, copiai fiierele Hw.h i Hw64.lib n directorul pro-
iectului aplicaiei. Aceste fiiere sunt disponibile pe calculatoarele din laborator n di-
rectorul D:\Laborator\SIE\MarvinHW .
2. Modificai platforma activ a soluiei la x64. Pentru aceasta, selectai Build Confi-
guration Manager. n fereastra de dialog Configuration Manager executai un clic
pe linia Win32 de sub cmpul Active Solution Platform i selectai <New>. n case-
ta de dialog New Solution Platform selectai sgeata de la sfritul liniei ARM, selec-
tai x64, iar apoi selectai butonul OK. nchidei fereastra de dialog Configuration
Manager.
3. Inserai urmtoarea linie n fiierul surs n care se vor utiliza funciile driverului
Marvin HW:
#include "Hw.h"
4. naintea utilizrii funciilor driverului, apelai funcia HwOpen(). Dac aceast funcie
returneaz valoarea FALSE, afiai un mesaj de eroare indicnd faptul c driverul nu
este instalat corect. La sfritul aplicaiei, apelai funcia HwClose():
if (!HwOpen()) { ... };
...
HwClose();
26 1. Portul serial

5. naintea construirii aplicaiei, specificai fiierul Hw64.lib ca o dependen suplimenta-


r pentru linkeditor. Pentru aceasta, executai un clic dreapta pe numele proiectului n
panoul Solution Explorer i selectai opiunea Properties. n fereastra de dialog Pro-
perty Pages, expandai opiunea Configuration Properties, expandai opiunea Linker
i selectai linia Input. Selectai linia Additional Dependencies, executai un clic pe
sgeata de la captul liniei i selectai <Edit>. n caseta de dialog Additional De-
pendencies introducei Hw64.lib i selectai butonul OK. nchidei fereastra de dialog
Property Pages.

1.13. Aplicaii
1.13.1. Rspundei la urmtoarele ntrebri:
a. Care este deosebirea dintre unitatea de msur a vitezei de modulaie i unitatea de
msur a vitezei de comunicaie?
b. Cum se poate asigura sincronizarea ntre ceasul receptorului i ceasul transmitorului
n cazul unei comunicaii sincrone?
c. Cum se poate asigura corectitudinea blocurilor de date transmise n cazul unei comu-
nicaii sincrone?
d. Care este funcia fiecruia din urmtoarele semnale ale interfeei seriale: DTR, DSR,
RTS i CTS?
e. Care este motivul pentru care porturile de I/E nu pot fi accesate direct de programele
utilizator sub sistemele de operare Windows?
1.13.2. Considerm un port de citire/scriere de 8 bii cu adresa definit de constanta
PORT i o masc de 8 bii definit de constanta BIT4 ca (1 << 4). Utilizai funciile __inp()
i __outp() ale driverului Marvin HW pentru a scrie secvenele de instruciuni n limbajul C
care execut urmtoarele operaii:
Ateapt pn cnd bitul portului definit de masca BIT4 devine setat;
Seteaz bitul portului definit de masca BIT4;
terge bitul portului definit de masca BIT4;
Complementeaz (comut) bitul portului definit de masca BIT4.
Ceilali bii ai portului nu trebuie alterai de secvenele de instruciuni.
1.13.3. Construii i testai aplicaia TestCom1DT, ale crei fiiere surs sunt disponibile
pe pagina laboratorului n arhiva TestCom1DT.zip. Aceast aplicaie testeaz existena portului
serial cu adresa de baz 0x3F8. Testarea este executat prin scrierea valorilor 0xAA i 0x55 n
registrul LCR al portului i apoi citirea lor. Dac valorile citite sunt aceleai cu valorile scrise,
se presupune c portul exist. Utilizai mediul de programare Microsoft Visual Studio pentru
construirea acestei aplicaii, executnd urmtoarele operaii:
1. Lansai n execuie mediul de programare Visual Studio 2013.
2. Selectai File New Project. n fereastra de dialog New Project expandai linia
Visual C++, selectai General, iar apoi selectai Empty Project. n cmpul Name in-
troducei numele proiectului, iar n cmpul Location selectai calea ctre directorul n ca-
re se va crea proiectul; acesta trebuie s fie un subdirector al directorului D:\Student\).
Putei deselecta opiunea Create directory for solution pentru a evita crearea unui alt
director pentru soluia creat. Selectai butonul OK.
3. Copiai n directorul proiectului fiierele coninute n arhiva TestCom1DT.zip.
4. n fereastra Microsoft Visual Studio selectai Project Add Existing Item. Selectai
fiierele copiate anterior n directorul proiectului, iar apoi selectai butonul Add.
Sisteme de intrare/ieire i echipamente periferice 27

5. Modificai platforma activ a soluiei la x64, n modul descris n pasul 2 al secvenei


de operaii prezentate n seciunea 1.12.2.
6. Copiai n directorul proiectului fiierele Hw.h i Hw64.lib. Aceste fiiere sunt dispo-
nibile pe calculatoarele din laborator n directorul D:\Laborator\SIE\MarvinHW .
7. Adugai la proiect fiierul Hw.h.
8. Specificai fiierul Hw64.lib ca o dependen suplimentar pentru linkeditor, n modul
descris n pasul 5 al secvenei de operaii prezentate n seciunea 1.12.2.
9. Selectai Build Build Solution i urmrii ca aplicaia s fie construit fr erori, iar
apoi verificai funcionarea aplicaiei.
Observaie
Aplicaia TestCom1DT utilizeaz funcia DrawText() pentru afiarea coninutului
ferestrei aplicaiei. Aplicaia TestCom1TO, de asemenea disponibil pe pagina labora-
torului, execut aceleai operaii ca i aplicaia TestCom1DT, dar utilizeaz funcia
TextOut() pentru afiarea coninutului ferestrei aplicaiei.
1.13.4. Creai o aplicaie consol Win32 pentru iniializarea portului serial COM1.
Dup crearea proiectului aplicaiei, executai operaiile descrise n seciunea 1.12.2, necesare
pentru utilizarea driverului Marvin HW. n fiierul surs creat, scriei o funcie pentru iniiali-
zarea portului serial COM1 cu urmtorii parametri: debitul binar de 19.200 bii/s; lungimea
caracterelor de 8 bii; fr bit de paritate; 1 bit de stop. Utilizai fiierul de definiii pentru por-
tul serial ComDef.h, disponibil pe pagina laboratorului n arhiva ComDef.zip. Parcurgei paii
urmtori pentru iniializarea portului serial:
1. Setai bitul 7 al registrului LCR la 1; masca acestui bit este LCR_DLAB. Setarea acestui
bit este necesar pentru a accesa registrele divizor n vederea specificrii valorii cu
care trebuie divizat frecvena de ceas a controlerului serial pentru a obine debitul
binar dorit.
2. Scriei octetul mai puin semnificativ al divizorului n registrul DLR_LSB i octetul
mai semnificativ al divizorului n registrul DLR_MSB. Divizoarele sunt definite n ta-
belul 1.6.
3. Folosind descrierea registrului LCR (seciunea 1.11), scriei n registrul LCR un octet
corespunztor parametrilor de comunicaie cerui. Bitul 7 al acestui octet trebuie s fie
0 pentru a accesa registrele n mod normal dup accesarea registrelor divizor.
4. Setai urmtorii bii ai registrului MCR: Data Terminal Ready; Request To Send;
OUT2.
n funcia principal _tmain(), dup iniializarea driverului Marvin HW cu funcia
HwOpen(), apelai funcia CreateFile() pentru deschiderea portului COM1 (similar cu
apelul din aplicaia TestCom1DT), apelai funcia pentru iniializarea portului, apelai funcia
CloseHandle() pentru nchiderea portului COM1, iar apoi apelai funcia HwClose().

Observaie
Pentru deschiderea i nchiderea portului COM1 se pot utiliza i funciile C fopen_s()
i fclose().
1.13.5. Creai o aplicaie consol Win32 pentru transmiterea unui ir de caractere prin
portul serial COM1. Mai nti, scriei o funcie care transmite un singur caracter prin portul
serial COM1. n funcia principal, apelai funcia scris pentru aplicaia 1.13.4 pentru iniiali-
zarea portului serial COM1, iar apoi apelai ntr-o bucl funcia pentru transmiterea unui ca-
racter pentru a transmite un ir de caractere. Conectai un cablu serial inversor ntre porturile
COM1 ale dou calculatoare. Lansai n execuie programul HyperTerminal pe calculatorul
utilizat ca receptor i creai o conexiune cu aceiai parametri ca i cei ai portului serial tran-
28 1. Portul serial

smitor. Lansai apoi n execuie programul de transmisie i verificai funcionarea acestuia


urmrind caracterele afiate n fereastra programului HyperTerminal.
1.13.6. Creai o aplicaie consol Win32 pentru recepia unui ir de caractere prin
portul serial COM1. Mai nti, scriei o funcie care recepioneaz un singur caracter prin por-
tul serial COM1. n funcia principal, apelai funcia scris pentru aplicaia 1.13.4 pentru
iniializarea portului serial COM1, iar apoi apelai ntr-o bucl funcia pentru recepia unui
caracter pentru a recepiona un ir de caractere. Aplicaia va afia fiecare caracter recepionat
i se va termina atunci cnd se recepioneaz caracterul ESC (0x1B). Conectai un cablu serial
inversor ntre porturile COM1 ale dou calculatoare. Lansai n execuie programul Hyper-
Terminal pe calculatorul utilizat ca transmitor i creai o conexiune cu aceiai parametri ca
i cei ai portului serial al calculatorului receptor. Lansai apoi n execuie programul de recep-
ie i verificai funcionarea acestuia introducnd linii de text n fereastra programului Hyper-
Terminal.
1.13.7. Modificai aplicaia 1.13.6 astfel nct aceasta s transmit napoi (n ecou)
fiecare caracter recepionat la portul serial COM1. Verificai aplicaia n mod similar cu pro-
cedura descris pentru aplicaia 1.13.6.
1.13.8. Conectai dou calculatoare printr-un cablu serial inversor. Utilizai aplicaia
de transmisie 1.13.5 i aplicaia de recepie 1.13.6 pentru transmiterea unui ir de caractere de
la unul din calculatoare la cellalt. Calculatorul receptor va afia irul de caractere recepionat.

Bibliografie
[1] Baruch, Z., Sisteme de intrare/ieire, ndrumtor de lucrri de laborator, Editura
U.T.PRES, Cluj-Napoca, 1998.
[2] National Semiconductor Corp., PC16550D Universal Asynchronous Receiver/ Tran-
smitter with FIFOs, 1995, www.national.com/ds.cgi/PC/PC16550D.pdf.
[3] Peacock, C., Interfacing the Serial / RS232 Port, Beyond Logic, 2010,
http://beyondlogic.org/serial/serial.htm.
[4] Rosch, W. L., Hardware Bible, Sixth Edition, Que Publishing, 2003.
[5] Strangio, C. E., The RS232 Standard, CAMI Research Inc., Lexington, Massachusetts,
1993-2015, http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html.
[6] Wikimedia Foundation, Inc., RS-232, Wikipedia, The Free Encyclopedia, 2015,
http://en.wikipedia.org/wiki/RS-232.

S-ar putea să vă placă și