- •2. Основи програмування і налагодження контролерів avr
- •2.1. Програми avr Assembler V.1.0
- •2.1.1. Відкриття асемблерних файлів
- •2.1.2. Інтегрований редактор
- •2.1.3. Написання програми
- •2.1.4. Асемблування програми
- •2.2. Вивчення пакету avr Studio
- •2.2.2. Вікно процесора
- •2.2.4. Вікно порту
- •2.2.5. Вікно 8-бітного таймера-лічильника
- •2.2.6. Регістри енергонезалежної пам’яті eeprom
- •2.2.7. Команди точок останова (Breakpoint commands)
- •2.2.8. Команди керування виконанням програми
- •2.2.10. Вибір контролера
- •2.2. Система команд та їх характеристика
- •2.2.1. Арифметичні і логічні команди
- •Команда add - Скласти без переносу
- •Команда adc - Скласти з переносом
- •Команда sub - відняти без переносу
- •Команда subi - Відняти константу
- •Команда sbc - Відняти з переносом
- •Команда sbci – Відняти константу з переносом
- •Команда and - Виконати логічне “і”
- •Команда andi - Виконати логічне “і” з константою
- •Команда or - Виконати логічне “або”
- •Команда ori - виконати логічне “або” з константою
- •Команда eor - Виконати виключаюче “або”
- •Команда com - Виконати доповнення до одиниці
- •Команда neg - Виконати доповнення до двох
- •Команда sbr - Встановити біти в регістрі
- •Команда cbr - Очистити біти в регістрі
- •Команда inc - Інкрементувати
- •Команда dec - декрементувати
- •Команда tst - Перевірити на нуль або мінус
- •Команда clr - очистити регістр
- •Команда ser - Встановити всі біти регістра
- •Операція
- •2.2.2. Команди розгалуження Команда rjmp – Відносний перехід
- •Операція:
- •Команда rcall – Відносний виклик підпрограми
- •Операція
- •Команда ret - Повернення із підпрограми
- •Операція
- •Команда reti – Повернення із переривання
- •Операція
- •Команда cpse - Порівняти і пропустити, якщо рівні
- •Команда cp - Порівняти
- •Команда cpc – Порівняти з урахуванням переносу
- •Команда cpi – Порівняти з константою
- •Команда sbrc – Пропустити, якщо біт в регістрі очищений
- •Команда sbrs – Пропустити, якщо біт в регістрі встановлений
- •Команда sbic – Пропустити, якщо біт в регістрі вводу-виводу очищений
- •Команда sbis – Пропустити, якщо біт в регістрі вводу-виводу встановлений
- •Команда brbs – Перейти, якщо біт в регістрі статусу встановлений
- •Команда brbc – Перейти, якщо біт в регістрі статусу очищений
- •Команда breq – Перейти, якщо рівно
- •Команда brne – Перейти, якщо не рівно
- •Команда brcs – Перейти, якщо прапорець переносу встановлений
- •Команда brcc – Перейти, якщо прапорець переносу очищений
- •Команда brsh – Перейти, якщо рівно або більше (без знаку)
- •Команда brlo – Перейти, якщо менше (без знаку)
- •Команда brmi – Перейти, якщо мінус
- •Команда brpl – Перейти, якщо плюс
- •Команда brge – Перейти, якщо більше або дорівнює (з урахуванням знаку)
- •Команда brlt – Перейти, якщо менше чим (зі знаком)
- •Команда brhs – Перейти, якщо прапорець половинного переносу встановлений
- •Команда brhc – Перейти, якщо прапорець половинного переносу очищений
- •Команда brts – Перейти, якщо прапорець t встановлений
- •Команда brtc – Перейти, якщо прапорець t очищений
- •Команда brvs – Перейти, якщо переповнення встановлено
- •Команда brvc – Перейти, якщо переповнення очищене
- •Команда brie – Перейти, якщо глобальне переривання дозволене
- •Команда brid – Перейти, якщо глобальне переривання заборонено
- •2.2.3. Команди пересилки Команда ld - Загрузити непрямо з созп в регістр з використанням індексу z
- •Команда st - записати непрямо з регістру в созп з використанням індексу z
- •Команда mov - копіювати регістр
- •Команда ldi - загрузити константу
- •Команда in - Загрузити дані з порту вводу-виводу в регістр
- •Команда out - Записати дані з регістра в порт вводу-виводу
- •Операція:
- •2.2.4. Команди роботи з бітами Команда sbi - Встановити біт в регістр вводу-виводу
- •Команда cbi - Очистити біт в регістрі вводу-виводу
- •Команда lsl - Логічний зсув вліво
- •Команда lsr - Логічний зсув вправо
- •Команда rol - Зсунути вліво через перенос
- •Команда ror - Зсунути вправо через перенос
- •Команда asr - Арифметичний зсув вправо
- •Команда swap - Обмін нібблів місцями
- •Команда bset - Встановити біт в регістрі статусу (sreg)
- •Команда bclr - Очистити біт в регістрі статусу (sreg)
- •Команда bst - Переписати біт із регістра в прапорець t регістра статусу
- •Команда bld - Загрузити вміст t прапорця регістра статусу (sreg) в біт регістра
- •Команда sec - Встановити прапорець переносу
- •Операція
- •Команда clc - Очистити прапорець переносу в регістрі статусу (sreg)
- •Команда sen - Встановити прапорець від’ємного значення
- •Команда cln - Очистити прапорець від’ємного значення в регістрі статусу (sreg)
- •Команда sez - Встановити прапорець нульового значення
- •Операція
- •Команда clz - Очистити прапорець нульового значення
- •Команда sei - Встановити прапорець глобального переривання
- •Операція
- •Команда cli - Очистити прапорець глобального переривання в регістрі статусу (sreg)
- •Команда ses - Встановити прапорець знаку
- •Команда cls - Очистити прапорець знаку
- •Команда sev - Встановити прапорець переповнення
- •Команда clv - Очистити прапорець переповнення
- •Команда set - Встановити прапорець t
- •Команда clt - Очистити t прапорець
- •Команда seh - Встановити прапорець половинного переносу
- •Операція
- •Команда clh - Очистити прапорець половинного переносу в регістрі статусу (sreg)
- •Команда nop - Виконати холосту команду
- •Команда sleep - Встановити режим sleep
- •Команда wdr - Збросити сторожовий таймер
- •2.2.5. Приклади написання програм
- •2.3. Програмні і апартні засоби підтримки розробок для мікроконтролерів avr
- •2.3.1. Стартові набори розроблювача
- •2.3.2. Стартовий набір stk500
- •2.3.3. Плата розширення stk501
- •2.3.4. Плата розширення stk502
- •2.3.5. Плата розширення stk503
- •2.3.6. Плата розширення stk504
- •2.3.7. Внутрісхемний програматор atavrisp
- •2.3.8. Внутрісхемні емуляторы
- •2.3.9. Внутрісхемний емулятор atjtagice mkIi (atjtagice2)
2.3.8. Внутрісхемні емуляторы
Принцип внутрісхемної емуляції складається в заміні цільового мікроконтролера якимсь пристроєм, поводження якого з погляду відлагоджуваної системи відповідає поводженню цільового мікроконтролера. Це пристрій, називаний внутрісхемним емулятором, повинен не тільки адекватно відображати поводження цільового мікроконтролера, але і надавати розроблювачеві можливість керування процесом налагодження і контролю за станом реальної налагоджувальної мікропроцесорної системи. Для керування процесом налагодження при використанні сучасних внутрісхемних емуляторів, як правило, використовується персональний комп'ютер з відповідним програмним забезпеченням.
В даний момент компанія Atmel пропонує 2 типи внутрісхемних емуляторів.
Перший тип має на увазі повну заміну мікроконтролера на якийсь пристрій, що емулює поводження реального мікроконтролера на цільовій платі. Даний тип, на сьогоднішній день, представлений двома внутрісхемними емуляторами ICE40 і ICE50.
Другий тип має на увазі використання мікроконтролера AVR, що має всі необхідні для внутрісхемного налагодження апаратні блоки і керованого зовнішнім налагоджувачем. На даний момент цей тип налагоджувачів представлений пристроєм ATJTAGICE mkII (читається "Марк два").
Використання внутрісхемних емуляторов дозволяє налагоджувати додатки, у яких задіяні периферійні вузли і режими мікроконтролерів, підтримка яких відсутня у програмному симуляторі.
Внутрісхемні емулятори ICE40, ICE50.
Внутрісхемні емуляторы ICE40 і ICE50 являють собою класичні внутрісхемні емулятори. Розходження емуляторів складається в кількості підтримуваних мікроконтролерів.
Список підтримуваних емулятором ICE50 мікроконтролерів дуже широкий: ATmega128/CAN128, ATmega165/325, ATmega169/329/649, ATmega48/88/168, ATmega162, ATmega8/16/32/64, Atmega8515/8535, ATtiny26, ATtiny13, ATtiny2313.
Емулятор ICE40 підтримує набагато меншу кількість мікроконтролерів, а саме мікроконтролери ATtiny26, ATmega8, ATtiny13.
Рис.2.22. Зовнішній вигляд внутрісхемних емуляторів ICE40/ICE50
Для підтримки різних мікроконтролерів, мається набір виносних плат (адаптерів) для пайки або установки в DIP-панель для мікроконтролера на цільовій платі (див. рис. 2.23). Для мікроконтролерів AVR, що не випускаються в DIP-корпусах, адаптер (ATADAP64BOT) призначений для припаювання на площадку під корпус TQFP. По типу підключеного адаптера ICE40/50 автоматично визначає, який мікроконтролер буде емулюватися. Адаптери для підтримки мікроконтролерів ATtiny13, ATmega169/329/649, ATmega165/325 у комплект емулятора ICE40/50 не входять, а замовляються окремо.
Рис.2.23. Зовнішній вигляд виносних плат емулятора ICE40/50
Емулятори ICE40 і ICE50 виконують наступні функції:
Емуляція аналогової і цифрової периферії мікроконтролера
Робота в діапазоні напруг від 2,2 В до 5,5 В
Перегляд значень регістрів вводу-виводу
Перегляд реєстрового файлу, пам'яті програм, даних і EEPROM
Запис траси
Необмежена кількість точок останова
Налагодження по тексту програми мовою високого рівня
Лічильник часу виконання програми
Керування налагодженням виробляється в інтегрованому середовищі розробки AVR Studio. Як програму для роботи мікроконтролера може використовуватися відлагоджувальний об'єктний код у форматі UBROF8 або COFF, а також програма на асемблері. Підключення емулятора до комп'ютера виконується через COM-порт.
Однієї зі зручних функцій, реалізованих у ICE40/50, є можливість запису траси, тобто збереження послідовності виконання інструкцій мікроконтролером. Аналіз записаної траси дозволяє виявити ділянки коду, виконання яких по тим або інших причинах не відбувається (Code Coverage Analysis). Такий аналіз дуже корисний при налагодженні програм, що містять кілька процедур обробки переривань, особливо якщо вкладеність переривань не дозволене.
У ICE50 реалізований режим діагностики вузлів внутрісхемного емулятора. Для здійснення діагностики необхідно установити тестову панель на плату відлагоджувального кристала й у AVR Studio вибрати пункт меню Tools -> ICE50 Selftest. Після запуску процесу діагностування (кнопка Run) послідовно перевіряються усі вузли і режими внутрісхемного емулятора. Якщо при цьому визначається, що на платі керування утримується застарілий варіант внутрішнього мікрокоду (firmware), то програма діагностики запропонує автоматично обновити конфігурацію ПЛІС і пам'яті програм мікроконтролера. Також можливо зробити ручне відновлення мікрокоду ICE50, вибравши пункт меню Tools -> ICE50 Upgrade.