familia atmel avr 8biti

21
1 MICROCONTROLERE AVR ATMEL PE 8 BIŢI Caracteristici generale Microcontrolerul AVR are la bază un procesor RISC cu o arhitectur ă Harvard (adică unitatea centrală de procesare are memorie de program şi memorie de date separate). Pe baza acestui nucleu RISC firma Atmel a dezvoltat mai multe familii de microcontrolere, cu diferite structuri de memorie şi de interfeţe I/O, destinate diferitelor clase de aplica ţii. Aceste microcontrolere sunt destinate aplica ţiilor simple cum ar fi: controlul motoarelor, controlul fluxului de informa ţie pe portul USB, controlul accesului de la distan ţă (Remote Access Control), ş.a.. Familia de microcontrolere AVR pe 8 biţi prezintă următoarele caracteristici: 1. Are memorie Flash programabil ă integrată, folosită ca memorie de program. Toate  procesoarele AVR au me morie de program in tegrat ă. Asta înseamnă că nu ai nevoie de memorii EPROM sau ROM externe pentru a stoca codul programelor. Programarea se poate face în două moduri: serial şi paralel. 2. Are 32 de registre de lucru de 8 bi ţi fiecare (acest lucru este specific procesoarelor RISC). Numărul mare de registre de lucru permite stocarea variabilelor în interiorul  procesorului, în loc să fie stocate în memorie, lucru care necesit ă un timp mai lung pentru accesare. În acest fel creşte viteza de execuţie a programului (deci va rula mai repede). 3. Are memorie de date integrat ă de tip EEPROM (Electrically Erasable Programmable R ead-Only Memory) şi memorie RAM integrată. Unitatea centrală de prelucrare  are arhitectur ă Harvard, iar memoriile de tip RAM şi EEPROM ale microcontrolerului sunt memorii de date, fiind folosite pentru a stoca variabile, respectiv constante. 4. Are frecvenţa de lucru care poate fi controlată prin software de la 0 la 16 MHz. Cele mai multe instrucţiuni sunt executate î ntr-un singur ciclu de tact, ceea ce duce la îmbunătăţirea  performanţei de 10 ori faţă de procesoarele conven ţionale care operează la aceeaşi frecvenţă ( de exemplu: Intel 8051). 5. Realizează funcţia de RESET f ăr ă decuplarea circuitului. 6. Are un timer programabil î ncorporat cu circuit de prescalare separat, care este folosit  pentru sincronizare a aplica ţiilor. 7. Surse interne şi externe de întrerupere. 8. Are un timer watchdog cu oscilator independent, care este folosit pentru recuperarea informaţiilor în caz de apari ţia unei erori software, dar mai poate fi folosit şi în alte aplicaţii. 9. Are 6 moduri de operare pentru economisirea energiei. Poate lucra în modurile de operare SLEEP şi POWER DOWN, moduri ce economisesc energie, atunci c ând procesorul nu lucrează. 10. Multe cipuri au oscilator integrat RC, care mic şorează şi mai mult numărul componentelor în cazul microcontrolerelor care-l conţin. 11. Sunt prevăzute cu o gamă largă de dispozitive de I/O şi de periferice încorporate.  12. Beneficiază de existenţa unui set unitar de instrumente software pentru dezvoltarea aplicaţiilor. 13. Are o compatibilitate mare, pornind de la procesoare mici cu 8 pini şi ajungând la  procesoare cu 68 de pini . Microcontrolerele din familia AVR prezint ă o organizare de tip RISC din punctul de vedere al execuţiei unei instruc ţiuni pe ciclu maşină. Prezenţa unor blocuri interne precum: oscilator intern, timere, unitate UART (Universal asynchronous receiver/transmitter ), interfaţă SPI, rezistoare pull-up, PWM (pulse width modulation), convertoare analog-digitale, comparatoare analogice determin ă utilizarea acestor microcontrolere într -o gamă foarte largă de aplicaţii.

Upload: andreeanastase95

Post on 12-Feb-2018

257 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 1/21

1

MICROCONTROLERE AVR ATMEL PE 8 BIŢI

Caracteristici generale

Microcontrolerul AVR are la bază  un procesor RISC cu o arhitectur ă Harvard  (adică  unitatea

centrală  de procesare are memorie de program şi memorie de date separate). Pe baza acestui nucleuRISC firma Atmel a dezvoltat mai multe familii de microcontrolere, cu diferite structuri de memorie şide interfeţe I/O, destinate diferitelor clase de aplicaţii.

Aceste microcontrolere sunt destinate aplicaţiilor simple cum ar fi: controlul motoarelor,controlul fluxului de informaţie pe portul USB, controlul accesului de la distanţă  (Remote AccessControl), ş.a..

Familia de microcontrolere AVR pe 8 biţi prezintă următoarele caracteristici:

1. 

Are memorie Flash programabilă  integrată,  folosită  ca memorie de program. Toate procesoarele AVR au memorie de program integrată. Asta înseamnă că nu ai nevoie de memorii

EPROM sau ROM externe pentru a stoca codul programelor. Programarea se poate face în două moduri: serial şi paralel.2.  Are 32 de registre de lucru de 8 biţi fiecare (acest lucru este specific procesoarelorRISC). Numărul mare de registre de lucru permite stocarea variabilelor în interiorul

 procesorului, în loc să fie stocate în memorie, lucru care necesită  un timp mai lung pentruaccesare. În acest fel creşte viteza de execuţie a programului (deci va rula mai repede).3.  Are memorie de date integrată  de tip EEPROM (Electrically Erasable ProgrammableR ead-Only Memory) şi memorie RAM integrată. Unitatea centrală de prelucrare are arhitectur ă Harvard, iar memoriile de tip RAM şi EEPROM ale microcontrolerului sunt memorii de date,fiind folosite pentru a stoca variabile, respectiv constante.4.

 

Are frecvenţa de lucru care poate fi controlată prin software de la 0 la 16 MHz. Cele mai

multe instrucţiuni sunt executate într-un singur ciclu de tact, ceea ce duce la îmbunătăţirea performanţei de 10 ori faţă de procesoarele convenţionale care operează la aceeaşi frecvenţă (deexemplu: Intel 8051).5.  Realizează funcţia de RESET f ăr ă decuplarea circuitului.6.  Are un timer programabil încorporat cu circuit de prescalare separat, care este folosit

 pentru sincronizarea aplicaţiilor.7.

 

Surse interne şi externe de întrerupere.8.  Are un timer watchdog cu oscilator independent, care este folosit pentru recuperareainformaţiilor în caz de apariţia unei erori software, dar mai poate fi folosit şi în alte aplicaţii.9.  Are 6 moduri de operare pentru economisirea energiei. Poate lucra în modurile deoperare SLEEP şi POWER DOWN, moduri ce economisesc energie, atunci când procesorul nulucrează.10.  Multe cipuri au oscilator integrat RC, care micşorează  şi mai mult numărulcomponentelor în cazul microcontrolerelor care-l conţin.11.  Sunt prevăzute cu o gamă largă de dispozitive de I/O şi de periferice încorporate. 12.

  Beneficiază de existenţa unui set unitar de instrumente software pentru dezvoltareaaplicaţiilor.13.

 

Are o compatibilitate mare, pornind de la procesoare mici cu 8 pini şi ajungând la procesoare cu 68 de pini.

Microcontrolerele din familia AVR prezintă o organizare de tip RISC din punctul de vedere al

execuţiei unei instrucţiuni pe ciclu maşină. Prezenţa unor blocuri interne precum: oscilator intern,timere, unitate UART (Universal asynchronous receiver/transmitter ), interfaţă SPI, rezistoare pull-up,PWM (pulse width modulation), convertoare analog-digitale, comparatoare analogice determină utilizarea acestor microcontrolere într -o gamă foarte largă de aplicaţii.

Page 2: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 2/21

2

Specific arhitecturii Harvard, microcontrolerele AVR folosesc spaţii de memorie şi magistrale deacces separate pentru coduri şi pentru date. Memoria de program care este de tip FLASH integrată,

 poate fi programată fără scoaterea din sistem, ceea ce permie efectuarea rapidă de upgrade-uri în programe.

