AVR

]]
]]
**AVR** — сямейства васьмібітных мікракантролераў фірмы Atmel. Год распрацоўкі — 1996.

## Гісторыя стварэння архітэктуры AVR 
Ідэя распрацоўкі новага RISC-ядра належыць двум студэнтам [Нарвежскі ўніверсітэт тэхнічных і прыродазнаўчых навук|Нарвежскага ўніверсітэта тэхнічных і прыродазнаўчых навук] (NTNU) з горада Тронхейм — Альфу Богэну (Alf-Egil Bogen) і Вэгарду Уолэну (Vegard Wollan). У 1995 годзе Богэн і Уолэн вырашылі прапанаваць амерыканскай карпарацыі Atmel, якая была вядома сваімі чыпамі з Flash-памяццю, выпускаць новы 8-бітны RISC-мікракантролер і абсталяваць яго Flash-памяццю для праграм на адзіным крышталі з вылічальным ядром.

Ідэя была ўхвалена Atmel, і было прынята рашэнне неадкладна інвеставаць у гэтую распрацоўку. Пад канец 1996 года быў выпушчаны прататып AT90S1200, а ў другой палове 1997 г. карпарацыя Atmel распачала серыйную вытворчасць новага сямейства мікракантролераў, іх рэкламную і тэхнічную падтрымку.

Новае ядро было запатэнтавана і атрымала назву **AVR**. Існуе некалькі трактовак гэтай абрэвіятуры. Нехта сцвярджае, што гэта **A**dvanced **V**irtual **R**ISC, іншыя сцвярджаюць, што не абышлося тут без **A**lf Egil Bogen **V**egard Wollan **R**ISC.

## Апісанне архітэктуры 
Мікракантролеры AVR маюць гарвардскую архітэктуру (праграма і даныя знаходзяцца ў розных адрасных прасторах) і сістэму каманд, блізкую да ідэалогіі RISC. Працэсар AVR мае 32 8-бітныя рэгістры агульнага прызначэння, аб’яднаныя ў рэгістравы файл. У адрозненне ад «ідэальнага» RISC, рэгістры не абсалютна артаганальныя:
* Некаторыя каманды працуюць толькі з рэгістрамі r16…r31. Да іх адносяцца каманды, што працуюць з непасрэдным аперандам: ANDI/CBR, ORI/SBR, CPI, LDI, LDS (16-біт), STS (16-біт), SUBI, SBCI, а таксама SER і MULS;
* Каманды, што павялічваюць ці памяншаюць 16-бітнае значэнне (у тых мадэлях, дзе яны даступныя) з непасрэдным аперандам (ADIW, SBIW), працуюць толькі з адной з пар r25:r24, r27:r26 (X), r29:r28 (Y), ці r31:r30 (Z);
* Каманда капіявання пары рэгістраў (у тых мадэлях, дзе даступная) працуе толькі з суседнімі рэгістрамі, што пачынаюцца з няцотнага (r1:r0, r3:r2, …, r31:r30);
* Вынік множання (у тых мадэлях, дзе ёсць модуль множання) заўсёды змяшчаецца ў r1:r0. Таксама толькі гэтая пара выкарыстоўваецца ў якасці аперандаў для каманды самапраграмавання (дзе даступная);
* Некаторыя варыянты каманд множання прымаюць у якасці аргументаў толькі рэгістры з дыяпазону r16…r23 (FMUL, FMULS, FMULSU, MULSU).

## Сістэма каманд 
Сістэма каманд мікракантролераў AVR надзвычай развітая і налічвае ў розных мадэлях ад 90 да 133 разнастайных інструкцый.

Большасць каманд займае толькі 1 ячэйку памяці (16 біт).

Большасць каманд выконваецца за 1 такт.

Усё мноства каманд мікракантролераў AVR можна разбіць на некалькі груп:
* каманды лагічных аперацый;
* каманды арыфметычных аперацый і каманды зруху;
* каманды аперацый з бітамі;
* каманды перасылкі даных;
* каманды перадачы кіравання;
* каманды кіравання сістэмай.

Кіраванне перыферыйнымі прыладамі ажыццяўляецца праз адрасную прастору даных. Для злучнасці існуюць «скарочаныя каманды» IN/OUT.

