Мікроконтролери AVR. Основи програмування. Архітектура AVR мікроконтролерів, з чого складається мікроконтролер

АРХІТЕКТУРА AVR

Умовні позначення:

    Flash ROM – обсяг енергонезалежної пам'яті програм (у кілобайтах);

    EEPROM – обсяг енергонезалежної пам'яті даних (у байтах);

    RAM - обсяг статичної пам'яті даних(У байтах);

    External RAM - можливість підключення до мікроконтролера додаткової мікросхеми зовнішньої статичної пам'ятіданих (у кілобайтах);

    ISP – можливість програмування мікроконтролера в системі (на цільовій платі) при основній напрузі живлення;

    SPM – функція самопрограмування Flash ROM пам'ятімікроконтролера у системі без участі зовнішнього програматора;

    JTAG – вбудований JTAG – інтерфейс;

    I/O (pins) - максимальна кількістьдоступних ліній введення/виведення;

    Timer(s) 8/16 bit - кількість та розрядність таймерів/лічильників;

    USI – універсальний комунікаційний інтерфейс;

    AC – аналоговий компаратор;

    ADC (channels) – кількість каналів аналого-цифрового перетворення;

    Internal RC - наявність внутрішнього RC-ланцюжка для автономної роботимікроконтролера (без зовнішнього джерела опорної частоти);

    WDT – сторожовий таймер;

    BDC - апаратний програмований блок захисту від збоїв при раптовому (у тому числі короткочасному) пропаданні напруги живлення мікроконтролера;

    UART - асинхронний послідовний приймач;

    SPI - синхронний трипровідний послідовний інтерфейс;

    I2C – двопровідний послідовний інтерфейс;

    RTC – система реального часу;

    PWM (channels) - кількість незалежних каналів широтно-імпульсної модуляції;