Instrucţiunile acestei familii de microcontrolere au fost proiectate pentru a reduce dimensiuneaunui program scris în limbaj C sau în limbaj de asamblare. Posibilitatea programării memoriei FLASHşi a memoriei EEPROM, determină ca aceste microcontrolere să aibă o largă utilizare datorată costului

mic de dezvoltare a unei aplicaţii (au timpul de proiectare scurt).Aceste microcontrolere au consum redus de energie. Domeniul tensiunilor de alimentare este

cuprins între 1,8V şi 5V. Prezintă 6 moduri diferite de operare cu consum redus de energie, ceea ce neasigură că aceste microcontrolere nu vor consuma energie decât atunci când este nevoie.

Controlul software al frecvenţei de tact garantează o viteză maximă de execuţie atunci când estenevoie, iar în restul timpului microcontrolerul poate trece în modul STANDBY, unde consumul deenergie este minim. Utilizarea acestor microcontrolere poate reduce semnificativ timpul de dezvoltare aunei aplicaţii datorită prezenţei unui bloc de depanare în timp real, circuitul aflându-se chiar pe placă.

Printre cele mai utilizate microcontrolere de uz general putem aminti: ATMEGA 8, ATMEGA16, ATMEGA 128, ATMEGA 162, etc..

Microcontrolerele din familia AVR pot fi atât  microcontrolere de uz general, cât  şi

microcontrolere cu funcţii specializate, împăr ţindu-se în următoarele categorii:1.

  Familia TINY AVR   –  cuprinde microcontrolere destinate unor aplicaţii simple, cu 18 KBmemorie de program.

2.  Familia MEGA AVR   –   cu un set dezvoltat de instrycţiuni şi cu 4256 KB memorie de

 program.3.

  Familia XMEGA AVR   –   destinată unor aplicaţii complexe. Acestea au unităţi DMA(Direct Access Memory), module pentru criptare, ş.a. şi folosesc un spaţiu de memorie de

 program de 16  384 KB.4.  Microcontrolere AVR destinate unor aplicaţii specifice, care se împart în mai multe

categorii:4.1. LI GTHI NG AVR : microcontrolere ce conţin un procesor de semnal, fiind special

conceput pentru controlul motoarelor de curent continuu.4.2. LCD AVR : microcontrolere ce conţin un controler pentru adresarea dispozitivelor LCD4.3. CAN AVR : microcontrolere ce conţin o interfaţă CAN implementată hardware.

Microcontrolerele din familia AVR de 8 biţi au un set de 131 instrucţiuni şi 32 de registre de uz general.Cele 32 de registre sunt direct adresabile de unitatea aritmetică şi logică (UAL), permiţând accesarea adouă  registre independente într-o singură  instrucţiune. Astfel se obţine o eficienţă spor ită în  execuţie,fiind de până la zece ori mai rapide decât microcontrolerele convenţionale de tip CISC.

Microcontrolerul ATMEGA 16

Arhitectura AVR (firma ATMEL)ATMEGA 16 este un microcontroler realizat de firma Atmel, având o tehnologie CMOS de 8

 biţi, de mică putere şi o arhitectur ă RISC AVR îmbunătăţită.Caracteristicile principale ale acestui microcontroler sunt:

- 16 KB de memorie FLASH reinscr iptibilă pentru stocarea programelor;- 1 KB de memorie RAM;- 512 B de memorie EEPROM;- două număr ătoare/temporizatoare de 8 biţi;- un numărător/temporizator de 16 biţi;- un convertor analog digital de 10 biţi, cu 8 intrăr i (intrări multiple);

- un comparator analogic;- 4 canale PWM;- conţine 3 interfeţe pentru comunicaţie: un modul USART pentru comunicaţie serială (port serial),interfaţă serială TWI şi interfaţă serială SPI;

Page 3: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 3/21

3

- un cronometru cu oscilator intern;- ofer ă 32 de linii I/O organizate în patru porturi (PA, PB, PC, PD) cu 8 biţi fiecare;- are o magistrală  generală  de date la care sunt conectate mai multe module şi anume: unitateaaritmetică  şi logică  (UAL), registrele generale, memoria RAM şi memoria EEPROM, liniile de

intrare (adică porturile) şi celelalte blocuri de intrare/ieşire. Aceste ultime module sunt controlate deun set special de registre, fiecare modul având asociat un număr de registre specifice.- memoria FLASH de program împreună cu întreg blocul de extragere a instrucţiunilor, de decodare

şi de execuţie comunică printr-o magistrală  proprie, separată de magistrala de date menţionată maisus. Acest tip de organizare este conform principiilor unei arhitecturi Harvard şi permitemicrocontrolerului să execute instrucţiunile foarte rapid.

În modul POWER DOWN se salvează  conţinutul registrelor, dar se blochează  oscilatorul,dezactivându-se toate celelalte funcţii ale chip-ului până  la următoarea întrerupere externă  sau laurmătorul RESET hardware. În modul POWER SAVE, timer-ul asincron continuă să meargă în timp cerestul dispozitivelor sunt oprite. În modul STANDBY, oscilatorul funcţionează, în  timp ce restuldespozitivului este oprit. Acest lucru permite un start foarte rapid combinat cu un consum redus deenergie, iar în modul STANDBY EXTINS (Extended Standby Mode), atât oscilatorul principal cât şitimer-ul asincron continuă să funcţioneze.

ATMEGA 16 AVR este susţinut de o serie completă  de instrumente de program şi de

dezvoltare a sistemului, care include: compilatoare C, macroasambloare, programe de debug/simulare,ş.a..

Descrierea pinilor la Microcontrolerul ATMEGA 16 

Vcc –  Sursa de curentGND –  Masa

Port A (PA7 .. PA0) Portul A serveşte drept port de intrăr i analogice pentru convertorul A/D. Mai poate fi folosit, deasemenea, şi ca un port bidirecţional I/O de 8 biţi, în  cazul în  care convertorul A/D nu este folosit.Pinii de port pot fi conectaţi opţional la sursa de curent Vcc prin rezistori interni (selectaţi pentru fiecare

 bit). Buffer-ele de ieşire ale portului A au şi caracteristici de amplificare .

Port B (PB7.. PB0) Portul B este un port I/O de 8 biţi bidirecţional cu rezistori interni (opţionali), dar poate îndeplini şi

functii speciale ale microcontrolerului ATMEGA 16. Buffer-ele de ieşire ale portului B au şi elecaracteristici de amplificare.

Port C (PC7…PC0) 

Page 4: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 4/21

4

Portul C este un port I/O de 8 biţi bidirecţional cu rezistori interni (opţionali), poate îndeplini şi functiiale interfeţei JTAG (de depanare), cât  şi alte funcţii speciale ale microcontrolerului ATMEGA 16.Buffer-ele de ieşire ale portului C au caracteristici de amplificare. Dacă  interfaţa JTAG (de depanare)este activată, rezistorii pinilor PC5(TDI), PC3(TMS) şi PC2(TCK) vor fi activaţi, chiar dacă are loc oresetare.

Port D (PD7…PD0) 

Portul D este un port I/O de 8 bi ţi bidirecţional cu rezistori interni conectaţi opţional la sursa de curentVcc (selectaţi pentru fiecare bit), dar poate îndeplini şi functii speciale ale microcontroleruluiATMEGA 16. Buffer-ele de ieşire ale p ortului D au caracteristici de amplificare.

RESET - Un nivel scăzut la acest pin mai mare ca durată decât o valoare prestabilită, va genera oiniţializare.XTAL 1 - reprezintă intrare pentru amplificatorul inversor al oscilatorului.XTAL 2 - reprezintă ieşire pentru amplificatorul inversor al oscilatorului.

AVCC - este pinul de alimentare pentru portul A şi convertorul A/D. Trebuie conectat extern la Vcc,chiar dacă convertorul analog-digital nu este folosit. Dacă convertorul analog-digital este folosit, ar

trebui conectat la sursa de curent Vcc printr-un filtru trece-jos.

AREF - este pinul de referinţă analogică pentru convertorul A/D.

Unitatea centrală de prelucrare pentru AVR