## Сямейства мікракантролераў 
Стандартныя сямействы:
* tinyAVR (**ATtiny**xxx):
** Флэш-памяць да 16 Кб; SRAM да 512 байт; EEPROM да 512 байт;
** Колькасць ліній уводу-вываду 4-18 (агульная колькасць вывадаў 6-32);
** Абмежаваны набор перыферыйных прыладаў.
* megaAVR (**ATmega**xxx):
** Флэш-памяць да 256 Кб; SRAM да 16 Кб; EEPROM да 4 Кб;
** Колькасць ліній уводу-вываду 23-86 (агульная колькасць вывадаў 28-100);
** Апаратны множнік;
** Пашыраная сістэма каманд і перыферыйных прыладаў.
* XMEGA AVR (**ATxmega**xxx):
** Флэш-памяць да 384 Кб; SRAM да 32 Кб; EEPROM да 4 Кб;
** Чатырохканальны DMA-кантролер;
** Інавацыйная сістэма апрацоўкі падзей.

Як правіла, лічбы пасля прэфіксу пазначаюць аб’ём убудаванай flash-памяці (у Кб) і мадыфікацыю кантролера. А менавіта, максімальная ступень двойкі, што ідзе за прэфіксам, пазначае аб’ём памяці, а астатнія лічбы вызначаюць мадыфікацыю (напрыклад, ATmega128 — аб’ём памяці 128 КБ; ATmega168 — аб’ём памяці 16 КБ, мадыфікацыя 8; ATtiny44 і ATtiny45 — памяць 4 КБ, мадыфікацыя 4 і 5 адпаведна).

На аснове стандартных сямействаў выпускаюцца мікракантролеры, адаптаваныя пад пэўныя задачы:
* з убудаванымі інтэрфейсамі USB, CAN, кантролерам LCD;
* з убудаваным радыёперадатчыкам — серыі **ATA**хxxx, **ATAM**xxx;
* для кіравання электрарухавікамі — серыя **AT90PWM**xxxx;
* для аўтамабільнай электронікі;
* для асвятляльнай тэхнікі.

Акрамя ўзгаданых вышэй сямействаў, Atmel выпускае 32-разрадныя мікракантролеры сямейства AVR32, якое ўключае ў сябе падсямейства AT32UC3 (тактавая частата да 66 МГц) і AT32AP7000 (тактавая частата да 150 МГц).

### Версіі кантролераў 
* AT(tiny/mega/xmega)xxx — базавая версія.
* ATxxx**L** — версіі кантролераў, якія працуюць на паніжаным (Low) напружанні сілкавання (2,7 В).
* ATxxx**V** — версіі кантролераў, якія працуюць на нізкім напружанні сілкавання (1,8 В).
* ATxxx**P** — маласпажывальныя версіі (да 100 нА у рэжыме Power-down), выкарыстана тэхналогія *picoPower* (анансавана ў ліпені 2007), павывадна і функцыянальна сумяшчальныя з папярэднімі версіямі.
* ATxxx**A** — паменшаны спажываны ток, перакрываецца ўвесь дыяпазон тактавых частот і напружанняў сілкавання дзвюх папярэдніх версій (таксама ў некаторых мадэлях дададзены новыя магчымасці і новыя рэгістры, але захавана поўная сумяшчальнасць з папярэднімі версіямі). Мікракантролеры «А» і «не-А» звычайна маюць аднолькавую сігнатуру, што выклікае некаторыя цяжкасці, бо Fuse-bit’ы адрозніваюцца

Нумар мадэлі дапаўняецца індэксам, які паказвае варыянт выканання. Лічбы (8, 10, 16, 20) перад індэксам пазначаюць максімальную частату, на якой мікракантролер можа стабільна працаваць на нармальным для яго напружанні сілкавання.

Першая літара індэкса пазначае варыянт корпуса:

* АТxxx-**P** — корпус DIP
* АТxxx-**A** — корпус TQFP
* АТxxx-**J** — корпус PLCC
* АТxxx-**M** — корпус MLF
* АТxxx-**MA** — корпус UDFN/USON
* АТxxx-**C** — корпус CBGA
* АТxxx-**CK** — корпус LGA
* АТxxx-**S** — корпус EIAJ SOIC
* АТxxx-**SS** — вузкі корпус JEDEC SOIC
* АТxxx-**T** — корпус TSOP
* АТxxx-**TS** — корпус SOT-23 (ATtiny4/5/9/10)
* АТxxx-**X** — корпус TSSOP