Всі AVR мають Flash-пам'ять програм, яка може бути завантажена як за допомогою звичайного програматора, так і за допомогою SPI-інтерфейсу, зокрема безпосередньо на цільовій платі. Число циклів перезапису – не менше 1000. Останні версіїкристалів мають можливість самопрограмування. Це означає, що мікроконтролер здатний самостійно, без будь-якого зовнішнього програматора, змінювати вміст осередків пам'яті програм. Тобто нові AVR можуть змінювати алгоритми свого функціонування та програми, закладені в них, і далі працювати вже за зміненим алгоритмом або новою програмою. Наприклад, Ви можете написати і зберегти кілька робочих версій програми для конкретної програми в зовнішній енергонезалежній пам'яті (DataFlash, SEEPROM і т.п.), а потім у міру необхідності або реакції на якісь зовнішні або внутрішні логічні умови перевантажувати робочі програми в той же мікроконтролер AVR, не виймаючи його з друкованої плати. Для цього весь масив пам'яті програм ділиться на дві нерівні за обсягом області: блок завантажувача (програма, що управляє перезаписом Flash-пам'яті програм) і блок для розміщення робочого програмного коду, причому вільна пам'ять в області завантажувача може бути використана як додатковий простір для робочого коду . Програма - завантажувач створюється самим розробником і має бути запрограмована зовнішнім програматором.

Всі AVR мають також блок енергонезалежної пам'яті даних EEPROM, що електрично стирається. Цей тип пам'яті, доступний програмі мікроконтролера безпосередньо в її виконання, зручний для зберігання проміжних даних, різних констант, таблиць перекодувань, калібрувальних коефіцієнтів і т.п. EEPROM також може бути завантажена ззовні через SPI інтерфейс, так і за допомогою звичайного програматора. Число циклів перезапису - не менше 100000. Два програмовані біти секретності дозволяють захистити пам'ять програм та енергонезалежну пам'ять даних EEPROM від несанкціонованого зчитування. Внутрішня оперативна пам'ять SRAM є у всіх AVR сімейств "classic" та "mega" та в одного нового кристала сімейства "tiny" - ATtiny26/L. Для деяких мікроконтролерів можлива організація підключення зовнішньої пам'яті даних до 64К.

Внутрішній тактовий генератор AVR може запускатися від кількох джерел опорної частоти (зовнішній генератор, зовнішній кварцовий резонатор, внутрішній або зовнішній RC-ланцюжок). Оскільки AVR-мікроконтролери повністю статичні, мінімальна допустима частота нічим не обмежена (до покрокового режиму). Максимальна робоча частота визначається конкретним типом мікроконтролера. Цікаву апаратну особливість має мікроконтролер ATtiny15L. Він містить блок PLL для апаратного множення основний тактової частотиу 16 разів. При номінальному значенніостанньої 1,6 МГц отримувана допоміжна периферійна частота дорівнює 25,6 МГц. Ця частота може бути джерелом одного з таймерів/лічильників мікроконтролера, значно підвищуючи тимчасове дозвіл його роботи.

Сторожовий (WATCHDOG) таймер призначений для захисту мікроконтролера від збоїв у процесі роботи. Він має власний RC-генератор, що працює на частоті 1 МГц. Ця частота є наближеною і залежить насамперед від величини напруги живлення мікроконтролера та від температури. WATCHDOG-таймер забезпечений своїм власним дільником вхідної частоти з програмованим коефіцієнтом поділу, що дозволяє підлаштовувати часовий інтервал переповнення таймера та скидання мікроконтролера. WATCHDOG-таймер може бути відключений програмним чином під час роботи мікроконтролера як у активному режимі, так і в будь-якому режимі зниженого енергоспоживання. В останньому випадку це призводить до значного зниження споживаного струму.

Мікроконтролери AVR мають у своєму складі від 1 до 4 таймерів/лічильників загального призначення з розрядністю 8 або 16 біт, які можуть працювати і як таймери від внутрішнього джерелаопорної частоти, і як лічильники зовнішніх подій із зовнішнім тактуванням. Загальні риси всіх таймерів/лічильників такі.

    наявність програмованого розподільника вхідної частоти з різними градаціями поділу. Відмінною рисою є можливість роботи таймерів/лічильників на основній тактовій частоті мікроконтролера без попереднього її зниження, що значно підвищує точність генерації часових інтервалів системи;

    незалежне функціонування від режиму роботи процесорного ядра мікроконтролера (тобто вони можуть бути як лічені, так і завантажені новим значенням у будь-який час);

    можливість роботи або від внутрішнього джерела опорної частоти, або як лічильник подій. Верхній частотний поріг визначено у разі як половина основний тактової частоти мікроконтролера. Вибір перепаду зовнішнього джерела (фронт чи зріз) програмується користувачем;

    наявність різних векторів переривань для різних подій (переповнення, захоплення, порівняння).

Система реального часу (RTC) реалізована у всіх мікроконтролерах сімейства "mega" та у двох кристалах сімейства "classic" - AT90(L)S8535. Таймер/лічильник RTC має власний предделитель, який може бути програмним способом підключений або до основного внутрішнього джерела тактової частоти мікроконтролера, або до додаткового джерела асинхронного опорної частоти (кварцовий резонатор або зовнішній синхросигнал). Для цієї мети зарезервовані два зовнішні виведення мікроконтролера. Внутрішній осцилятор, навантажений на лічильний вхід таймера/лічильника RTC, оптимізований для роботи із зовнішнім "вартовим" кварцовим резонатором 32,768 кГц.

Порти вводу/виводу AVR мають число незалежних ліній "Вхід/Вихід" від 3 до 53. Кожен розряд порту може бути запрограмований на введення або виведення інформації. Потужні вихідні драйвери забезпечують струмову здатність навантаження 20 мА на лінію порту ( струм, що втікає) при максимальному значенні 40 мА, що дозволяє, наприклад, безпосередньо підключати до мікроконтролера світлодіоди та біполярні транзистори. Загальне струмове навантаження на всі лінії одного порту не повинно перевищувати 80 мА (всі значення наведені для напруги живлення 5 В).

Цікава архітектурна особливість побудови портів введення/виводу у AVR полягає в тому, що для кожного фізичного виведення існує 3 біти контролю/управління, а не 2, як у поширених 8-розрядних мікроконтролерів (Intel, Microchip, Motorola і т.д.). Спрощена структурна схема елемента введення/виводу AVR - мікроконтролера наведена на рис. 1. Тут DDRx - біт контролю напряму передачі даних та прив'язки виведення до шини живлення (VCC), PORTx - біт прив'язки виводу до VCC і біт вихідних даних, PINx - біт для відображення логічного рівня сигналу на фізичному виведенні мікросхеми.

Звичайно виникає питання: а навіщо необхідні саме 3 біти? Справа в тому, що використання лише двох бітів контролю/управління породжує ряд проблем при операціях типу "читання-модифікація-запис". Наприклад, якщо мають місце дві послідовні операції "читання-модифікація-запис", то перший результат може бути втрачений безповоротно, якщо виведення порту працює на ємнісне навантаження і потрібен деякий час для стабілізації рівня сигналу зовнішньому висновкумікросхеми. Архітектура побудови портів введення/виведення AVR з трьома бітами контролю/управління дозволяє розробнику повністю контролювати процес введення/виводу. Якщо потрібно отримати реальне значення сигналу на фізичному виведенні мікроконтролера - читайте вміст біта за адресою PINx. Якщо потрібно оновити виходи – прочитайте PORTx засувку і потім модифікуйте дані. Це дозволяє уникнути необхідності мати копію вмісту порту в пам'яті для безпеки та підвищує швидкість роботи мікроконтролера при роботі із зовнішніми пристроями. Особливої ​​ваги набуває дана можливість AVR для реалізації систем, що працюють в умовах зовнішніх електричних перешкод.

Аналоговий компаратор входить до більшості мікроконтролерів AVR. Типова напруга усунення дорівнює 10 мВ, час затримки поширення становить 500 нс і залежить від напруги живлення мікроконтролера. Так, наприклад, при напрузі живлення 2,7 Вольт воно дорівнює 750 нс. Аналоговий компаратор має свій власний векторпереривання у загальній системі переривань мікроконтролера. При цьому тип перепаду, що викликає запит на переривання під час спрацювання компаратора, може бути запрограмований користувачем як фронт, зріз або перемикання. Логічний вихід компаратора може бути програмно підключений до входу одного з 16-розрядних таймерів/лічильників, що працює в режимі захоплення. Це дає можливість вимірювати тривалість аналогових сигналів і максимально просто реалізовувати АЦП двотактного інтегрування.

Аналого – цифровий перетворювач (АЦП) побудований за класичною схемою послідовних наближень із пристроєм вибірки/зберігання (УВХ). Кожен із аналогових входів може бути з'єднаний із входом ПВЗ через аналоговий мультиплексор. Пристрій вибірки/зберігання має власний підсилювач, що гарантує, що аналоговий сигнал, що вимірюється, буде стабільним протягом усього часу перетворення. Розрядність АЦП становить 10 біт при нормованій похибці +/- 2 розряди. АЦП може працювати у двох режимах - одноразове перетворення за будь-яким обраним каналом і послідовне циклічне опитування всіх каналів. Час перетворення вибирається програмно з допомогою встановлення коефіцієнта розподілу частоти спеціального предделителя, що до складу блоку АЦП. Воно становить 70...280 мкс для ATmega103 і 65...260 мкс для решти мікроконтролерів, що мають у своєму складі АЦП. Важливою особливістю аналого-цифрового перетворювачає функція придушення шуму під час перетворення. Користувач має можливість, виконавши короткий ряд програмних операцій, запустити АЦП тоді, коли центральний процесор перебуває у одному з режимів зниженого енергоспоживання. При цьому на точність перетворення не впливатимуть перешкоди, що виникають при роботі процесорного ядра.

AVR - мікроконтролери можуть бути переведені програмним шляхом в один із шести режимів зниженого енергоспоживання. Для різних сімейств AVR та різних мікроконтролерів у межах кожного сімейства змінюються кількість та поєднання доступних режимів зниженого енергоспоживання. Детальну інформацію можна знайти в оригінальній технічній документації Atmel Corp.

    Режим холостого ходу(IDLE), в якому припиняє роботу тільки процесор і фіксується вміст пам'яті даних, а внутрішній генератор синхросигналів, таймери, система переривань і таймер WATCHDOG продовжують функціонувати.

    Режим мікроспоживання (Power Down), у якому зберігається вміст регістрового файлу, але зупиняється внутрішній генератор синхросигналів. Вихід із Power Down можливий або по спільного скиданнямікроконтролера, або за сигналом (рівнем) від зовнішнього джерела переривання. При включеному WATCHDOG-таймер струм споживання в цьому режимі становить близько 60 ... 80 мкА, а при вимкненому - менше 1 мкА для всіх типів AVR. Вищенаведені значення справедливі для величини напруги живлення 5 В.

    Режим збереження енергії (Power Save), який реалізований лише у тих AVR, які мають у своєму складі систему реального часу. В основному режим Power Save ідентичний Power Down, але тут допускається незалежна робота додаткового таймера/лічильника RTC. Вихід з режиму Power Save можливий за переривання, викликаного або переповнення таймера/лічильника RTC, або спрацювання блоку порівняння цього лічильника. Струм споживання в цьому режимі становить 6...10 мкА при напрузі живлення 5 на частоті 32,768 кГц.

    Режим придушення шуму під час роботи аналого-цифрового перетворювача (ADC Noise Reduction). Як зазначалося, у цьому режимі зупиняється процесорне ядро, але дозволена робота АЦП, двопровідного інтерфейсу I2C та сторожового таймера.

    Основний режим очікування (Standby). Ідентичний режиму Power Down, але тут робота тактового генератора не припиняється. Це гарантує швидкий вихідмікроконтролера з режиму очікування лише за 6 тактів генератора.

    Додатковий режим очікування (Extended Standby). Ідентичний режиму Power Save, але тут робота тактового генератора також не припиняється. Це гарантує швидкий вихід мікроконтролера з режиму очікування лише за 6 тактів генератора.

Мікроконтролери AVR mega64, mega103 та mega128 мають ще одну примітну архітектурну особливість, що дозволяє значно знизити енергоспоживання всього кристала в цілому, коли в процесі роботи виникають вимушені паузи очікування. В цьому випадку доцільно зменшити струм споживання центрального процесора і периферійних пристроїв як в активному режимі, так і в режимі холостого ходу, знизивши тактову основну частоту мікроконтролера. З цією метою на кристалі розміщений спеціальний предделитель, що дозволяє ділити основну тактову частоту ціле число діапазоні від 2 до 129. Включення/вимкнення цієї функції здійснюється однією короткою командою у програмі.

AVR функціонують у широкому діапазоні напруги живлення від 1,8 до 6,0 Вольт. Енергоспоживання в активному режимі залежить від величини напруги живлення, від частоти, на якій працює AVR та від конкретного типу мікроконтролера. Детальні специфікації зазвичай наводяться в оригінальній технічній документації Atmel Corp. Температурні діапазони роботи мікроконтролерів AVR - комерційний (0С...70С) та індустріальний (-40С...+85С). На жаль, корпорація Atmel не випускає та не планує випускати AVR для роботи в автомобільному (-40С...+125С) та військовому (-55С...+125С) температурних діапазонах.

Мал. 2: Структурна схема AVR.

З точки зору програміста AVR є 8-розрядним RISC мікроконтролером, що має швидкий Гарвардський процесор, пам'ять програм, пам'ять даних, порти вводу/виводу та різні інтерфейсні схеми. Структурна схема мікроконтролера наведено на рис. 2. Гарвардська архітектура AVR реалізує повний логічний і фізичний поділ як адресних просторів, а й інформаційних шин для звернення до пам'яті програм і пам'яті даних, причому способи адресації та доступу до цих масивів пам'яті також різні. Подібна побудова вже ближча до структури цифрових сигнальних процесорів та забезпечує суттєве підвищення продуктивності. Центральний процесор працює одночасно з пам'яттю програм, і з пам'яттю даних; розрядність шини пам'яті програм розширено до 16 біт. Наступним кроком на шляху збільшення швидкодії AVR є використання технології конвеєризації, внаслідок чого цикл "вибірка - виконання" команди помітно скорочено. Наприклад, у мікроконтролерів сімейства MCS51 коротка команда виконується за 12 тактів генератора (1 машинний цикл), протягом якого процесор послідовно зчитує код операції та виконує її. У PIC-контролерах фірми Microchip, де вже реалізовано конвеєр, коротка команда виконується протягом 8 періодів тактової частоти (2 машинні цикли). За цей час послідовно дешифрується та зчитується код операції, виконується команда, фіксується результат та одночасно зчитується код наступної операції (однорівневий конвеєр). Тому в потоці команд одна коротка команда реалізується за 4 періоди тактової частоти або за один машинний цикл. У мікроконтролерах AVR також використовується однорівневий конвеєр при зверненні до пам'яті програм і коротка команда в загальному потоці виконується, як і в PIC-контролерах, за машинний цикл. Головна ж відмінність полягає в тому, що цей цикл у AVR становить лише один період тактової частоти. Для порівняння, на рис. 3 наведено часові діаграми при виконанні типової команди для різних мікроконтролерних платформ.

Наступна відмінна рисаархітектури мікроконтролерів AVR – регістровий файл швидкого доступу, структурна схема якого показана на рис. 4. Кожен із 32-х регістрів загального призначеннядовжиною 1 байт безпосередньо пов'язаний з арифметико-логічним пристроєм (ALU) процесора. Іншими словами, в AVR існує 32 регістри - акумулятори (порівняйте, наприклад, з MCS51). Ця обставина дозволяє в поєднанні з конвеєрною обробкою виконувати одну операцію ALU за один машинний цикл. Так, два операнди витягуються з регістрового файлу, виконується команда і результат записується назад у регістровий файл протягом лише одного машинного циклу.

Мал. 3: Порівняльна характеристикадеяких мікропроцесорних платформ.

Шість із 32-х регістрів файлу можуть використовуватися як три 16-розрядні покажчика адреси при непрямій адресації даних. Один із цих покажчиків (Z Pointer) застосовується також для доступу до даних, записаних у пам'яті програм мікроконтролера. Використання трьох 16-бітних покажчиків (X, Y та Z Pointers) істотно підвищує швидкість пересилання даних під час роботи прикладної програми.

Мал. 4: Реєстровий файл.

Реєстровий файл займає молодші 32 байти у загальному адресному просторі SRAM AVR. Таке архітектурне рішення дозволяє отримувати доступ до швидкої "реєстрової" оперативної пам'ятімікроконтролера двома шляхами - безпосередньою адресацією в коді команди до будь-якого осередку та іншими способами адресації осередків SRAM. У технічній документації фірми Atmel ця корисна властивість зветься "швидке контекстне перемикання" і є ще однією відмінною особливістю архітектури AVR, що підвищує ефективність роботи мікроконтролера та його продуктивність. Особливо помітна дана перевага при реалізації процедур цілої 16-бітної арифметики, коли виключаються багаторазові пересилання між різними осередками пам'яті даних при обробці арифметичних операндів в ALU.

Система команд AVR дуже розвинена та налічує до 133 різних інструкцій. Конкретна кількість команд для кожного мікроконтролера того чи іншого сімейства AVR наведено в таблицях 1 - 2. Майже всі команди мають фіксовану довжину в одне слово (16 біт), що дозволяє в більшості випадків об'єднувати в одній команді код операції, і операнд(и) . Лише небагато команд мають розмір у 2 слова (32 біт) і відносяться до групи команд виклику процедури CALL, довгих переходів у межах всього адресного простору JMP, повернення з підпрограм RET та команд роботи з пам'яттю програм LPM. Розрізняють п'ять груп команд AVR: умовного розгалуження, безумовного розгалуження, арифметичні та логічні операції, команди пересилання даних, команди роботи з бітами. В останніх версіях кристалів AVR сімейства "mega" реалізовано функцію апаратного множення, що надає новим мікроконтролерам ще більше привабливості з погляду розробника.

За різноманітністю та кількістю реалізованих інструкцій AVR більшесхожі на CISC, ніж на RISC процесори. Наприклад, у PIC-контролерів система команд налічує до 75 різних інструкцій, а у MCS51 вона становить 111. Загалом, прогресивна RISC архітектура AVR у поєднанні з наявністю регістрового файлу та розширеної системи команд дозволяє в стислі термінистворювати працездатні програми з ефективним кодом як з компактності реалізації, і за швидкістю виконання.

Корпорація Atmel планує подальший розвиток перспективної лінії AVR – мікроконтролерів. Виняток становить лише сімейство "classic", розвиток якого не планується. Вважається, що це сімейство функціонально збалансоване та різноманітно представлене. У сімействі "tiny" анонсований дуже цікавий мікроконтролер - ATtiny26, що має у своєму складі блок SRAM ємністю 128 байт та модуль USI (Universal Serial Interface). Це означає, що той самий периферійний вузол зв'язку на кристалі може бути програмним чином налаштований для роботи в якості комунікаційних інтерфейсів SPI (Master/Slave) або I2C (Master/Slave). Додатково USI може бути запрограмований для роботи як напівдуплексний UART або 4/12 розрядного лічильника. Але найцікавіші рішення реалізовані в сімействі "mega", де анонсовано та розпочато серійний випускцілий ряд кристалів, які будуть випускатися за технологією 0,35 мкм. Обсяг Flash-пам'яті програм з функціями ISP та SPM у нових "mega" варіюватиметься від 8 до 128 кілобайт, а випускатимуться вони в корпусах MLF, DIP і TQFP з кількістю висновків від 32 до 64. Всі нові мікроконтролери сімейства "mega" будуть мати JTAG - інтерфейс (за винятком mega8), апаратний помножувач 8х8, що дає 16-розрядний результат, схему захисту від збоїв, двопровідний послідовний інтерфейс, аналого-цифровий перетворювач (за винятком ATmega162) та ряд інших апаратних особливостей (див. таблицю 3). Крім цього, вдвічі буде підвищено швидкість роботи всіх периферійних вузлів (SPI, PWM, UART та ін.), покращено роботу схеми тактування та спрощено доступ до зовнішньої пам'яті даних.

Поліпшена RISC (enhanced RISC) архітектура AVR-мікроконтролерів (рис. 2) поєднує у собі комплекс рішень, вкладених у підвищення швидкодії мікропроцесорного ядра AVR.

Арифметико-логічний пристрій (ALU), в якому виконуються всі обчислювальні операції, має доступ до 32 оперативних регістрів, об'єднаних в регістровий файл. Вибір вмісту регістрів, виконання операції та запис результату назад у регістровий файл виконуються за один машинний цикл. Для порівняння корисно згадати, що більшість мікроконтролерів, що вбудовуються, мають тільки один такий регістр, безпосередньо доступний ALU, - акумулятор, що вимагає включення в програму додаткових команд його завантаження і зчитування.

Основною ідеєю всіх RISC (Reduced Instruction Set Computer), як відомо, є збільшення швидкодії рахунок скорочення кількості операцій обміну з пам'яттю програм. Для цього кожну команду прагнуть вмістити в один осередок пам'яті програм. При обмеженій розрядності осередку пам'яті це неминуче призводить до скорочення набору команд мікропроцесора.

У AVR-мікроконтролерів відповідно до цього принципу практично всі команди (за винятком тих, у яких одним з операндів є 16-розрядна адреса) також упаковані в один осередок пам'яті програм. Але зробити це вдалося не за рахунок скорочення кількості команд процесора, а шляхом розширення осередку пам'яті програм до 16 розрядів. Таке рішення є причиною багатства системи команд AVR, порівняно з іншими RISC-мікроконтролерами.

Організація пам'яті AVR виконана за схемою Гарвардського типу, у якій розділені як адресні простору пам'яті програм і пам'яті даних, а й шини доступу до них.

Вся програмна пам'ять AVR-мікроконтролерів виконана по технології FLASHта розміщена на кристалі. Вона є послідовністю 16-розрядних осередків і має ємність від 512 слів до 64K слів залежно від типу кристала.

У FLASH-пам'ять, крім програми, можуть бути записані незмінні дані, які не змінюються під час функціонування мікропроцесорної системи. Це різні константи, таблиці знакогенераторів, таблиці лінеаризації датчиків тощо.

Перевагою технології FLASH є високий ступінь упаковки, а недоліком те, що вона не дозволяє прати окремі комірки. Тому завжди виконується повне очищення всієї пам'яті програм. При цьому для AVR гарантується щонайменше 1000 циклів перезапису FLASH-пам'яті.

Крім того, для зберігання даних AVR-мікроконтролери можуть мати, залежно від типу кристала, внутрішню (від 0 до 4K байт) та зовнішню (від 0 до 64 Кбайт) оперативну SRAM пам'ять та енергонезалежну внутрішню EEPROM пам'ять (від 0 до 4K байт) .

Поділ шин доступу (рис. 2) до FLASH пам'яті та SRAM пам'яті дає можливість мати шини даних для пам'яті даних та пам'яті програм різної розрядності і використовувати технологію конвеєризації. Конвеєризація полягає в тому, що під час виконання поточної команди програмний коднаступною вже вибирається з пам'яті та дешифрується.

Для порівняння пригадаємо, що у мікроконтролерів сімейства MCS-51 вибірка коду команди та її виконання здійснюються послідовно, що займає один машинний цикл, що триває 12 періодів кварцового резонатора.

У разі використання конвеєра наведену тривалість машинного циклу можна скоротити. Наприклад, у PIC-мікроконтролерів фірми Microchip за рахунок використання конвеєра вдалося зменшити тривалість машинного циклу до чотирьох періодів кварцового резонатора. Тривалість машинного циклу AVR становить один період кварцового резонатора. Таким чином, AVR здатні забезпечувати задану продуктивність при нижчій тактовій частоті. Саме ця особливість архітектури і дозволяє AVR-мікроконтролерам мати найкраще співвідношення енергоспоживання/продуктивність, оскільки споживання КМОП мікросхем, як відомо, визначається їхньою робочою частотою.

EEPROM блок пам'яті AVR, що електрично стирається, призначений для зберігання енергонезалежних даних, які можуть змінюватися безпосередньо на об'єкті. Це калібрувальні коефіцієнти, різні уставки, параметри конфігурації системи. EEPROM-пам'ять має меншу, в порівнянні з FLASH, ємність (до 4К байт), але при цьому допускає можливість побайтного перезапису осередків, що може відбуватися як під керуванням зовнішнього процесора, так і під керуванням власне AVR-мікроконтролера під час його роботи за програмою .

Як було сказано раніше, мікроконтролери AVR являють собою восьми розрядні RISC-мікроконтролери з Гарвардською архітектурою і зниженим енергоспоживанням. Набір команд, обмеженість якого властива RISC-архітектурам, проте незвичайно широкий (120 команд), проте при цьому збережено основну перевагу RISC-архітектур підвищена швидкодіята скорочена кількість операцій обміну з пам'яттю програм. Майже всі команди розміщуються в одному осередку програмної пам'ятіі виконуються за один такт синхросигналу. Доступ до пам'яті даних і пам'яті програм здійснюється за різними шинами (за власними шинами цих модулів), тому можна не тільки зробити різними розрядності цих шин, але й реалізувати паралельне виконання поточної команди та вибірку та дешифрацію наступної.

На рис. 2.6 представлена ​​структурна схема мікроконтролера АТ90S8515. Багато блоків за призначенням аналогічні розглянутим раніше блоків мікроконтролера і мають таке саме призначення. У пам'яті ЕСППЗУ (EEPROM) зберігаються дані, що рідко змінюються (калібрувальні константи і т. п.), Покажчик стекавикористовується для організації стека в деякій області пам'яті Апаратного Стека(SRAM). Мікроконтролер має 32 програмно доступних регістра загального призначення (РН),які об'єднані у регістровий файл. На відміну від раніше

розглянутого мікроконтролера тут АЛУ здатне виконувати операції над вмістом будь-якої пари РОН, тобто всі регістри безпосередньо доступні для АЛУ і регістр – акумулятор не потрібний. Регістр стану аналогічний розглянутому раніше регістру PSW і виконує самі функції.

Структура портів введення - виводу трохи відрізняється від попереднього мікроконтролера. Порт являє собою набір з восьми ліній. Кожна з восьми ліній будь-якого порту конфігурується як вхідна або вихідна індивідуально за допомогою слова, що завантажується в регістр напрямку передачі. Кожен біт цього слова визначає конфігурацію своєї лінії. Введені чи виведені дані надходять у регістр даних. Вхідні та вихідні сигнали проходять через буферні каскади (драйвери).

Послідовний SPI (Serial Peripheral Interface) периферійний канал застосовується як для програмування мікроконтролера в послідовному режимі, так і для обміну даними з периферійними пристроямиабо між мікроконтролерами, якщо вони працюють у системі. Протокол обміну для SPI передбачає роботу як або ведучого (master), чи веденого (slave).

Асинхронний послідовний інтерфейс між мікроконтролером та зовнішніми пристроями забезпечується розглянутим раніше блоком UART.

Крім цього в аналізованому мікроконтролер є аналоговий компаратор напруги, підключений до двох спеціально виділених ліній порту В. Компаратор дозволяє реалізовувати ряд досить необхідних функцій,


наприклад, служити формувачем при вимірі тривалості або частоти проходження імпульсів вхідного сигналу, служити елементом найпростішого АЦП зі зворотним інтегруванням і т.п.

Мал. 2.6. Структурна схема мікроконтролера AVR

Організація пам'яті та функціонування мікроконтролера AVR.

Згідно з Гарвардською архітектурою, адресні простори (АП) для пам'яті програм та пам'яті даних розділені. Пам'ять даних організована лінійно і має два адресні простори. У першому знаходяться адреси регістрової пам'яті та адреси статичного ЗП (SRAM). У другому розміщені адреси енергонезалежної

репрограмованої пам'яті (EEPROM). Крім того, можливе підключення до мікроконтролера зовнішнього ОЗП, для якого шини адреси та мультитиплексована шина адрес/даних організується за допомогою портів введення/виводу РАі РС. Лінії цих портів формують 16-розрядні адреси для роботи з зовнішньою пам'яттювеликих обсягів.

Розподіл адресного простору ілюструється на рис. 2.7.

У регістровій області пам'яті розміщені адреси регістрів загального призначення РОН (32 адреси) та регістрів вводу/виводу РВВ (64 адреси для адресації 64 байтів пам'яті). Відповідно, загальна ємність регістрової пам'яті становить 96 байтів. Для адрес статичної пам'яті відведено наступні 512 адрес. Підключення зовнішнього ОЗП, як зазначалося, може довести ємність до 64 Кбайт. Звернення до зовнішнього ОЗУ збільшує час виконання команди на 1-2 такти кожного оброблюваного байта.

