Anda di halaman 1dari 20

MICROCONTROLERE AVR ATMEL PE 8 BITI

1. Caracteristici

Microcontrolerele AVR pe 8 biti (Atmel) au la baza un nucleu RISC cu arhitectura Harvard. Aceste microcontrolere sunt destinate aplicatiilor simple: controlul motoarelor, controlul fluxului de informatie pe portul USB, aplicatii din domeniul automotive, controlul accesului de la distanta (Remote Access Control), s.a.. Pe baza acestui nucleu firma Atmel a dezvoltat mai multe familii de microcontrolere, cu diferite structuri de memorie si de interfete I/O, destinate diferitelor clase de aplicatii. Familia de procesoare AVR pe 8 biti are urmatoarele caracteristici: Arhitectura RISC 32 de registre de lucru de 8 biti Multiplicator hardware Arhitectura Harvard a spatiului (memorie interna: 16 kocteti program flash, 1 koctet data SRAM, 512 octeti data EEPROM) Frecventa de lucru poate fi controlata prin software de la 0 la 16 MHz Procesoarele sunt prevazute cu o gama larga de dispozitive I/O si de periferice incorporate Timer programabil cu circuit de prescalare Surse de intrerupere interne si externe Timer de urmarire (watchdog) cu oscilator independent Interfata JTAG (standardul IEEE 1149.1 Compliant) 6 moduri de operare SLEEP si POWER DOWN pentru economisirea energiei Oscilator integrat RC Densitate mare a codului si compatibilitate integrala a codului intre membrii familiei Procesoarele sunt disponibile in capsule variate, de la circuite cu 8 pini la procesoare cu 68 de pini Familia AVR beneficiaza de existenta unui set unitar de instrumente software pentru dezvoltarea aplicatiilor Microcontrolerele din familia AVR folosesc o arhitectura RISC care permite executia celor mai multe instructiuni intr-un singur ciclu de tact, ceea ce duce la imbunatatirea performantei de 10 ori fata de procesoarele conventionale (de exemplu, Intel 8051) care opereaza la aceasi frecventa. 1

Specific arhitecturii Harvard, procesoarele folosesc spatii de memorie si magistrale de acces separate pentru coduri si pentru date. Toate procesoarele au memorie de program de tip flash integrata. Memoria de program poate fi programata in site (fara scoaterea din sistem) ceea ce permite efectuarea rapida de upgrade-uri in programe. Programarea se poate face in doua moduri: serial si paralel. Procesoarele au memorie de date integrata de tip RAM pentru variabile si memorie de tip EEPROM pentru stocarea constantelor. Numarul mare de registre interne (32 de registre de 8 biti), specific procesoarelor RISC, permite stocarea variabilelor in interiorul procesorului, reducind astfel timpul de acces. In acest fel creste viteza de executie a programelor. Prezenta unor blocuri interne ca: porturi, timere, unitati de comunicatie USART, TWI si SPI, module PWM (Pulse Width Modulation), convertoare A/D, comparator analogic, rezistoare pull-up, oscilator intern, etc., permite utilizarea acestor microcontrolere intr-o gama larga de aplicatii. Instructiunile acestei familii de microcontrolere au fost proiectate pentru a reduce dimensiunea unui program scris in limbaj C sau in limbaj de asamblare. Posibilitatea programarii memoriei FLASH si a memoriei EEPROM, face ca aceste microcontrolere sa aiba o larga utilizare datorata costului mic de dezvoltare a unei aplicatii prin reducerea timpului de proiectare. O alta calitate remarcabila a acestor microcontrolere este consumul redus de energie. Domeniul tensiunilor de alimentare este cuprins intre 1.8 si 5V. Procesoarele folosesc 6 moduri diferite de functionare cu consum redus ceea ce asigura reducerea consumului cind microcontrolerul nu este activ. La frecventa de tact de 1 MHz si la o tensiune de alimentare de 3 V procesorul activ consuma 1,1 mA, iar in regim Power-down consumul se reduce la <1A. Posibilitatea de control software al frecventei tactului garanteaza o viteza maxima de executie atunci cand este nevoie, iar in restul timpului microcontrolerul poate trece in stand-by unde consumul de energie este minim. Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare a unei aplicatii datorita prezentei unui bloc de depanare in timp real, circuitul aflandu-se chiar pe placa ce reprezinta aplicatia. Pe baza nucleului AVR de 8 biti firma Atmel a dezvoltat citeva familii de microcontrolere de uz general precum si microcontrolere cu functii specializate: Familia Tiny AVR care cuprinde microcontrolere destinate unor aplicatii simple, cu 18 kocteti memorie de program; Familia Mega AVR cu un set dezvoltat de instructiuni si cu 4256 kocteti memorie de program; Familia Xmega AVR destinata unor aplicatii complexe. Procesoarele poseda unitati DMA, module pentru criptare, etc., si folosesc un spatiu de memorie de program de 16384 kocteti; Microcontrolere AVR destinate unor aplicatii spectifice. Microcontrolerele cu functii specializate se impart in mai multe catagorii: - Ligthing AVR - contin un procesor de semnal si este special conceput pentru comanda motoarelor de curent continuu. - LCD AVR - contin un controler pentru adresarea dispozitivelor de afisaj LCD - CAN AVR - contin implementata hardware o interfata pentru magistrala CAN. Printre cele mai utilizate microcontrollere de uz general putem exemplifica: ATmega 8, ATmega 16, ATmega 128, ATmega 162, etc.

