ТОП 10:

Налаштування параметрів імітатора



ЗМІТ

AVR Studio. 2

ATmega128, ATmega128L 8-розрядний AVR-мікроконтролер з внутрішньосистемною програмованою флеш-пам'яттю ємністю 128 кбайт. 12

Лабораторна робота №1 «Освоєння середовища AVR Studio і способів відладки на елементарному прикладі». 14

Лабораторна робота №2 «Вивчення математичних і логічних операцій і їх вплив на біти-стану мікроконтролера». 20

Лабораторна робота №3 «Вивчення методів додавання і віднімання чотирьохбайтних чисел». 30

Лабораторна робота №4 «Програмування з допомогою підпрограм. Стек». 35

Лабораторна робота №5 «Вивчення роботи з пам’яттю даних». 47

Лабораторна робота №6 «Вивчення операцій порівняння і реалізація циклічних операцій». 66

Лабораторна робота №7 «Вивчення алгоритму множення двобайтинх знакових чисел». 71

Лабораторна робота №8 «Вивчення програмування паралельного порту вводу-виводу мікроконтролера AVR». 81

Лабораторна робота №9 «Вивчення програмування таймера мікроконтролера AVR». 89

Лабораторна робота №10 «Вивчення використання переривань мікроконтролера AVR». 118

Набір інструкцій. 128

 


AVR Studio

Загальні відомості

AVR Studio 4 - це інтегроване середовище розробки (IDE, Integrated Development Environment), яке дуже зручне для налагодження AVR-програм в операційних системах Windows 9x/Me/NT/2000/XP /. Це середовище пропонує інтерфейс програмного симулятора (імітатора) і внутрішньосхемного емулятора для восьмирозрядних мікроконтролерів AVR RISC. Крім того, AVR Studio підтримує набір розробника STK500, що дозволяє програмувати AVR-пристрої, а також новий вбудований емулятор JTAG. Емуляторів не є складовою частиною AVR-Studio, тому в методичних вказівках розглядається тільки програмний симулятор.

Після установки AVR Studio по замовчуванню на Робочому столі Windows з'явиться відповідний ярлик. У кожному разі, це середовище можна запустити по команді з меню Пуск ► Усі програми ► Atmel AVR Tools. При першому запуску AVR Studio на екрані з'явиться запрошення (малюнок 1).

Малюнок 1 - Вікно вітання AVR Studio 4

 

За допомогою цього вікна можна виконати одну з трьох операцій:

- створити новий проект "з нуля" - кнопка Create New Project;

- відкрити будь-який файл. cof або. hex з диска - кнопка Open;

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

Для прикладу, створимо новий проект. Для цього на екрані запрошення натиснемо кнопку Create New Project. В результаті буде запропоновано вибрати платформу розробки та налагодження програмного забезпечення (рис. 2). В даному випадку нас цікавить інтегрований симулятор AVR Simulator і мікроконтролер ATMEGA128.

Тепер можна натиснути Finish, щоб перейти до розробки та налагодження програми.

Для того щоб вікно привітання при наступних запусках AVR Studio не відображалося, в ньому слід скинути прапорець Show this dialog on open. У такому випадку всі операції по створенню і завантаженні проектів виконуються за допомогою команд меню File і Project, а вікно вибору емулятора і типу мікроконтролерів, відповідне малюнку 2, відкривається по команді меню Debug ► Select Platform and Device.

Малюнок 2 - Вибір емулятора і типу мікроконтролерів

 

Головними вікнами AVR Studio є вікно вихідного коду і Workspace (малюнок 3).

Малюнок 3 - Вікно AVR Studio

 

У вікні коду рядок, що підлягає виконанню перший, позначено жовтою стрілкою. Зміни слід вносити в середовищі Programmers Notepad, потім виконувати компіляцію і створення об'єктного файлу, а потім - перейти в AVR Studio. Якщо в AVR Studio було відкрито той же файл, то зовнішні зміни будуть розпізнані й на екрані з'явиться пропозиція автоматично оновити вміст вікна вихідного коду. Цю ж операцію можна виконати і вручну за допомогою кнопки панелі інструментів Reload Object File.

 

Вікно Workspace