Funcţia principală a nucleului unităţii centrale de prelucrare (UCP) este aceea de a asiguraexecuţia corectă a programului. Din acest motiv, nucleul UCP este capabil să acceseze memoriile, săexecute calcule, să controleze perifericele şi întreruperile.

Figura 1 –  Schema bloc a nucleului UCP la microcontrolere AVR

Pentru a maximiza performanţa, AVR foloseşte o arhitectur ă Harvard cu memorii şi magistrale

Page 5: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 5/21

5

separate pentru program şi date. Instrucţiunile din memoria programului sunt executate într-un singurnivel în timp ce o instrucţiune este executată şi următoarea este adusă de la memoria de program. Acestconcept permite executarea instrucţiunilor la fiecare ciclu de ceas. Memoria de program este o memoriede tip FLASH reprogramabilă.

Registrele la AVR sunt în număr de 32×8 biţi fiecare, scopul acestor microcontrolere fiind acelade a accesa registrele într-un singur ciclu de ceas. Acest singur timp de acces se datorează unităţiiaritmetice şi logice (UAL=Unitatea Aritmetică şi Logică). Într-o unitate aritmetică şi logică operaţia are

loc astfel: operanzii sunt scoşi din registru, se efectuează operaţia şi rezultatul este intr odus în regiştri,toate acestea fiind executate într-un singur ciclu de ceas. Şase din cele 32 de registre pot fi folosite catrei registre de 16 biţi cu acces indirect la informaţii, permiţând astfel calcularea eficientă a adresei. Unadintre aceste adrese poate fi folosită pentru a căuta tabele în memoria de program.

Unitatea aritmetică şi logică  efectuează  (suportă) operaţii aritmetice şi logice între registre sauîntre o constantă  şi un registru. După efectuarea unei operaţii aritmetice registrul afişează  rezultatuloperaţiei.

Programul furnizează salturi condiţionate, necondiţionate şi apelări de instr ucţiuni capabile săacceseze tot spaţiul de adresă. Majoritatea instrucţiunilor AVR sunt formate dintr-un cuvânt de16 biţi.

Spaţiul memoriei de program (FLASH) este împăr ţit în  două secţiuni, secţiunea BOOT şisecţiunea de aplicare a programelor. Secţiunea BOOT are biţi speciali pentru protecţia la scriere şi

citire/scriere. De exemplu instrucţiunea SPM   cu ajutorul căreia se scrie în  memoria FLASHaplicaţii trebuie să fie în secţiunea BOOT.

În timpul întreruperilor sau a apelăr ii subrutinelor, adresa de întoarcere este conţinută  în stivă.Stiva este efectiv alocată în informaţiile generale SRAM şi în consecinţă măr imea ei este limitată doarde mărimea totală  a SRAM şi de uzura ei. Toţi utilizatorii de program trebuie să iniţializezeindicatorul de stivă SP (Stack Pointer) înainte ca subrutina sau întreruperea să fie executată. SP se poateciti/scr ie în  spaţiul de I/O. Informaţiile din SRAM pot fi accesate cu uşurinţă  prin cele cinci moduridiferite de adresare suportate de arhitectura AVR.

Spaţiile de memorie în arhitectura AVR sunt liniare şi normale.Modulele întreruperilor au registrele de control în  spaţiul I/O şi în Registrul STATUS se află 

 bitul de întreupere globală. Toate întreruperile au prioritate în  funcţie de locul ocupat în  tabelul de

vectori de întrerupere. Cu cât este mai jos situat în tabel vectorul de întrerupere cu atât acea întrerupereare prioritate mai mare. Prioritatea mai mare o ar e întreruperea cu vectorul cel mai slab plasat în tabel.

Spaţiul de memorie I/O conţine 64 de adrese pentru funcţiuni periferice ale UCP precum:controlul registrelor, indicatorul SPI sau alte funcţii de I/O. Memoria I/O poate fi accesată  direct sauindirect.

Execuţia în timp a instrucţiunilor Această  parte descrie în general timpul necesar executăr ii instructiunilor. UCP a MC

AVR este controlată de ceasul UCP generat direct de la sursă. Nu se foloseşte nici un ceas interior. 

Figura 6 ne prezintă pipeline-ul de execuţie al unei instrucţiuni permisă în arhitectura Harvardşi accesul rapid la fişierul de registre. Acesta este conceptul de bază pentru a obţine mai mult de 1MIPS/MHz şi cele mai bune rezultate din punct de vedere funcţiuni/cost, funcţiuni/timp şifuncţiuni/unitate.

Figura 6 - Instrucţiuni paralele de execuţie

Page 6: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 6/21

6

Figura 7 ne arată  timpul de lucru cu registrele. Într -un singur ciclu de ceas o operaţie a UALfoloseşte 2 registre pentru a executa calculul respectiv, iar rezultatul este stocat îna poi în registrul dedestinaţie.

Figura 7 - Operaţii UAL într-un singur ciclu de ceas

Sistemul de întreruperi la MC AVR  

Întreruperile sunt un mecanism de control al fluxului care este implementat în aproape toatemicrocontrolerele. În sistemele cu procesor care interacţionează  cu alte componente, multe lucruri seîntâmplă  asincron, de exemplu, utilizatorul poate apăsa un buton pentru face o acţiune, în timp ce pe

 portul serial urmează  să  sosească  un octet. Ar fi imposibil pentru procesor să  poată  urmări toateevenimentele doar prin interogarea acestor dispozitive. De aceea, ar fi mai bine dac ă aceste dispozitiveşi-ar putea anunţa sosirea unei date. Asta este ceea ce face mecanismul de întreruperi. Dispozitivele

 periferice pot întrerupe execuţia programului principal, şi procesorul se opreşte din execuţia programului pentru a examina sursa întreruperii şi pentru a executa task-urile necesare. După ce acestetask-uri au fost finalizate, execuţia programului întrerupt este reluată. Întreruperile sunt implementate ca

subrutine de program.MC AVR are o structur ă  de întreruperi bogată. Aproape toate dispozitivele periferice au fost

dotate cu capacităţi de întrerupere, de aceea programul principal nu trebuie să  verifice periodic acestedispozitive.

O secvenţă de evenimente care se derulează când apare o întrerupere este următoarea:1.  Dispozitivul periferic întrerupe procesorul2.  Executia instrucţiunii curente este finalizată 3.

 

Adresa următoarei instrucţiuni este memorată  în stivă  (stiva poate fi hardware sausoftware)4.

 

Adresa ISR (Interrupt Subroutine) este încărcată în program.5.  Procesorul execută ISR-ul.

6. 

Terminarea execuţiei ISR este indicată de instrucţiunea RETI (Return from Interrupt)7.  Procesorul reia execuţia programului normal de la valoarea memorată în stivă.

Deoarece întreruperile pot apare în orice moment, starea procesorului trebuie salvată pentru caexecuţia normală  a programului să  poată  fi reluată  după  ce ISR este finalizat. Starea în care este

 procesorul se află  în registrul SREG. Instrucţiunea ISR trebuie să salveze registrul SREG înainte de aexecuta orice altă  operaţie şi, înainte de a returna controlul către programul principal, SREG trebuierestaurat. Această operaţie poate fi făcută în două moduri:

1. 

SREG este copiat într-un alt registru, de exemplu R1, care nu poate fi folosit pentru oricealta operaţie, şi înainte ca ISR să execute instrucţiunea RETI, R1 este copiat înapoi în SREG.2.  SREG este salvat în stivă  (folosind instrucţiunea PUSH SREG) şi înainte de execuţia

instrucţiunii RETI, SREG este copiat înapoi din stiv

ă  (folosind instruc

ţiunea POP SREG).Această  metodă  este posibilă  doar pentru procesoarele care au stivă  software.Microcontrolerul AT90S1200, de exemplu, nu poate folosi aceasta metoda pentru salvareaSREG.

Page 7: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 7/21

7

În mod normal, după ce a intervenit o întrerupere şi a fost executată prin adresa corespunzătoareISR, întreruperile globale sunt dezactivate automat (echivalent cu execuţia instrucţiunii CLI); oricum,este posibil să se activeze întreruperile în timp ce un ISR este executat, executând instrucţiunea SEI înISR. Dacă o altă întrerupere apare în timp ce un ISR este deja în execuţie, atunci aceasta este acceptată 

 prin întreruperea primului ISR.Prioritatea întreruperilor este stabilită de ordinea în care sunt memorate în tabelul de întreruperi.