2.

Arhitectura AVR

Vom considera ca exemplu microcontrolerul de 8 biti ATmega 16, r e a l i z a t i n t e h n o l o g i e CMOS, bazat pe arhitectura RISC AVR imbunatatita. Procesorul dispune de un set de 131 instructiuni i 32 de registre de uz general, Cele 32 de registre sunt direct adresabile de unitatea aritmetica si logica (ALU). O instructiune poate accesa doua registre independente. Caracteristicile principale ale procesorului ATmega 16 sunt: 16 Kb de memorie Flash reinscriptibil pentru stocarea programelor 1 Kb de memorie RAM pentru date 512 bytes de memorie EEPROM pentru constante dispozitive periferice si porturi I/O: - dou numrtoare/temporizatoare de 8 biti - un numrtor/temporizator de 16 biti - un convertor analog/digital de 10 biti, cu 8 intrri - 4 canale PWM - un comparator analogic - timer de urmarire (watchdog) cu oscilator propriu - contine 3 interfete pentru comunicatie: USART pentru comunicatie serial (port serial), interfata seriala TWI, interfata seriala SPI - ceas de timp real cu oscilator separat - 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD).

Structura intern general a m i crocon trolerului este prezentat n Fi g. 2 Se poate observa c exist o magistral general de date la care sunt conectate mai multe module: - unitatea aritmetic i logic (ALU) - registrele generale - memoria RAM i memoria EEPROM - porturile I/O de uz general i celelalte blocuri de intrare/ieire. Aceste module sunt controlate de un set special de registre din spatiul I/O, fiecare modul avnd asociat un numr de registre specifice. Memoria flash de program mpreun cu ntreg blocul de extragere a instructiunilor, decodare i executie comunic printr-o magistral proprie, separat de magistrala de date. Acest tip de organizare este specifica arhitecturii Harvard i permite controlerului s execute instructiunile foarte rapid. In modul power-down procesorul salveaza continutul registrelor, dar blocheaza oscilatorul, dezactivnd toate celelalte functii al chip-ului pan la urmatoarea intrerupere externa sau la activarea intrarii de initializare hardware (Reset). In modul power-save, timer-ul asincron continua sa functioneze, permitind utilizatorului sa mentina o baza de timp in timp ce restul dispozitivului este oprit. In modul standby, oscilatorul functioneaz n timp ce restul despozitivului este oprit. Acest lucru permite un start foarte rapid combinat cu un consum redus de energie. In modul standby extins (Extended Stanby Mode), atat oscilatorul principal cat i timer-ul asincron continu s functioneze. Memoria flash i n t e r n a p o a t e f i reprogaramat printr-o interfat serial SPI, de catre un programator de memorie nonvolatil conventional, sau de ctre un program 3

de p o r n i r e r e z i d e n t ( o n - chip) ce ruleaza pe n u c l e u l AVR. Acest program poate folosi orice interfata pentru a incarca programul de aplicatie in memoria flash. Combinnd un nucleu CPU-RISC de 8 biti cu o memorie flash intr-un singur chip, ATmega 16 este un microcontroler puternic ce ofera o solutie extrem de flexibil i cu un cost redus. In plus ATmega 16 AVR este sustinut de o serie completa de instrumente de programare i de dezvoltare a sistemului, care include: compilatoare C, macroasambloare, programe de depanare si simulare, etc. 2.1 Descrierea pinilor

VCC Sursa de alimentare GND Masa Portul A (PA7PA0) Portul A este un port bidirectional de 8 biti programabil. Liniile portului A sunt folosite si ca intrri analogice pentru convertorul A/D. Liniile portului pot fi conectate optional la VCC prin rezistente de agatare (pull-up resistor), selectate pentru fiecare linie. Buffer-ele de ieire ale portului A au caracteristici de amplificare. Portul B (PB7PB0) Portul B este un port I/O de 8 biti bidirectional prevazut cu rezistente de agatare interne (optional). Buffer-ele de ieire ale portului B au caracteristici de amplificare. Portul B indeplinete de asemenea functii speciale ale microcontrolerului ATmega 16. Portul C (PC7PC0) Portul C este un port I/O de 8 biti bidirectional cu prevazut cu rezistente de agatare interne (optional). Buffer-ele de ieire ale portului C au caracteristici de amplificare. Daca interfata JTAG (de depanare) este activat, rezistentele pinilor PC5(TDI), PC3(TMS) si PC2(TCK) vor fi activate, chiar daca are loc o resetare. Port-ul C indeplinete de asemenea functii ale interfetei JTAG i alte functii speciale ale ATmega 16. Port D (PD7PD0) 4