Вікно Workspace, розташоване на малюнку 3 зліва від вікна вихідного коду надає доступ до 32-ох робочих регістрів, до параметрів процесора (лічильник команд, вказівник стеку, регістри подвійної довжини X, Y і Z, частота генератора та ін), до значень стека , а також портів вводу/виводу обраного для симуляції або емуляції мікроконтролера. Наприклад, можна відредагувати вміст будь-якого робочого регістра як до, так і в процесі виконання програми. Для цього слід вибрати необхідний елемент у вікні Workspace, двічі клацнути мишею на значенні в полі Value (малюнок 4) і ввести необхідне значення в діалоговому вікні Edit.

Малюнок 4 - Зміна значення в робочому регістрі 3

 

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

Особливий інтерес на етапі налагодження являє собою вітку параметрів процесора (малюнок 5). Представлені тут елементи дозволяють переглядати та змінювати вміст програмного лічильника, покажчика стека, лічильника циклів під час виконання програми, регістрів подвійної довжини X, Y і Z, а також частоту кварцового осцилятора і покази таймера відліку часу.

Малюнок 5 - Параметри процесора у вікні Workspace

 

Значення лічильника команд можна змінити за допомогою вікна, представленого раніше на рис. 5. При цьому відкриється вікно Disassembler з кодом програми на асемблері і поточним буде виділена команда з відповідним адресою (це ж вікно можна відкрити в будь-який момент часу, виконавши команду меню View ► Disassembler).

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

Самий нижній елемент у вікні Workspase дозволяє контролювати роботу пристроїв оду/виводу мікроконтролера, вибраного для емуляції (малюнок 6).

Приміром, за допомогою елемента PORTD ми можемо побачити програму в дії. Для цього достатньо запустити її на виконання командою меню Debug ► Auto Step (комбінація клавіш <Alt+F5>) або відповідною кнопкою панелі інструментів Debug.

Команда Auto Step відрізняється від команди Run (клавіша <F5>) тим, що в ході виконання програми після кожного кроку оновлюються вікна AVR Studio (у випадку команди Run - не оновлюються).

Для того щоб перервати виконання програми, слід виконати команду меню Debug ► Break (комбінація клавіш <Ctrl+F5>) або натиснути відповідну кнопку панелі інструментів Debug.

Малюнок 6 - Елементи контролю за роботою пристрою вводу/виводу мікроконтролера AVR

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

 

Вікна Memory

Вікно Memory дозволяє користувачеві при необхідності контролювати чи змінювати деяку область пам'яті мікроконтролера AVR, наприклад, пам'ять програм, пам'ять EEPROM, пам'ять даних, пам'ять вводу/виводу. Вікно Memory знаходиться в меню View (малюнок 7).

Малюнок 7

 

Одночасно можуть бути відкриті відразу кілька вікон Memory - для цього використовуються команди меню (малюнок 8).

Тип області пам'яті вибирають за допомогою списку, розташованого у верхньому лівому кутку вікна Memory. У прикладі на малюнку 8 для верхнього вікна була обрана пам'ять програм, а для нижнього - пам'ять даних.

Малюнок 8 - Два вікна Memory AVR-Studio

 

За допомогою кнопки 8/16, розташованої праворуч від розкривного списку, а також команд контекстного меню 1 Byte і 2 Byte користувач може перемикатися між режимами розбивки дампа пам'яті на одно-і двухбайтного фрагменти, а за допомогою кнопки abc - відобразити/приховати додаткову колонку з ASCII-значеннями відображеної області пам'яті. Поле Address служить для відображення та вводу адреси комірки пам'яті, на якій в даний момент встановлено курсор. Кількість стовпчиків із значеннями комірок пам'яті вибирається за допомогою списку Cols (якщо в цьому списку вибраний елемент Auto, то кількість колонок вибирається автоматично залежно від ширини вікна Memory).

Вміст комірки пам'яті у вікні Memory можна легко змінити. Введені значення розцінюються як шістнадцяткові числа, при цьому нове значення потрапляє в комірку пам'яті відразу ж після кожного натискання клавіші. Якщо це небажано (наприклад, у випадку застосування емулятора при доступі на запис до регістру UDR прийомопередатчика UART ініціюється нова передача, хоча в цьому випадку байт ще неповний), то нове значення можна альтернативно вводити в спеціальному діалоговому вікні, яке відкривається за подвійним клацанням миші на відповідній комірці пам'яті. У цьому випадку вводиться значення записується в комірку тільки тоді, коли у вікні Edit буде натиснута кнопка ОК (клавіша <Enter>).

