Мікроконтролери AVR
Введення
Однокристальний мікроконтролери знаходять широкі застосування в найрізноманітніших сферах: від вимірювальних приладів, фотоапаратів та відеокамер, принтерів, сканерів та копіювальних апаратів до виробів електронних розваг і всілякої домашньої техніки.
З часу появи перших мікропроцесорів в 1970-х роках їх складність постійно зростала за рахунок появи нових апаратних рішень і додавання нових команд, призначених для вирішення нових завдань. Так поступово склалася архітектура, яка отримала згодом назву CISC (Complete Instruction Set Computers - комп'ютери із складним набором команд). В подальшому позначилося і знайшло активний розвиток ще один напрямок: архітектура RISC (Reduced Instruction Set Computers - комп'ютери із скороченим набором команд). Саме до цієї архітектурі відносяться мікроконтролери AVR від компанії Atmel і PIC від компанії Microchip, яким присвячена ця книга.
Основна перевага RISC-процесорів полягає в тому, що вони прості, виконують обмежений набір команд, і, як наслідок, дуже швидкодіючі. Це дозволяє знизити вартість і складність їх програмування.
Зворотною стороною RISC-архітектури стала необхідність створення додаткових команд на асемблері, які у CISC-пристроїв реалізовані в апаратній частині. Наприклад, замість того, щоб просто викликати команду ділення, яка характерна для пристроїв CISC, розробнику, що має справу з RISC-процесором, доводиться застосовувати кілька послідовних команд віднімання. Однак подібний недолік з лишком компенсується ціною та швидкістю роботи RISC-пристроїв. Крім того, якщо створювати програми на мові С, то подібні проблеми взагалі перестають мати якесь значення для розробника, оскільки вони вирішуються компілятором, який автоматично генерує весь бракуючий асемблерний код.
На зорі виникнення мікропроцесорів розробка програмного забезпечення відбувалася виключно на тому чи іншому мові асемблера, орієнтованому на конкретний пристрій. По суті, такі мови становили собою символьні мнемоніки відповідних машинних кодів, а переклад мнемоніки у машинний код виконувався транслятором. Однак головний недолік асемблерних мов полягає в тому, що кожен з них прив'язаний до конкретному типу пристроїв і логіці його роботи. Крім того, асемблер складний в освоєнні, що вимагає досить великих зусиль для його вивчення, які, до того ж, виявляються витраченими даремно, якщо згодом буде потрібно перейти на використання мікроконтролерів інших виробників.
Мова С, будучи мовою високого рівня, позбавлений подібних недоліків і може використовуватися для програмування будь-якого мікропроцесора, для якого є компілятор з мови С. У мові С всі низькорівневі операції, що виконуються комп'ютерами, представлені у вигляді абстрактних конструкцій, що дозволяють розробникам зосередитися на програмуванні однієї лише логіки, не піклуючись про машинному коді. Вивчивши мову С, можна легко переходити від одного сімейства мікроконтролерів до іншого, витрачаючи набагато менше часу на розробку.
1. Архітектура мікроконтролерів AVR і PIC
Загалом, всі мікроконтролери побудовані за однією схемою. Система управління, що складається з лічильника команд і схеми декодування, виконує зчитування та декодування команд з пам'яті програм, а операційне пристрій відповідає за виконання арифметичних і логічних операцій; інтерфейс вводу/виводу дозволяє обмінюватися даними з периферійними пристроями, і, нарешті, необхідно мати запам'ятовуючий пристрій для зберігання програм і даних (рис. 1.1).
Рис. 1.1. Узагальнена структура мікроконтролера
Будемо розглядати мікроконтролери в Загалом, не прив'язуючись до якогось конкретного типу мікроконтролерів AVR, тому нижче будуть розглянуті лише загальні для більшості мікроконтролерів особливості архітектури пам'яті, питання введення/виводу, обробки переривань, скидання і ін
Пам'ять мікроконтролерів AVR
У мікроконтролерах AVR пам'ять реалізована за Гарвардської архітектури, що передбачає розподіл пам'яті команд і даних. Це означає, що звернення до команд здійснюється незалежно від доступу до даних. Перевагою такої організації є підвищення швидкості доступу до пам'яті.
Пам'ять даних
Пам'ять даних призначена для запису/читання даних, використовуваних програмами. Є енергозалежною, то Тобто, при відключенні живлення мікроконтролера всі збережені в ній дані, будуть втрачені. У мікроконтролерах AVR пам'ять даних має більш розвинену структуру в порівнянні з мікроконтролерами PIC, що показано на рис. 2.1.
Тут і далі шістнадцяткові числа будуть представлені у формі, прийнятої в мові С: з префіксом 0х.
Рис. 2.1. Структура пам'яті даних в мікроконтролерах AVR і PIC
Область статичної пам'яті SRAM (Static Random Access Memory) позначена на рис. 2.1 пунктиром, оскільки використовується не всіма мікроконтролерами AVR (це відноситься як до внутрішньої, так і до зовнішньої SRAM). Її початкова адреса - 0x060, а верхній адресу - різний у різних пристроях.
У деяких мікроконтролерах AVR можна збільшувати простір пам'яті SRAM за допомогою підключення зовнішніх блоків пам'яті аж до 64 Кбайт, однак для цього доводиться пожертвувати портами А і С, які в цьому випадку застосовуються для передачі даних і адрес.
Регістри загального призначення
Область регістрів загального призначення (Робочих регістрів) призначена для тимчасового зберігання змінних і покажчиків, використовуваних процесором для виконання програм. В мікроконтролерах AVR вона складається з 32 восьмирозрядних регістрів (діапазон адрес 0x000 - 0x01F). У мікроконтролерах PIC регістри загального призначення також восьмирозрядних, однак їх кількість і діапазон адрес залежать від конкретного типу пристрою.
У програмах, написаних на мові С, безпосереднє звернення до регістрів загального призначення звичайно не потрібно, якщо тільки не використовуються фрагменти на мові асемблера.
Регістри спеціальних функцій мікроконтролерів PIC
Регістри спеціальних функцій використовуються в мікроконтролерах PIC для управління різними операціями. Як і у випадку з регістрами загального призначення, їх кількість і адресація відрізняються від пристрою до пристрою. У програмах, написаних на мові С, безпосереднє звернення до регістрів спеціальних функцій звичайно не потрібно, якщо тільки не використовуються фрагменти на мові асемблера.
Область вводу/виводу мікроконтролерів AVR
Область вводу/виводу мікроконтролерів AVR містить 64 регістра, що використовуються для управління або зберігання даних периферійних пристроїв. До кожного з цих регістрів можна звертатися за адресою вводу/виводу (починаючи з 0x000) або за адресою SRAM (в цьому випадку до адреси вводу/виводу слід додати 0x020). У програмах на мові С зазвичай використовуються умовні імена регістрів введення/виводу, а адреси мають значення тільки для програм на мові асемблера.
Імена, адреси введення/виводу і SRAM, а також короткий опис регістрів з області введення/виводу мікроконтролерів AVR представлені в табл. 2.1. При цьому слід зазначити, що в різних моделях мікроконтролерів деякі з перерахованих регістрів не використовуються, а адреси, не зазначені в табл. 2.1, зарезервовані компанією Atmel для використання в майбутньому.
Таблиця 2.1. Опис регістрів з області введення/виводу
Ім'я
регістра
Адреса вводу/виводу
Адреса SRAM
Опис
ACSR
0x08
|