Vectorul de întreruperi de la o adresă  joasă  din memorie are prioritate mare. Prioritatea întreruperilor

este folosită pentru a decide care întrerupere este servită prima, dacă mai multe întreruperi sunt active înacelaşi moment de timp.Un factor important de luat în seamă  când sunt folosite întreruperile este cât de repede poate

r ăspunde un procesor la o întrerupere. Aceasta depinde de arhitectura procesorului. Pentrumicrocontrolerele AVR, răspunsul la întreruperi se face în minim 4 cicli după ce flag-ul de întreruperi afost setat, iar rutina  pentru întreruperi excutată. În timpul celor 4 cicli, Program Counter (este pe 2octeţi) este introdus în stivă, şi Stack Pointer este decrementat cu 2.

MC AVR furnizează mai multe tipuri de întreruperi. Aceste întreruperi şi vectorul de resetare aucâte un vector de program fiecare aflat în  spaţiul memoriei de program. Tutur or întreruperilor le suntalocate individual biţi care trebuie scrişi logic o dată cu bitul GIE (Global Interrupt Enable) în registrulde stare cu scopul de a per mite întreruperea. În funcţie de starea în care se af lă PC (Program Counter),

întreruperile pot fi invalidate, atunci când Boot Loader-ul este programat. Această tehnică îmbunatăteşte securitatea.

Cele mai joase adrese din memoria de program sunt definite ca vectori de resetare şi întrerupere.În funcţie de listă se determină şi nivelurile de prioritate ale diferitelor întreruperi. Cu cât întrerupereaare nivelul mai jos, cu atât prioritatea este mai mare. RESET are cea mai mare prioritate, iar dupăaceasta este INT0 - cererea de întrerupere externă 0. Vectorii de întrerupere pot fi mutaţi la începutulsecţiunii Boot Flash prin setarea bitului IV SEL din registrul global de control al întreruperilor (GICR).Vectorul de RESET poate fi, de asemenea, mutat la începutul aceleiaşi secţiuni prin programareasecţiunii BOOTRST.

Când apare o întrerupere, bitul GIE (bitul I –  de întrerupere) este şters şi toate întreruperile suntinvalidate. Utilizatorul de software poate scrie 1 logic în  bitul I pentru a permite executarea

întreruperilor. Toate întreruperile permise pot, la r ândul lor, întrerupe întreruperile de rutină. Bitul I esteautomat corectat când instrucţiunea RETI este executată.

Practic sunt două tipuri de întreruperi:1. Primul tip este declanşat de evenimentele care setează indicatorul de întrerupere. Pentru

aceste întreruperi PC este trimis la vectorii de întreruper e în scopul executăr ii întreruperilor der utină şi hardware-ul şterge indicatorul de întrerupere corespunzător. Indicatorul de întrerupere poatefi şters şi prin scrierea cu 1 logic. Dacă se întâmplă  o întrerupere în  timpul în  care bitul care permiteîntreruperea este şters, atunci indicatorul de întrerupere va fi setat să reţină întreruperea până cândaceasta va putea fi per misă sau indicatorul este şters de software. În caz similar se procedează atuncicând este vorba de ştergerea indicatorului GIE.

2. Cel de-al doilea tip de întreruperi este dat atâta timp cât condiţia de întrerupere este prezentă. Aceste întreruperi nu au neapărat indicator de întrerupere. Dacă  condiţia de întreruperedispare înainte ca întreruperea să fie permisă, întreruperea nu va mai fi executată. Când AVR iese dintr-o întrerupere se întoarce la programul principal şi mai execută o dată instrucţiunile înainte de a intervenialtă întrerupere. Starea registrului nu este automat stocată când apare o întrerupere de rutină, nici cândrevine din întreruperea de rutină. Acesta trebuie susţinut de software.

Saltul execuţiei programului la rutina de întrerupere consumă doi cicli. Dacă o întrerupere apareîn timpul unei instrucţiuni multiciclu, această  instrucţiune este finalizată înainte de a fi servită întreruperea. Întoarcerea de la o rutină  de întârziere durează  alţi 4 cicli. În timpul acestor 4 cicli,Program Counter (cuvânt - 16 biţi) este scos din stivă, Stack Pointer este incrementat cu 2, şi bitul I dinregistrul SREG este setat. Când microcontrolerele AVR ies dintr-o întrerupere, întotdeauna se vor

întoarce la execuţia programului principal şi va executa cel puţin o nouă  instrucţiune înainte de a fiacceptată o nouă întrerupere.

Page 8: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 8/21

8

De exemplu:1.

 

Când se foloseşte instrucţiunea CLI (Clear Interrupt) pentru invalidarea întreruperilor,întreruperea va fi invalidată  imediat. Nici o întrerupere nu va mai fi executată  după acţionarea instrucţiunii CLI, chiar dacă se întâmplă simultan cu instrucţiunea CLI.

2.  Când se foloseşte instrucţiunea SEI (Set Interrupt) pentru a permite întreruperi,instrucţiunea SEI este rulată înaintea oricărei instrucţiuni aflate în aşteptare.

Unitatea aritmetică şi logică (UAL)

Cea mai mare performantă  a UAL a MC AVR este aceea că  lucrează  direct cu cele 32 deregistre. În timpul unui singur ciclu de ceas se efectuează  operaţii aritmetice între r egistre sau întreregistre şi o constantă, acestea fiind executate imediat. Operaţiile pe care le execută UAL suntîmpărţite în trei mari categorii: aritmetice, logice şi operaţii pe bit. Unele implementări ale arhitecturii

 pot efectua şi multiplicări cu  sau fară semn şi/sau în  regim de fracţie. Mai multe detalii se găsesc însubcapitolul Setul de Instruc ţ iuni.

Registrul de stare (Status Register)

Registrul de stare conţine informaţii despre ultima operaţie aritmetică  efectuată. Aceastăinformaţie poate fi folosită pentru a reveni (a alterna) de la program la executarea unei alte operaţii mai

 prioritară. Situaţia registrului este actualizată după  fiecare execuţie a unei operaţii aritmetice. Aceasta poate duce în  multe cazuri la nefolosirea concretă  a fiecărei instrucţiuni în parte, ci a unui cod maicompact de instrucţiuni care efectuează mai rapid operaţia.Valorile din registrul de stare nu sunt automat stocate când apare o întrerupere de r utină şi mai apoirestaurate când se întoarc la program. Acest lucru trebuie manipulat de program.

Registrul de stare (Status Register) la MC AVR este definit ca mai jos:

Figura 8 –  Regitrul de stare

unde:Bitul 7-I (Global Interrupt Enable - GIE) (Întreruperi Globale Permise) –  trebuie să fie setat pentru

ca întreruperile să fie permise. Controlul întreruperilor individuale se face dintr-un registru separat. DacăGIE este şters niciuna dintr e întreruperile individuale nu sunt permise independent. Bitul I este şters dehard după ce s-a ivit o întrerupere şi este corectat de insttructiunea RETI (return from interrupt) pentrua permite accesul unei subsecvente la întreruperi. Bitul I poate deasemenea sa fie fixat şi şters de

aplicatie cu ajutorul instructiunilor SEI şi CLI aşa cum sunt descrise în Setul de InstructiuniBitul 6-T (Bit Copy Storage –  BCS) (bitul copiere-depozitare stocare) –  Instructiunile la nivel de bit pentru copiere BLD (Bit LoaD-bit de incăr care) şi memorare BST (Bit Store-bit de stocare) folosesc bitul T ca sursă  sau destinatie pentru bitul actionat. Un bit dintr-un registru poate fi copiat în T cuajutorul instructiunilor BST, şi un bit din T poate fi copiat în registru cu ajutorul instructiuni BLD.

Bitul 5-H (Half Carry Flag  –  HCF) (Indicator de transport la jumatate) –  Acesta indică transportulla jumatate în  cazul unor operatii aritmetice. Jumatate de transport este f olosit în aritmetica BCD(binary-coded decimal). Pentru informatii detaliate a se vedea Setul de Instructiumi.