Значення, які змінилися з моменту останньої операції відладки, відображаються червоним шрифтом. Адреси восьмирозрядних елементів пам'яті і ASCII-символи виділені сірим фоном, а адреси 16-розрядних елементів пам'яті - блакитним фоном.

 

Вікно Register

Вікно відкривається по відповідній команді меню View (або при натисканні комбінації клавіш <Alt+0>).

Малюнок 9

 

Вікно Register показує вміст 32-х робочих регістрів мікроконтролера, яке оновлюється після виконання кожної команди (малюнок 10).

Малюнок 10 - Вікно Register AVR Studio

 

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

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

 

Вікно Watch

Вікно відкривається по відповідній команді меню View (або при натисканні комбінації клавіш <Alt+l>), малюнок 11.

Малюнок 11

 

Вікно Watch (малюнок 12) служить для відображення типів, значень і адрес таких об'єктів як, наприклад, змінні в програмі на С або на Асемблері. Це вікно складається з чотирьох колонок. У першій зазначено ім'я об'єкта, за яким ведеться спостереження, в другій - тип об'єкта (Integer, unsigned Char і т.д.), у третій - поточне значення, а в четвертій - адреси об'єктів. користувач може додавати нові об'єкти у вікно Watch по команді контекстного меню Add Item або ж за командою контекстного меню Add to Watch вікна вихідного коду. В останньому випадку в список Watch буде додано елемент коду, на якому встановлений курсор.

Елементи вікна Watch можна видаляти по одному за допомогою команди контекстного меню Remove Selected Item або все відразу по команді контекстного меню Remove All Items.

Малюнок 12 – Вікно Watch середовища AVR Studio

 

Відладка програми

Під відладкою мається на увазі послідовне виконання програми з контролем вмісту регістрів мікроконтролера (перевірка на низькому рівні) і змінних (перевірка на програмному рівні). Для налагодження програм в AVR Studio використовують команди меню Debug і кнопки однойменної панелі інструментів.

Перш, ніж розглянути ці команди має сенс роз'яснити таке поняття як "точка переривання". Точка переривання (breakpoint) - це рядок вихідного коду, на якій робота програми припиняється. Таких точок (позначаються коричневим кружком ліворуч від рядка) може бути встановлено стільки ж, скільки ефективних рядків у програмі. Для установки/видалення точки переривання в поточному рядку служить команда меню Debug ► Toggle Breakpoint (клавіша <F9>) або відповідна кнопка панелі інструментів Debug. Для видалення всіх розставлених в програмі точок переривання служить команда меню Debug ► Remove Breakpoints або кнопка Clear all breakpoints панелі інструментів Debug. Для послідовного переходу від однієї точки переривання до іншої використовується команда меню Debug ► Next Breakpoint або комбінація клавіш <Ctrl+F9>.

Для переходу в режим відладки використовуються наступні команди меню

Debug (малюнок 13):

Малюнок 13 - Програми для переходу в режим відладки

 

1 Run, Auto Step - перехід в режим відладки відбувається, якщо зустрічається точка переривання;

2 Step Into (клавіша <F 11>) - виконує поточну команду із заходом в підпрограми (всі вікна оновлюються);

3 Step Over (клавіша <F10>) - виконує поточну команду без заходу в підпрограми (всі вікна оновлюються);

4 Step Out (комбінація клавіш <Shift+Fl 1>) - запускає програму і виконує її до тих пір, поки не зустрінеться закінчення поточної підпрограми; якщо хід виконання перебуває в області основної програми, то програма буде виконуватися до тих пір, поки не буде зупинена користувачем командою Break або не зустріне точку переривання;

5 Run To Cursor (комбінація клавіш <Ctrl+F10>) - запускає програму, що виконується до тих пір, поки не буде досягнута позиція курсору у вікні вихідного коду; якщо зустрічається точка зупинки, то виконання програми не зупиняється; якщо позиція курсору не досягається ніколи, то програма виконується до тих пір, поки не буде зупинена командою Break. Після виконання команди всі вікна оновлюються.

 

Короткий огляд

ATmega128 - малопотужний 8-розр. КМОП мікроконтролер, заснований на розширеній AVR RISC-архітектурі. За рахунок виконання більшості інструкцій за один машинний цикл ATmega128 досягає продуктивності 1 млн. операцій у секунду / МГц, що дозволяє проектувальникам систем оптимізувати співвідношення енергоспоживання і швидкодії