Наступная літара пазначае тэмпературны дыяпазон і асаблівасці вырабу:

* АТxxx-x**C** — камерцыйны тэмпературны дыяпазон (0&nbsp;°C — 70&nbsp;°C)
* АТxxx-x**A** — тэмпературны дыяпазон −20&nbsp;°C — +85&nbsp;°C, з ужываннем бессвінцовага прыпою
* АТxxx-x**I** — індустрыяльны тэмпературны дыяпазон (-40&nbsp;°C — +85&nbsp;°C)
* АТxxx-x**U** — індустрыяльны тэмпературны дыяпазон (-40&nbsp;°C — +85&nbsp;°C), з ужываннем бессвінцовага прыпою
* АТxxx-x**H** — індустрыяльны тэмпературны дыяпазон (-40&nbsp;°C — +85&nbsp;°C), з ужываннем NiPdAu
* АТxxx-x**N** — пашыраны тэмпературны дыяпазон (-40&nbsp;°C — +105&nbsp;°C), з ужываннем бессвінцовага прыпою
* АТxxx-x**F** — пашыраны тэмпературны дыяпазон (-40&nbsp;°C — +125&nbsp;°C)
* АТxxx-x**Z** — аўтамабільны тэмпературны дыяпазон (-40&nbsp;°C — +125&nbsp;°C)
* АТxxx-x**D** — пашыраны аўтамабільны тэмпературны дыяпазон (-40&nbsp;°C — +150&nbsp;°C)

Апошняя літара **R** пазначае пакаванне ў стужкі (Tape & Reel) для аўтаматызаваных сістэм зборкі.

## Прылады ўводу-вываду МК 
МК AVR маюць развітую перыферыю:
* Да 86 шматфункцыйных, двухнапрамкавых GPIO портаў уводу-вываду. У залежнасці ад праграмна-наладжанай канфігурацыі рэгістраў могуць незалежна адзін ад аднаго працаваць у рэжыме «моцнага» драйвера, які выдае ці прымае (на «зямлю») ток да 40 мА, што дастаткова для далучэння святлодыёдных індыкатараў. Любы з вывадаў портаў можа быць канфігураваны на «ўвод» альбо ў вольным стане, альбо з ужываннем убудаванага падцягвальнага (на плюс) рэзістара.
* Да 3 вонкавых крыніц перапыненняў (паводле фронту, зрэзу, ці ўзроўню) і да 32 паводле змянення ўзроўню на ўваходзе.
* У якасці крыніцы тактавых імпульсаў можа быць абраны:
** керамічны альбо кварцавы рэзанатар (не ва ўсіх мадэлях);
** вонкавы тактавы сігнал;
** калібраваны ўнутраны RC-генератар (частата 1, 2, 4, 8 МГц, а для некаторых мадэляў ATtiny — таксама 4, 8, 6.4, 9.6 МГц і 128 кГц).
* Унутраная Флэш-памяць каманд да 256 Kб (не менш за 10 000 цыклаў перазапісу).
* Адладка праграм ажыццяўляецца з дапамогай інтэрфейсаў JTAG альбо debugWIRE:
** сігналы JTAG (TMS, TDI, TDO і TCK) мультыплексаваны на порт уводу-вываду. Рэжым працы — JTAG альбо порт — задаецца адпаведным бітам у рэгістры fuses. МК AVR пастаўляецца з уключаным інтэрфейсам JTAG.
* Унутраная памяць даных EEPROM да 4 Кб (ATmega/ATxmega) / 512 байт (ATtiny) (да 100 000 цыклаў перазапісу).
* Унутраная памяць SRAM да 32 Kб (ATxmega) / 16 Кб (ATmega) / 1 Кб (ATtiny) з часам доступу 2 такты.
* Вонкавая памяць аб’ёмам да 64 Кб (ATmega8515, ATmega162, ATmega640, ATmega641, ATmega1280, ATmega1281, ATmega2560, ATmega256).
* Таймеры з разраднасцю 8, 16 біт.
* ШІМ-мадулятар (PWM) 8-, 9-, 10-, 16-бітны.
* Аналагавыя кампаратары.
* АЛП (ADC) з дыферэнцыйнымі ўваходамі, разраднасць 8 (ATtiny) / 10 (ATtiny/ATmega) / 12(ATxmega) біт:
** праграмавальны каэфіцыент узмацнення перад АЛП 1, 10 і 200 (у дыферэнцыйным рэжыме);
** у якасці апорнага напружання могуць выступаць: напружанне сілкавання, вонкавае напружанне альбо ўнутранае апорнае напружанне 2,56 В / 1,1 В (у некаторых ATtiny).
* Разнастайныя паслядоўныя інтэрфейсы, у тым ліку:
** двухдротавы інтэрфейс TWI, сумяшчальны з I²C;
** універсальны сінхронна-асінхронны прыёмаперадатчык UART/USART;
** сінхронны паслядоўны порт Serial Peripheral Interface (SPI).
* USB серыя AT90USBxxxx.
* CAN серыя AT90CANxxx.
* LCD серыі ATmega169 і ATmega329.
* Датчыкі тэмпературы ATtiny25, ATtiny45, ATtiny85.
* Амаль усе (за выключэннем некаторых ранніх мадэляў ATtiny, у якіх перапраграмаванне выконваецца праз адмысловы інтэрфейс) падтрымліваюць унутрысхемнае праграмаванне (ISP) праз паслядоўны інтэрфейс SPI. Многія мікракантролеры падтрымліваюць альтэрнатыўнае паслядоўнае альбо паралельнае праграмаванне з выкарыстаннем высокага напружання — для выпадкаў, калі fuse-рэгістры былі наладжаны так, што звычайнае праграмаванне стало недаступным.
* Падтрымка самапраграмавання, пры якім асноўная праграма можа змяніць частку свайго коду.
* Падтрымка загрузкі асноўнай праграмы з дапамогай абароненай ад перазапісу падпраграмы (bootloader). Код асноўнай праграмы звычайна прымаецца праз адзін з портаў мікракантролера з выкарыстаннем аднаго са стандартных пратаколаў.
* Шэраг рэжымаў паменшанага энергаспажывання.