Bitul 4-S - Sign Bit ( bitul de semn) –  Acest bit este un sau exclusiv între flag-ul indicator de negativ Nsi bitul de depăşire V.Bitul 3-V Two’s Complement Overflow Flag –  Bitul indicator de depasire memorie 

Bitul 2-N Negative Flag (indicatorul negativ)  –   Indicatorul negativ indică  un rezultat negativ încadrul operatiilor aritmetice sau logiceBitul 1  –  Z Zero Flag  (indicator de zero)  –   Indicator de zero  –   este setat atuci cand rezultatul unei

operatii logice sau aritmetice este nul.

Page 9: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 9/21

9

Bitul 0- Carry Flag (indicatorul de transport)  –   Indicatorul de transport indică  transpor t în cadruloperaţiilor logice sau aritmetice.

Registrele de uz general 

Fişierul de registre este optimizat pentru setul de instrucţiuni al arhitecturii AVR RISC. MC

AVR folosesc un set de 32 de registre de uz general de 8 biți fiecare (notate R0R31) care pot fi

accesate într -un singur ciclu de tact. Structura setului de registre de uz general este prezentată în figura9. Aşa cum se vede şi în figura 9, fiecăr ui registru i se atribuie şi o adresă  de memorie,localizându-l direct în cele 32 de locaţii, adică fiecare registru are o adresă în spațiul memoriei de date

 permițând astfel o adresare uniformă.Observație: Doar registrele R16R31 pot stoca operanzi imediați. 

Figura 9 –  Structura celor 32 de registre de uz general

Majoritatea instrucţiunilor care folosesc fişierul de registre au acces direct la toate registrele şimarea lor majoritate sunt instrucţiuni care se execută într -un singur ciclu de tact. Șase din cele 32 deregistre (R26R31) pot fi folosite ca trei registre de 16 biți pentru stocarea unor pointeri folosiți laadresarea indirectă a datelor. Cele trei registre pentru adresarea indirectă sunt denumite registrele X,Y,Z.

Registrele X, Y, Z 

Registrele R26R31 au câteva funcţiuni adăugate pe lângă cele generale. Aceste registe au 16 biţi și se folosesc pentru accesarea indirectă a datelor. Cele trei registre pentru adresarea indirectă  suntregitrele X, Y, Z care sunt descrise în figura 10 de mai jos.

Figura 10 –  Registrele X, Y, Z

Registrele generale 26, 27, 28, 29, 30 şi 31 pot fi utilizate cu denumiri specifice şi anume:  

Page 10: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 10/21

10

R26 –  registrul X octet inferior; R27 –  registrul X octet superior;R28 –  registrul Y octet inferior; R29 –  registrul Y octet superior;R30 –  registrul Z octet inferior; R31 –  registrul Z octet superior;

STIVA

Stiva   este f olosită în  principal pentu înmagazinarea temporar ă  a datelor, dar şi pentruînmagazinarea variabilelor locale şi pentru redarea adreselor după efectuarea întreruperilor sau asubrutinelor. Informaţia care este pusă în stivă este pusă întotdeauna deasupra celorlalte deja existente.Stiva este implementată  pentru a trece de la locaţii de memorie superioare la locaţii de memorieinferioare.

Indicatorul de stivă (SP) indică spatiul de date din memoria SRAM a stivei unde sunt localizateîntreruperile şi subrutinele. Acest spaţiu trebuie definit de program înainte de a se executa vreosubr utină  sau întrerupere. Indicator ul de stivă (SP) este decrementat cu 1 când se introduc alte date înstivă cu ajutorul instrucţiunii PUSH, şi decrementat cu 2 când adresele de revenire la program suntintr oduse în stivă cu subrutinele sau cu instruţiunile CALL sau GOTO. Indicator ul de stivă este

incrementat cu 1 când datele sunt şter se din stivă cu instrucţiunea POP, şi incrementat cu 2 când datelesunt scoase din stivă şi se revine din subrutină cu instrucţiunea RET sau din întrerupere cu instrucţiuneaRETI.

Indicator ul de stivă la MC AVR este implementat ca f iind format din două registre de 8 biţi. Număr ul de biţi folosiţi depinde de necesitatea implementăr ii. Spaţiul de adrese la unele implementăr iale arhitecturii AVR sunt aşa de mici încât nu este necesar decât SPL-ul (SP Low). În acest caz registrulSPH (SP High) nu mai este utilizat.

Figura 11 –  Indicatorul de stivă (SP)

ORGANIZAREA MEMORIEI LA MC AVR –  ATMEGA 16

ATmega 16 AVR are două spaţii de memorie principală: spaţiul pentru memoria de date şi cel pentru memoria de program. În plus, ATmega16 are şi o memorie nevolatilă  EEPROM pentru

memorarea datelor. Toate cele trei tipuri de memorie folosesc adresarea liniar ă.

Memoria pentru programeATmega 16 conţine o memorie de tip FLASH reprogramabilă (In-system On-chip) de 16 KB

 pentru programe. Deoarece toate comenzile pentru AVR sunt de 16 şi 32 biţi, memoria FLASH esteorganizată  pe cuvinte în formatul  8Kx16. Pentru securitatea software-ului, spaţiul pentru memoria de

 programe FLASH este împăr ţit în două  secţiuni: secţiunea de program BOOT   şi secţiunea  pentru

 programe de aplica ţ ie.Memoria FLASH suportă  cel puţin 10.000 de cicli de scriere/ştergere. PC-ul (Numărătorul de

 program) de la ATmega 16 (PC) are o lungime de 13 biţi, ceea ce permite adresarea unui spațiu dememorie de 213 = 8Klocaţii.

Page 11: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 11/21

11

Memoria de date SRAMFigura 12 arată cum este organizată memoria SRAM la MC AVR - ATmega 16.Memoria de date SRAM este organizată pe octeţi. Primele 96 de locaţii sunt rezervate fişierului

de registre, iar următoarele 1024 de locaţii sunt dedicate memoriei SRAM interne. Din fişierul deregistre fac parte cele 32 registre de uz general, iar restul de 64 de locaţii sunt rezervate registrelorasociate dispozitivelor de I/O.

Memoria SRAM are o capacitate cuprinsă între 128B şi 4KB în funcţie de tipul particular al

microcontrolerului. Este accesată cu instrucţiuni de acces atât direct, cât şi indirect, folosind un registru pointer. Este folosită, de asemenea, şi pentru constituirea stivei. Accesul la memoria SRAM se face îndouă perioade de tact. Observaţie:  La microcontrolerele AVR performante este posibilă conectarea unei memorii SRAMexterne.

Figura 12 –  Memoria de date SRAM

Memoria de date EEPROM

ATmega 16 conţine 512 octeţi de memorie de date EEPROM (Electrically ErasableProgrammable R ead-Only Memory). Este organizată  ca spaţiu separat de date, în care pot fi citiţi şiscrişi biţi individual. EEPROM-ul are o durată de viaţă de cel puţin 10.000 de cicli scriere/ştergere.Scrierea/citirea în EEPROM se face cu ajutorul registrelor de acces la EEPROM.

Când se citeşte EEPROM-ul, UCP este oprită  timp de patru perioade de ceas înainte ca

următoarea comandă  să  fie executată. Când se scrie EEPROM-ul, UCP este oprită  timp de două  perioade de ceas înainte ca următoarea comandă să fie executată.

 Figura 13 –  Registrele de adresa EEPROM –  EEARH si EEARL

Biţii 9  15 sunt biţi rezervaţi în cazul MC ATmega 16 şi vor lua întotdeauna valoarea 0.

Page 12: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 12/21

12

Biţii 0  8 sunt biţi de adresare (total 9 biţi, deci se adresează 0.5 KB)Registrele de adresă de mai sus, EEARH şi EEARL  –   specifică  adresa datelor din EEPROM

 pentru cele 512 locaţii ale spaţiului EEPROM. Locaţiile de memorie se adresează liniar de la 0 la 511.Pentru operaţia de scriere a EEPROM, registrul EEDR conţine date care să  fie scrise în EEPROM laadresa dată  de registrul EEAR. Pentru operaţia de citire a EEPROM, EEDR conţine date citite de peEEPROM la adresa dată de EEAR.

 Figura 14 –  Registrul de date EEPROM –  EEDR

 Figura 15 –  Registrul de control EEPROM –  EECR