Ядро AVR поєднує багатий набір інструкцій з 32 універсальними робочими регістрами. Усі 32 регістра безпосередньо підключені до арифметико-логічного пристрою (АЛУ), який дозволяє вказати два різних регістра в одній інструкції і виконати її за один цикл. Дана архітектура володіє більш ефективним кодом за рахунок досягнення продуктивності в 10 разів вище в порівнянні зі звичайними CISC-мікроконтролерами.

ATmega128 містить такі елементи: 128 кбайт внутрішньосистемної програмованої флеш-пам'яті з підтримкою читання під час запису, 4 кбайт ЕСППЗУ, 4 кбайт статичного ОЗУ, 53 лінії універсального вводу-виводу, 32 універсальних робочих регістри, лічильник реального часу (RTC), чотири гнучких таймера-лічильника з режимами порівняння і ШИМ, 2 УСАПП, двухпроводной послідовний інтерфейс орієнтований на передачу байт, 8-канальний 10-розр. АЦП з опціональним диференціальним входом з програмованим коефіцієнтом підсилення, програмований сторожовий таймер з внутрішнім генератором, послідовний порт SPI, випробувальний інтерфейс JTAG сумісний зі стандартом IEEE 1149.1, який також використовується для доступу до вбудованої системи відладці і для програмування, а також шість програмно вибираних режимів зменшення потужності. Режим холостого ходу (Idle) зупиняє ЦПУ, але при цьому підтримуючи роботу статичного ОЗУ, таймерів-лічильників, SPI-порту і системи переривань. Режим вимкнення (Powerdown) дозволяє зберегти вміст регістрів, при зупиненому генераторі і виключенні вбудованих функцій до наступного переривання або апаратного скидання. В економічному режимі (Power-save) асинхронний таймер продовжує роботу, дозволяючи користувачеві зберегти функцію відліку часу в той час, коли інша частина контролера знаходиться в стані сну. Режим зниження шумів АЦП (ADC Noise Reduction) зупиняє ЦПУ і всі модулі введення-виведення, крім асинхронного таймера і АЦП для мінімізації імпульсних шумів у процесі перетворення АЦП. У черговому режимі (Standby) кварцовий / резонатора генератор продовжують роботу, а інша частина мікроконтролера знаходиться в режимі сну. Даний режим характеризується малою споживаною потужністю, але при цьому дозволяє досягти найшвидшого повернення в робочий режим. У розширеному черговому режимі (Extended Standby) основний генератор і асинхронний таймер продовжують працювати.

Мікроконтролер проводиться за технологією високощільної енергонезалежної пам'яті компанії Atmel. Вбудована внутрішньосистемної програмована флеш-пам'ять дозволяє перепрограмувати пам'ять програм безпосередньо усередині системи через послідовний інтерфейс SPI за допомогою простого програматора або за допомогою автономної програми в завантажувальному секторі. Завантажувальна програма може використовувати будь-який інтерфейс для завантаження прикладної програми у флеш-пам'ять. Програма в завантажувальному секторі продовжує роботу в процесі оновлення прикладної секції флеш-пам'яті, тим самим підтримуючи двухопераціонность: читання під час запису. За рахунок поєднання 8-розр. RISC ЦПУ з внутрішньосистемної самопрограмміруемой флеш-пам'яттю в одній мікросхемі ATmega128 є потужним микроконтроллером, що дозволяє досягти високого ступеня гнучкості й ефективної вартості при проектуванні більшості додатків вбудованого керування.

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


Ціль роботи

- вивчення AVR Studio

- вивчення принципів написання програм на мові асемблер

- вивчення найпростіших команд ATMEGA128

Програма виконання роботи

- Самостійно ознайомитися з методикою роботи в AVR Studio

- Скласти алгоритм програми

- Відлагодити програму в AVR Studio

- Самостійно перевірити виконання програми

- Підготувати звіт по лабораторній роботі

 

Ціль роботи

- вивчення математичних команд асемблера мікроконтролера AVR

- вивчення логічних команд асемблера мікроконтролера AVR

Програма виконання роботи

- Провести дослідження з допомогою AVR Studio виконання команд ADD, ADC, SUB, SBC, SUBI, SBCI, ADIW, SBIW