Не ўсе перыферыйныя прылады могуць быць уключаны праграмна. Біт у регістры fuses можа быць зменены толькі праграматарам.

## Сродкі распрацоўкі 
### Свабодныя 
* WinAVR — праграмны пакет пад Windows, які ўключае ў сябе кампілятар, асэмблер, кампаноўшчык і іншыя інструменты.
* Algorithm Builder — асяроддзе распрацоўкі праграмнага забеспячэння для мікракантролераў з архітэктурай AVR.
* Code::Blocks — кросплатформавае асяроддзе распрацоўкі.
* DDD — графічны інтэрфейс да avr-gdb.
* V-USB — праграмная рэалізацыя пратакола USB для мікракантролераў AVR.
* Avrdude — сродак для прашывання мікракантролераў.
* PonyProg — універсальны праграматар праз LPT-порт, COM-порт (падтрымліваецца і USB-эмулятар COM-порту).

### Уласніцкія 
* AVR Studio — бясплатнае IDE ад самой Atmel
* IAR AVR — камерцыйнае асяроддзе распрацоўкі для мікракантролераў AVR
* Bascom-avr — асяроддзе распрацоўкі, заснаванае на Basic-падобнай мове праграмавання.
* CodeVisionAVR — кампілятар Сі і праграматар — CVAVR, генератар пачатковага коду.
* Proteus — сімулятар электрычных контураў, кампанентаў, уключаючы разнастайныя МК і іншае перыферыйнае абсталяванне.

Таксама архітэктура AVR дазваляе ўжываць аперацыйныя сістэмы пры распрацоўцы праграм, напрыклад FreeRTOS, UOs, ChibiOS/RT.

## Гл. таксама 
* AVR32
* ARM7
* Intel 8051
* PIC
* MSP430
* Arduino

## спасылкі 
* Atmel AVR 8- and 32-bit Microcontrollers  на сайце кампаніі Atmel
* 

Катэгорыя:Мікракантролеры