Sunteți pe pagina 1din 17

MICROCONTROLERE

Laboratorul nr. 6
- UART MCBSTR7x I Scopul laboratorului
Scopul acestui laborator este acela de: a prezenta funcionarea UART-ului; a prezenta facilitile funcionale; a programa i utiliza UART-ul n contextul unor aplicaii date.

II Introducere
Interfaa UART ofer comunicaie serial ntre STR71x i alte microcontrolere, microprocesoare sau periferice externe. UART suport comunicaia asincron full-duplex. Se poate programa numrul de bii de date, opt sau nou bii de date de transfer, paritatea i numrul de bii de stop. Pentru a crete sigurana transmisiei de date sunt prevzute erori de paritate, ncadrare i detectarea erorii de depire. Transmisia i recepia datelor se poate realiza simplu cu buffer-are dubl sau se poate utiliza o structur de tip FIFO pe 16 cuvinte (first in first out). Pentru comunicaiile multimicroprocesor, este inclus un mecanism de detectare a adreselor din date. Exist o opiune de conectare n bucl pentru testare. Pentru programarea vitezei de comunicaie este prevzut un generator pe 16 bii.

III Caracteristici principale


Comunicaie asincron full-duplex. Dou structuri interne FIFO (pe 16 cuvinte/words) pentru transmiterea i recepionarea. Un generator pentru viteza de transmitere pe 16 bii. Cadre de date, fie pe 8 sau 9 bii lungime Bit de paritate (par sau impar) i bit de stop.

IV Descriere funcional
UART suport comunicaia asincron full-duplex, unde att transmitorul, ct i receptorul utilizeaz acelai format de cadru de date i aceeai vitez de transmitere. Datele sunt transmise la pinul TXD i recepionate la pinul RXD. Cadrele de date: Cadrele de date pe opt bii (a se vedea Figura IV-1) constau fiecare din: opt bii de date D0-7 (prin setarea cmpului de bii Mode pe 001); apte bii de date D0-6 plus un bit de generare automat de paritate (prin setarea cmpului de bii Mode pe 011). Paritatea poate fi impar sau par, n funcie de bitul ParityOdd din registrul UARTn_CR. Un bit de paritate par va fi setat dac suma-modulo-2 a celor apte bii de date este 1. Un bit de paritate impar va fi ters n acest caz.

-1-

MICROCONTROLERE

Figura IV-1 Cadre de date pe 8 bii

Cadrele de date pe nou bii (a se vedea Figura IV-2) constau fiecare din: nou bii de date D0-8 (prin setarea cmpului de bii Mode la 100). opt bii de date D0-7 plus un bit de generare paritate automat (prin setarea cmpului de bit Mode la 111). opt bii de date D0-7 plus un bit de wake-up (prin setarea cmpului de bit Mode la 101).

Figura IV-2 Cadre de date pe 9 bii

Paritatea poate fi impar sau par, n funcie de bitul ParityOdd din registrul UARTn_CR. Bitul de paritate pentru paritatea par va fi setat dac suma-modulo-2 a celor opt bii de date este 1. Pentru paritatea impar bitul de paritate n acest caz, va fi ters. n modul wake-up, cadrele recepionate sunt transferate la registrul tampon de recepie, dac al noulea bit (bitul de wake-up) este 1. Dac acest bit este 0, nu va fi activat nici o cerere de ntrerupere la recepie i nu vor fi transferate date. Aceast caracteristic poate fi utilizat pentru a controla comunicaia n sistemele multi-procesor. Atunci cnd procesorul master dorete s transmit un bloc de date ctre unul din mai multe dispozitive slave, trimite mai nti un octet de adres ce identific slave-ul int. Un octet de adres difer de unul de date, prin faptul c bitul al noulea adiional este 1 pentru un octet de adres i 0 pentru un octet de date, astfel nct nu va fi ntrerupt nici un slave de un octet de date. Un octet de adres va ntrerupe toate procesoarele de tip slave (funcionnd n modul 8 bii de date + bitul de wake-up), astfel nct fiecare slave poate examina cei 8 bii cei mai puin semnificativi (LSB) ai caracterului recepionat (adresa). Slave-ul adresat va comuta n modul de date pe 9 bii, care faciliteaz recepionarea octeilor de date ce vor veni (cu bitul de wake-up ters). Slave-urile ce nu sunt adresate rmn n modul de date pe 8 bii + bitul de wake-up, ignornd biii de date urmtori.