- З допомогою вікна Workspace процесора AVR Studio дослідити вплив команд на стани бітів-стану

- Виявити і дослідити подібність і відмінність пар команд ADD і ADC; SUB і SBC при встановленому/скинутому біті переносу С.

- З допомогою AVR Studio дослідити виконання команд ANDI, ORI, LSL, LSR

- На основі досліджень скласти алгоритм додавання і віднімання двобайтних цілих чисел.

Ціль роботи

- вивчення математичних методики додавання і віднімання чисел за розміром більших з розрядність мікроконтролера

- навчитися прогнозувати розрядність максимально можливого числа при додаванні/віднімання

Програма виконання роботи

- Об’явити дві константи A і B, розмір яких не перевищує чотири байти і одна з яких має бути гарантовано чотирибайтною величиною

- Вибрати достатню кількість регістрів для роботи і завантажити у них числа A і B (побайтно)

- Виконати додавання "

- Виконати віднімання .

- Порівняти побайтно, що

- Визначити дві мітки у програмі: у разі успішного виконання перевірки програма має перейти на мітку успіху, у разі помилкового виконання перевірки – перейти на мітку помилки

Ціль роботи

- вивчити методику використанні підпрограм

- ознайомитися з роботою стеку

- вивчити методику порівняння двох двобайтинх чисел

Програма виконання роботи

- Об’явити три константи A0, DELTA і LIMIT, розмір яких не перевищує двохбайтне число

- Написати підпрограму додавання попереднього результату значення DELTA

- Припинити додавання у тому випадку. коли результатом останнього числа буде трибайтне число, або значення буде більше-рівним значення LIMIT

Ціль роботи

- вивчити методики запису у SRAM

- вивчення непрямої адресації

- вивчення методів реалізації циклів

Програма виконання роботи

- Об’явити три однобайтні константи A0 (перший елемент арифметичної прогресії), D (різниця арифметичної прогресії) і N (кількість елементів арифметичної прогресії)

- Об’явити масив з N однобайтних елементів у SRAM мікроконтролера

- Об’явити змінну розміром у три байти у якій треба буде помістити суму арифметичної прогресії

Об’явити змінну розміром у один байт у якій треба буде помістити кількість елементів арифметичної прогресії, які будуть проініцізовані програмою

- Реалізувавши цикл, обнулити всі N елементів масиву

- Записати у масив елементи арифметичної прогресії користуючись такими правилами:

- першим елементом є A0

- наступні елементи формуються за правилом арифметичної прогресії

- паралельно підраховувати суму арифметичної прогресії

- умовою завершення формування елементів арифметичної прогресії і підрахунку її суми є:

- визначено N елементів арифметичної прогресії

- ще не визначено N елементів арифметичної прогресії, але наступний елемент арифметичної прогресії став двохбайтним числом

- ще не визначено N елементів арифметичної прогресії, але сума арифметичної прогресії стала трьохбайтним числом

- Записати у відповідну змінну суму K[17] елементів арифметичної прогресії

- Записати у відповідну змінну кількість елементів арифметичної

Ціль роботи

- вивчити методи реалізації циклів на мові асемблер для AVR-мікроконтролерів

- вивчити методи реалізації порівнянь на мові асемблер для AVR-мікроконтролерів

Програма виконання роботи

- реалізувати аналог циклу for з інкрементуванням параметру мови програмування C у асемблері для AVR мікроконтролерів

- реалізувати аналог циклу for з декрементуванням параметру мови програмування C у асемблері для AVR мікроконтролерів

- реалізувати аналог циклу for довільною зміною параметру мови програмування C у асемблері для AVR мікроконтролерів

- реалізувати аналог циклу for з використанням операторами continueі break мови програмування C у асемблері для AVR мікроконтролерів. Використати операції порівняння

- реалізувати аналог циклу while мови програмування C у асемблері для AVR мікроконтролерів

- реалізувати аналог циклу do-while мови програмування C у асемблері для AVR мікроконтролерів

 

Ціль роботи

- вивчити інструкції множення AVR-мікроконтролерів

- вивчити алгоритм множення двобайтних чисел з допомогою математики однобайтних чисел

- закріпити знання про відмінність між знаковими і без знаковими числами

Програма виконання роботи

- Реалізувати алгоритм множення двох знакових двобайтних чисел.

- Результат записати у оперативну пам'ять мікроконтролера

 

