Az AVR mikrokontroller-architektúrát az Atmel (ma a Microchip része) fejlesztette ki a 1990-es évek közepén, és 1996 körül kezdett szélesebb körben elterjedni. Harvard-architektúrán alapul, azaz a program- és az adatmemória külön buszon és címterületen helyezkedik el, ami lehetővé teszi az egyidejű utasítás-olvasást és adatműveleteket. Az AVR volt az egyik első olyan mikrokontroller-család, amely a program tárolására chipen belüli flashmemóriát használta, szemben az akkoriban elterjedt egyszer programozható ROM, EPROM vagy EEPROM memóriával.

Sokszor olvasható, hogy az "AVR" a fejlesztők — Alf-Egil Bogen és Vegard Wollan — nevéből és a RISC elvből ered (Alf and Vegard's RISC). Ezt az elnevezést maga az Atmel is többször megemlítette; a lényeg, hogy az AVR egy egyszerű, hatékony RISC-szerű megközelítést valósít meg a beágyazott alkalmazásokhoz.

Fő jellemzők és előnyök

  • Egységes, nagy regiszterkészlet: a mag 32 darab 8 bites általános célú regisztert (R0–R31) tartalmaz, amelyek közvetlenül csatlakoznak az ALU-hoz. Ez gyors, regiszter alapú műveleteket tesz lehetővé.
  • Egyszeres órajel/utasítás teljesítmény: a legtöbb AVR-utasítás egyetlen órajel alatt végrehajtható, így az AVR közelítőleg 1 MIPS/MHz teljesítményt ad (azaz 1 MHz órajelen kb. 1 MIPS). Vannak természetesen kivételek (pl. memóriából betöltött utasítások, 16 bites műveletek, kisebb utasítások több ciklust igényelhetnek).
  • Kétállású (fetch/execute) pipeline: az AVR pipelinelése lehetővé teszi, hogy az egyik órajelben történjen az utasítás lekérése, míg a következőben a végrehajtás, így növelve a hatékonyságot.
  • Harvard-architektúra: külön program- és adatmemória, gyorsabb utasításvégrehajtás és egyszerűbb buszmenedzsment.
  • Beépített nemfelejtő memória: program memória (Flash), adat-EERPOM (kis kapacitású, tartós adat tárolására) és SRAM az adatok futásidejű kezelésére.

Regiszterek és címtartományok

Az AVR 32 regisztere rugalmasan használható: bizonyos regiszterpárok (pl. R26–R31) 16 bites cím- és adatmutatóként is szolgálnak (X, Y, Z regiszterpárok), ami megkönnyíti a pointerekkel végzett műveleteket. A programszámláló (PC), a veremmutató (SP) és a státuszregiszter (SREG) szintén a mag fontos elemei.

Memória és perifériák

  • Flash (program memória): a programok tárolására, in-circuit programozhatók és többször újraprogramozhatók.
  • SRAM: futásidejű változók tárolása.
  • EEPROM: tartós adatok tárolására (pl. konfigurációk), programból is írható/olvasható.
  • Perifériák (esetenként család- és típusspecifikus): timers/counters, ADC (analóg-digitális átalakító), UART/USART, SPI, I2C/TWI, Watchdog timer, külső és belső megszakítások, analóg komparátor, DMA (XMEGA-ban), és más speciális funkciók.
  • Programozás és hibakeresés: ISP (in-system programming), JTAG (egyes típusoknál), debugWIRE és támogatás az Atmel/Microchip fejlesztői eszközeivel.

AVR családok és tipikus felhasználás

  • tinyAVR: kis csomagok, kevés I/O, alacsony fogyasztás — egyszerű alkalmazásokhoz.
  • megaAVR: középkategóriás, sok I/O és periféria — a legismertebb család (például az ATmega328, amely az Arduino Uno alapja).
  • XMEGA: fejlettebb funkciók, nagyobb sebesség és periféria-tartalom, gyakran ipari alkalmazásokhoz.

Eszközök és fejlesztői környezet

Népszerű fejlesztőeszközök: az open-source avr-gcc toolchain (fordító, bináris eszközök), avrdude programozó eszköz, valamint az Atmel/Microchip által kínált Microchip Studio (korábban Atmel Studio). Az Arduino platform nagyban hozzájárult az AVR-ek széles körű elterjedéséhez a hobbi- és oktatói közösségben.

Összegzés

Az AVR architektúra egyszerű, hatékony és könnyen használható megoldást nyújt beágyazott rendszerekhez: gyors regiszteralapú utasításvégrehajtás, beépített flash és perifériák, valamint széles választék különböző teljesítmény- és I/O igényekhez. Éppen ezért az AVR-ek népszerűek mind az ipari, mind a hobbi projektekben.