У просторі РВВ розміщуються операнди, службові регістри мікроконтролера та регістри, що належать до зовнішнім пристроям. У тому числі 12 регістрів до роботи з портами вводу/вывода (до кожного порту передбачені регістр даних, регістр напрями даних і регістр висновків. Є також регістр – покажчик стека.

Енергонезалежна пам'ять EEPROM, розрахована на зберігання даних, що рідко змінюються, і має тривалі операції запису, що відрізняються особливим алгоритмом. Доступ до неї здійснюється у вигляді трьох регістрів РВВ.

Програми зберігаються у флеш-пам'яті, а її розрядність відповідає формату команд і становить два байти.

Підвищенню продуктивності мікроконтролера сприяє виконання багатьох команд за один такт. Така можливість – наслідок конвеєрної обробки

інформації та безпосереднього підключення АЛУ до всіх РОН. У нормальному режиміроботи конвеєра паралельно до виконання поточної команди відбувається вибірка і декодування наступної. При порушенні послідовного

прямування команд, наприклад при появі команди умовного переходу, у роботі конвеєра виникає розрив і час виконання команди збільшується до 2-4 тактів.

Початок виконання програми ініціюється сигналом скидання, після якого мікроконтролер звертається до адреси стартової програми.

Мал. 2.6. Адресні простори мікроконтролера AVR

У ході виконання програми мікроконтролер виконує команду за командою, доки не дійде до команди зупинки. Більшість мікропрограм побудована отже певний набір мікрокоманд виконується циклічно, т. е. необхідність у команді зупинки відпадає.

Усі безліч команд, що виконуються мікроконтролером, можна розбити на такі групи:

● команди пересилання даних;

● команди арифметичних зрушень;

● команди логічних операцій;

● команди операцій з бітами;

● команди передачі керування;

● команди керування системою.

Порівнюючи перелічені групи команд з розглянутими в попередньому розділі для CISC процесорів, можна відзначити їхню велику схожість. Специфічна група команд операцій із бітами містить команди установки і скидання заданого розряду у регістрі РОН чи РВВ. Для зручності програмування задіяним розрядам регістрів РВВ надаються символічні імена, визначення яких дається в спеціальному файлі, що підключається спочатку до програми.

Отже, камрад, перш ніж почнеш працювати з контролером, то непогано б тобі дізнатися що в нього всередині.
Тож дам тобі короткий лікнеппо архітектурі контролера AVR.

Основою будь-якого мікроконтролера є обчислювальне ядро. У всіх моделях AVR воно практично однакове, і це великий плюс. Саме єдність архітектури забезпечує легку переносимість коду.

Отже, що ж у нас в основі мікроконтролера, поглянь на діаграму:

Ядро складається, в першу чергу, з пам'яті програм (Flash Programm Memory) та Арифметико-логічного пристрою (ALU), блоку управління (на діаграмі не показаний) та програмного лічильника (Program Counter). Також є тактовий генератор, який задає імпульси щодо яких працюють блоки мікроконтролера. Тактовий генератор можна порівняти з маятником і собачкою в будильнику: маятник туди сюди, песик цокає по одному зубчику - шестерні крутяться. Встав собачка — встав увесь будильник.

При старті мікроконтролера значення програмного лічильника дорівнює 0000 - це адреса першої команди нашої flash ROM. Мікроконтролер вистачає звідти два байти (код команди та її аргументи) і віддає виконання в декодер команд (Instruction Decoder).

А подальша доля залежить від команди. Якщо це просто команда роботи з будь-якими діями, то вони будуть виконані, а на наступному такті значення програмного лічильника буде збільшено. наступної париосередків пам'яті буде взято ще два байти команди і також відправлено на виконання.

Все цікавіше стає, коли зустрічається команда переходу. В цьому випадку в Програмний лічильник завантажується адреса вказана в команді (абсолютний перехід) або його значення збільшується не на 1, а на стільки скільки потрібно і на наступному такті мікроконтролер візьме команду вже з нової адреси.

Декодер команд загребує команду та згодовує її логіці блоку управління, який вже штовхає всі інші блоки, змушуючи їх робити потрібні діїу потрібному порядку.

Вся математика та обробка виробляється за допомогою ALU. Це свого роду калькулятор. Він може складати, віднімати, порівнювати, зрушувати різними способамиіноді ділити і множити (це вважається круто, зустрічається рідко).

Як проміжні операнди використовуються 32 осередки. Оперативні регістризагального призначення РОН. Доступ до цих осередків найшвидший, а кількість операцій із їх вмістом найбагатша. У асемблері регістри ці називаються просто R0, R1, R2 … R31. Причому діляться вони на три групи:

Молодші R0..R15
Звичайні регістри загального призначення, але якісь неповноцінні. З ними не працює багато команд, наприклад, такі як завантаження безпосереднього числа. Тобто. не можна, наприклад, взяти та присвоїти регістру число. Зате можна скопіювати число з іншого регістру.

Старші R16..R31
Повноцінні регістри, які працюють із усіма командами без винятку.

Індексні R26…R31
Шість останніх регістрів з старшої групиособливі. У принципі, їх можна юзати і як звичайні регістри загального призначення. Але, крім цього, вони можуть утворювати регістрові пари X(R26:R27), Y(R28,R29), Z(R30:R31) які використовуються як покажчики під час роботи з пам'яттю.

ОЗУ
Окрім 32 регістрів у мікроконтролері є оперативна пам'ять. Правда не скрізь - у молодших сімействах AVR Tiny12 і Tiny11 оперативної пам'яті немає, так що доводиться крутитися в 32 осередках.

Оперативна пам'ять - це кілька сотень осередків пам'яті. Від 64 байт до 4кілобайт, залежно від моделі. У цих осередках можуть зберігатися будь-які дані, а доступом до них здійснюється через команди Load і Store.

Тобто не можна взяти, наприклад, і додати до комірки у пам'яті, скажімо, одиницю. Нам спочатку зробити операцію Load із ОЗП в РОН, потім у регістрі додати нашу одиницю і операцією Store зберегти її назад на згадку. Тільки так.

EEPROM
Довготривала пам'ять. Пам'ять, яка не пропадає після вимкнення живлення. Якщо Flash може містити лише код та константи, а писати в неї при виконанні нічого не можна (Це пам'ять Read Only), то в ЄЕПРОМ можна скільки завгодно писати та читати. Але як оперативність її особливо не повюзаєш. Справа в тому, що цикл запису в EEPROM триває дуже довго - мілісекунди. Читання теж не дуже якесь швидке. Та й число циклів перезапису всього 100 000, що дуже багато в масштабах роботи оперативної пам'яті. ЕЕПРОМ використовується для збереження будь-яких налаштувань, передустановок, зібраних даних та іншого барахла, що може знадобитися після включення живлення та в основному на читання. Ця пам'ять є не у всіх моделях AVR, але в переважній більшості.

Периферія
Периферія – це внутрішній фарш мікроконтролера. Те, що робить його таким універсальним. ALU, RAM, FLASH і Блок управління це як у комп'ютері Мати, Проц, Пам'ять, Гвинт - то без чого комп'ютер навіть не запуститься до ладу. То периферія це вже як сетевуха, видяха, звукова картата інші прибамбаси. Вони можуть бути різними, різного ступенякрутості та навароченості, а також комбінуватися в різному порядку.

Саме за наявності на кристалі тієї чи іншої периферії відбувається вибір мікроконтролера під завдання.

Периферії всякої придумано безліч, всього я напевно навіть не опишу. Але дам основний набір присутній майже у всіх AVR, а також в інших сучасних контролерах.

  • Порти введення висновку — без чого неможлива взаємодія контролера з зовнішнім світом. Саме порти забезпечують те саме «ніжкодригання», що управляє іншими елементами схеми. Захотіли отримати на виведенні одиницю, наказали відповідному порту — отримайте, розпишіться. Захотіли дізнатися який сигнал на вході? Запитали у відповідного порту – отримали. Майже всі висновки мікроконтролера можуть працювати як портів ввода-вывода.
  • UART/USART приймач послідовний порт. Працює за тим же асинхронним протоколом, як і стародавні діалапні модеми. Старий як світ, надійний та простий як кувалда. Підходить для зв'язку з комп'ютером та іншими контролерами.
  • Таймери/лічильники – завдання таймерів відраховувати тики. Сказав йому відрахувати 100 тактів процесора - він приступить і як долічить подасть сигнал. Їм же можна підраховувати тривалість вхідних сигналів, підраховувати кількість вхідних імпульсів Так багато чого вміє таймер, особливо в AVR. Докладний описфункцій таймера займає добрих три десятки сторінок у датасіті. При тому, що таймерів самих є кілька видів і фарш у них різний.
  • АЦП - аналоговий вхід. Є не всі мікроконтролери, але річ корисна. Дозволяє взяти та заміряти аналоговий сигнал. АЦП це своєрідний вольтметр.
  • I2C(TWI) інтерфейс - послідовна шина IIC. Через неї здійснюється зв'язок з іншими пристроями. На IIC можна організувати своєрідну локальну мережуз мікроконтролерів у межах одного пристрою.
  • SPI — ще один послідовний протокол, схожий на IIC, але не дозволяє організовувати мережі. Працює лише в режимі Майстер-Відомий. Зате дуже швидка.
  • Аналоговий компаратор - ще один аналоговий інтерфейс. Але, на відміну від АЦП, він не заміряє, а порівнює два аналогового сигналу, Видаючи результат А>B або A
  • JTAG/DebugWire — засіб налагодження, що дозволяє заглянути в мізки контролера за допомогою спеціального адаптера, наприклад такого, який вбудований у мою демоплату. Іноді без нього, як без рук.
  • PWM - ШИМ генератор. Взагалі, це не окремий блок, а додаткова функція таймера, але теж корисна. За допомогою ШІМ генератора легко задати аналоговий сигнал. Наприклад, змінювати яскравість світла світлодіода або швидкість обертання двигуна. Та мало куди його застосувати можна. Число каналів ШІМ різне від контролера до контролера.

Ще бувають вбудовані USB, Ethernet інтерфейси, годинник реального часу, контролери РК-дисплеїв. Та чого там тільки немає, моделей мікроконтролерів стільки, що задовбаєшся лише перераховувати.

Взаємодія ядра з периферією
Ядро одне на всіх, різна периферія. Спілкування з-поміж них відбувається через пам'ять. Тобто. у периферії є свої осередки пам'яті - регістри периферії. У кожного периферійного пристрою не по одній штуки. У цих регістрах перебувають біти зміни. Залежно від того, як ці біти виставлені в такому режимі і працює периферійний пристрій. У ці ж регістри потрібно записувати дані, які ми хочемо видати, наприклад, по послідовному порту, або зчитувати дані, які обробив АЦП. Для роботи з периферією є спеціальні команди IN та OUT для читання з периферії у регістр РОН та записи з регістру РОН у периферію відповідно.

Оскільки ядро ​​однакове, а периферія різна, то при перенесенні коду на іншу модель мікроконтролера треба лише підправити ці звернення, оскільки назва периферійних регістрів від моделі до моделі може трохи відрізнятися. Наприклад, якщо в контролері один приймач UART то регістр прийом даних називається UDR, а якщо два, то у нас є вже UDR0 і UDR1. Але, загалом, все прозоро та логічно. І, як правило, портування коду з одного МК на інший, навіть якщо він написаний на асемблері, не становить великої праці. Особливо, якщо він правильно написаний.

Як дізнатися, що є в конкретному мікроконтролері?
Для цього на кожен МК є даташит – технічна документація. І ось там, прямий на першій сторінці, написано що як і як. Ось тобі приклад, даташит на Мегу16 з моїм закадровим перекладом:) Жирним шрифтом позначені опції які я дивлюся в першу чергу, як найцікавіші для мене, решта, як правило, присутня по дефолту.

Features(Фічі!)
High-performance, Low-power AVR® 8-bit Microcontroller
(Понтова економічна архітектура AVR)

Advanced RISC Architecture
(просто офігенна річ для ризикових чуваків!)

– 131 Powerful Instructions – Most Single-clock Cycle Execution
(131 крута та швидка команда!)

– 32 x 8 General Purpose Working Registers
(32 восьми розрядних регістру - ті самі R0 ... R31)

- Fully Static Operation
(Повністю статичні операції, тобто тактова частота може бути хоч 1 імпульс на рік)

– Up to 16 MIPS Throughput at 16 MHz
(швидкість виконання до 16 мільйонів операцій на секунду!)

– On-chip 2-cycle Multiplier
(А числа вміємо множити за два такти! Це правда круто, народ!)

High Endurance Non-volatile Memory segments
– 16K Bytes of In-System Self-programmable Flash program memory
(пам'яті вистачить накодувати на 16кб коду)

- 512 Bytes EEPROM 8-bit
(і нажерти на віки 512 байт сміття в ЄЕПРОМ)

- 1K Byte Internal SRAM
(Оперативки 1кб, кому там 2Гігабайт не вистачає? Програмувати не вмієте! =) Тут і 64 байтів за очі вистачає. Пам'ятайте Білла Гейтса та його «640кб вистачить усім!» він знав про що говорив:)

– Write/Erase Cycles: 10,000 Flash/100,000 EEPROM Microcontroller
(перешивати флеш можна 10 тисяч разів, її пром 100 тисяч разів. Так що можеш не боятися експериментувати)

– Data retention: 20 років на 85°C/100 років на 25°C(1)
(Якщо законсервуєш свій будильник на AVR, то твоїх правнуків він ще й через 100 років порадує)

– Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
True Read-While-Write Operation
(підтримка бутлоадерів. Зручна річ дозволяє прошиватися без програматорів)

– Programming Lock for Software Security In-System
(якщо жадібний і розумний, то можеш закрити від сторонніх прошивку і фіг хто викраде твої секрети)

JTAG (IEEE std. 1149.1 Compliant) Interface
– Boundary-scan Capabilities Посилання на JTAG Standard Programmable
– Extensive On-chip Debug Support
– Programming of Flash, EEPROM, Fuses, і Lock Bits через JTAG Interface Flash
(Налагоджувальний інтерфейс JTAG та його фічі)

Peripheral Features
(А ось, власне і периферія пішла)

– Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
(два таймери 8ми розрядних, з купою різних режимів різних.

– Один 16-bit Timer/Counter with Separate Prescaler, Compare Mode, та Capture Mode ATmega16
(один 16-ти розрядний таймер лічильник, з купою всяких примочок та фішок)

– Real Time Counter with Separate Oscillator
(таймер може цокати від окремого генератора, зручно якщо хочеш зробити годинник)

– Four PWM Channels ATmega16L
(Чотири ШІМ каналу - на тих же таймерах)

- 8-channel, 10-bit ADC
(восьмиканальний 10-ти розрядний АЦП. Фічі його нижче)

8 Single-ended Channels
(можна заміряти по черзі відразу 8 різних напруг)

7 Differential Channels in TQFP Package Only
(7 диференціальних каналів. Правда тільки в корпусі TQFP тому що ніг у нього більше)

2 Differential Channels with Programmable Gain at 1x, 10x, or 200x
(Два диференціальних канали з програмованим посиленням)

– Byte-oriented Two-wire Serial Interface
(Підтримка IIC з апаратним кодуванням байтів)

– Programmable Serial USART
(Послідовний інтерфейс. Зручний для зв'язку з комп'ютером)

– Master/Slave SPI Serial Interface
(SPI інтерфейс, стане в нагоді)

– Programmable Watchdog Timer with Separate On-chip Oscillator
(Спец таймер захисту від зависань)

- On-chip Analog Comparator
(Той самий компаратор)

Special Microcontroller Features
(корисні свистоперделки)

– Power-on Reset and Programmable Brown-out Detection
(захист від косяків у роботі при зниженій напрузі ака батареї, що сіли)

– Internal Calibrated RC Oscillator
(А ще можна заощадити 20рублів на покупці зовнішнього кварцу. Він нафіг не потрібний! :) І це круто!)

– External and Internal Interrupt Sources
(Є зовнішні переривання. Дуже зручна річ)

- Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby
and Extended Standby
(Дофіга режимів енергозбереження)

I/O and Packages
– 32 Programmable I/O Lines
– 40-pin PDIP, 44-Lead TQFP, та 44-pad QFN/MLF

(Кількість корисних ніжок, тим самим вводів висновків)

Operating Voltages designs.
- 2.7 - 5.5V для ATmega16L
- 4.5 - 5.5V for ATmega16

(Напруга живлення. Пам'ятайте я говорив про низьковольтні серії — ось вони, у всій красі)

Speed ​​Grades
- 0 - 8 MHz for ATmega16L
- 0 - 16 MHz for ATmega16

(А це максимальні частоти для різних серій. Низьковольтні лажають. Втім, вони схильні до розгону)

Power Consumption @ 1 MHz, 3V, і 25°C для ATmega16L
– Active: 1.1 mA
- Idle Mode: 0.35 mA

1.1. Блок управління та синхронізації

Блок управління та синхронізації (Timing and Control) призначений для вироблення синхронізуючих та керуючих сигналів, що забезпечують координацію спільної роботи блоків ОЕОМ у всіх допустимих режимах її роботи. До складу блоку управління входять:

· пристрій формування часових інтервалів,

· логіка введення-виведення,

· регістр команд,

· регістр управління споживанням електроенергії,

· дешифратор команд, логіка управління ЕОМ.

Пристрій формування часових інтервалівпризначено для формування та видачі внутрішніх синхросигналів фаз, тактів та циклів. Кількість машинних циклів визначає тривалість виконання команд. Практично всі команди ОЕОМ виконуються за один або два машинні цикли, крім команд множення та поділу, тривалість виконання яких становить чотири машинні цикли. Позначимо частоту генератора, що задає через F р. Тоді тривалість машинного циклу дорівнює 12/F г або становить 12 періодів сигналу генератора, що задає. Логіка введення - виводу призначена для прийому та видачі сигналів, що забезпечують обмін інформацією із зовнішніми пристроями через порти введення виведення Р0-Р3.

Регістр команд призначений для запису та зберігання 8-ми розрядного коду операції команди, що виконується. Код операції, за допомогою дешифратора команд та логіки управління ЕОМ, перетворюється на мікропрограму виконання команди.

Реєстр керування споживанням (PCON) дозволяє зупиняти роботу мікроконтролера для зменшення споживання електроенергії та зменшення рівня перешкод від мікроконтролера. Ще більшого зменшення споживання електроенергії і зменшення перешкод можна досягти, зупинивши генератор мікроконтролера, що задає. Цього можна досягти за допомогою перемикання біт регістру керування споживанням PCON. Для варіанта виготовлення за технологією n-МОП (серія 1816 або іноземних мікросхем, у назві яких у середині відсутня буква "c") регістр керування споживанням PCON містить тільки один біт, що керує швидкістю передачі послідовного порту SMOD, а біти керування споживанням електроенергією відсутні.

Арифметико-логічний пристрій (ALU)являє собою паралельний восьмирозрядний пристрій, що забезпечує виконання арифметичних та логічних операцій. АЛУ складається з:

· регістрів акумулятора, регістрів тимчасового зберігання TMP1 та TMP2,

· ПЗУ констант,

· суматора,

· додаткового регістру (реєстру В),

· акумулятора (ACC),

· регістру стану програм (PSW).

Реєстр акумулятора та регістри тимчасового зберігання- восьмирозрядні регістри, призначені для приймання та зберігання операндів на час виконання операцій над ними. Ці регістри програмно недоступні.

ПЗУ константзабезпечує вироблення коригуючого коду при подвійно-десятковому поданні даних, коду маски при бітових операціях та коду констант.

Паралельний восьмирозрядний суматорявляє собою схему комбінаційного типу з послідовним переносом, призначену для виконання арифметичних операцій складання, віднімання та логічних операцій складання, множення, нерівнозначності та тотожності.

Реєстр B- восьмирозрядний регістр, який використовується під час операцій множення та поділу. Для інших інструкцій може розглядатися як додатковий надоперативний регістр.

Акумулятор- восьмирозрядний регістр, призначений для прийому та зберігання результату, отриманого при виконанні арифметико-логічних операцій або операцій зсуву

Блок послідовного інтерфейсу та переривань (ПІП)призначений для організації введення - виведення послідовних потоків інформації та організації системи переривання програм. До складу блоку входять:

1. буфер ПІП,

2. логіка управління,

3. регістр управління,

4. буфер передавача,

5. буфер приймача,

6. приймач послідовного порту,

7. регістр пріоритетів переривань,

8. регістр дозволу переривань,

9. логіка обробки прапорів переривань та схема вироблення вектора.

Лічильник команд (Program Counter)призначений для формування поточної 16-розрядної адреси внутрішньої пам'яті програм та 8/16-розрядної адреси зовнішньої пам'яті програм. До складу лічильника команд входять 16-розрядні буфер РС, регістр РС та схема інкременту (збільшення вмісту на 1).

Пам'ять даних (RAM) призначена для тимчасового зберігання інформації, що використовується у процесі виконання програми.

Порти P0, P1, P2, P3 є квазидвунаправленными портами введення-виведення та призначені для забезпечення обміну інформацією ОЕОМ із зовнішніми пристроями, утворюючи 32 лінії введення-виведення.

Регістр стану програми (PSW)призначений для зберігання інформації про стан АЛП під час виконання програми.

Пам'ять програм (EPROM)призначена для зберігання програм і є постійним запам'ятовуючим пристроєм (ПЗУ). У різних мікросхемах застосовуються маскові, що стираються ультрафіолетовим випромінюванням або FLASH ПЗУ.

Реєстр покажчика даних (DPTR)призначений для зберігання 16-розрядної адреси зовнішньої пам'яті даних або пам'яті програм.

Покажчик стека (SP)є восьмирозрядний регістр, призначений для організації особливої ​​області пам'яті даних (стека), в якій можна тимчасово зберегти будь-яку комірку пам'яті.

3.2.1. Пам'ять програм (Flash ROM або Flash ПЗП)

Пам'ять програм призначена для зберігання послідовності команд, що управляють функціонуванням мікроконтролера, і має 16 бітну організацію. Всі AVR мають Flash-пам'ять програм, яка може бути різного розміру – від 1 до 256 КБайт. Її головна перевага в тому, що вона побудована на принципі електричної перепрограмованості, тобто допускає багаторазове стирання та запис інформації. Програма заноситься до Flash-пам'яті AVR як з допомогою звичайного програматора, і з допомогою SPI-интерфейса, зокрема безпосередньо на зібраній платі. Можливість внутрішньосхемного програмування (функція ISP) через комунікаційний інтерфейс SPI мають усі мікроконтролери AVR, крім Tiny11 і Tiny28.

Усі мікроконтролери сімейства Mega мають можливість самопрограмування, тобто самостійної зміни вмісту своєї пам'яті програм. Ця особливість дозволяє створювати на їх основі дуже гнучкі системи, алгоритм роботи яких змінюватиметься самим мікроконтролером залежно від будь-яких внутрішніх умов чи зовнішніх подій.

Гарантована кількість циклів перезапису Flash-пам'яті у мікроконтролерів AVR другого покоління становить щонайменше 10 тис. циклів при типовому значенні 100 тис. циклів. (В офіційній технічній документації Atmel Corp. вказується значення 10 тис. циклів.)

Аналого-цифровий перетворювач (АЦП) служить для отримання числового значення напруги, поданого на його вхід. Цей результат зберігається у регістрі даних АЦП. Який із висновків (пінів) мікроконтролера буде входом АЦП, визначається числом, занесеним у відповідний регістр.

Універсальний асинхронний або універсальний синхронно/асинхронний приймач (Universal Synchronous/Asynchronous Receiver and Transmitter - UART або USART) - зручний та простий послідовний інтерфейс для організації інформаційного каналу обміну мікроконтролера із зовнішнім світом. Здатний працювати в дуплексному режимі (одночасна передача та прийом даних). Він підтримує протокол стандарту RS-232, що забезпечує можливість зв'язку з персональним комп'ютером. (Для стикування МК та комп'ютера обов'язково знадобиться схема поєднання рівнів сигналів. Для цього існують спеціальні мікросхеми, наприклад MAX232.)

Висновки

Мікроконтролери розвиваються неймовірними темпами та їх можна зустріти у величезній кількості сучасних промислових та побутових приладів: верстатах, автомобілях, телефонах, телевізорах, холодильниках, пральних машинах... і навіть кавоварках. Серед виробників мікроконтролерів можна назвати Intel, Motorola, Hitachi, Microchip, Atmel, Philips, Texas Instruments, Infineon Technologies (колишня Siemens Semiconductor Group) та багато інших.

CISC та RISC
За кількістю команд мікропроцесори поділяють на CISC (Complex Instruction Set Computer) та RISC (Reduced Instruction Set Computer). Термін CISC означає складну систему команд, RISC - скорочену.
Ідея RISC – це ретельний підбір команд, які можна було б виконати за один такт. Т. о. спрощується апаратна реалізація процесора, скорочується кількість транзисторів, знижується споживана потужність і вартість.
Очевидно, що у випадку однієї CISC-команді повинні відповідати кілька RISC-команд. Однак, зазвичай виграш у швидкодії у RISC перекриває втрати. Так, найшвидша команда у 8051 виконується за 12 тактів. Навіть якщо для кожної CISC-інструкції потрібно виконати три RISC-інструкції, то в результаті RISC-архітектура буде в 4 рази продуктивнішою.
В даний час межа між RISC і CISC стирається. Наприклад, AVR мають 133 команди, що відповідає CISC, але більшість із них виконується за один такт, що є ознакою RISC. Тому основною ознакою RISC стало вважати виконання команд за один такт.


Серцем мікроконтролерів AVR є 8-бітне мікро процесорне ядроабо центральний процесорний пристрій (ЦПУ), побудований за принципами RISC-архітектури. Основою цього блоку є арифметико-логічний пристрій (АЛУ). За системним тактовим сигналом із пам'яті програм відповідно до вмісту лічильника команд (Program Counter - PC) вибирається чергова команда і виконується АЛУ. Під час вибору команди з пам'яті програм відбувається виконання попередньої обраної команди, що дозволяє досягти швидкодії 1 MIPS на 1 МГц.
АЛУ підключено до регістрів загального призначення РОН (General Purpose Registers – GPR). Реєстрів загального призначення всього 32 вони мають байтовий формат, тобто кожен з них складається з восьми біт. РОН знаходяться на початку адресного простору оперативної пам'яті, але фізично не є її частиною. Тому до них можна звертатися двома способами (як до регістрів і як пам'яті). Таке рішення є особливістю AVR та підвищує ефективність роботи та продуктивність мікроконтролера.
Відмінність між регістрами і оперативної пам'яттю у тому, що з регістрами можна робити будь-які операції (арифметичні, логічні, бітові), а оперативну пам'ять можна лише записувати дані з регістрів.
Пам'ять

Фоннейманівська та гарвардська архітектура
1945 р. американський математик Джон фон Нейман сформулював основні принципи роботи сучасних комп'ютерів. Їм було запропоновано архітектура, що отримала його ім'я (von Neumann architecture) і передбачає зберігання програм і даних у пам'яті (1946 р.). Сьогодні така архітектура найбільше характерна для мікропроцесорів, орієнтованих на використання в комп'ютерах. Прикладом можуть бути мікропроцесори сімейства х86.
Архітектура, що передбачає роздільне використання пам'яті програм та даних, зветься гарвардською (Harvard architecture). Гарвардська архітектура дозволяє центральному процесору працювати одночасно як із пам'яттю програм, так і з пам'яттю даних, що суттєво збільшує продуктивність.


У мікроконтролерах AVR реалізована Гарвардська архітектура, відповідно до якої розділені не лише адресні простори пам'яті програм та пам'яті даних, а й шини доступу до них. Кожна з областей пам'яті даних (оперативна пам'ять та EEPROM) також розташована у своєму адресному просторі.

Пам'ять програм (Flash ROM або Flash ПЗП)

Пам'ять програм призначена для зберігання послідовності команд, що управляють функціонуванням мікроконтролера, і має 16 бітну організацію. Всі AVR мають Flash-пам'ять програм, яка може бути різного розміру – від 1 до 256 КБайт. Її головна перевага в тому, що вона побудована на принципі електричної перепрограмованості, тобто допускає багаторазове стирання та запис інформації. Програма заноситься до Flash-пам'яті AVR як з допомогою звичайного програматора, і з допомогою SPI-интерфейса, зокрема безпосередньо на зібраній платі. Можливість внутрішньосхемного програмування (функція ISP) через комунікаційний інтерфейс SPI мають усі мікроконтролери AVR, крім Tiny11 і Tiny28.
Усі мікроконтролери сімейства Mega мають можливість самопрограмування, тобто самостійної зміни вмісту своєї пам'яті програм. Ця особливість дозволяє створювати на їх основі дуже гнучкі системи, алгоритм роботи яких змінюватиметься самим мікроконтролером залежно від будь-яких внутрішніх умов чи зовнішніх подій.
Гарантована кількість циклів перезапису Flash-пам'яті у мікроконтролерів AVR другого покоління становить щонайменше 10 тис. циклів при типовому значенні 100 тис. циклів. (В офіційній технічній документації Atmel Corp. вказується значення 10 тис. циклів.)

Пам'ять даних

Пам'ять даних розділена на три частини: реєстрова пам'ять, оперативна пам'ять (ОЗУ - оперативний запам'ятовуючий пристрій або RAM) та енергонезалежна пам'ять (ЕСППЗУ або EEPROM).