Ціль роботи

- вивчити принципів роботи з паралельною шиною AVR мікроконтролера

- закріпити знання попередніх лабораторних роботах

Програма виконання роботи

- Проініціалізувати потрібні порти мікроконтролера

- Прийняти вхідну інформацію з портів настроєних на прийом даних (Порт A і Порт B)

- Перемножити між собою вхідну інформацію

- Результат множення виставити на порти, які настроєні на вивід (Порт C і Порт D)

 

Ціль роботи

- вивчити принципів роботи з таймерами AVR мікроконтролера

- закріпити знання попередніх лабораторних роботах

Програма виконання роботи

- проініціалізувати таймер на фіксацію проміжку часу у 2 мс (період можна змінити)

- при фіксації вказаного періоду роботи скидати програмно цю подію

- у симуляторі переконатися , що період між подіями справді становить вказану величину (2 мс по замовчуванню)

 

Режими генерації сигналу

Значення біт COM01: 0 задає різні режими формування вихідного сигналу, які в свою чергу залежать від обраного режиму роботи таймера. Таймер-лічильник 0 може бути переведений в нормальний режим, в режим скидання таймера при збігу або в один з режимів з генерацією ШІМ-сигналів. Загальним для всіх режимів є невиконання будь-яких дій з виводом OC0 при виконанні умови порівняння, якщо обидва біта COM01, COM00 дорівнюють нулю.

Після установки біт COM01, COM00 вони вступають в силу тільки після першого збігу який слідує за цією установкою. Для режимів без ШІМ установки можуть бути негайно активізовані за допомогою стробуючого біту FOC0.

Режими роботи таймера-лічильника 0

Режим роботи таймера, у т.ч. поведінка таймера-лічильника і пов'язаного з ним виходу формувача сигналу, задається комбінацією біт, які задають режим роботи таймера (WGM01, WGM00) і режим формування вихідного сигналу (COM01, COM00).. При цьому біти завдання режиму формування вихідного сигналу не впливають на алгоритм рахунку, тому що алгоритм рахунку залежить тільки від стану біт задання режиму роботи таймера. В режимах з ШІМ біти COM01, COM00 дозволяють включити/відключити інверсію на генеруючому ШІМ-виході (тобто вибрати ШІМ з інверсією або ШІМ без інверсії). Для режимів без ШІМ біти COM01: 0 визначають яку дію необхідно виконати при виконанні умови порівняння: скинути, встановити або інвертувати вихід.

Нормальний режим роботи

Найпростішим режимом роботи є нормальний режим (WGM01, WGM00 = 0b00). В даному режимі лічильник працює як додаючий (інкреметований), при цьому скид лічильника не виконується. Переповнення лічильника відбувається при переході через максимальне 8-розр.. число (верхня межа = 0xFF) до нижньої межі лічби (0x00). У нормальному режимі роботи мітка переповнення таймера-лічильника TOV0 буде встановлений на тому ж такті синхронізації, коли TCNT0 прийме нульове значення. Фактично, мітка переповнення TOV0 є дев'ятим бітом таймера-лічильника за тим винятком, що він тільки встановлюється і не скидається. Однак програмно ця властивість може бути використана для підвищення роздільної здатності таймера, якщо використовувати переривання по переповненню таймера, при виникненні якого мітка TOV0 скидається автоматично. Для нормального режиму роботи не існує яких-небудь особливих ситуацій пов'язаних із записом нового стану лічильника, коли потрібно було б врахувати запобіжні заходи.

Блок порівняння може використовуватися для генерації переривань. Не рекомендується використовувати вихід OC0 для генерації сигналів в нормальному режимі роботи, тому що в в цьому випадку буде витрачена значна частина процесорного часу.

Режим скидання таймера при збігу (CTC)

В режимі СТС (WGM01, WGM00 = 0b10) регістр OCR0 використовується для задання роздільної здатності лічильника. Якщо заданий режим CTC і значення лічильника (TCNT0) збігається зі значенням регістру OCR0, то лічильник обнулюється (TCNT0 = 0). Таким чином, OCR0 задає вершину лічби лічильника, а, отже, і його роздільну здатність. В даному режимі забезпечується більш широкий діапазон регулювання частоти генерованих прямокутних імпульсів. Він також спрощує роботу лічильника зовнішніх подій.

