Atmel kehitti AVR-mikrokontrolleriarkkitehtuurin vuonna 1996. Se perustuu Harvard-tyyppiseen arkkitehtuuriin, jossa ohjelma- ja datamuisti ovat erillisiä ja voivat toimia samanaikaisesti. AVR oli yksi ensimmäisistä mikro-ohjainperheistä, jotka käyttivät ohjelman tallentamiseen piirin sisäistä flash-muistia verrattuna monien sitä aikaisempien mikro-ohjainten kertakäyttöisesti ohjelmoitaviin ROM-, EPROM- tai EEPROM-muisteille. Flashin käyttö mahdollisti laitteiden helpon päivitettävyyden ja yleistyi nopeasti sulautetuissa sovelluksissa.
Historia ja nimen alkuperä
AVR-nimen katsotaan tulevan Atmelin alkuperäisten suunnittelijoiden Alf‑Egil Bogenin ja Vegard Wollanin nimikirjaimista (Alf and Vegard's RISC processor). Myöhemmin markkinointisyistä ja dokumentaatiossa on käytetty myös takakronyymiä Advanced Virtual RISC, mutta alkuperäinen nimi juontuu suunnittelijoista.
Arkkitehtuuri ja muistit
AVR on RISC-pohjainen mikro-ohjainperhe, joka käyttää erillisiä ohjelma- ja dataväyliä (Harvard-arkkitehtuuri). Ohjelmakoodi säilytetään sisäisessä flash-muistissa, data SRAMissa ja pysyväksi tallennukseksi käytetään tarvittaessa EEPROMia tai ulkoista muistia. Ohjeet ovat pääosin 16-bittisiä sanoja, mutta joukossa on myös 32-bittisiä käskyjä esimerkiksi monimutkaisemmille operaatioille.
Rekisterit ja ALU
Ytimessä on 32 yleiskäyttöistä 8‑bittistä rekisteriä (R0–R31), jotka ovat suoraan liitetty aritmetiikka-/logiikka‑yksikköön (ALU). Tämä rekisteritiedosto mahdollistaa sen, että useimmat kaksi-operandin käskyt voivat käyttää kahta rekisteriä suoraan ja suorittaa operaation yhdessä konesyklissä. Osa rekistereistä voidaan yhdistää pareja käyttämällä 16‑bittisiksi osoitin- tai laskentarekistereiksi (esim. X, Y, Z), mikä helpottaa muistiosoittimien käyttöä ja 16‑bittisten laskutoimitusten suorittamista.
Prosessorilla on myös erillisiä erikoisrekistereitä kuten status‑rekisteri (SREG), jolla ylläpidetään lippuja (esim. C-carry, Z-zero, N-negative, V-overflow, I-interrupt enable) ja joukko erityisiä ohjaus- ja väliaikaisrekistereitä (IO- ja SFR-alue).
Kellosyklit, pipelointi ja suorituskyky
Perinteisiin 8‑bittisiin arkkitehtuureihin verrattuna AVR:n etu on, että suurin osa käskyistä suoritetaan yhdellä kellojaksolla. AVR-ydin käyttää yksinkertaista kahden vaiheen putkistoa (fetch ja execute), joten seuraava käsky voidaan hakea samaan aikaan kun nykyinen suoritetaan. Verrattuna esimerkiksi klassiseen MCS‑51 (8051) -arkkitehtuuriin, jossa yksi konejakso vastaa usein 12 kellojaksoa ja useimmat käskyt vaativat yhden konejakson, AVR pystyy per‑kellosyklin suorituskyvyssä tarjoamaan merkittävän edun (teoriassa jopa noin 12× tehokkaampi saman kellotaajuuden perusteella, kun vertaillaan yhden käskyn suorittumista).
Käskykanta ja ominaisuudet
AVR:llä on laaja RISC-tyylinen käskykanta, joka sisältää aritmeettisia ja loogisia operaatioita, siirto- ja vertailukäskyjä, haarautumisia ja ehdollisia hyppyjä, sekä käskyjä I/O‑laitteiden, pinon ja muistinkäsittelyn hallintaan. Monet käskyt ovat 16‑bittisiä ja suorittuvat yhdellä kellojaksolla; monimutkaisemmat toiminnot, kuten 32‑bittiset laskut tai tietyt hyppykäskyt, voivat vaatia useamman kellojakson.
Periferia, virranhallinta ja ohjelmointi
AVR-perheet tarjoavat laajan valikoiman periferiakomponentteja: taimerit/pulssileveysmodulaattorit (PWM), A/D‑muunnin, UART, SPI, I²C (TWI), erilaisia viestintä‑ ja liitäntäominaisuuksia (joissain malleissa USB), sekä edistyneempiä ominaisuuksia XMEGA‑sarjassa kuten DMA ja paremmin konfiguroitavat ADC:t/DAC:t. Laitteet tukevat tyypillisesti ISP‑ohjelmointia (In-System Programming), JTAG- ja debugWIRE‑debuggausta sekä bootloader‑ratkaisuja.
Virranhallinta on huomioitu monipuolisesti: useita lepo‑ ja virransäästötiloja (Idle, ADC Noise Reduction, Power‑down, Power‑save, Standby) helpottavat energiatiiviiden sovellusten toteutusta.
Käyttökohteet ja kehitystyökalut
AVR‑mikrokontrollereita käytetään laajasti sekä harrastus- että kaupallisissa sovelluksissa — tunnettu esimerkki on Arduino‑alusta, joka perustuu ATmega‑sarjaan (esim. ATmega328P). Kehittäjätyökaluja ovat mm. Microchip Studio (ent. Atmel Studio), gcc‑pohjainen avr‑gcc, avrdude ja lukuisat kolmannen osapuolen kirjastot ja IDE:t. AVR tarjoaa helpon polun opetteluun, mutta samalla riittävät ominaisuudet moniin vaativiin sulautettuihin käyttökohteisiin.
Yhteenvetona: AVR yhdistää RISC‑periaatteet ja sisäisen flash‑muistin kätevyyden tehokkaaseen arkkitehtuuriin, jossa 32‑rekisterinen rekisteritiedosto, yksinkertainen pipelointi ja laaja periferiatuki tekevät siitä edelleen suositun valinnan pieniin ja keskisuuriin sulautettuihin projekteihin.