Реєстрова пам'ять (РОН та РВВ)

Реєстрова пам'ять включає 32 регістри загального призначення (РВН або GPR), об'єднаних у файл, та службові регістри вводу/виводу (РВВ). І ті, й інші розташовані в адресному просторі ОЗП, але не є його частиною.
В області регістрів вводу/виводу розташовані різні службові регістри (реєстри управління мікроконтролером, регістри стану тощо), а також регістри управління периферійними пристроями, що входять до складу мікроконтролера. По суті, управління мікроконтролером полягає в управлінні цими регістрами.

Енергонезалежна пам'ять даних (EEPROM)

Для тривалого зберігання різної інформації, яка може змінюватися в процесі функціонування мікроконтролерної системи, використовується пам'ять EEPROM. Всі AVR мають блок енергонезалежної пам'яті даних EEPROM, що електрично перезаписується, від 64 Байт до 4 КБайт. Цей тип пам'яті, доступний програмі мікроконтролера безпосередньо в її виконання, зручний для зберігання проміжних даних, різних констант, коефіцієнтів, серійних номерів, ключів і т.п. EEPROM може бути завантажена ззовні як через інтерфейс SPI, так і за допомогою звичайного програматора. Число циклів стирання/запис – не менше 100 тис.

Оперативна пам'ять (ОЗУ чи RAM)