Biţii 74 - sunt rezervati la ATmega 16 şi au valoarea zero.Bit 3 –  EERIE: Activarea EEPROM Ready InterruptBit 2 –  EEMWE : EEPROM Master Write Enable (activarea funcţiei principale de scriere EEPROM)Bitul 1 –  EEWE : EEPROM Write Enable (activarea scrierii EEPROM)EEPROM nu poate fi programat în timp ce UCP scrie în memoria FLASH. Software-ul trebuie să verifice dacă programarea memoriei FLASH este completă înainte de a iniţia o nouă scriere a EEPROM.Bit 0 –  EERE : Activarea citirii EEPROM

Când se setează adresa corectă a registrului EEAR, bitul EERE trebuie să fie scris pe unu logic

ca să declanşeze citirea EEPROM. Accesul la citirea EEPROM se face cu o singură comandă şi datelecerute sunt disponibile imediat. Când EEPROM este citit, UCP este oprită timp de patru Cicli înainte caurmătoarea comandă să fie executată.

Spaţiul de memorie I/O

Toate I/O de la ATmega 16 şi perifericele sunt plasate în spaţiul registrelor I/O. Locaţiile I/Osunt accesate de către comenzile IN şi OUT, transfer ând datele dintre cele  32 de registre de lucru şi

spaţiul I/O. Registrele I/O cuprinse între valorile adreselor $00   $1F sunt direct accesabile folosindcomenzile SBI şi CBI. La aceste registre valoarea biţilor unici poate fi verificată  utilizând comenzileSBIS şi SBIC.

Când se utilizează  instrucţiunile specifice IN şi OUT, trebuie folosite adresele I/O din zona$00   $3F. Când se adresează/accesează  registrele I/O ca spaţiu de date cu instrucţiunile LD şi ST,trebuie adăugat, la aceste adrese, valoarea $20, adică un salt peste zona registrelor de uz general.

SISTEMUL DE I/O la MC AVR –  ATMEGA 16

1.  Porturile de intrare/ieşire

ATmega16 dispune de 32 de linii de I/O grupate în patru porturi de 8 biți. Porturile sunt denumite culiterele A, B, C și D. Fiecare pin al oricărui port se poate seta individual ca intrare sau ieșire fără săafecteze ceilalți pini. În plus, anumiți pini se pot utiliza pentru funcții speciale ale microcontrolerului.

În f igura următoare este prezentată structura generală a unui pin. Toți cei 32 de pini au fiecare câte orezistență „pull-up” care poate fi activată sau dezactivată. 

Page 13: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 13/21

13

Observație: În scopul realizăr ii performanţei şi flexibilităţii cerute, porturile de I/O sunt implementate înfişierul de registre.

Operațiile cu porturile se fac prin intermediul unui set de 3 registre aloc ate fiecărui port: PORTx,PINx și DDRx; unde x poate fi A, B, C sau D. Aceste registre fac parte din categoria registrelor de

intrare/ieșire și pot fi accesate cu instrucțiunile care pot lucra direct cu ele: CBI, SBI, IN și OUT.Registrele DDRx stabilesc dacă un pin este intrare sau ieșire. Astfel, un bit cu valoarea „1” în

registrul DDRx face ca pinul corespunzător să fie considerat ieșire; altfel pinul va fi intrare. RegistrelePORTx sunt utilizate pentru a scrie o valoare în portul corespunzător , iar registrele PINx se folosesc

 pentru a citi valoarea prezentă pe pinii unui port. Activarea sau dezactivarea rezistenţelor „pull-up” estedeterminată de bitul PUD din registrul SFIOR şi de valorile registr elor PORTx și DDRx, aşa cum se

 poate observa în tabelul următor. 

Toate porturile AVR au funcția „Citeşte –  Modifică  –  Scrie” atunci când sunt folosite ca porturiI/O digitale generale. Asta înseamnă că direcţia unui pin poate fi schimbată  f ăr ă  a schimba în modintenționat direcția oricărui alt pin cu comenzile SBI și CBI. Aceeași regulă se aplică când se schimbă valoarea drive-ului (dacă este configurat ca ieșire) sau a activării/dezactivării rezistorilor (dacă  suntconfigurați ca intrare). Fiecare buffer de intrare are caracteristici similare de drive atât cu capacitateasursei cât și cu sincronizarea. Driver-ul pinului este îndeajuns de puternic ca să activeze displayul LEDdirect. Toți pinii au rezistori care pot fi selectați individual cu o sursă  suplimentar ă  de tensiune cu

rezistență  invariabilă. Toți pinii I/O au diode de protecție atât la tensiunea de alimentare în curentcontinuu (Vcc), cât și la împământare, așa cum este indicat în figura de mai jos :

Page 14: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 14/21

14

Toate registr ele și referințele de bit din această secțiune sunt scrise în formă generală. Un „x” micreprezintă  litera care denumește portul și un „n”  mic reprezintă  numărul bitului. Când se utilizează registrul sau biții într-un program, trebuie să  fie folosită  forma exactă. Adică, PORTB3 pentru bitulnumărul 3 în Portul B, prezentat general ca PORTxn. Trei loca ții de adrese de memorie I/O sunt alocate

 pentru fiecare port:- una pentru fiecare registru de date - PORTx,- registrul direcției datelor –  DDRx,

- port de intrare –  PINx.Locația pinilor de intrare este read-only, în timp ce registrul de date și DDR sunt read-write. În

 plus, bitul PUD (dezactivare pull-up) din SFIOR dezactivează funcția pull-up pentru toți pinii din toate porturile când este setat.

Majoritatea pinilor au funcții alternative pentru caracteristicile periferice ale dispozitivului.Observație: activarea funcțiilor alternative ale unor pini nu afectează utilizarea altor pini ca port de I/Ogeneral digital.

2.  Unitățile timer/numărător ATMEGA 16 are două unități timer/numărător de 8 biți și o unitate timer/numărător de 16 biți.

Principalele caracteristici ale acestor module sunt:

Posibilitatea de alegere a frecvenței de tact de la intr area timerelor (circuit de prescalare);-  Posibilitatea de citire/scriere a stării numărătoarelor; -  Generarea de forme de undă prin folosirea unui registru de comparare; 

-  Generarea de unde PWM cu posibilitatea de reglare a frecvenței; - 

Generarea de cereri de întrerupere la intervale regulate; -  Posibilitatea declanșării la un eveniment extern (captură a intrării). 

Principalele caracteristici ale unităţii timer /numărător  de 16 biţi sunt:-  PWM de 16 biţi;-  Două unităţi independente de comparare a ieşirilor;

-  Unitate de captură a intrării;-  Un atenuator de zgomot pe intrare;

Ştergerea cronometrului la potrivirea comparării (autoreîncărcare);-  Puls de corectare a fazelor cu modulator (PWM);-  Perioada PWM variabilă;

-  Generator de frecvenţă;-   Numărător extern de evenimente;

-  Patru surse de întrerupere independente.Unitățile timer/numărător fac posibilă cronometrarea  precisă a execuţiei programului

(managementul evenimentelor), generarea de forme de undă şi măsurarea intervalelor de timp.

3.  Modulul UART/USART (Universal Synchronous Asynchronous Receiver/Transmitter)Modulul UART/USART efectuează recepția/transmisia datelor de la/către un dispozitiv periferic

cu acces serie. Principalele caracteristici ale acestui modul sunt:-  Funcționare full-duplex completă atât în modul sincron, cât și în modul asincron; -  Are generator propriu de rezoluție mare; 

-  Detectează automat erorile de transmisie; -  Execută comunicații de tip multiprocesor. Modulul execută conversia serie/paralel a datelor la recepție, respectiv conversia paralel/serie la

transmisie. Transmiterea datelor este inițializată  prin scrierea datelor care trebuie trasmise în registrulUART I/O Data Register, UDR. Datele sunt transferate de la UDR la registrul Transmit Shift când:

1.  Un nou caracter este scris în UDR și caracterul precedent a fost deja transferat. Registrulde deplasare este încărcat imediat în acest caz.