Тимчасова діаграма для режиму СТС показана на рисунку. Значення лічильника (TCNT0) інкрементується до тих пір, поки воно не стане рівним значенню в OCR0, після чого лічильник (TCNT0) обнулюється.

За допомогою мітки OCF0 переривання може генеруватися кожного разу, коли лічильник досягає своєї верхньої межі лічби. Якщо робота переривання дозволена, то процедура обробки переривання може використовуватися для оновлення значення вершини лічби. Однак, задання значення вершини лічби близького до значення нижньої межі лічби, коли лічильник працює без дільника частоти або з малим значенням дільника частоти, необхідно виконувати з особливою обережністю, тому що в режимі СТС немає подвійної буферизації. Якщо значення, записане в OCR0, менше поточного значення TCNT0, то скидання лічильника за умовою збігу настане, коли він досягне максимального значення (0xFF), потім перейде в початковий стан 0x00 і досягне нового значення OCR0.

Для генерації сигналу в режимі CTC вихід компаратора OC0 може використовуватися для зміни логічного рівня при кожному збігу, для чого необхідно задати режим перемикання (COM01, COM00 = 0b01). Значення OC0 буде присутній на виводі порту, тільки якщо для даного виводу задано вихідний напрямок. Максимальна частота генерованого сигналу дорівнює fOC0 = fclk_I/O/2, якщо OCR0 = 0x00. Для інших значень OCR0 частоту генерованого сигналу можна визначити за формулою:

де змінна N задає коефіцієнт розподілу дільника частоти (1, 8, 32, 64, 128, 256 або 1024).

Також як і для нормального режиму роботи, мітка TOV0 встановлюється на тому ж такті таймера, коли його значення змінюється з 0xFF на 0x00.

Режим швидкої ШІМ

Режим швидкої широтно-імпульсної модуляції (WGM01, WGM00 = 0b11) дозволяє генерувати високочастотні ШІМ-сигнали.

Опис роботи цього режиму для даного мікроконтролера наведено у повному описі мікроконтролера.[48]

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

 

 

Ціль роботи

- вивчити принципів роботи переривань AVR мікроконтролера

- закріпити знання попередніх лабораторних роботах

Програма виконання роботи

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

- дозволити роботу переривань

- при написати обробник переривань від таймера

- у симуляторі переконатися, що період між подіями справді становить вказану величину (2 мс по замовчуванню)[54]

 

Маскування переривань

Залежно від можливості заборони зовнішні переривання поділяються на:

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

ті, що не можна маскувати (англ. Non maskable interrupt, NMI) — обробляються завжди, незалежно від заборон на інші переривання.

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

Вектор переривання — закріплений за джерелом переривання номер, який ідентифікує відповідний обробник переривань. Вектори переривань об'єднуються в таблицю векторів переривань, що містить адреси обробників переривань. Розташування таблиці залежить від типу та режиму роботи процесора.

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

Вкладеність переривань – дозвіл більш пріоритетному перериванню переривами обробник переривань менш пріоритетного переривання.

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

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

 

Reti

 

При виконанні інструкції CLI всі переривання забороняються. Запит на переривання не буде відпрацьований після виконання інструкції CLI, навіть якщо воно виникає одночасно з виконанням команди CLI.

Для дозволу переривань використовується інструкція SEI, а наступна за SEI інструкція буде виконана перед відпрацюванням будь-якого відкладеного переривання.

 

Час реакції на переривання

Реакція на відпрацювання запиту на переривання триває мінімум 4 машинних цикли. Після закінчення цього часу програма продовжує своє виконання з вектора відповідного переривання. Протягом 4 машинних циклів стан програмного лічильника поміщається в стек. Як правило, за адресою вектора переривань зберігається команда переходу на процедуру обробку переривань, а на даний перехід витрачається ще 3 машинних цикли. Якщо запит на переривання виникає в процесі виконання інструкції, що вимагає більш 1 машинних цикли на виконання, то переривання буде оброблено тільки після виконання цієї інструкції. Якщо переривання виникає під час перебування мікроконтролера в режимі сну (SLEEP MODE), то реакція на переривання збільшиться ще на 4 цикли. Дана затримка пов'язана з часом старту з обраного режиму сну.

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

 

Таблиця векторів переривань для мікроконтролера ATMEGA128







Последнее изменение этой страницы: 2016-04-18; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.215.182.81 (0.03 с.)