Внутрішня статична пам'ять Static RAM (SRAM) має байтовий формат і використовується для оперативного зберігання даних.
Розмір оперативної пам'яті може змінюватись у різних чіпів від 64 Байт до 4 КБайт. Число циклів читання і запису в RAM не обмежена, але при відключенні напруги живлення вся інформація втрачається.
Для деяких мікроконтролерів можлива організація підключення зовнішнього статичного ОЗУ обсягом до 64К.

Периферія

Периферія мікроконтролерів AVR включає: порти (від 3 до 48 ліній введення та виведення), підтримку зовнішніх переривань, таймери-лічильники, сторожовий таймер, аналогові компаратори, 10-розрядний 8-канальний АЦП, інтерфейси UART, JTAG і SPI, пристрій живлення, широтно-імпульсні модулятори.

Порти вводу/виводу (I/O)

Порти вводу/виводу AVR мають число незалежних ліній "вхід/вихід" від 3 до 53. Кожна лінія порту може бути запрограмована на вхід або вихід. Потужні вихідні драйвери забезпечують струмову здатність навантаження 20 мА на лінію порту (втікає струм) при максимальному значенні 40 мА, що дозволяє, наприклад, безпосередньо підключати до мікроконтролера світлодіоди і біполярні транзистори. Загальне струмове навантаження на всі лінії одного порту не повинно перевищувати 80 мА (всі значення наведені для напруги живлення 5 В).
Архітектурна особливість побудови портів вводу/виводу у AVR полягає в тому, що для кожного фізичного виведення (піну) існує 3 біти контролю/управління, а не 2, як у поширених 8-розрядних мікроконтролерів (Intel, Microchip, Motorola тощо). ). Це дозволяє уникнути необхідності мати копію вмісту порту в пам'яті для безпеки та підвищує швидкість роботи мікроконтролера при роботі із зовнішніми пристроями, особливо в умовах зовнішніх електричних перешкод.