2. 

Un nou caracter este scris în UDR înainte ca un caracter precedent să  fi fost transferatcomplet. Registul de deplasare este încărcat după ce prima operație a fost finalizată.

Page 15: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 15/21

15

4.  Interfaţa SPI (Serial Peripheral Interface)

Interfața de comunicație SPI asigură transferul rapid sincron de date între microcontroler șidispozitive periferice sau microcontroler și alte microcontrolere AVR. 

5.  Interfaţa TWI (Two Wire Interface)Interfața TWI implementează un protocol de comunicație pe două fire permițând interconectarea

a până la 128 de dipozitive diferite. Interfața folosește două linii bidirecționale, una pentru tact și una

 pentru date. Toate dispozitivele conectate la magistrala acestei interfețe au propria adresă. 

6.  Timer-ul Watchdog (WDT)Timer-ul Watchdog este un timer controlat care este folosit  pentru a activa un dispozitiv în caz

că programul  software este blocat într-o buclă  infinită  sau în caz că  execuția programului estedefectuoasă. Timer-ul Watchdog are o ieșire care poate reseta microcontrolerul. Timer-ul Watchdog estealimentat de la un oscilator RC on-chip separat.

7.  Convertorul analog digital (CAD)MC ATMEGA 16 conține un convertor analog digital cu aproximații succesive, cu 8 canale și cu

rezoluția de 10 biți. Convertorul este prevăzut la intrare cu circuit de eșantionare și memorare. 

8.  Comparatorul analogic –  compară două mărimi analogice şi generează o cerere de întreruperecând acestea sunt egale. 

MODURILE DE LUCRU CU CONSUM REDUS DE ENERGIE

Mictrocontrolerul AVR are disponibile 6 moduri de lucru pentru reducerea consumului deenergie, care pot fi comandate prin intermediul registrului de control al unității centrale amicrocontrolerului (MCUCR = MCU Control Register). Pentru aceasta setează bitul SE (Sleep Enable)și biții SM2, SM1 și SM0 (Sleep Mode), din registrul MCUCR. Pentru a intra în modul SLEEP, bitul SEdin MCUCR trebuie setat pe “1”  și intrucțiunea SLEEP trebuie executată. Dacă  o întrerupere seactivează  în timp ce unitatea centrală a microcontrolerului (MCU)  este în modul SLEEP, MCU  se“trezește”, execută întreruperea și reia execuția de la instrucțiunea următoare instrucțiunii SLEEP.Conținutul fișierului de registre, memoriei SRAM și porturilor I/O sunt neafectate. Dacă  un RESETapare în timpul modului SLEEP, MCU se “trezește” și execută vectorul corespunzător pentru RESET.

Când bitul SM este 0, instrucțiunea SLEEP for țează MCU să intre în modul IDLE, oprind UCP,dar lăsând timer/counter-ul, timer-ul watchdog și sistemul de întreruperi să-și continue funcționarea.Când bitul SM este 1, instrucțiunea SLEEP for țează MCU să intre în modul POWER-DOWN. În acestmod, oscilatorul extern este oprit, în timp ce întreruperile externe și timer-ul watchdog continuă  să funcționeze.

Modurile de lucru cu consum redus de energie la MC AVR sunt:

1. 

IDLE MODE  –   UCP este oprită, dar interfețele UART/USART, SPI, TWI, CAD,comparatorul analogic, timerele și sistemul de întreruperi continuă să funcționeze. O cererede întrerupere readuce procesorul în stare de funcționare. 

2.  ADC NOISE REDUCTION MODE  –   UCP este oprită, dar CAD, întreruperile externe,interfața TWI, timerul 2 și timer-ul watchdog continuă să funcționeze. Acest regim permiteCAD să funcționeze cu o rezoluție mai mare. O cerere de întrerupere readuce procesorul înstare de funcționare. 

3.  POWER-DOWN MODE  –   oscilatorul extern este blocat, însă rămân active întreruperileexterne, interfața TWI și timer -ul watchdog. 

4.  POWER-SAVE MODE  –  este similar cu modul Power-Down, cu diferența că și timer -ul 2continuă să funcționeze. 

5. 

STANDBY MODE  –   este identic cu modul Power-Down, cu deosebirea că oscilatorulcontinuă să funcționeze. 6.  EXTENDED STANDBY MODE  –  este disponibil atunci când este folosit un oscilator cu

cuarț, în rest este identic cu modul Power -Down. 

Page 16: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 16/21

16

SETUL DE INSTRUCŢIUNI al MC AVR

MC AVR au un set de 131 instrucțiuni codate cu 16 sau cu 32 biți. Pentru accesarea datelorinstrucțiunile folosesc mai multe moduri de adresare. Diferitele instrucţiuni ale MC AVR pot fiîmpăr ţite în aproximativ 10 moduri de adresare diferite. Fiecare instrucţiune are un cod care indică

 procesorului ce să facă. Cealaltă parte a instrucţiunii este operandul, cu care lucrează codul. 

1. 

Instrucțiunile de lucru direct cu registrele de uz general

Instrucţiunile registru direct simplu  pot lucra cu oricare dintre cele 32 de registre de uzgeneral. Acestea citesc conţinutul unui registru, lucrează cu conţinutul acestuia și apoi stocheazărezultatul operaţiei înapoi în registru.

Formatul acestor instrucţiuni este:  Registre Destina ț ie 

Exemple de astfel de instrucțiuni pot fi cele de mai jos, unde RD poate fi orice registru,considerat ca fiind atât sursă, cât și destinaţie în cadrul instrucţiunii.

COM RD inversează toţi biții din registrul RD

INC RD incrementează cu 1 conţinutul registrului RDDEC RD decrementează cu 1 conţinutul registrului RDTST RD verifică dacă registrul RD conţine zerouri sau valori negativeCLR RD atribuie valoarea $00 registrului RDSER RD atribuie valorea FF registrului RDLSL RD mută conţinutul registrului cu o poziţie la stânga. Zerourile sunt mutate pe poziţia 0, iar

conţinutul bitului 7 este copiat în Carry FlagLSR RD mută conţinutul registrului cu o poziţie la dreapta. Zerourile sunt mutate pe poziţia 7, iar

conţinutul bitului 0 este copiat în Carry FlagROR RD roteşte conţinutul registrului RDASR RD mută aritmetic la dreapta conţinutul registrului RD, păstrând bitul 7 constant. SWAP RD schimbă pozițiile și conținutul registrului RD

În instructiunile registru direct dublu  sunt implicate două  registre. Cele două registre suntdenumite registrul sursă  -  RS  și registru destinaţie  - RD. Instrucţiunea citeşte cele două registre șilucrează cu conţinutul lor, stocând informaţia în registrul destinaţie.

Exemple de instrucţiuni:ADD RD, RSSUB RD, RSAND RD, RS

MOV RD RSOR RD, RS 

2.  Instrucțiunile I/O directe sunt folosite pentru a accesa spaţiul de intrare-ieşire. Registrele I/O pot fi accesate doar utilizând aceste instrucţiuni: 

IN RD PORTADDRESS;OUT PORTADDRESS RS;

unde RD și RS pot fi oricare dintre cele 32 de registre de uz general, iar registrele I/O pot fi oricare dinregistrele din gama cuprinsă între 00 şi 3F (un total de 64 de registre I/O).

3.  Instrucțiuni de lucru direct cu datele  - au mărimea de 2 cuvinte (32 biți). Un cuvând  este

ocupat de adresa spațiului de memorie. Așadar un maxim de date de memorie de 64 KB poate fi accesatfolosind unul dintre aceste tipuri de instrucţiuni. 

Exemple de instrucțiuni:

Page 17: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 17/21

17

LDS RD, K ; citește o dată din memoria SRAM de la adresa KSTS K, RS ; memorează direct valoarea din RS la adresa K în memoria SRAM

4.  Instrucțiuni de lucru indirect cu datele - Aceste instrucţiuni sunt similare cu instrucţiunile detipul Data Direct, exceptând faptul că acestea au un cuvânt fiecare și un registru pointer (X, Y sau Z)care este folosit pentru memorarea bazei adresei datelor din memorie. La baza adresei în registrul

 pointer poate fi adăugat un offset sau operaţii de incrementare-decrementare asupr a conţinutului

 pointerului.