-2-

MICROCONTROLERE

IV.1 Transmisia
Valorile ce trebuie transmise sunt scrise n structura FIFO de transmisie, TxFIFO, prin scrierea la UARTn_TxBUFR. FIFO este implementat ca o arie de 16 vectori cu cte 9 bii fiecare. Dac structurile FIFO sunt activate (este setat UARTn_CR(FifoEnable)), iar TxFIFO este considerat plin (este setat UARTn_SR(TxFull), atunci cnd conine 16 caractere. n continuare, scrierea de caractere la UARTn_TxBUFR va conduce la suprascrierea celei mai recente intrri n TxFIFO. Dac structurile FIFO sunt dezactivate, TxFIFO este considerat plinl (este setat UARTn_SR(TxFull) atunci cnd conine 1 caracter, iar o scriere la UARTn_TxBUFR va suprascrie n acest caz coninutul regfistrului de emisie. Dac structurile FIFO sunt activate, este setat UARTn_SR(TxHalfEmpty, atunci cnd TxFIFO conine 8 sau mai puine caractere. Dac FIFO sunt dezactivate, acesta va fi setat atunci cnd TRxFIFO este golit. Scriind orice la UARTn_TxRSTR se va goli TxFIFO. Valorile sunt serializate pentru transmisie utiliznd un registru pe 9 bii txshift, ncepnd cu partea de jos a lui TxFIFO. Dac starea transmitorului este idle (registrul txshift este gol) i este scris ceva la UARTn_TxBUFR, astfel nct TxFIFO devine ocupat, registrul txshift este ncrcat imediat din TxFIFO, iar transmisia de date din registrul txshift va ncepe la urmtorul impuls de ceas a ceasului de transmisie. La momentul n care transmitorul este aproape de a transmite biii de stop, i TxFIFO nu este liber, registrul txshift va fi ncrcat imediat din TxFIFO i transmisia de noi date va ncepe imediat ce este terminat perioada curent a bitului de stop (de exemplu, urmtorul bit de start va fi transmis imediat dup perioada curent a bitului de stop). Astfel, poate avea loc transmisia de date back-to-back (niruit, n salv, fr pauz). n schimb, dac TxFIFO este liber la acest moment, registrul tsxhift va deveni gol. UARTn_SR(TxEmpty) indic dac registrul txshift este gol. Dup schimbarea bitului FifoEnable, este important a reseta FIFO la starea empty (liber/gol) (prin scrierea la registrul UARTn_TxRSTR), ntruct starea pointerului FIFO poate fi rezidual (necunoscut)). Opiunea de conectare n bucl (loop-back) (selectat de ctre UARTn_CR(LoopBack)) va conecta intern ieirea registrului de deplasare al transmitorului la intrarea registrului de deplasare al receptorului. Aceasta poate fi folosit pentru a testa rutinele de comunicaie serial ntr+o faz o faz timpurie, fr a fi necesar furnizarea unei reele externe.

IV.2 Recepia
Recepia este iniiat de frontul cztor al semnalului la pinului de intrare a datelor (RXD), ceea ce semnific faptul c sunt setai biii UARTn_CR(Run) i UARTn_CR(RxEnable). Pinul RXD este eantionat de 16 ori pe durata unei celule bit. Decizia asupra bitului de stat se ia din prima, a doua i a treia eantionare din bitul de start i va determina valoarea efectiv a bitului (se ia valoarea majoritar). Aceasta va evita rezultatele eronate, ce pot fi cauzate prin zgomot. Dac valoarea detectat nu este 0 atunci cnd este eantionat bitul de start, circuitul de recepie este resetat i ateapt urmtoarea tranziie negativ la pinul RXD. Dac bitul de start este valid, circuitul de recepie continu eantionarea i deplaseaz cadrul de date n registrul de deplasare pentru recepie. Pentru biii urmtori din cadru i biii de paritate, decizia majoritar se ia pentru eantioanele

-3-

MICROCONTROLERE apte, opt i a nou de pe durata fiecrei celule bit i va detzermina valoarea efectiv a bitului. Meniune: Dac este iniiat recepia, atunci cnd pinul de intrare a datelor (RXD) este inut continuu pe 0 va fi raportat o eroare de cadru deoarece etajul de recepie eantioneaz valoarea iniial ca un front cztor, recepioneaz toi biii pe 0 dar nu gsete biii de STOP care trebuie s fie pe 1. Pentru 0.5 bii de stop, decizia majoritar pentru a determina valoarea efectiv a bitului de stop. se ia pe eantionele trei, patru i cinci de pe durata bitului de STOP. Pentru 1 saui 2 bii de stop, pentru a determina valorile efective ale bitului de stop. decizia majoritar se ia pe eantioanele apte, opt i nou pe durata biilor de stop. Pentru 1.5 biii de stop, decizia majoritar utilizat pentru a determina valorile efective ale bitului de stop se ia pe eantioanele cincisprezece, aisprezece i aptesprezecea pe perioada biilor. Valorile efective recepionate la pinul RXD sunt deplasate n registrul rxshift pe 10 bii. Structura FIFO de recepie, RxFIFO, este implementat ca un cmp pe 16 vectori pe 10 bii (fiecare de la 9 la 0). Dac RxFIFO este gol, UARTn_SR(RxBufNotEmpty) este setat la 0. Dac RxFIFO nu este gol, o citire de la UARTn_RxBUFR va citi intrarea cea mai veche din RxFIFO. Dac structurile FIFO sunt dezactivate, RxFIFO este considerat plin, atunci cnd conine un caracter. UARTn_SR(RxHalfFull) este setat atunci cnd conine mai mult de 8 caractere. Scriind orice la UARTn_RxRSTR se va goli RxFIFO. Imediat ce a fost determinat valoarea efectiv a ultimului bit de stop, coninutul registrului rxshift este transferat la RxFIFO (cu excepia modului de wakeup, n acest caz avnd loc doar dac bitul de wake-up, bitul 8, este un 1). Circuitul de recepie ateapt apoi urmtorul bit de start (tranziia cztoare la pinul RXD). UARTn_SR(OverrunError) este setat atunci cnd RxFIFO este full i este ncrcat un caracter de la registrul rxshift n RxFIFO. Acesta este ters atunci cnd este citit registrul UARTn_RxBUFR. Bitul cel mai semnificativ al fiecrei intrri RxFIFO (RxFIFO[x][9]) va memora dac a existat sau nu o eroare a cadrului, n momentul recepionrii intrrii (de exemplu, una din valorile efective din bitul de stop a fost 0). UARTn_SR(FrameError) este setat atunci cnd cel puin una din intrrile valide din RxFIFO are MSB-ul su setat. Dac modul este unul n care este ateptat un bit de paritate, atunci bitul RxFIFO[x][8] (dac se selecteaz modul date pe 8 bii+ modul paritate) sau bitul RxFIFO[x][7] (dac se selecteaz modul date pe 7 bii+ modul paritate) vor memora dac a existat o eroare de paritate, la recepionarea acelei intrri. Meniune: Nu conine bitul de paritate ce a fost recepionat. UARTn_SR(ParityError) este setat atunci cnd cel puin una din intrrile valide din RxFIFO are setat bitul 8 (dac se selecteaz modul date pe 8 bii+ modul paritate) sau este setat bitul 7 (dac se selecteaz modul date pe 7 bii+ modul paritate). Dup schimbarea bitului activ FIFO, este important a se reseta FIFO pentru eliberare/golire (prin scrierea ctre registrul UARTn_RxRSTR), ntruct starea pointer-ilor FIFO poate fi parazit.

-4-

MICROCONTROLERE Recepia este oprit prin tergerea/eliberarea bitului UARTn_CR (RxEnable). Un cadru recent primit este completat prin includerea unei generri de indicatori ai strii de recepie. Biii de start ce urmeaz acestui cadru nu vor fi recunoscui.

IV.3 Mecanismul de timeout (expirarea timpului)


UART conine un numrtor de timeout pe 8 bii. Acesta se rencarc de la registrul UARTn_TOR oricnd sunt adevrate una sau mai multe din situaiile urmtoare: este citit UARTn_RxBBUFR; UART ncepe s primeasc/recepioneze un caracter; este scris UARTn_TOR. Dac nici una din aceste condiii nu este ndeplinit, numrtorul va decrementa/descrete la 0 pentru fiecare perioad de ceas a cesului care d viteza de transmisie. UARTn_SR(TimeoutNotEmpty) este 1 oricnd RxFIFO nu este liber, iar numrtorul timeout este zero. UARTn_SR(TimeoutIdle) este 1 oricnd RxFIFO este liber, iar numrtorul timeout este zero. Efectul acestuia const n faptul c oricnd RxFIFO conine ceva, numrtorul timeout se va decrementa pn va avea loc un eveniment la RxFIFO. Dac nu se ntmpl nimic, iar numrtorul timeout atinge valoarea zero, atunci va fi setat indicatorul/flag UARTn_SR(TimeoutNotEmpty). Atunci cnd software-ul a golit RxFIFO, numrtorul timeout se va reseta i ncepe decrementarea. Dac nu vor sosi caractere pn cnd numrtorul timeout atinge valoarea zero, atunci va fi setat indicatorul/flag UARTn_SR(TimeoutIdle).

IV.4 Generarea vitezei de transmisie


Generatorul vitezei de transmisie ofer un ceas cu frecvena de 16 ori mai mare dect viteza efectiv de transmisi. Acest ceas va funciona doar dac UARTn_CR(Run) este setat la 1. Setarea acestui bit la 0 va nghea imediat starea transmitorului i receptorului UART-ului. Acest lucru trebuie realizat doar cnd UART este n starea idle. Viteza de transmisie i valoarea de rencrcare solicitat pentru o vitez de transmisie pot fi determinate prin formulele urmtoare:

Baudrate = vitez de transmisie Unde: <UART_BaudRate> reprezint coninutul registrului UARTn_BR, considerat ca ntreg fr semn - unsigned - pe 16 bii, iar PCLK1 este frecvena ceasului pentru perifericele magistralei APB1. Tabelele IV-1 i IV-2 prezint diferite viteze de transmisie comune, mpreun cu valorile de rencrcare necesare, precum i erorile de deviere pentru dou frecvene de ceas diferite PCLK1 (16MHz i respectiv 20MHz).

-5-

MICROCONTROLERE

Tabel IV-1 Viteze de transmisie cu PCLC1 = 16MHz

Tabel IV-2 IV-3 Viteze de transmisie cu PCLC1 = 20MHz

IV.5 Controlul ntreruperii


UART are o singur linie de solicitare a unei ntreruperi, denumit UARTn_interrupt. Biii de stare din registrul UARTn_SR determin cauza ntreruperii. UARTn_interrupt va fi n starea high atunci cnd un bit de stare este 1 (high), iar bitul corespunztor din registrul UARTn_IER este 1 (a se vedea Figura IV3). Meniune: Registrul UARTn_Status este read only. Biii UARTn_Status pot fi teri/eliberai doar prin lucrul asupra structurilor FIFO. RxFIFO i TxFIFO pot fi resetai prin scrierea la regitrii UARTn_RxReset i UARTn_TxReset.

-6-

MICROCONTROLERE

Figura IV-3 Cererea de ntrerupere UART

IV.6

Utilizarea ntreruperilor UART atunci cnd structurile FIFO sunt dezactivate

Atunci cnd structurile FIFO sunt dezactivate, UART ofer trei cereri de ntrerupere, pentru a controla schimburile de date prin canalul serial: TxHalfEmpty este activat atunci cnd datele sunt mutate de la UARTn_TxBUFR la registrul txshift; TxEmpty este activat atunci cnd bitul de stop este transmis; RxBufNotEmpty este activat atunci cnd cadrul recepionat este mutat la UARTn_RxBUFR. Pentru transferurile singulare, este suficient a se utiliza ntreruperea transmitorului (TxEmpty), ce indic faptul c datele ncrcate anterior au fost transmise, cu excepia bitului de stop. Pentru transferurile multiple capt la capt ce utilizeaz TxEmpty, va fi lsat doar un bit de stop pentru rutina de tratare a ntreruperii, pentru a rspunde ntreruperii i iniierii altei transmisii. Utiliznd ntreruperea dat de buffer-ul de transmisie (TxHalfEmpty), timpul disponibil se va mri la durata unui cadru complet deoarece UARTn_TxBUFR poate fi rencrcat n timp ce datele anterioare sunt nc transmise. TxHalfEmpty reprezint un trigger/declanator timpuriu pentru rutina de rencrcare, n timp ce TxEmpty indic transmisia complet a cmpului de date al cadrului. Astfel, software-ul care utilizeaz comunicaia cu confirmare/stabilirea a unei legturi trebuie s se bazeze pe TxEmpty la finalul blocului de date pentru a asigura faptul c toate datele au fost transmise.

-7-

MICROCONTROLERE

IV.7

Utilizarea ntreruperilor UART atunci cnd structurile FIFO sunt activate

Pentru a transmite un numr mare de caractere capt la capt, rutina driver ar trebui s scrie 16 caractere la UARTn_TxBUFR, apoi de fiecare dat cnd are loc o ntrerupere TxHalfEmpty, ar trebui s mai scrie nc 8. Atunci cnd nu mai este nimic de trimis, ntreruperea TxEmpty va spune cnd a fost transmis totul. La recepie, comanda ar putea folosi RxBufNotEmpty, pentru a ntrerupe de fiecare dat cnd sosete un caracter. Alternativ, dac datele vin capt la capt, se poate folosi RxHalfFull pentru ntrerupere, atunci cnd sunt mai mult de 8 caractere n RxFIFO pentru citire. Rutina ar trebui s dureze att timp ct este necesar pentru a primi 8 caractere i de a rspunde acestei ntreruperi, nainte ca datele s fie supra scrise. Dac au sosit mai puin de opt caractere i nu au mai fost recepionate altele pentru cel puin o perioad de timeout, comanda de citire ar putea fi trezit/pornit prin una din cele dou ntreruperi de timeout, TimeoutNotEmpty sau TimeoutIdle.

IV.8 Operarea specific modului SmartCard


Pentru a respecta specificaiile ISO SmartCard, sunt suportate urmtoarele moduri n modul UART SmartCard: Atunci cnd bitul modului SmartCard este setat la 0, are loc o operare normal a UART-ului. Atunci cnd bitul modului SmartCard este setat la 1, au loc urmtoarele operaii: Transmisia de date din registrul de deplasare la transmisie va fi ntrziat cu un minimum de din viteza de transmisie a ceasului. n funcionare normal, dac registru de deplasare este plin transmisia va ncepe la urmtorul front al ceasului de transmisie. n modul SmartCard, aceast transmisie este ns sigur ntrziat cu din viteza de transmisie a ceasului. Dac este detectat o eroare de paritate n timpul recepiei unui cadru programat cu bii de stop, linia de transmisie este setat low pentru o perioad a ceasului de transmisie, dup terminarea cadrului primit, de exemplu, la finalul acelei din perioada bitului de stop. Aceasta este pentru a indica ctre SmartCard faptul c datele transmise ctre UART1 nu au fost corect recepionate. Activarea indicatorului TxEmpty poate fi ntrziat prin programarea registrului UART1_GTR. n funcionare normal, TxEmpty este activat atunci cnd registrul de deplasare de transmisie este liber i nu mai exist cereri de transmisie nerezolvate. n modul SmartCard, un registru de deplasare de transmisie ce este liber/gol va declana numrtorul guradtime (timpului de protecie), pentru a numra pn la valoarea programat n registrul UART1_GTR. TxEmpty este forat pe starea low, n tot acest timp. Atunci cnd numrtorul guardtime atinge valoarea programat, TxEmpty este setat pe high. Nesetarea lui txEmpty nu este afectat de modul SmartCard. Bitul de validare a recepiei este resetat dup ce s-a primit un caracter. Acest fapt va produce evitarea din partea receptorului de a detecta alt bit de start n cazul n care linia SmartCard RXD trece pe starea low, nainta ca software-ul driver-ului pentru UART s trateze caracterul.

-8-

MICROCONTROLERE

V Descrierea registrelor
V.1 Registrul vitezei de transmisie a UART (UARTn_BR)
Address Offset: 00h Reset value: 0001h

Registrul UARTn_BR este un registru cu funcie dual generator/registru de rencrcare. O citire de la acest registru returneaz coninutul timer-ului, scrierea la acesta va actualiza registrul de rencrcare. O auto-rencrcare a timer-ului cu coninutul registrului de rencrcare este realizat de fiecare dat cnd se scrie la registrul UARTn_BR. Totui, dac bitul Run al registrului UARTn_CR este 0, la momentul realizrii operaiei de scriere la registrul UARTn_BR, timer-ul nu va fi rencrcat dect la primul ciclu de ceas PCLK1 dup ce bitul Run devine 1.

Viteza de transmisie UART - funcia de scriere: valoarea rencrcat pe 16 bii - funcia de citire: valoarea de numrare pe 16 bii

V.2 Registrul TxBuffer al UART (UARTn_TxBUFR)


Address Offset: 04h Reset value: 0000h

Scrierea la registrul buffer-ului de transmisie va determina nceperea transmisiei de date. Biii 15:9 Rezervai, trebuie meninui la valoarea de reset (0). Bitul 8 TX[8]: Bitul D8 ale buffer-ului de transmisie Bitul D8 al buffer-ului de transmisie poate fi bitul de paritate sau bitul de wake-up sau nedefinit n funcie de modul de funcionare (setarea cmpului Mode n registrul UARTn_CR). Meniune: Dac acest cmp Mode selecteaz un cadru pe 8 bii, atunci acest bit ar trebui scris cu 0. Meniune: Dac acest cmp Mode selecteaz un cadru pe bit de paritate, atunci bitul TX[8] va conine bitul de paritate (generat automat de ctre UART). Scriind 0 sau 1 n acest bit nu se va produce nici un efect -9-

MICROCONTROLERE asupra cadrului transmis. TX[7]: Bitul de date D7 ae buffer-ului de transmisie Bitul D7 al buffer-ului de transmisie sau bitul de paritate n funcie de modul de funcionare (setarea cmpului Mode n registrul UARTn_CR). Meniune: Dac acest cmp Mode selecteaz un cadru cu bit de paritate, atunci bitul TX[7] va conine bitul de paritate (generat automat de ctre UART). Scriind 0 sau 1 n acest bit nu se va produce nici un efect asupra cadrului transmis. TX[6:0]: Biii de date D[6:0] ai buffer-ului de transmisie

Bitul 7

Biii 6:0

V.3 Registrul RxBuffer al UART (UARTn_RxBUFR)


Address Offset: 08h Reset value: 0000h

Pot fi citite de la registrul buffer-ului de recepie datele recepionate i, n cazul n care este setat modul de funcionare corespunztor, bitul de paritate recepionat Biii Rezervai, ntotdeauna citii ca 0. 15:10 Bitul 9 RX[9]: Eroarea de cadru Dac este setat, va indica o eroare de cadru ce are loc la stocarea datelor n RX[8:0] (de exemplu, una din valorile efective ale bitului de stop a fost 0, la recepionarea datelor). Bitul 8 RX[8]: Bitul de date D8 al buffer-ului de recepie Bitul D8 al buffer-ului de recepie sau eroarea de paritate sau bitul de wake-up - n funcie de modul de funcionare (setarea cmpului Mode n registrul UARTn_CR). Meniune: Dac acest cmp Mode selecteaz un cadru pe 7 sau 8 bii, atunci acest bit este nedefinit. Software-ul ar trebui s ignore acest bit la citirea cadrelor pe 7 sau 8 bii. Bitul 7 RX[7]: Bitul D7 al buffer-ului de recepie Bitul D7 al buffer-ului de recepie sau eroarea de paritate - n funcie de modul de funcionare (setarea cmpului Mode n registrul UARTn_CR). Biii 6:0 RX[6:0]: Biii de date D[6:0] ai buffer-ului de recepie.

V.4 Registrul de control al UART (UARTn_CR)


Address Offset: 0Ch Reset value: 0000h

- 10 -

MICROCONTROLERE Acest registru controleaz modul de funcionare al UART i conine biii de control pentru selectarea modului i a verificrii erorii, precum i indicatorii de stare pentru identificarea erorii. Meniune: 1. Programarea cmpului de control al modului (Mode) cu una din combinaiile rezervate poate conduce la un comportament imprevizibil. 2. Transmisia sau recepia de date seriale este posibil atunci cnd bitul de run al generatorului vitezei de transmisie (Run) este setat la 1. Atunci cnd bitul Run este setat la 0, TXD va fi 1. Setarea bitului Run la 0 va nghea imediat starea transmitorului i a receptorului. Aceasta ar trebui realizat doar cnd UART este idle. Biii 15:11 Bitul 10 Bitul 9 Rezervai, ntotdeauna citii ca 0. FifoEnable: FIFO activ 0: modul FIFO dezactivat 1: modul FIFO activat SCEnable Rezervai pentru SmartCard: Mode activ 0: Modul SmartCard dezactivat 1: Modul SmartCard activat Meniune: Dac modul SmartCard nu este utilizat: trebuie meninut la 0. RxEnable: Receptor activ 0: Receptor dezactivat 1: Receptor activat Run: Bitul Run al generatorului vitezei de transmisie 0: Generator al vitezei de transmisie dezactivat (UART inactiv) 1: Generator al vitezei de transmisie activat LoopBack (conectare n bucl): Modul LoopBack activ 0: Mod standard de transmisie/recepie 1: Mod LoopBack activat Meniune: Acest bit poate fi modificat doar atunci cnd UART este inactiv. ParityOdd: Selectarea paritii 0: Paritate par (bitul de paritate este setat dac numrul biilor pe 1 din date este impar) 1: Paritate impar (bitul de paritate este setat dac numrul biilor pe 1 din date este par) Biii de Stop: Numrul bilori de stop Aceti bii selecteaz numrul biilor de stop 00: 0.5 bii de stop 01: 1 bit de stop 10: 1.5 bii de stop 11: 2 bii de stop Modul: Controlul Modului UART 000: rezervat 001: date pe 8 bii 010: rezervat 011: date pe 7 bii + paritate 100: date pe 9 bii 101: date pe 8 bii + bitul de wake up - 11 -

Bitul 8 Bitul 7 Bitul 6

Bitul 5

Biii 4:3

Biii 2:0

MICROCONTROLERE 110: rezervat 111: date pe 8 bii + paritate

V.5 Registrul IntEnable al UART (UARTn_IER)


Address Offset: 10h Reset value 0000h

Registrul UARTn_IE activeaz sursele de ntreruperi. ntreruperile au loc atunci cnd bitul de stare din registrul UARTn_SR este 1, iar bitul corespunztor din registrul UARETn_IER este 1. Biii 15:9 Bitul 8 Rezervai, ntotdeauna citii ca 0. RxHalfFullIE: ntreruperea Activ a buffer-ului Half Full al receptorului 0: ntrerupere dezactivat 1: ntrerupere activat TimeoutIdleIE: ntreruperea activ pentru Timeout Idle 0: ntrerupere dezactivat. 1: ntrerupere activat. TimeoutNotEmptyIE: ntreruperea activ pentru Timeout Not Empty 0: ntrerupere dezactivat 1: ntrerupere activat. OverrunErrorIE: ntrerupere activ a erorii de depire (overrun) 0: ntrerupere dezactivat 1: ntrerupere activat. FrameErrorIE: ntrerupere activ a erorii de ncadrare (Framing Error) 0: ntrerupere dezactivat 1: ntrerupere activat. ParityErrorIE: ntrerupere activ a erorii de paritate 0: ntrerupere dezactivat 1: ntrerupere activat. TxHalfEmptyIE: ntrerupere activ a Transmitter buffer Half Empty 0: ntrerupere dezactivat 1: ntrerupere activat. TxEmptyIE: ntrerupere activ a Transmitter Empty (eliberrii/golirii transmitorului) 0: ntrerupere dezactivat

Bitul 7 Bitul 6

Bitul 5

Bitul 4

Bitul 3 Bitul 2

Bitul 1

- 12 -

MICROCONTROLERE 1: ntrerupere activat. RxBufNotEmptyIE: ntrerupere activ a Receiver Buffer Not Empty 0: ntrerupere dezactivat 1: ntrerupere activat.

Bitul 0

V.6 Registrul de stare al UART (UARTn_SR)


Address Offset: 14h Reset value: 0006h

Registrul UARTn_SR indic/arat cauza unei ntreruperi. Biii 15:10 Bitul 9 Bitul 8 Bitul 7 Bitul 6 Bitul 5 Bitul 4 Bitul 3 Bitul 2 Bitul 1 Bitul 0 Rezervai, ntotdeauna citii ca 0. TxFull: TxFIFO Full Setat atunci cnd TxFIFO conine 16 caractere. RxHalfFull: RxFIFO Half Full Setat atunci cnd RxFIFO conine mai mult de 8 caractere. TimeoutIdle: Timeout Idle Setat atunci cnd exist un timeout i RxFIFO este liber/gol. TimeoutNotEmpty: TimeoutNotEmpty Setat atunci cnd exist un timeout i RxFIFO nu este liber/gol. OverrunError: Overrun Error Setat atunci cnd sunt recepionate date i RxFIFO este full. FrameError: FrameError Setat atunci cnd RxFIFO conine ceva primit cu eroare de cadru. ParityError: ParityError Setat atunci cnd RxFIFO conine ceva primit cu eroare de paritate. TxHalfEmpty: TxFIFO Half Empty Setat atunci cnd TxFIFO este cel puin liber pe jumtate (half empty). TxEmpty: TxFIFO Empty Setat atunci cnd registrul shift de transmisie este empty. RxBufNotEmpty: RxBuffer not Empty Setat atunci cnd RxFIFO nu este empty (RxFIFO conine cel puin o intrare).

V.7 Registrul guardtime (de protecie) al UART (UARTn_GTR)


Address Offset: 18h

- 13 -

MICROCONTROLERE
Reset value: 0000h

Registrul UARTn_GTR permite utilizatorului s defineasc un numr programabil de periade ale ceasului de transmisie pentru a ntrzia declanarea lui TxEmpty.

V.8 Registrul timeout al UART (UARTn_TOR)


Address Offset: 1Ch Reset value: 0000h

Acest registru exist pentru a avea un timeout, n scopul asigurrii faptului c nu va trece prea mult timp ntre dou caractere succesive recepionate.

- rezervai, ntotdeauna citii ca 0. - UART_Timeout: Timeout Perioada de timeout n perioade ale cesului pentru viteza de transmisie.

V.9 Registrul TxReset al UART (UARTn_RSTR)


Address Offset: 20h Reset value: Reserved

O scriere la acest registru va elibera/goli TxFIFO.

V.10 Registrul RxReset al UART (UARTn_RxRSTR)


Address Offset: 24h Reset Value: Reserved

O scriere la acest registru va elibera/goli RxFIFO.

- 14 -

MICROCONTROLERE

VI Harta registrelor UART


Urmtorul tabel prezint un rezumat al regitrilor implementai n UART. A se vedea tabelul 2 din manual pentru adresele de baz. (Table 2 on page 13 for base addresses).
Tabel VI-4 Harta registrului periferic UART

VII Echipamente i dispozitive folosite


Pentru buna desfurare a lucrrii se vor folosi urmtoarele dispozitive i resurse software MCBSTR7 plac de evaluare 11 Surse de alimentare 7-9V, max 190 mA 11 Versiunea de evaluare MDK-ARM 11 ULINK 1 Generator de semnale 1 Osciloscoape 11 Analizoare logice INTRONIX 11 Osciloscoapele, analizoarele i generatorul vor permite vizualizarea i generarea semnalelor prin conectarea la header-e.

- 15 -

MICROCONTROLERE

VIII Teme
1. Se vor studia i evidenia facilitile KEIL pentru simularea i portului serial (vezi HELP-ul KEIL i comenzile SxIN ScOUT).

Figura VIII-4. Fereastra de depanare pentru UART 0

Figura VIII-5. Utilizarea registrelor VREG pentru simularea virtual

- 16 -

MICROCONTROLERE

Figura VIII-6. Utilizarea ferestrei de comenzi pentru simulare

2. Se va analiza, executa i testa exemplul din aplicaia Keil pentru UART. 3. Se vor analiza i descrie funciile de bibliotec utilizate. 4. Se va scrie cte un program care s utilizeze cele dou taste i cele 8 LED-uri pentru a selecta: a. transmisia i afiarea unor caractere capt la capt consecutive la apsarea unei taste; b. transmisia repetat a unor caractere pentru a analiza pe analizorul logic INTRONIX; c. afiarea selectiv a caracterului transmis sau a celui recepionat; d. transmisia i afiarea normal a unor caractere. 5. Dup testarea programelor pe simulator, se va face testarea real.

- 17 -