Переривання (INTERRUPTS)

Система переривань - одне з найважливіших елементів микроконтроллера. Усі мікроконтролери AVR мають багаторівневу систему переривань. Переривання припиняє нормальний хід програми для виконання пріоритетного завдання, яке визначається внутрішньою або зовнішньою подією.
Для кожної такої події розробляється окрема програма, яку називають підпрограмою обробки запиту на переривання (для стислості - підпрограмою переривання) і розміщується в пам'яті програм.
У разі події, що викликає переривання, мікроконтролер зберігає вміст лічильника команд, перериває виконання центральним процесором поточної програми і переходить до виконання підпрограми обробки переривання.
Після виконання підпрограми переривання здійснюється відновлення попередньо збереженого лічильника команд і процесор повертається до виконання перерваної програми.
Для кожної події можна встановити пріоритет. Поняття пріоритет означає, що підпрограма переривання, що виконується, може бути перервана іншою подією тільки за умови, що вона має більш високий пріоритет, ніж поточна. В іншому випадку центральний процесор перейде до обробки нової події лише після закінчення попередньої обробки.

Таймери/лічильники (TIMER/COUNTERS)

Мікроконтролери AVR мають у своєму складі від 1 до 4 таймерів/лічильників з розрядністю 8 або 16 біт, які можуть працювати як таймери від внутрішнього джерела тактової частоти, і як лічильники зовнішніх подій.
Їх можна використовувати для точного формування часових інтервалів, підрахунку імпульсів на висновках мікроконтролера, формування послідовності імпульсів, тактування приймача послідовного каналу зв'язку. У режимі ШІМ (PWM) таймер/лічильник може бути широтно-імпульсним модулятором і використовується для генерування сигналу з програмованими частотою і шпаруватістю. Таймери/лічильники здатні виробляти запити переривань, перемикаючи процесор їх обслуговування по подіям і звільняючи його від необхідності періодичного опитування стану таймерів. Оскільки основне застосування мікроконтролери знаходять у системах реального часу, таймери/лічильники є одним із найважливіших елементів.

