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