
- •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.9. Внутрісхемний емулятор atjtagice mkIi (atjtagice2)
Альтернативою внутрісхемної емуляції є режим фонового налагодження. В англомовній літературі цей режим позначається терміном "On-Chip Debugging", або OCD.
Різниця між внутрісхемною емуляцією і фоновим налагодженням полягає в наступному. Внутрісхемний емулятор з тим або іншим ступенем вірогідності імітує поводження цільового мікроконтролера в відлагоджуваній системі, у той час як у режимі фонового налагодження програмний код виконується самим цільовим мікроконтролером. Таким чином, досягається повний збіг тимчасових і електричних параметрів системи в відлагоджувальному і штатному режимах.
Для підтримки режиму "On-Chip Debugging" (OCD) блок керування налагодженням повинен бути частиною самого відлагоджуваного мікроконтролера. Керування фоновим налагодженням у мікроконтролерах AVR здійснюється по JTAG-інтерфейсу, сумісному зі стандартом IEEE1149.1, або однопровідному інтерфейсові debugWIRE, що є власною розробкою компанії Atmel.
Блок OCD з керуванням по інтерфейсу JTAG міститься в мікроконтролерах ATmega128/CAN128, ATmega16/32/64, ATmega162, ATmega165/325, ATmega169/329, ATmega3250/3290. Блок OCD з керуванням по інтерфейсу debugWIRE міститься в мікроконтролерах ATmega48/88/168, ATtiny13, ATtiny2313, ATtiny45.
Під керуванням блоку OCD у мікроконтролерах AVR виробляється виконання програмного коду і доступ до усіх регістрів мікроконтролера в режимі фонового налагодження.
Для роботи мікроконтролера в режимі внутрісхемного налагодження необхідно дозволити (за замовчуванням заборонений) інтерфейс JTAG або debugWIRE. Для цього необхідно установити відповідні FUSE-біти. При дозволі інтерфейсу debugWIRE варто пам'ятати, що інтерфейс debugWIRE використовує вивід /RESET мікроконтролера і, при дозволі інтерфейсу, стандартна функція виводу (скидання мікроконтролера) відключається, а значить, стає недоступною функція послідовного внутрісхемного програмування, тому що вивід /RESET використовується для введення мікроконтролера в режим послідовного програмування. Перепрограмування FUSE-бітів мікроконтролера можна зробити по інтерфейсу debugWIRE або в режимі паралельного програмування.
Пристроєм, що реалізує протокол керування, є ATJTAGICE mkII (ATJTAGICE2).
Рис.2.24.
Зовнішній вигляд внутрісхемного
емулятора ATJTAGICE mkII
Внутрісхемний емулятор ATJTAGICE mkII підключається до персонального комп'ютера по COM або USB інтерфейсах. При підключенні по USB інтерфейсу не потрібне використання зовнішнього джерела живлення. Робити з'єднання емулятора з комп'ютером і цільовим мікроконтролером необхідно при виключеному живленні всіх трьох пристроїв (при підключенні по інтерфейсі USB досить установити вимикач живлення ATJTAGICE mkII у положення ВИКЛЮЧЕНЕ). У противному випадку можна вивести з ладу вихідні каскади емулятора.
При використанні інтерфейсу USB для підключення ATJTAGICE mkII до комп'ютера, передача команд виробляється істотно швидше, ніж при використанні COM-порту.
Як керуючу програму для роботи ATJTAGICE mkII і OCD мікроконтролера використовується інтегроване середовище розробки AVR Studio. Більш докладну інформацію з можливостей і використання ATJTAGICE mkII можна знайти у вбудованому файлі довідки AVR Studio.
Крім забезпечення режиму фонового налагодження, емулятор ATJTAGICE mkII може бути використаний у якості внутрісхемного програматора для мікроконтролерів AVR. Програмування може здійснюватися по інтерфейсах JTAG або SPI. Для програмування, а також налагодження, по інтерфейсу JTAG одночасно декількох пристроїв потрібно з'єднати пристрої в дейзі-ланцюжок. Після цього необхідно вказати AVR Studio наявність декількох мікроконтролерів у меню Tools > STK500/AVRISP/JTAGICE > STK500/AVRISP/JTAGICE > Advanced > JTAG Daisy Chain Settings.
Альтернативою описаним вище внутрісхемним емуляторам і відлагоджувачу може служити інтегрований у AVR Studio програмний симулятор, що робить емуляцію програмним способом.