Portul D este un port I/O de 8 biti bidirectional prevazut cu rezistente de agatare interne (optional). Buffer-ele de i e s i r e ale p ortului D au caracteristici de amplificare. Portul D indeplinete de asemenea functii speciale ale ATmega 16. Reset Un nivel sczut la acest pin mai mare ca durat decat o valoare prestabilit, va p r o v o c a initializarea procesorului. XTAL 1 si XTAL 2. Intrarea si respectiv ieirea amplificatorului inversor al oscilatorului generatorului de tact. AVCC este pinul de alimentare pentru p ortul A si p e n t r u c onvertorul A/D. Trebuie conectat extern la Vcc chiar dac ADC nu este folosit. Daca ADC este folosit, trebuie conectat la Vcc printr-un filtru trece-jos. AREF este pinul de intrare pentru referinta analogica a convertorului A/D 2.2 Unitatea centrala de procesare Arhitectura nucleului AVR este prezentata in Fig. 2. Functia principal a nucleului CPU-AVR este aceea de a asigura executia corect a programului. Pentru aceasta, nucleul este capabil s acceseze memoriile, sa execute calcule, sa controleze perifericele i sa prelucreze ntreruperile.

Fig. 2

Schema bloc a nucleului CPU-AVR

2.3 Unitatea Aritmetica si Logica (ALU) Unitatea aritmetica si logica executa operatiile de prelucrarea a datelor. ALUAVR lucreaz direct cu cele 32 de registre. Operatiile pe care le executa unitatea ALU sunt mpartite n trei categorii: aritmetice, logice i operatii pe bit. Unele implementri ale arhitecturii AVR pot efectua i multiplicri de operanzi cu sau far semn. 2.4 Registrele de uz general Fisierul de registre este optimizat pentru setul de instructiuni al arhitecturii AVR RISC. Procesoarele AVR folosesc un set de 32 de registre de uz general de 8 biti (notate R0R31) care pot fi accesate intr-un singur ciclu de tact. Structura setului de registre este prezentata in Fig. 4. Fiecare registru are si o adresa in spatiul memoriei de date permitind o adresare uniforma. Doar registrele R16R31 pot stoca operanzi imediati.

Fig. 4 Registrii CPU-AVR Majoritate instructiunilor care folosesc fisierul de registre au acces direct la toate registrele i marea lor majoritate sunt instructiuni executabile intr-un singur ciclu de tact. ase din cele 32 de registre (R26R31) pot fi folosite ca trei registre de 16 biti pentru stocarea unor pointeri folositi la adresarea indirecta a datelor. Unul dintre acesti pointeri poate fi folosit pentru a accesarea unor tabele din memoria flash. Cele trei registre folosite pentru adresarea indirect, notate X, Y, Z, sunt prezentati in Fig. 5.

Fig.5 Registrele X, Y, Z 6

Majoritatea instrutiunilor AVR sunt formate dintr-un cuvant d e 16 biti. Spatiul memoriei flash de program este mpartit n dou sectiuni, sectiunea BOOT i sectiune de aplicare a programelor. Sectiunea BOOT are biti speciali pentru protectia la scriere i citire/scriere. Instructiunea SPM cu ajutorul creia se scrie n memoria flash de aplicatii trebuie sa fie n sectiunea BOOT. Informatiile din SRAM pot fi accesate cu uurinta prin cele cinci moduri diferite de adresare suportate de arhitectura AVR. Modulele ntreruperilor au registrele de control n spatiul I/O i n Status Register se afla bitul de ntreupere global. Toate ntreruperile au prioritate n functie de locul n tabelul de vectori de ntrerupere ai ntreruperilor lor. Cu cat este mai jos situat n tabel vectorul ntreruperi cu att acea ntrerupere are prioritate mai mare. Prioritatea mai mare o are ntreruperea cu vectorul cel mai slab plasat in tabel. Spatiul de memorie I/O contine 64 de adrese pentru functiuni periferice ale CPU ca: controlul registrelor, indicatorul SPI, sau alte functii de I/O. Memoria I/O poate fi accesat direct sau indirect .

2.4 Registrul de stare (SREG) Registrul de stare contine informatii despre ultima operatie aritmetica efectuat de ALU. Sta r e a registrului este actualizat dup fiecare executie a unei operatii aritmetice, aa cum se specific n Setul de Instructiuni. Continutul registrului de stare poate fi salvat/restaurat prin program, de exemplu, la accesarea unei subrutine.

Structura registrului de stare al nucleului AVR si semnificatia indicatorilor folositi este urmatoarea:

Bitul 7 (I - Global Interrupt Enable) Este bitul de validare globala a intreruperilor. Controlul individual al ntreruperilor se face cu un registru separat. Bitul I este dezactivat dupa acceptarea unei ntreruperi i este activat de executia instructiunii RETI (RETurn from Interrupt) pentru a permite acceptarea unei noi cereri. Bitul I poate fi setat/resetat cu ajutorul instructiunilor SEI i CLI. Bitul 6 (T - Bit Copy Storage) Instructiunile la nivel de bit pentru copiere BLD (Bit LoaD- incrcare bit) i memorare BST (Bit STore stocare bit) folosesc bitul T ca surs sau destinatie pentru bitul actionat. Un bit dintr-un registru poate fi copiat n T cu ajutorul instructiunii BST, i un bit din T poate fi copiat n registru cu ajutorul instructiunii BLD. Bitul 5 (H - Half Carry Flag) Acesta indic transportul la jumatate n cazul unor operatii aritmetice. Valoarea acestui bit este folosita n aritmetica BCD pentru corectia zecimala a rezultatului. 7