Сторожовий таймер (WDT)

Сторожовий таймер (WatchDog Timer) призначений для запобігання катастрофічним наслідкам від випадкових збоїв програми. Він має власний RC-генератор, що працює на частоті 1 МГц. Як і для основного внутрішнього RC-генератора значення 1 МГц є наближеним і залежить насамперед від величини напруги живлення мікроконтролера і від температури.
Ідея використання сторожового таймера гранично проста і полягає в регулярному його скиданні під управлінням програми або зовнішнього впливу до того, як закінчиться його витримка часу і не станеться скидання процесу. Якщо програма працює нормально, то команда скиду сторожового таймера повинна регулярно виконуватися, захищаючи поцесор від скидання. Якщо ж мікропроцесор випадково вийшов за межі програми (наприклад, від сильної перешкоди по ланцюгу живлення) або зациклився на якій-небудь ділянці програми, команда скидання сторожового таймера швидше за все не буде виконана протягом достатнього часу. що ціалізує всі реєстри і що приводить систему в робочий стан.

Аналоговий компаратор (AC)

Аналоговий компаратор (Analog Comparator) порівнює напруги двох висновках (пінах) микроконтроллера. Результатом порівняння буде логічне значення, яке можна прочитати з програми.
Вихід аналогового компаратора можна включити на переривання аналогового компаратора. Користувач може встановити спрацювання переривання по наростаючому або спадаючому фронті або перемикання.
Є у всіх сучасних AVR, крім Mega8515