Exemple de instrucţiuni:LD Rd, X ; încarcă în registrul Rd valoarea de la adresa indicată de pointerul XLD Rd, X+ ; încarcă în registrul Rd valoarea de la adresa indicată de pointerul (X+1)ST X, Rs ; memorează în registrul Rs valoarea de la adresa indicată de pointerul XST X+ ,Rs ; memorează în registrul R s valoarea de la adresa indicată de pointerul (X+1)

5.  Instrucțiuni aritmetice și logice

ADD Rd, Rs  ; Adunare fără transport Rd = Rd + Rs; 

Flag-urile afectate Z, C, N, V, S, HCicli de ceas 1

Exemplu: ADD R2, R3

ADC Rd Rs Adunare cu transport Rd = Rd + Rs + CFlag-urile afectate Z, C, N, V, S, HCicli de ceas : 1

Exemplu : ADC R5, R3

SUB Rd, Rs  ; Rd=Rd - RSFlag-urile afectate: Z, C, N, V, S, HCicli de ceas: 1

Exexmplu: SUB R1, R3;

AND Rd, Rs ; Execută operație “ȘI logic” între Rd și Rs; Rd = Rd & Rs.Flag-urile afectate: : Z, N, V, SCicli de ceas: 1

Exemplu: AND R26 , R2

OR Rd, Rs; Execută operașia “SAU logic” între Rd și Rs. Rd = Rd | Rs.Flag-urile afectate: : Z, N, V, SCicli de ceas: 1

Exemplu: OR R1 , R2

NEG Rd. Rd = $00 –  Rd.Flag-urile afectate: : Z, C, N, V, S, HCicli de ceas: 1

Exemplu: NEG R30

MUL Rd, Rs. Înmulțire f ăr ă semn între Rd și Rs. Rezultatul este memorat în R1:R0

Page 18: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 18/21

18

R1:R0 = Rd x RsFlag-urile afectate: : Z, CCicli de ceas: 2

Exemplu: MUL R2 , R1

6. 

Instrucțiuni de salt

RJMP k ; Salt relativ la o locație de memorie.Flag-urile afectate: Nici unulCicli de ceas: 2

Exemplu:RJMP OK;

 NOT_OK: ADD R1 , R5;OK : INB R1;

IJMP k  ; Salt indirect la o locație de memorie ar ătată de registrul Z.Flag-urile afectate: Nici unulCicli de ceas: 2

Exemplu:LDI R30, ADD_LOWLDI R30, ADD_HIGH;IJMP;

JMP k ; Salt la o locație de memorie.Flag-urile afectate: Nici unul

Cicli de ceas: 3

Exemplu:JMP go_far;::go_far;

RCALL k ; Apel relativ a unei subrutineFlag-urile afectate: Nici unulCicli de ceas: ¾ 

Exemplu: RCALL SUBRUTINA

ICALL k ; Apel indirect a unei subrutineFlas-urile afectate: Nici unulCicli de ceas: ¾ 

Exemplu:LDI R30 FARSUB_LOW;LDI R31 FARSUB_HIGH;

ICALL;

CALL k ; Apel a unei subrutineFlag-urile afectate: Nici unul

Page 19: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 19/21

19

Cicli de ceas: 4/5

Exemplu: CALL SUBRUTINA

RET; Subrutina de întoarcere.Flag-urile afectate: Nici unulCicli de ceas: 4/5

Exemplu:::POP SREG;RET;

RETI; Subrutina de întoarcere din întrerupere.Flag-urile afectate: ICicli de ceas: 4/5

Exemplu:::POP SREG;RETI;

7.  Instrucțiuni pentru trasferul datelor

MOV Rd, Rs; Rd = Rs.Flag-urile afectate: Niciunul

Cicli de ceas: 1

Exemplu: MOV R2, R17;

MOVW Rd, Rs; Rd = Rs + 1: Rs.Flags-urile afectate: NiciunulCicli de ceas: 1

Exemplu: MOV R23, R17;

LDI Rdx, k ; Încarcă imediat. Rdx = k;Flag-urile afectate: NiciunulCicli de ceas: 1

Exemplu: LDI R23, $53;

LDS Rdx, k ; Încarcă imediat. Rdx = memoria de date (k);Flag-urile afectate: NiciunulCicli de ceas: 2

Exemplu: LDS R23, $5300;

LD Rd, X; Încarc indirect. Rd = memoria de date (X), unde X este registrul pointer pereche R26;Flag-urile afectate: NiciunulCicli de ceas: 2

Page 20: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 20/21

20

Exemplu: LD R2, X;

LD Rd, X+; Încarcă indirect. Rd = memoria de date (X), unde X =X + 1 este registrul pointer perecheR26:R27 ;

Flag-urile afectate: NiciunulCicli de ceas: 2

Exemplu: LD R21, X+;

LD Rd, -X; Încarcă  indirect. Rd = memoria de date (X), unde X =X - 1 este registrul pointer perecheR26:R27 ;

Fag-urile afectate: NiciunulCicli de ceas: 2

Exemplu: LD R22, -X;

LD Rd, Y; Încarcă indirect. Rd = memoria de date (Y), unde Y este registrul pointer pereche R28:R29 ;Flag-urile afectate: Niciunul

Cicli de ceas: 2

Exemplu: LD R1, Y;

LD Rd, Y+; Încarcă indirect. Rd = memoria de date (Y), unde Y =Y + 1 este registrul pointer perecheR28:R29 ;

Flag-urile afectate: NiciunulCicli de ceas: 2

Exemplu: LD R21, Y+;

LD Rd, -Y; Încarcă  indirect. Rd = memoria de date (Y), unde Y =Y - 1 este registrul pointer perecheR28:R29 ;

Fag-urile afectate: NiciunulCicli de ceas: 2

Exemplu: LD R22, -Y;

8.  Instrucțiuni pe biți

LSL Rd; Deplasare logică la stânga. Rd(n+1) = Rd(n); Rd(0) = 0; C = Rd(7).Flag-urile afectate: Z, C, N, V, H.Cicli de ceas: 1

Exemplu: LSL R1;

LSR Rd; Deplasare logică la dreapta. Rd(n+1) = Rd(n); Rd(0) = 0; C = Rd(7).Flag-urile afectate: Z, C, N, VCicli de ceas: 1

Exemplu: LSR R1;

ROL Rd; Rotire la stânga. Rd(0) = C; Rd(n+1) = Rd(n); C = Rd(7).Flag-urile afectate: Z, C, N, V, H.Cicli de ceas: 1

Page 21: Familia ATMEL AVR 8biti

7/23/2019 Familia ATMEL AVR 8biti

http://slidepdf.com/reader/full/familia-atmel-avr-8biti 21/21

Exemplu: ROL R13;

ROL Rd; Rotire la dreapta. Rd(7) = C; Rd(n) = Rd(n+1); C = Rd(0).Flag-urile afectate: Z, C, N, VCicli de ceas: 1

Exemplu: ROR R13;

ASR Rd; Deplasare aritmetică la dreapta. Rd(n) = Rd(n+1), for n = 0 to 6;Flag-urile afectate: Z, C, N, VCicli de ceas: 1

Exemplu: ASR R13;

SWAP Rd; Schimbă patru octeți. De ex Rd(3,2,1,0) cu Rd(7,5,5,4)Flag-urile afectate: niciunul.Cicli de ceas: 1

Exemplu: SWAP R10;

BSET s; Setează Flag-ul. SREG(s) = 1;Flag-urile afectate: SREG(s).Cicli de ceas: 1

Exemplu: BSET 10;

BCLR s; Resetează Flag-ul. SREG(s) = 0;Flag-urile afectate: SREG(s).

Cicli de ceas: 1

Exemplu: BCLR 10;

SBI A, s. Setează bitul s în registrele I/O.Flag-urile afectate: niciunul.Cicli de ceas: 1

Exemplu: SBI PORTD, 7;

CBI A, s. Golește bitul s în registrele I/O.Flag-urile afectate: niciunul.Cicli de ceas: 1

Exemplu: GBI PORTD, 7;