Bitul 4 (S - Sign Bit) Acest bit este rezultatul operatiei logice SAU Exclusiv intre indicatorul negativ N si bitul de depasite V. Bitul 3 (V - Twos Complement Overflow Flag) Bitul indicator de depasire a scalei. Bitul 2 (N - Negative Flag) Indicatorul negativ semnalizeaza un rezultat negativ n urma unei operatii aritmetice sau logice Bitul 1 (Z - Zero Flag) Indicatorul de zero este setat atunci cand rezultatul unei operatii logice sau aritmetice este nul. Bitul 0 (C - Carry Flag) Indicatorul de transport semnalizeaza existenta unui transport n urma unei operatii operatiilor logice sau aritmetice.

2.5 Stiva Microcontrolerele AVR folosesc o stiva software organizata in memoria SRAM de date. Stiva este folosit n principal pentru stocarea temporar a datelor, pentru stocarea variabilelor locale, si pentru stocarea adreselor de revenire din intreruperi sau la apelul subrutinelor. Accesarea stivei se efectueaza cu ajutorul registrului contor de stiva SP (Stack Pointer) care este actualizat de procesor la fiecare accesare a stivei. Stiva opereaza pe principiul LI-FO (Last Input First Output) si evolueaza prin decrementarea adreselor. La incarcarea unei date in stiva SP este decrementat, iar la citire este incrementat, astfel ca SP indica intotdeauna prima locatie libera din virful stivei. Dimensiunea stivei este limitata de dimensiunea memoriei SRAM instalate. Deoarece procesorul nu seteaza automat la pornire adresa de inceput a stivei (care este adresa cea mai mare a zonei de memorie alocata stivei) acest lucru trebuie efectuat de utilizator prin program. Pentru transferul de date in stiva procesorul foloseste instructiunea PUSH, iar pentru transferul din stiva instructiunea POP. Indicatorul de stiv (SP ) este decrementat cu 1 cnd se introduc date n stiv c u instructiunea PUSH, i decrementat cu 2 cnd sunt salvate in stiva adresele de revenire la apelarea subrutinelor cu instructiunile CALL sau GOTO sau la acceptarea unei intreruperi. Indicatorul de stiv este incrementat cu 1 cnd datele sunt c i t i t e din stiv cu instructiunea POP, i incrementat c u 2 cnd sunt c i t i t e din stiv adrese la executia unei instructiuni de revenire dintr-o subrutina (RET) sau dintr-o intrerupere (RETI). Indicatorul de stiv este implementat cu dou registre de 8 biti adresate in spatiul de adrese al dispozitivelor I/O (registrele SPH si SPL). Numrul de biti folositi depinde de structura implementrii. Spatiul de adrese, la unele implamentri ale arhitecturii AVR, este mic inct este folosit doar registrul SPL (SP Low). n acest caz registrul SPH (SP High) nu mai este utilizat.

Fig.5

Indicatorul de stiv

3.

Executia instructiunilor

Pentru obtinerea unei performate bune CPU-AVR combina avantajul arhitecturii Harvard a spatiului de memorie si accesul rapid la registre cu executia pipeline. Procesorul foloseste un pipeline cu doua etaje, unul pentru extragerea instructiunilor si altul pentru executie. In timp ce o instructiune este executata o noua instructiune este extrasa din memorie. In felul acesta procesorul furnizeaza un rezultat la fiecare tact, chiar daca o instructiune dureaza mai mult de un tact. Aceasta secventiere este prezentata in Fig. 6.

Fig.6 Functionarea pipeline In acest mod performanta nucleului se apropie de 1 MIPS/MHz i ofera cele mai bune rezultate din punct de vedere a raportului functiuni/cost, functiuni/timp i functiuni/unitate. In Fig. 7 e s t e p r e z e n t a t m o d u l d e f o l o s i r e a r e g i s t r e l o r . ntrun singur ciclu de tact ALU folosete 2 registre pentru a executa o operatie, iar rezultatul este stocat napoi n registrul de destinatie .

Fig.7 Operatii cu registre executate de ALU ntr-un singur ciclu de tact Instructiunile care acceseaza memoria necesita doi cicli de tact pentru o operatie dupa cum se vede din Fig. 7.

Fig. 7 Executia instructiunilor care acceseaza memoria SRAM 4. Tratarea ntreruperilor i initializarea

Nucleul AVR foloseste mai multe tipuri de ntreruperi. Intreruperile sunt vectorizate; vectorii de intrerupere si cel corespunzator initializarii procesorului reprezinta adrese ale unor locatii din memoria de program. Intreruperile pot fi activate/dezactivate global (cu ajutorul bitului I din registrul de stare) sau individual. Sursele de intrerupere si vectorii corespunzatori sunt prezentati in tabelul urmator:

No. vector 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Program address $000 $002 $004 $006 $008 $00A $00C $00E $010 $012 $014 $016 $018 $01A $01C $01E

Source Reset EXT_INT0 EXT_INT1 TIM2_COMP TIM2_OVF TIM1_CAPT TIM1_COMPA TIM1_COMPB TIM1_OVF TIM0_OVF SPI_STC UART_RXC UART_DRE UART_TXC ADC EE_RDY

Interrupt definition External pin, Power-on Reset, Brown-out Reset, Watchdog Reset, JTAG AVR Reset External IRQ0 External IRQ1 Timer2 compare match Timer2 overflow Timer1 capture event Timer1 compare match A Timer1 compare match B Timer 1 overflow Timer 0 overflow SPI transfer complete UART RX complete UART UDR empty UART TX complete ADC conversion complete EEPROM ready

10

17 18 19 20 21

$020 $022 $024 $026 $028

ANA_COMP TWI INT2 TIM0_COMP SPM_RDY

Analog comparator Two-wire serial interface External IRQ2 Timer0 compare match Store program memory ready

Pentru vectorii de intrerupere sunt rezervate adresele inferioare din memoria de program. Prioritatea diferitelor surse este data de pozitia vectorului in harta de memorie. Cu ct sursa de intrerupere are vectorul mai mic cu att prioritatea ei este mai mare. RESETul are cea mai mare prioritate. Vectorii de ntrerupere pot fi mutati la nceputul sectiunii Boot Flash prin setarea bitului IVSEL din registrul global de control al ntreruperilor (GICR). Vectorul de RESET poate fi deasemenea mutat la nceputul aceleiai sectiuni prin programarea sectiunii BOOTRST. Cnd apare o ntrerupere bitul I din registrul de stare este resetat i toate ntreruperile sunt invalidate. In cadrul subrutinei de tratare utilizatorul poate r e a c t i v a s i s t e m u l d e i n t r e r u p e r i . Daca sistemul de intreruperi este activat subrutina de tratare poate fi la rindul ei intrerupta de o sursa de intrerupere cu prioritate mai mare. Bitul I este automat setat cnd este executata instructiunea RETI. Intreruperile externe pot fi controlate individual cu ajutorul registrului GIMSK (adresa 3B in spatiul I/O). Fiecare bit din acest registru corespunde unei intreruperi. Bitul 7 controleaza INT1, iar bitul 6 controleaza INT0. Setarea bitului corespunzator activeaza intreruperea. Registrul GIMSK poate fi citit/scris cu instructiunile IN/OUT. Starea intreruperilor este indicata de registrul GIFR (adresa 3A in spatiul I/O). Daca o intrerupere externa a fost activata este setat bitul corespunzator din GIFR. AVR are o structura complexa a sistemului de intreruperi. Aproape toate dispozitivele periferice au fost dotate cu capacitati de intrerupere motiv pentru care programul principal nu trebuie sa verifice periodic starea acestor dispozitive. Secventa de actiuni care se deruleaza cand apare o intrerupere este urmatoarea: 1. 2. 3. 4. 5. 6. 7. Dispozitivul periferic emite o cerere de intrerupere care intrerupe procesorul Executia instructiunii curente este finalizata Adresa urmatoarei instructiuni din programul curent este memorata in stiva Este incarcata in PC adresa subrutinei de tratare asociata Procesorul executa subrutina de tratare Subrutina se incheie cu instructiunea RETI (RETurn from Interrupt) Procesorul reia executia programului intrerupt de la adresa memorata in stiva.

Un factor important de luat in seama cand sunt folosite intreruperile este cat de repede poate raspunde un procesor la o intrerupere. Aceasta depinde de arhitectura procesorului. Pentru controlerele AVR, raspunsul la intreruperi se face in minim 4 cicli de tact. In timpul celor 4 cicli, este salvat in stiva PC ( 2 bytes), iar SP este decrementat cu 2. Transferul executiei la rutina de intrerupere necesita doi cicli. Daca o intrerupere apare in timpul unei instructiuni multiciclu, aceasta instructiune este finalizata inainte de a fi servita intreruperea. Revenirea dintr-o subrutina de tratare dureaza alti 4 cicli. In timpul acestor 4 cicli, este restaurata starea PC salvata in stiva (2 bytes), iar SP este incrementat cu 2. In acelasi timp este setat bitul I din SREG.

11

5.

Organizarea memoriei