Аналого-цифровий перетворювач (A/D CONVERTER)

Аналого-цифровий перетворювач (АЦП) служить для отримання числового значення напруги, поданого на його вхід. Цей результат зберігається у регістрі даних АЦП. Який із висновків (пінів) мікроконтролера буде входом АЦП, визначається числом, занесеним у відповідний регістр.

Універсальний послідовний приймач (UART або USART)

Універсальний асинхронний або універсальний синхронно/асинхронний приймач (Universal Synchronous/Asynchronous Receiver and Transmitter - UART або USART) - зручний та простий послідовний інтерфейс для організації інформаційного каналу обміну мікроконтролера із зовнішнім світом. Здатний працювати в дуплексному режимі (одночасна передача та прийом даних). Він підтримує протокол стандарту RS-232, що забезпечує можливість зв'язку з персональним комп'ютером. (Для стикування МК та комп'ютера обов'язково знадобиться схема поєднання рівнів сигналів. Для цього існують спеціальні мікросхеми, наприклад MAX232.)

Послідовний периферійний інтерфейс SPI

Послідовний периферійний трипровідний інтерфейс SPI (Serial Peripheral Interface) призначений для організації обміну даними між двома пристроями. З його допомогою може здійснюватися обмін даними між мікроконтролером та різними пристроями, такими як цифрові потенціометри, ЦАП/АЦП, FLASH-ПЗУ та ін. За допомогою цього інтерфейсу зручно проводити обмін даними між декількома мікроконтролерами AVR.
Крім того, через інтерфейс SPI може здійснюватись програмування мікроконтролера.

Двопровідний послідовний інтерфейс TWI

Двопровідний послідовний інтерфейс TWI (Two-wire Serial Interface) є повним аналогом базової версії інтерфейсу I2C (двопровідна двонаправлена ​​шина) фірми Philips. Цей інтерфейс дозволяє об'єднати до 128 різних пристроїв за допомогою двонаправленої шини, що складається з лінії тактового сигналу (SCL) і лінії даних (SDA).

Інтерфейс JTAG

Інтерфейс JTAG був розроблений групою провідних фахівців з проблем тестування електронних компонентів (Joint Test Action Group) та був зареєстрований як промисловий стандарт IEEE Std 1149.1-1990. Чотирьохпровідний інтерфейс JTAG використовується для тестування друкованих плат, внутрішньосхемного налагодження, програмування мікроконтролерів.
Багато мікроконтролерів сімейства Mega мають сумісний з IEEE Std 1149.1 інтерфейс JTAG або debugWIRE для вбудованого налагодження. Крім того, всі мікроконтролери Mega з флеш-пам'яттю ємністю 16 кбайт і більше можуть програмуватись через інтерфейс JTAG.

Тактовий генератор

Тактовий генератор виробляє імпульси для синхронізації всіх вузлів мікроконтролера. Внутрішній тактовий генератор AVR може запускатися від кількох джерел опорної частоти (зовнішній генератор, зовнішній кварцовий резонатор, внутрішній або зовнішній RC-ланцюжок). Мінімальна допустима частота нічим не обмежена (аж до покрокового режиму). Максимальна робоча частота визначається конкретним типом мікроконтролера і вказується Atmel у його характеристиках, хоча практично будь-який AVR-мікроконтролер із заявленою робочою частотою, наприклад, 10 МГц при кімнатній температурі легко може бути "розігнаний" до 12 МГц і вище.

Система реального часу (RTC)

RTC реалізована у всіх мікроконтролерах Mega та у двох кристалах "classic" - AT90(L)S8535. Таймер/лічильник RTC має окремий предделитель, який може бути програмним способом підключений або до джерела основної тактової частоти, або до додаткового джерела асинхронного опорної частоти (кварцовий резонатор або зовнішній синхросигнал). З цією метою зарезервовані два висновки мікросхеми. Внутрішній осцилятор оптимізовано для роботи із зовнішнім "вартовим" кварцовим резонатором 32,768 кГц.

живлення

AVR функціонують при напругах живлення від 1,8 до 6,0 Вольт. Струм споживання в активному режимі залежить від величини напруги живлення та частоти, на якій працює мікроконтролер, і становить менше 1 мА для 500 кГц,5...6 мА для 5 МГц та 8...9 мА для частоти 12 МГц.
AVR можуть бути переведені програмним шляхом в один із трьох режимів зниженого енергоспоживання.
Режим холостого ходу (IDLE).Припиняє роботу лише процесор і фіксується вміст пам'яті даних, а внутрішній генератор синхросигналів, таймери, система переривань і таймер продовжують функціонувати. Струм споживання не перевищує 2,5 мА на частоті 12 МГц.
Стоповий режим (POWER DOWN).Зберігається вміст реєстрового файлу, але зупиняється внутрішній генератор синхросигналів, і, отже, зупиняються всі функції, доки надійде сигнал зовнішнього переривання чи апаратного скидання. При включеному вартовому таймері струм споживання в цьому режимі становить близько 80 мкА, а при вимкненому - менше 1 мкА. (Всі наведені значення справедливі для напруги живлення 5).
Економічний режим (POWER SAVE)Продовжує працювати тільки генератор таймера, що забезпечує безпеку тимчасової бази. Всі інші функції вимкнено.

Скидання при зниженні напруги живлення (BOD)

Схема BOD (Brown-Out Detection$WinAVR = ($_GET["avr"]); if($WinAVR) include($WinAVR);?>) відстежує напругу джерела живлення. Якщо схема включена, то при зниженні живлення нижче за деяке значення вона переводить мікроконтролер у стан скидання. Коли напруга живлення знову збільшиться до граничного значення, запускається таймер затримки скидання. Після формування затримки внутрішній сигнал скидання знімається та відбувається запуск мікроконтролера.