ATmega 16 AVR are doua spatii de memorie principala, spatiul pentru memoria de date si pentru memoria de program. In plus, ATmega16 are si o memorie nevolatila EEPROM pentru memorarea datelor. Toate cele trei tipuri de memorie sunt adresate liniar. Organizarea spatiului de memorie este aratata in Fig. 8. 5.1 Memoria pentru programe ATmega 16 contine o memorie flash pentru programe, reprogramabila (In-system On-chip) de 16 Ko. Deoarece toate instructiunile nucleului AVR sunt de 16 sau 32 biti, memoria flash este organizatape cuvinte (16 biti) in formatul 8Kx16. Pentru securitatea software-ului , spatiul pentru memoria de programe flash este impartit in doua sectiuni: sectiunea de program boot si sectiunea pentru programe de aplicatie. Memoria flash suporta cel putin 10000 de cicluri de scriere/stergere. Contorul de program (PC) al microcontrolerului ATmega 16 are o lungime de 13 biti, ceea ce permite adresarea unui spaiu de memorie de 213 = 8 klocatii.

Fig. 8 Organizarea memoriei 5.2 Memoria pentru date Memoria de date SDRAM este organizata pe octeti. Primele 96 de adrese din spatiul memoriei SDRAM sunt rezervate fisierului de registre, iar urmatoarele 1024 de locatii sunt dedicate datelor interne SDRAM. Din fisierul de register fac parte cele 32 de registre de uz general, iar restul de 64 de adrese sunt rezervate registrelor associate dispozitivelor I/O. Modul de organizare a fisierului de register este aratat in Fig. 9. Memoria SRAM are o capacitate intre 128 bytes si 4 kbytes in functie de tipul particular al microcontrolerului. SRAM-ul este accesat cu instructiuni de acces atat direct cat si indirect, folosind registrul pointer. SRAM-ul este folosit de asemnea si pentru constituirea

12

stivei. Accesul la memoria SRAM se faca in doua perioade de tact, asa cum este aratat in Fig. 7. La microcontrolerele AVR avansate este posibila conectarea unui SRAM extern. Aceasta este ilustrata in figura 3.32. Pentru a permite accesul SRAM extern la PORTA si PORTC, bitul 7 SRE din registrul MCUCR este setat la 1. Timpul standar de acces la memoria SRAM externa este de obicei trei cicli, dar poate fi crescut la 4 cicli prin activarea bitul 6 SRW din registrul MCUCR. Figura 3.33 ilustreaza accesul normal in 3 cicli, iar figura 3.34 ilustreaza accesul prelungit prin introducerea aditionala a unei stari de asteptare.

Fig. 9 Fisierul de registre La microcontrolerele AVR avansate este posibil covectarea unui SRAM extern. Aceasta este ilustrata in Fig. 10. Pentru a permite accesul SRAM extern la PORTA si PORTC, bitul 7 SRE din registrul MCUCR este setat la 1. Timpul standard de acces la memoria SRAM externa este de obicei trei cicli, dar poate fi crescut la 4 cicli prin activarea bitul 6 (SRW External Acces Wait State Bit) din registrul de control MCUCR (MCU general control register).

13

Fig. 10 Extensia memoriei SRAM Toate microcontrolerele AVR poseda o arie de memorie EEPROM (Electrically Erasable Programmable Read-Only Memory) interna folosita pentru stocarea constantelor. ATmega 16 contine 512 octeti de memorie de date EEPROM. Aceasta este organizata ca un spatiu separat de date, in care pot fi cititi si scrisi biti individuali. EEPROM-ul are o durata de viata de cel putin 10.000 de cicluri scriere/stergere. Scrierea/citirea in EEPROM se face cu ajutorul registrilor de acces la EEPROM: EEAR - EEPROM Address Register, EEDR EEPROM Data Register si EECR - EEPROM Control Register. Scrierea in EEPROM decurge diferit fata de o memorie SRAM. Timpul de acces pentru o operatie de scriere este de 2,54 ms in functie de valoarea tensiunii de alimentare. Bitul de control EEWE din EECR arata utilizatorului cind s-a incheiat operatia anterioara de scriere, si poate fi facuta o noua scriere. Cand se citeste o data din EEPROM, CPU este oprit timp de patru perioade de ceas inainte ca urmatoarea comanda sa fie executata. Cand se scrie EEPROM, CPU este oprit timp de doua perioade de ceas inainte ca urmatoarea comanda sa fie executata. Registrele de adresa EEPROM EEARH si EEARL:

Bitii 9 15 sunt biti rezervati in Atmega 16 si vor lua intotdeauna valoarea 0. Bitii 0 - 8 sunt biti de adresare (total 9 biti, deci se adreseaza 0.5 KB) Registrele de adresa, EEARH si EEARL, specifica adresa datelor din EEPROM pentru cele 512 locatii ale spatiului EEPROM. Locatiile de memorie se adreseaza liniar de la 0 la 511. Pentru operatia de scriere in EEPROM, registrul EEDR contine date care trebuie 14

scrise la adresa data de registrul EEAR. Pentru operatia de citire a EEPROM, EEDR contine datele citite din EEPROM de la adresa data de EEAR. Registrul de date EEPROM EEDR:

Registrul de control EEPROM EECR:

Bitii 7..4 - acesti biti sunt biti rezervati la ATmega 16 si au valoarea zero. Bit 3 - EERIE: Activarea EEPROM Ready Interrupt Bit 2 EEMWE : EEPROM Master Write Enable (activarea functiei principale de scriere EEPROM) Bitul 1 EEWE : EEPROM Write Enable (activarea scrierii EEPROM). EEPROM nu poate fi programat in timp ce CPU scrie memoria flash. Software-ul trebuie sa verifice daca programarea memoriei flash este completa inainte de a initia o noua scriere a EEPROM. Bit 0 EERE : Activarea citirii EEPROM Cand se seteaza adresa corecta a registrului EEAR, bitul EERE trebuie sa fie scris pe unu logic ca sa declanseze citirea EEPROM. Accesul la citirea EEPROM se face cu o comanda si datele cerute sunt disponibile imediat. Cand EEPROM este citit, CPU este oprit timp de patru cicluri inainte ca urmatoarea comanda sa fie executata. 5.3 Spatiul de adrese I/O Toate dispozitivele I/O de la ATmega 16 si perifericele au adrese plasate in spatiul registrilor I/O. Locatiile I/O sunt accesate cu instructiunile IN si OUT, transferand date intre cei 32 de registrii de lucru si spatiul I/O. Registrele I/O au adresele $00 - $1F si sunt direct accesabile folosind comenzile SBI si CBI. La aceste registre valoarea bitilor individuali poate fi verificata utilizand instructiunile SBIS si SBIC. Cand se utilizeaza instructiunile specifice IN si OUT trebuie folosite adresele I/O din zona $00 - $3F. Cand se adreseaza/acceseaza registrele I/O ca spatiu de date cu instructiunile LD si ST, trebuie adaugat la aceste adrese constanta $20, care indica un salt peste zona registrelor de uz general.

6.

Sistemul I/O

Microcontrolerele AVR poseda un sistem diversificat de dispositive I/O adecvate aplicatiilor de comanda, control, reglare, achizitii de date, comunicatie, s.a.

15

6.1 Porturile de intrare/iesire ATmega16 dispune de 32 de linii de I/O grupate n patru porturi de 8 biti. Porturile sunt denumite cu literele A, B, C si D. Fiecare pin al unui port poate fi setat individual ca intrare sau iesire fr s afecteze ceilalti pini. In plus, anumiti pini se pot utiliza pentru functii speciale ale microcontrolerului. In Fig. 11 este prezentat structura general a unui pin. Toti cei 32 de pini au fiecare cte o rezistent de agatare (pull-up) care poate fi activat sau dezactivat. Operatiile cu porturile se fac prin intermediul unui set de 3 registre alo cate fiecrui port: PORTx, PINx si DDRx; unde x poate fi A, B, C sau D. Aceste registre fac parte din categoria registrelor de intrare/iesire si pot fi accesate cu instructiunile CBI, SBI, IN si OUT. Registrele DDRx stabilesc dac un pin este intrare sau iesire. Astfel, un bit cu valoarea 1 n registrul DDRx face ca pinul corespunztor s fie considerat iesire; altfel pinul va fi intrare. Registrii PORTx sunt utilizati pentru a scrie o valoare n portul corespunztor, iar registrii PINx se folosesc pentru a citi valoarea prezent pe liniile unui port. Activarea sau dezactivarea rezistentelor pull-up este comandata de bitul PUD din registrul SFIOR si de valorile registrilor PORTx si DDRx asa cum se poate observa n tabelul urmtor.

Toate porturile AVR au functia Citeste Modifica Scrie atunci cand sunt folosite ca porturi I/O digitale generale. Asta inseamna ca directia unui pin poate fi schimbata fara a schimba in mod intentionat directia oricarui alt pin cu comenzile SBI si CBI. Aceeasi regula se aplica cand se schimba valoarea drive-ului (daca este configurat ca iesire) sau a activarii/dezactivarii rezistorilor (daca sunt configurati ca intrari). Fiecare buffer de intrare are caracteristici similare de comanda, in ceea ce priveste capacitatea sursei cat si sincronizarea. Etajul de comanda al pinului este suficient de puternic pentru a comanda direct un display LED. Atunci cind un pin este setat ca iesire rezistenta pull-up este dezactivata, iar cind este folosit ca intrare rezistenta este activata. Toti pinii I/O au rezistori pull-up care pot fi selectati individual. Toti pinii I/O au diode de protectie atat la Vcc cat si la impamantare asa cum este indicat in figura de mai jos :

16

Fig. 11 Structura unei linii pentru un bit al portului I/O

Fig. 12 Schema echivalenta a unui pin In limbaj de asamblare toti registrii si referintele de bit sunt scrise in forma generala. Un x mic reprezinta litera care denumeste portul si un n mic reprezinta numarul bitului. De exemplu, PORTB3 indica bitul numarul 3 al portului B, prezentat general ca PORTxn. Majoritatea pinilor au functii alternative legate de functionarea dispozitivelor periferice. De remarcat faptul ca activarea functiilor alternative ale unor pini nu afecteaza utilizarea altor pini ca port I/O general digital. Un exemplu de folosire a porturilor I/O este dat in Fig. 13.

17

Fig. 13 Folosirea porturilor I/O 6.2 Unitatile timer/numarator ATmega 16 poseda doua unitati timer/numerator de 8 biti si o unitate timer/numerator de 16 biti. Principalele caracteristici ale acestor module sunt: - Posibilitatea de alegere a frecventei de tact de la intrarea temporizatoarelor (circuit de prescalare) - Posibilitatea de citire/scriere a starii numaratoarelor - Generarea de forme de unda prin folosirea unui registru de comparare - Generare de unde PWM cu posibilitatea de reglare a frecventei - Generarea de cereri de intrerupere la interval regulate - Declansare la un eveniment extern (captura a intrarii) Unitatile timer/numarator fac posibila cronometrarea precisa a executiei programului (managementul evenimentelor), generarea de forme de unda, masurarea intervalelor de timp. Structura unui temporizator de 8 biti este data in Fig. 14. Functionarea circuitului este controlata cu ajutorul registrului TCCRn care permite alegerea frecventei de tact, controlul modului de generare a undelor, selectia modului de folosire a rezultatului unitatii de comparare. Formele de unda generate sunt disponibile la pinii porturilor I/O.

18

Fig. 14 Structura unui modul timer/numerator de 8 biti 6.3 Modulul USART Modulul UART (Universal Asinchronous Receiver Transmiter) efectueaza receptia/transmisia datelor de la/catre un dispozitiv periferic cu acces serie. Principalele caracteristici sunt: - Functionare full-duplex completa atit in modul sincron cit si in mod asincron - Poseda generator de rata de baud propriu de rezolutie mare - Formate de date seriale diverse - Detecteaza automat erorile de transmisie - Executa comunicatii de tip multiprocesor Modulul executa conversia serie/paralel a datelor la receptie, respective conversia paralel/serie la transmisie. Transmiterea datelor este initializata prin scrierea datelor care trebuie transmise in registrul UDR (UART Data Register). Datele sunt transferate de la UDR la registrul Transmit Shift cand: 1. Un nou character este scris in UDR si caracterul precedent a fost dj transferat. Registrul de deplasare este incarcat imediat. 2. Un nou character este scris in UDR inainte ca un character precedent sa fi fost transferat complet. Registul de deplasare este incarcat dupa ce prima operatie a fost finalizata. 6.4 Interfata SPI Interfata de comunicatie SPI (Serial Periferal Interface) asigura trasferul rapid sincron de date intre microcontroler si dispozitive periferice sau cu alte microcontrolere AVR. 6.5 Interfata TWI Interfata TWI (Two Wire Interface) implementeaza un protocol de comunicatie pe doua fire permitind interconectarea a pina la 128 de dispozitive diferite. Interfata foloseste doua linii bidirectionale, una pentru tact (SCL) si una pentru date (SDA) ca in Fig. 15. Toate dispozitivele conectate la acest bus au propria adresa. 19

Fig. 15 Interfata TWI 6.6 Convertorul A/D Atmega 16 contine un convertor A/D cu aproximatii succesive, cu 8 canale si cu rezolutia de 10 biti. Convertorul este prevazut la intrare cu circuit de esantionare si memorare. Viteza de conversie este cuprinsa intre 13 si 260 de s. 6.7 Comparatorul analogic Compara doua marimi analogice si genereaza o cerere de intrerupere cind acestae sunt egale. 6.8 Timerul de urmarire Timerul de urmarire (Watchdog) este un timer controlat care este folosit pentru a activa un dispozitiv in caz ca software-ul este blocat intr-o bucla infinita sau in caz ca executia programului este defectuoasa. Timer-ul Watchdog are o iesire care poate reseta controlerul. Watchdog-ul este alimentat de la un oscilator RC on-chip separat. 7. Modurile de operare cu consum redus

Mictrocontrolerul AVR poseda 6 moduri de functionare cu consum redus care pot fi comandate prin intermediul registrului MCUCR (MCU Control Register). Pentru aceasta seteaza bitul SE (Sleep Enable) si bitii SM2, SM1 si SM0 (Sleep Mode) dupa care se executa instructiunea SLEEP. Regimurile de consum redus disponibile sunt: Idle Mode CPU este oprit dar interfetele USART, SPI, TWI, CAD, comparatorul analogic, timerele si sistemul de intreruperi continua sa functioneze. O cerere de intrerupere readuce procesorul in stare de functionare. ADC Noise Reduction Mode CPU este oprit insa continua sa functioneze CAD, intreruperile externe, interfata TWI, timerul 2 si timerul de urmarire continua sa functioneze. Acest regim permite CAD sa functioneze cu o rezolutie mai mare. O cerere de intrerupere readuce procesorul in stare de functionare. Power-down Mode - Oscilatorul extern este blocat insa ramin active intreruperile externe, interfata TWI si timerul de urmarire. Power-save Mode - este similar cu modul Power-down cu diferenta ca si timerul 2 continua sa functioneze. Standby Mode Este identic cu modul Power-down cu deosebirea ca oscilatorul continua sa functioneze. Extended Standby Mode Este disponibil atunci cind este folosit un oscilator cu cuart, iar in rest este identic cu modul Power-down. 20

Anda mungkin juga menyukai