Text
                    СЕРИЯ
ПРОГРАММИРУЕМЫЕ СИСТЕМЫ
А. В. Евстифеев
МИКРОКОНТРОЛЛЕРЫ AVR
СЕМЕЙСТВА Tiny
Руководство
пользователя
Москва
Издательский дом «Додэка-ХХ1»
2007


Евстифеев А.В. Е26 Микроконтроллеры AVR семейства Tiny. Руководство пользователя. — М.: Издательский дом «Додэка-ХХ1», 2007. — 432 с: ил. (Серия «Программируемые системы»). ISBN 978-5-94120-116-7 Книга посвящена однокристальным микроконтроллерам AVR семейства Tiny фирмы ATMEL. Рассмотрена архитектура микроконтроллеров AVR, ее особенности, приведены основные электрические параметры. Подробно описано внутреннее устройство микроконтроллеров, система команд, периферия, а также способы программирования. Основой данного издания послужила популярная книга «Микроконтроллеры AVR семейств Tiny и Mega», материал которой был существенно переработан и дополнен описаниями новых моделей. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов. Главный редактор В. М. Халикеев Ответственный редактор Т. Е. Брод Верстка И. С. Каинова График А. Н. Клочков Подписано в печать 16.02.2007. Формат 60x90/16. Бумага типографская № 2. Гарнитура «NewtonC». Печать офсетная. Объем 22,0 п. л. Усл. печ. л. 22,0. Тираж 4000 экз. Код ATM5. Заказ № 303. Издательский дом «Додэка-ХХ1» ОКП 95 3000 105318 Москва, а/я 70. Тел /факс: (495) 366-24-29, 366-81-45 E-mail: books@dodeca.ru; red@dodeca.ru Отпечатано с готовых диапозитивов в ОАО «Щербинская типография». 117623 Москва, ул. Типографская, д. 10 сканировал: kipiaxxx , обработал: jtp ISBN 978-5-94120-116-7 © Издательский дом «Додэка-ХХ1», 2007 ® Серия «Программируемые системы»
ОГЛАВЛЕНИЕ Предисловие 7 Глава 1. Знакомство с семейством Tiny 9 1.1. Общие сведения 9 1.2. Отличительные особенности 9 1.3. Характеристики процессора Ю 1.4. Характеристики подсистемы ввода/вывода 10 1.5. Периферийные устройства 10 1.6. Архитектура ядра 11 1.7. Цоколевка и описание выводов 12 Глава 2. Архитектура микроконтроллеров семейства Tiny 32 2.1. Общие сведения 32 2.2. Организация памяти 44 2.2.1. Память программ 45 2.2.2. Память данных 46 2.2.3. Энергонезависимая память данных (EEPROM) 67 2.3. Счетчик команд и выполнение программы 72 2.3.1. Счетчик команд 72 2.3.2. Функционирование конвейера 73 2.3.3. Команды типа «проверка/пропуск» (Test & Skip) 74 2.3.4. Команды условного перехода 75 2.3.5. Команды безусловного перехода 75 2.3.6. Команды вызова подпрограмм 76 2.3.7. Команды возврата из подпрограмм 77 2.4. Стек 77 Глава 3. Система команд 80 3.1. Общие сведения 80 3.2. Операнды 80 3.3. Типы команд 82 3.3.1. Команды логических операций 82 3.3.2. Команды арифметических операций и команды сдвига 83 3.3.3. Команды битовых операций 83
3.3.4. Команды пересылки данных 84 3.3.5. Команды передачи управления 84 3.3.6. Команды управления системой 86 3.4. Сводные таблицы команд 86 3.5. Описание команд 92 Глава 4. Тактирование, режимы пониженного энергопотребления и сброс 156 4.1. Общие сведения 156 4.2. Тактовый генератор 157 4.2.1. Генератор с внешним резонатором 160 4.2.2. Низкочастотный кварцевый генератор 161 4.2.3. Внешний сигнал синхронизации 162 4.2.4. Генератор с внешней ЛС-цепочкой 162 4.2.5. Внутренний калиброванный ЛС-генератор 163 4.2.6. Внутренний RC-генератор на 128 кГц 165 4.2.7. Схема ФАПЧ 165 4.2.8. Управление тактовой частотой 166 4.3. Управление электропитанием 167 4.3.1. Режимы пониженного энергопотребления 167 4.3.2. Управление тактовыми сигналами модулей 172 4.3.3. Общие рекомендации по уменьшению энергопотребления 173 4.4. Сброс 175 4.4.1. Сброс по включению питания 178 4.4.2. Аппаратный сброс 179 .4.4.3. Сброс от сторожевого таймера 180 4.4.4. Сброс при снижении напряжения питания 180 4.4.5. Управление схемой сброса 183 Глава 5. Прерывания 195 5.1. Общие сведения 195 5.2. Таблица векторов прерываний 195 5.3. Обработка прерываний 199 5.4. Внешние прерывания 200 Глава 6. Порты ввода/вывода 207 6.1. Общие сведения 207 6.2. Регистры портов ввода/вывода 208 6.3. Конфигурирование портов ввода/вывода 209 6.4. Аппаратный модулятор 220 Глава 7. Таймеры 225 7.1. Общие сведения 225 7.2. Назначение выводов таймеров/счетчиков 226 7.3. Прерывания от таймеров/счетчиков 226 7.4. Предделители таймеров/счетчиков 230
7.4.1. Управление предделителями 232 7.4.2. Использование внешнего тактового сигнала 233 7.5. Таймер/счетчик ТО 234 7.5.1. Управление тактовым сигналом 240 7.5.2. Режимы работы 240 7.6. Таймер/счетчик Т1 247 7.6.1. Таймер/счетчик Т1 в модели ATtinyl5L 247 7.6.2. Таймер/счетчик Т1 в моделях ATtiny2313x и ATtiny24x/44x/84x 253 7.6.3. Таймер/счетчик Т1 в моделях ATtiny25x/45x/85x и ATtiny26x 271 7.7. Сторожевой таймер 285 Глава 8. Аналоговый компаратор 291 8.1. Общие сведения 291 8.2. Функционирование компаратора 292 Глава 9. Аналого-цифровой преобразователь 297 9.1. Общие сведения 297 9.2. Функционирование модуля АЦП 298 9.3. Результат преобразования 313 9.4. Повышение точности преобразования 314 9.5. Параметры АЦП 315 Глава Ю.Универсальный синхронный/асинхронный приемо-передатчик 317 10.1. Общие сведения 317 10.2. Использование модуля USART 317 10.2.1. Скорость приема/передачи 322 10.2.2. Формат кадра 326 10.2.3. Передача данных 327 10.2.4. Прием данных 329 10.3. Мультипроцессорный режим работы 333 Глава И.Универсальный последовательный интерфейс USI 335 11.1. Общие сведения 335 11.2. Основные сведения об интерфейсе SPI 336 11.3. Основные сведения об интерфейсе TWI 339 11.4. Использование модуля USI 345 11.5. Режимы работы модуля USI 349 11.5.1. Трехпроводный режим 349 11.5.2. Двухпроводный режим 352 11.5.3. Альтернативное использование модуля USI 355 Глава ^.Программирование микроконтроллеров AVR семейства Tiny 356 12.1. Общие сведения 356 12.1.1. Защита кода и данных 357 12.1.2. Конфигурационные ячейки 358
12.1.3. Идентификатор 362 12.1.4. Калибровочные ячейки 362 12.1.5. Страничная организация памяти программ и данных 363 12.2. Последовательное программирование при высоком напряжении 364 12.2.1. Управление процессом программирования 366 12.3. Программирование по последовательному каналу 377 12.3.1. Переключение в режим программирования 384 12.3.2. Управление процессом программирования FLASH-памяти 384 12.3.3. Управлением процессом программирования EEPROM-памяти 385 12.4. Параллельное программирование 386 12.4.1. Переключение в режим параллельного программирования 392 12.4.2. Стирание кристалла 392 12.4.3. Программирование FLASH-памяти 393 12.4.4. Программирование EEPROM-памяти 396 12.4.5. Программирование конфигурационных ячеек 396 12.4.6. Программирование ячеек защиты 398 12.4.7. Чтение конфигурационных ячеек и ячеек защиты 398 12.4.8. Чтение ячеек идентификатора и калибровочных ячеек 399 12.5. Самопрограммирование микроконтроллеров семейства Tiny 400 12.5.1. Общие сведения 400 12.5.2. Функционирование загрузчика 400 Приложения 404 Приложение 1. Сводная таблица микроконтроллеров AVR семейства Tiny 404 Приложение 2. Чертежи корпусов микроконтроллеров AVR семейства Tiny 412 Приложение 3. Электрические параметры микроконтроллеров AVR семейства Tiny. 415
Предисловие Книга, которую вы держите в руках, посвящена одному из семейств микроконтроллеров AVR фирмы Atmel. Эти 8-битные RISC-микроконтроллеры для встраиваемых приложений являются, пожалуй, наиболее интересным направлением, развиваемым фирмой. Они представляют собой мощный инструмент, прекрасную основу для создания современных высокопроизводительных и экономичных встраиваемых контроллеров многоцелевого назначения. Несмотря на то что микроконтроллеры AVR появились на рынке около 10 лет назад, их популярность до сих пор очень высока. С каждым годом они захватывают все новые и новые ниши на рынке. Не последнюю роль в этом играет соотношение показателей цена/быстродействие/энергопотребление, до сих пор являющееся едва ли не лучшим на рынке 8-битных микроконтроллеров. Кроме того, постоянно растет число выпускаемых сторонними производителями разнообразных программных и аппаратных средств поддержки разработок устройств на их основе. Все это позволяет говорить о микроконтроллерах AVR как об индустриальном стандарте среди 8-битных микроконтроллеров. В настоящее время в рамках единой базовой архитектуры микроконтроллеры AVR подразделяются на несколько семейств: • TinyAVR; • Mega AVR; • Mega AVR для специальных применений; • ASIC/FPGAAVR. Данная книга посвящена первому семейству — Tiny. Характерными особенностями микроконтроллеров этого семейства являются: • небольшие корпуса с малым количеством выводов; • малые объемы FLASH-памяти программ (1...8 Кбайт) и ОЗУ; • довольно ограниченная периферия. Таким образом эти микроконтроллеры предназначены для так называемых бюджетных решений, принимаемых в условиях жестких финансовых ограничений. Область применения этих микроконтроллеров — интеллек-
туальные датчики различного назначения (контрольные, пожарные, охранные), игрушки, различная бытовая техника и другие подобные устройства. В новых моделях семейства появились узлы, отсутствующие даже в микроконтроллерах более развитого семейства Mega. Этими узлами являются: • температурный датчик, позволяющий измерять температуру кристалла с точностью ±10°С; • схема ФАПЧ, позволяющая повысить внутреннюю тактовую частоту микроконтроллера до 64 МГц при использовании внешнего кварцевого резонатора на частоту 8 МГц; • генератор времени запаздывания, позволяющий осуществлять безопасное управление силовыми ключами в системах управления двигателями и предотвращать возникновение в них сквозных токов. Микроконтроллеры семейства Tiny поддерживают несколько режимов пониженного энергопотребления, имеют блок прерываний, сторожевой таймер и допускают программирование непосредственно в готовом устройстве. В предлагаемой вашему вниманию книге представлена вся информация, необходимая для изучения микроконтроллеров AVR семейства Tiny. Однако следует заметить, что всеобъемлющим справочником данная книга не является, хотя и написана на основе документации, предоставляемой фирмой Atmel. Поэтому, прежде чем приступить к практическому использованию рассматриваемых микроконтроллеров, рекомендуется обратиться к официальной информации, размещенной на Web-сайтах фирмы (www.atmel.com, www.atmel.ru).
ГЛАВА 1 Знакомство с семейством Tiny 1.1. Общие сведения Как и все микроконтроллеры AVR фирмы Atmel, микроконтроллеры семейства Tiny являются 8-битными микроконтроллерами, предназначенными для использования во встраиваемых приложениях. Они изготавливаются по малопотребляющей КМОП-технологии, которая в сочетании с усовершенствованной RISC-архитектурой позволяет достичь наилучшего соотношения стоимость/быстродействие/энергопотребление. Удельное быстродействие этих микроконтроллеров может достигать значения 1 MIPS/МГц (1 миллион операций в секунду на 1 МГц тактовой частоты). Микроконтроллеры описываемого семейства предназначены, в первую очередь, для низкостоимостных («бюджетных») приложений, не требующих большого объема аппаратных ресурсов, и соответственно являются самыми дешевыми из всех микроконтроллеров AVR. Важной особенностью этих микроконтроллеров является эффективное использование выводов кристалла. Например, в 8-выводном корпусе все выводы (кроме, разумеется, выводов питания) могут использоваться в качестве линий ввода/вывода. 1.2. Отличительные особенности Перечислю вкратце основные особенности микроконтроллеров AVR семейства Tiny: • FLASH-память программ объемом от 1 до 8 Кбайт (число циклов стирания/записи не менее 10 ООО); • оперативная память (статическое ОЗУ) объемом до 512 байт; • память данных на основе ЭСППЗУ (EEPROM) объемом от 64 до 51 байт (число циклов стирания/записи не менее 100 ООО); • возможность защиты от внешнего чтения и модификации памяти программ и EEPROM; • возможность программирования большинства моделей непосредственно в системе через последовательный интерфейс; • возможность самопрограммирования;
• различные способы синхронизации: встроенный ЛС-генератор (основной режим работы), встроенный генератор с внешним резонатором, внешний сигнал синхронизации; • наличие нескольких режимов пониженного энергопотребления; • наличие детектора пониженного напряжения питания (Brown-Out Detector—BOD). 1.3. Характеристики процессора Основными характеристиками процессора микроконтроллеров AVR семейства Tiny являются: • полностью статическая архитектура, минимальная тактовая частота равна нулю; • арифметико-логическое устройство (АЛУ) подключено непосредственно к регистрам общего назначения (32 регистра); • большинство команд выполняются за один период тактового сигнала; • векторная система прерываний, поддержка очереди прерываний; • до 16 источников прерываний (до 13 внешних). 1.4. Характеристики подсистемы ввода/вывода Подсистема ввода/вывода микроконтроллеров AVR семейства Tiny имеет следующие особенности: • программное конфигурирование и выбор портов ввода/вывода; о выводы могут быть запрограммированы как входные или как выходные независимо друг от друга; • входные буферы с триггером Шмитта на всех выводах; • на всех входах имеются индивидуально отключаемые внутренние подтягивающие резисторы сопротивлением 35... 120 кОм (старые модели) и 20...50 кОм (новые модели). 1.5. Периферийные устройства Набор периферийных устройств, имеющихся в составе того или иного микроконтроллера, зависит от конкретной модели и может быть определен по сводной таблице, приведенной в Приложении I. Вообще же в составе микроконтроллеров семейства встречаются следующие периферийные устройства: • один или два 8-битных таймера/счетчика; о один 16-битный таймер/счетчик;
• одно- и двухканальные генераторы 8-битного ШИМ-сигнала (один из режимов работы 8-битных таймеров/счетчиков); • двухканальный генератор ШИМ-сигнала регулируемой разрядности (один из режимов работы 16-битного таймера/счетчика). Разрешение формируемого сигнала может составлять от 1 до 16 бит; • сторожевой таймер WDT; • аналоговый компаратор; • многоканальный (от 4 до 11 каналов) 10-битный АЦП последовательного приближения, имеющий как несимметричные, так и дифференциальные входы; • аппаратный модулятор для управления матрицей светодиодов; • универсальный асинхронный приемо-передатчик (UART); • универсальный последовательный интерфейс USI, который может использоваться в качестве интерфейса SPI или 12С. Кроме того, USI может использоваться в качестве полудуплексного UART или 4/12-битного счетчика. 1.6. Архитектура ядра Ядро микроконтроллеров AVR семейства Tiny выполнено по усовершенствованной RISC-архитектуре (enhanced RISC) (Рис. 1.1), в которой используется ряд решений, направленных на повышение быстродействия микроконтроллеров. Рис. 1.1. Архитектура ядра микроконтроллеров AVR
Арифметико-логическое устройство (АЛУ), выполняющее все вычисления, подключено непосредственно к 32 рабочим регистрам, объединенным в регистровый файл. Благодаря этому АЛУ выполняет одну операцию (чтение содержимого регистров, выполнение операции и запись результата обратно в регистровый файл) за один такт. Кроме того, практически каждая из команд (за исключением команд, у которых одним из операндов является 16-битный адрес) занимает одну ячейку памяти программ. В микроконтроллерах AVR реализована Гарвардская архитектура, характеризующаяся раздельной памятью программ и данных, каждая из которых имеет собственные шины доступа к ним. Такая организация позволяет одновременно работать как с памятью программ, так и с памятью данных. Разделение информационных шин позволяет использовать для каждого типа памяти шины различной разрядности, причем способы адресации и доступа к каждому типу памяти также различаются. В сочетании с двухуровневым конвейером команд такая архитектура позволяет достичь производительности в 1 MIPS на каждый МГц тактовой частоты. 1.7. Цоколевка и описание выводов В семейство Tiny на сегодняшний день входит в общей сложности 13 моделей микроконтроллеров, которые можно условно разделить на четыре группы. 1. Микроконтроллеры в 8-выводных корпусах типа DIP и SOIC (некоторые модели также выпускаются в 20-выводных корпусах типа MLF). Максимальное количество контактов ввода/вывода этих микроконтроллеров равно 6: • ATtinyll, ATtinyllL (Рис 1.2) — имеют FLASH-память программ объемом 1 Кбайт; • ATtinyl2, ATtinyl2L, ATtinyl2V (Рис. 1.3) — имеют FLASH-память программ объемом 1 Кбайт и EEPROM-память данных объемом 64 байт; • ATtinyl3, ATtinyl3V (Рис. 1.4) — имеют FLASH-память программ объемом 1 Кбайт, ОЗУ объемом 64 байт и EEPROM-память данных объемом 64 байт. Эти модели рекомендуется использовать вместо ATtinyl 1х/12х в новых разработках; • ATtinyl5L (Рис. 1.5) — имеет FLASH-память программ объемом 1 Кбайт и EEPROM-память данных объемом 64 байт; • ATtiny25, ATtiny25V (Рис. 1.8) — имеют FLASH-память программ объемом 2 Кбайт, ОЗУ объемом 128 байт и EEPROM-память данных объемом 128 байт;
• ATtiny45, ATtiny45V (Рис. 1.8) — имеют FLASH-память профамм объемом 4 Кбайт, ОЗУ объемом 256 байт и EEPROM-память данных объемом 256 байт; • ATtiny85, ATtiny85V (Рис. 1.8) — имеют FLASH-память программ объемом 8 Кбайт, ОЗУ объемом 512 байт и EEPROM-память данных объемом 512 байт. 2. Микроконтроллеры в 14-выводных корпусах типа DIP и SOIC (также выпускаются в 20-выводных корпусах типа MLF). Максимальное количество контактов ввода/вывода этих микроконтроллеров равно 12: • ATtiny24, ATtiny24V (Рис. 1.7) — имеют FLASH-память программ объемом 2 Кбайт, ОЗУ объемом 128 байт и EEPROM-память данных объемом 128 байт; • ATtiny44, ATtiny44V (Рис. 1.7) — имеют FLASH-память программ объемом 4 Кбайт, ОЗУ объемом 256 байт и EEPROM-память данных объемом 256 байт; • ATtiny84, ATtiny84V (Рис. 1.7) — имеют FLASH-память программ объемом 8 Кбайт, ОЗУ объемом 512 байт и EEPROM-память данных объемом 512 байт. 3. Микроконтроллеры в 20-выводных корпусах типа DIP и SOIC (также выпускаются в 32-выводных корпусах типа MLF): • ATtiny2313, ATtiny2313V (Рис. 1.6) — имеют FLASH-память программ объемом 2 Кбайт, ОЗУ объемом 128 байт и EEPROM-память данных объемом 128 байт. Максимальное количество контактов ввода/вывода равно 18. Эти модели по цоколевке и функционально обратно совместимы со снятыми с производства микроконтроллерами семейства Classic AT90S2100 и AT90S2313 и могут использоваться для их замены в новых разработках; • ATtiny26, ATtiny26L (Рис. 1.9) — имеют FLASH-память программ объемом 2 Кбайт, ОЗУ объемом 128 байт и EEPROM-память данных объемом 128 байт. Максимальное количество контактов ввода/вывода равно 16!). 4. Микроконтроллеры в 28-выводных корпусах типа DIP (также выпускаются в 32-выводных корпусах типа TQFP и MLF): • ATtiny28L, ATtiny28V (Рис. 1.10) — имеют FLASH-память программ объемом 2 Кбайт. Количество контактов ввода/вывода равно 20 (из них 11 - контакты ввода/вывода общего назначения, 1 — выход с повышенной нагрузочной способностью и 8 — входные контакты). ]) Также планируются к выпуску модели ATtiny46x и ATtiny86x, имеющие память программ объемом соответственно 4 и 8 Кбайт.
Основные параметры всех микроконтроллеров семейства, такие как объем памяти (программ и данных), количество контактов ввода/вывода, тип корпуса, диапазон рабочих частот и напряжение питания приведены в Табл. 1.1. Полная информация по каждой модели приведена в Приложении 1. Дополнительно следует отметить, что микроконтроллеры семейства выпускаются как в коммерческом (диапазон рабочих температур 0...+70°С), так и в промышленном (диапазон рабочих температур -40...+85°С) исполнениях. Таблица 1.1. Основные параметры микроконтроллеров AVR семейства Tiny Обозначение Память программ (FLASH) [Кбайт] Память данных (ОЗУ) [байт] Память данных (EEPROM) [байт] Количество контактов ввода/вывода Напряжение питания [В] Тактовая частота [МГц] Тип корпуса ATtinyll 1 - - 6 4.0...5.5 0...6 DIP 8 SOIC-8 ATtinyllL 2.7...5.5 0...2 ATtinyl2 1 - 64 6 4.0...5.5 0...8 DIP-8 SOIC-8 ATtinyl2L 2J...5.5 0...4 ATtinyl2V 1.8...5.5 0...1.2 ATtinyB 1 64 64 6 17...5.5 4.S...5.5 0...10 0...20 DIP-8 SOIC-8 MLF-20 ATtinyl3V 1.8...5.5 2J...5.5 0...4 0...10 ATtinyl5L 1 - 64 6 2.7...5.5 1.6 DIP-8 SOIC-8 MLF-20 ATtiny2313 2 128 128 18 2.7...5.5 4.5...5.5 0...10 0...20 DIP-20 SOIC-20 MLF-20 ATtiny2313V 1.8...5.5 2.7...5.5 0...4 0...10 ATtiny24 2 128 128 12 17...5.5 4.S...5.5 0...10 0...20 DIP-14 SOIC-14 MLF-20 ATtiny24V 1.8...5.5 2J...5.5 0...4 0...10 ATtiny25 2 128 128 6 2.7...5.5 4.5...S.5 0...10 0...20 DIP-8 SOIC-8 MLF-20 ATtiny25V 1.8...5.5 17...5.5 0...4 0...10 ATtiny26 2 128 128 16 4.5...5.5 0...16 DIP-20 SOIC-20 MLF-32 ATtiny26L 2J...5.5 0...8 ATtiny28L 2 - - 11 2.7...5.5 0...4 DIP-28 TQFP-32 MLF-32 ATtiny28V 1.8...5.5 0...1.2
Таблица 1.1. Основные параметры микроконтроллеров AVR семейства Tiny (продолжение) Обозначение Память программ (FLASH) [Кбайт] Память данных (ОЗУ) [байт] Память данных (EEPROM) [байт] Количество контактов ввода/вывода Напряжение питания [В] Тактовая частота [МГц] Тип корпуса ATtiny44 4 128 128 12 2J...5.5 4.5...5.5 0...10 0...20 DIP-14 SOIC-14 MLF-20 ATtiny44V 1.8...5.5 2J...5.5 0...4 0...10 ATtiny45 4 128 128 6 2.7...5.5 4.5...5.S 0...10 0...20 DIP-8 SOIC-8 MLF-20 ATtiny45V 1.8...5.5 2.7...5.5 0...4 0...10 ATtiny84 4 128 128 12 2.7...S.5 4.5...5.5 0...10 0...20 DIP-14 SOIC-14 MLF-20 ATtiny84V 1.8...5.5 2.7...5.5 0...4 0...10 ATtiny85 4 128 128 6 2.7...5.5 4.5...5.5 0...10 0...20 DIP-8 SOIC-8 MLF-20 ATtiny85V 1.8...5.5 2.7...5.5 0...4 0...10 В Табл. 1.2...1.10 для каждой линейки микроконтроллеров приведены названия выводов и указаны их функции (как основные, так и дополнительные). Кроме того, для каждого вывода в таблицах указан его тип (вход, выход, вход/выход, вывод питания). В таблицах использованы следующие обозначения: I — вход; О — выход; I/O — вход/выход; Р — выводы питания. Рис. 1.2. Расположение выводов (вид сверху) моделей ATtinyl 1/11L
Таблица 1.2. Описание выводов моделей ATtinyll/llL Обозначение Номер вывода 1ип вывода Описание Порт В. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PBO(AINO) 5 I/O 0-й бит порта В Неинвертирующий вход компаратора РВ1 (INT0/AIN1) 6 I/O 1-й бит порта В Вход внешнего прерывания Инвертирующий вход компаратора РВ2 (ТО) 7 I/O 2-й бит порта В Вход внешнего тактового сигнала таймера/счетчика ТО РВЗ (XTAL1) 2 I/O 3-й бит порта Вход тактового генератора PB4(XTAL2) 3 I/O 4-й бит порта Выход тактового генератора РВ5(RESET) 1 I 5-й бит порта Вход сброса GND 4 р Общий вывод VCC 8 р Вывод источника питания Рис. 1.3. Расположение выводов (вид сверху) моделей ATtinyl2/12L/12V
Таблица 1.3. Описание выводов моделей ATtinyl2/12L/12V Обозначение Номер вывода Тип вьюода Описание Порт В. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (MOSI/AIN0) 5 I/O 0-й бит пор га В Вход данных при программировании Неинвертирующий вход компаратора РВ1 (MISO/INT0/AIN1) 6 I/O 1-й бит порта В Выход данных при программировании Вход внешнего прерывания Инвертирующий вход компаратора РВ2 (SCKA0) 7 I/O 2-й бит порта В Вход тактового сигнала при программировании Вход внешнего тактового сигнала таймера/счетчика ТО РВЗ (XTAL1) 2 I/O 3-й бит порта В Вход тактового генератора PB4(XTAL2) 3 I/O 4-й бит порта В Выход тактового генератора РВ5 (RESET) 1 I/O 5-й бит порта В (тип выхода — открытый сток) Вход сброса GND 4 Р Общий вывод VCC 8 Р Вывод источника питания Рис. 1.4. Расположение выводов (вид сверху) моделей ATtinyl3/13V
Таблица 1.4. Описание выводов моделей ATtinyl3/13V Обозначение Номер вывода Тип вывода Описание Порт В. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (MOSI/AIN0/OC0A/PCINT0) 5 I/O 0-й бит порта В Вход данных при программировании Неинвертирующий вход компаратора .Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода РВ1 (MISO/INT0/AIN1/ OC0B/PCINT1) 6 I/O 1-й бит порта В Выход данных при программировании Вход внешнего прерывания Инвертирующий вход компаратора Выход В таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода РВ2 (SCK/T0/ADC1/PCINT2) 7 I/O 2-й бит порта В Вход тактового сигнала при программировании Вход внешнего тактового сигнала таймера/счетчика ТО Вход АЦП Вход внешнего прерывания по изменению состояния вывода РВЗ (CLKI/ADC3/PCINT3) 2 I/O 3-й бит порта В Вход внешнего тактового сигнала Вход АЦП Вход внешнего прерывания по изменению состояния вывода PB4(ADC2/PCINT4) 3 I/O 4-й бит порта В Вход АЦП Вход внешнего прерывания по изменению состояния вывода РВ5 (RESET/ADC0/dW/PCINT5) 1 I/O 5-й бит порта В (тип выхода — открытый сток) Вход сброса Вход АЦП Вывод отладочного интерфейса debugWire Вход внешнего прерывания по изменению состояния вывода GND 4 Он Общий вывод VCC 8 Р Вывод источника питания NC 3,4,6,7, 9,Ю,13, 16...20 - Не используются
Рис. 1.5. Расположение выводов (вид сверху) модели ATtinyl5L Таблица 1.5. Описание выводов модели ATinyl5L Обозначение Номер вывода Тип вывода Описание Порт В. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (AIN0/AREF/MOSI) 5 I/O 0-й бит порта В Неинвертирующий вход компаратора Вход опорного напряжения для АЦП Вход данных при программировании РВ1 (AIN1/OC1A/MISO) 6 I/O 1-й бит порта В Инвертирующий вход компаратора Выход А таймера/счетчика Т1 Выход данных при программировании РВ2 (ADC1 /T0/INT0/SCK) 7 I/O 2-й бит порта В Вход АЦП Вход внешнего тактового сигнала таймера/счетчика ТО Вход внешнего прерывания Вход тактового сигнала при программировании РВЗ (ADC2) 3 I/O 3-й бит порта Вход АЦП PB4(ADC3) 2 I/O 4-й бит порта Вход АЦП РВ5 (RESET/ADCO) 1 I/O 5-й бит порта Вход сброса Вход АЦП GND 4 Р Общий вывод VCC 8 Р Вывод источника питания
Рис. 1.6. Расположение выводов (вид сверху) моделей ATtiny2313/2313V Таблица 1.6. Описание выводов моделей ATtiny2313/2313V Обозначение Номер вывода Тип вывода Описание DIP SOIC MLF Порт А. 3-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PA0(XTAL1) 5 3 I/O 0-й бит порта А Вход тактового генератора РА1 (XTAL2) 4 2 I/O 1-й бит порта А Выход тактового генератора
Таблица 1.6. Описание выводов моделей ATtiny2313/2313V (продолжение) Обозначение Номер вывода Тип вывода Описание DIP SOIC MLF РА2 (RESET/dW) 1 19 I/O 2-й бит порта А Вход сброса Вывод отладочного интерфейса debugWire Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (AIN0/PCINT0) 12 10 I/O 0-й бит порта В Неинвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода РВ1 (AIN1/PCINT1) 13 11 I/O 1-й бит порта В Инвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода PB2(OC0A/PCINT2) 14 12 I/O 2-й бит порта В Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода РВЗ (OC1A/PCINT3) 15 13 I/O 3-й бит порта В Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода РВ4 (OC1B/PCINT4) 16 14 I/O 4-й бит порта В Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода РВ5 (MOSI/DI/SDA/PCINT5) 17 15 I/O 5-й бит порта В Вход данных при программировании Вход данных модуля USI в режиме SPI Вход/выход данных модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода PB6(MISO/DO/PCINT6) 18 16 I/O 6-й бит порта В Выход данных при программировании Выход данных модуля USI в режиме SPI Вход внешнего прерывания по изменению состояния вывода
Таблица 1.6. Описание выводов моделей ATtiny2313/2313V (продолжение) Обозначение Номер вывода Тип вывода Описание DIP SOIC MLF РВ7 (USCK/SCL/PCINT7) 19 17 I/O 7-й бит порта В Вход/выход тактового сигнала модуля USI в режиме SPI Вход/выход тактового сигнала модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода Порт D. 7-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO (RXD) 2 20 I/O 0-й бит порта D Вход USART PD1 (TXD) 3 1 I/O 1-й бит порта D Выход USART PD2 (CKOUT/XCK/INT0) 6 4 I/O 2-й бит порта D Выход системного тактового сигнала Вход/выход внешнего тактового сигнала USART Вход внешнего прерывания PD3 (INT1) 7 5 I/O 3-й бит порта D Вход внешнего прерывания PD4(T0) 8 6 I/O 4-й бит порта D Вход внешнего тактового сигнала таймера/счетчика ТО PD5 (ОС0В/Т1) 9 7 I/O 5-й бит порта D Выход В таймера/счетчика ТО Вход внешнего тактового сигнала таймера/счетчика Т1 PD6(ICP) 11 9 I/O 6-й бит порта D Вход захвата таймера/счетчика Т1 GND 10 8 Общий вывод VCC 20 18 p Вывод источника питания
Рис. 1.7. Расположение выводов (вид сверху) моделей ATtiny24x/44x/84x Таблица 1.7. Описание выводов моделей ATtiny24x/44x/84x Обозначение Номер вывода Тип вывода Описание DIP SOIC MLF Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADCO/AREF/PCINTO) 13 5 I/O 0-й бит порта А Вход АЦП Вход опорного напряжения для АЦП Вход внешнего прерывания по изменению состояния вывода
Таблица L 7. Описание выводов моделей ATtiny24x/44x/84x (продолжение) Номер вывода Ът вывода Обозначение DIP SOIC MLF Описание РА1 (ADC 1 /AIN0/PCINT1) 12 4 I/O 1-й бит порта А Вход АЦП Неинвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода РА2 (ADC2/AIN1 / PC INT2) 11 3 I/O 2-й бит порта А Вход АЦП Инвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода РАЗ (ADC3/T0/PCINT3) 10 2 I/O 3-й бит порта А Вход АЦП Вход внешнего тактового сигнала таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода PA4(ADC4/USCK/SCL/ SCigTl/PCINT4) ON 1 I/O 4-й бит порта Вход АЦП Вход/выход тактового сигнала модуля USI в режиме SPI Вход/выход тактового сигнала модуля USI в режиме TWI Вход тактового сигнала при программировании Вход внешнего тактового сигнала таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода РА5 (ADC5/DO/MISO/ OC1B/PCINT5) 8 20 I/O 5-й бит порта Вход АЦП Выход данных модуля USI в режиме SPI Выход данных при программировании Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода РА6 (ADC6/DI/SDA/ MOSI/OC1A/PCINT6) 7 16 I/O 6-й бит порта Вход АЦП Вход данных модуля USI в режиме SPI Вход/выход данных модуля USI в режиме TWI Вход данных при программировании Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода
Таблица 1.7. Описание выводов моделей ATtiny24x/44x/84x (продолжение) Обозначение Номер вывода Тип вывода Описание DIP SOIC MLF PA7(ADC7/OC0B/ICP/ PCINT7) 6 15 I/O 7-й бит порта Вход АЦП Выход В таймера/счетчика ТО Вход захвата таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода Порт В. 4-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (XTAL1/PCINT8) 2 11 I/O 0-й бит порта А Вход тактового генератора Вход внешнего прерывания по изменению состояния вывода РВ1 (XTAL2/PCINT9) 3 12 I/O 1-й бит порта А Выход тактового генератора Вход внешнего прерывания по изменению состояния вывода PB2(CKOUT/OC0A/ INT0/PCINT10) 5 14 I/O 2-й бит порта А Выход системного тактового сигнала Выход А таймера/счетчика ТО Вход внешнего прерывания Вход внешнего прерывания по изменению состояния вывода РВЗ (RESET/dW/PCINTll) 4 13 I/O 3-й бит порта А Вход сброса Вывод отладочного интерфейса debugWire Вход внешнего прерывания по изменению состояния вывода GND 14 8 Р Общий вывод VCC 1 9 Р Вывод источника питания NC - 6,7,10, 17,18, 19 - Не используются
Рис. 1.8. Расположение выводов (вид сверху) моделей ATtiny25x/45x/85x Таблица 1.8. Описание выводов моделей ATtiny25x/45x/85x Обозначение Номер вьюода Тип вьюода Описание DIP SOIC MLF Порт В. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (DI/SDA/MOSI/AIN0/ AREF/OC0A/OC1 А/ PCINT0) 5 11 I/O 0-й бит порта В Вход данных модуля USI в режиме SPI Вход/выход данных модуля USI в режиме TWI Вход данных при программировании Неинвертирующий вход компаратора Вход опорного напряжения для АЦП Выход А таймера/счетчика ТО Инверсный выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода РВ1 (DO/MISO/AIN1/ OC0B/OC1A/PCINT1) 6 12 I/O 1-й бит порта В Выход данных модуля USI в режиме SPI Выход данных при программировании Инвертирующий вход компаратора Выход В таймера/счетчика ТО Прямой выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода
Таблица 1.8. Описание выводов моделей ATtiny25x/45x/85x (продолжение) Номер вывода Тип вывода Обозначение DIP SOIC MLF Описание РВ2 (ADC 1/USCK/SCL/ SCKA0/INT0/PCINT2) 7 14 I/O 2-й бит порта В Вход АЦП Вход/выход тактового сигнала модуля USI в режиме SPI Вход/выход тактового сигнала модуля USI в режиме TWI Вход тактового сигнала при программировании Вход внешнего тактового сигнала таймера/счетчика ТО Вход внешнего прерывания Вход внешнего прерывания по изменению состояния вывода РВЗ (XTAL1/ADC3/ OC1B/PCINT3) 2 2 I/O 3-й бит порта В Вход тактового генератора Вход АЦП Инверсный выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода РВ4 (XTAL2/CLKO/ADC2/ OC1B/PCINT4) 3 5 I/O 4-й бит порта В Выход тактового генератора Выход системного тактового сигнала Вход АЦП Прямой выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода РВ5 (RESET/dW/ ADC0/PCINT5) 1 1 I/O 5-й бит порта В Вход сброса Вывод отладочного интерфейса debugWire Вход АЦП Вход внешнего прерывания по изменению состояния вывода GND 4 8 р Общий вывод VCC 8 15 р Вывод источника питания NC - 3,4,6,7, 9,10, 13, 16...20 - Не используются
Рис. 1.9. Расположение выводов (вид сверху) моделей ATtiny26/26L Таблица 1.9. Описание выводов моделей ATtiny26/26L Номер вьюода Тип вьюода Обозначение DIP SOIC MLF Описание Порт А. 8-битный двунаправленный порт в вода/вьн зода с внутренними подтягивающими резисторами РАО (ADC0) 20 26 I/O 0-й бит порта А Вход АЦП РА1 (ADC1) 19 25 I/O 1-й бит порта А Вход АЦП PA2(ADC2) 18 23 I/O 2-й бит порта А Вход АЦП
Таблица 1.9. Описание выводов моделей ATtiny26/26L (продолжение) Обозначение Номер вывода Тип вывода Описание DIP SOIC MLF РАЗ (AREF) 17 22 I/O 3-й бит порта А Вход опорного напряжения АЦП PA4(ADC3) 14 17 I/O 4-й бит порта Вход АЦП РА5 (ADC4) 13 15 I/O 5-й бит порта Вход АЦП РА6 (ADC5/AIN0) 12 14 I/O 6-й бит порта Вход АЦП Неинвертирующий вход компаратора PA7(ADC6/AIN1) 11 13 I/O 7-й бит порта Вход АЦП Инвертирующий вход компаратора Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (DI/SDA/MOSI/OC1A) 1 30 I/O 0-й бит порта В Вход данных модуля USI в режиме SPI Вход/выход данных модуля USI в режиме TWI Вход данных при программировании Инверсный выход А таймера/счетчика Т1 РВ1 (DO/MISO/OC1A) 2 31 I/O 1-й бит порта В Выход данных модуля USI в режиме SPI Выход данных при программировании Прямой выход А таймера/счетчика Т1 РВ2 (USCK/SCL/SCK/OC1 В) 3 32 I/O 2-й бит порта В Вход/выход тактового сигнала модуля USI в режиме SPI Вход/выход тактового сигнала модуля USI в режиме TWI Вход тактового сигнала при программировании Инверсный выход В таймера/счетчика Т1 РВЗ (ОС1В) 4 2 I/O 3-й бит порта В Прямой выход В таймера/счетчика Т1 PB4(XTAL1/ADC7) 7 7 I/O 4-й бит порта В Вход тактового генератора Вход АЦП РВ5 (XTAL2/ADC8) 8 8 I/O 5-й бит порта В Выход тактового генератора Вход АЦП РВ6 (ADC9/INT0/T0) 9 10 I/O 6-й бит порта В Вход АЦП Вход внешнего прерывания Вход внешнего тактового сигнала таймера/счетчика ТО
Таблица 1.9. Описание выводов моделей ATtiny26/26L (продолжение) Обозначение Номер вывода Тип вьюода Описание DIP SOIC MLF PB7(RESET/ADC10) 10 11 I/O 7-й бит порта В Вход сброса Вход АЦП GND 6,16 5,21 Р Общий вывод AVCC 5 18 Р Вывод источника питания АЦП VCC 15 4 Он Вывод источника питания NC - 1,3,6, 9,12, 16,19, 20,24, 27...29 - Не используются Рис. 1.10. Расположение выводов моделей ATtiny28L/28V
Таблица 1.10. Описание выводов моделей ATtiny28L/28V Обозначение Номер вывода Тип Описание DIP TQFP MLF вывода XTAL1 9 7 I Вход тактового генератора XTAL2 10 8 О Выход тактового генератора RESET 1 29 I Вход сброса Порт А. 4-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО 28 28 I/O 0-й бит порта А РА1 27 27 I/O 1-й бит порта А PA2(IR) 25 25 о 2-й бит порта А (выход с повышенной нагрузочной способностью) Выход модулятора РАЗ 26 26 I/O 3-й бит порта А Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (AIN0) 14 12 1 0-й бит порта В Неинвертирующий вход компаратора РВ1 (AIN1) 15 13 1-й бит порта В Инвертирующий вход компаратора РВ2(Т0) 16 14 I 2-й бит порта В Вход внешнего тактового сигнала таймера/счетчика ТО РВЗ (INTO) 17 15 3-й бит порта В Вход внешнего прерывания PB4(INT1) 18 16 4-й бит порта В Вход внешнего прерывания РВ5 19 17 I 5-й бит порта В РВ6 23 23 I 6-й бит порта В РВ7 24 24 I 7-й бит порта В Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PD0 2 30 I/O 0-й бит порта D PD1 3 31 I/O 1-й бит порта D PD2 4 32 I/O 2-й бит порта D PD3 5 1 I/O 3-й бит порта D PD4 6 2 I/O 4-й бит порта D PD5 11 9 I/O 5-й бит порта D PD6 12 10 I/O 6-й бит порта D PD7 13 11 I/O 7-й бит порта D GND 8,22 5,21 р Общий вывод VCC 7,20 4 р Вывод источника питания NC 21 3,6,19,20, 22 - Не используются
ГЛАВА 2 Архитектура микроконтроллеров семейства Tiny 2.1. Общие сведения Микроконтроллеры AVR семейства Tiny являются 8-битными микроконтроллерами с RISC-архитектурой. Они имеют электрически стираемую FLASH-память программ (большинство моделей, кроме того, имеют энергонезависимую EEPROM-память данных), а также разнообразные периферийные устройства. Состав этих устройств меняется от модели к модели, более того, одно и то же устройство в разных моделях использует различные ресурсы микроконтроллера (в частности — различные выводы). В то же время некоторые периферийные устройства присутствуют во всех микроконтроллерах семейства: сторожевой таймер, аналоговый компаратор, 8-битный таймер/счетчик (Таймер ТО) и, естественно, порты ввода/вывода. На Рис. 2.1 и Рис. 2.2 приведены структурные схемы микроконтроллеров ATtinyllx и ATtinyl2x соответственно. Их отличительные особенности: • 6-битный порт ввода/вывода (порт В); • 3-уровневый аппаратный стек; • встроенный тактовый /?С-генератор; • возможность подключения внешнего резонатора или внешней ЛС-цепочки. Структурная схема микроконтроллеров ATtinyl3x приведена на Рис. 2.3. Особенностями этих моделей являются: • 6-битный порт ввода/вывода (порт В); • программный стек; • встроенный тактовый Ж?-генератор; • возможность использования внешнего тактового сигнала; • наличие делителя тактового сигнала; • 2 канала ШИМ; • 4-канальный 10-битный АЦП; • возможность самопрограммирования.
Рис. 2.1. Структурная схема микроконтроллеров ATtinyllx
Рис. 2.2. Структурная схема микроконтроллеров ATtinyl2x
Рис. 2.3. Структурная схема микроконтроллеров ATtinyl3x
Структурная схема микроконтроллера ATtiny 15L приведена на Рис. 2.4. Особенностями этой модели являются: • 6-битный порт ввода/вывода (порт В); • 3-уровневый аппаратный стек; • возможность работы только от встроенного ЛС-генератора; • два 8-битных таймера/счетчика; • один канал ШИМ; • 4-канальный 10-битный АЦП. Структурная схема микроконтроллеров ATtiny2313x приведена на Рис. 2.5. Их отличительные особенности: • 3 порта ввода/вывода (порт А — 3-битный, порт В — 8-битный, порт D — 7-битный); • программный стек; • встроенный тактовый ЛС-генератор; • возможность подключения внешнего резонатора; • возможность использования внешнего тактового сигнала; • один 8-битный и один 16-битный таймер/счетчик; • 4 канала ШИМ; • модуль приемо-передатчика USART; • модуль универсального последовательного интерфейса USI; • возможность самопрограммирования. Структурная схема микроконтроллеров ATtiny26x приведена на Рис. 2.6. Они имеют следующие отличительные особенности: • два 8-битных порта ввода/вывода (порты А и В); • программный стек; • встроенный тактовый ЛС-генератор; • возможность подключения внешнего резонатора или внешней ЛС-цепочки; • возможность использования внешнего тактового сигнала; • наличие схемы ФАПЧ для формирования системного тактового сигнала; • два 8-битных таймера/счетчика; • 2 канала ШИМ; • И-канальный 10-битный АЦП; • модуль универсального последовательного интерфейса USI. Структурная схема микроконтроллеров ATtiny28x приведена на Рис. 2.7. Их отличительные особенности: • 3 порта ввода/вывода (порт А — 4-битный, порты В и D — 8-битные); • 3-уровневый аппаратный стек;
• встроенный тактовый ЯС-генератор; • возможность подключения внешнего резонатора или внешней ЛС-цепочки; • возможность использования внешнего тактового сигнала; • один 8-битный таймер/счетчик; • наличие аппаратного модулятора для управления светодиодным индикатором. Структурная схема микроконтроллеров ATtiny24x/44x/84x приведена на Рис. 2.8. Особенностями моделей этой линейки являются: • два порта ввода/вывода (порт А — 8-битный, порт В — 4-битный); • программный стек; • встроенный тактовый ЛС-генератор; • возможность подключения внешнего резонатора; • возможность использования внешнего тактового сигнала; • наличие делителя тактового сигнала; • один 8-битный и один 16-битный таймер/счетчик; • 4 канала ШИМ; • 8-канальный 10-битный АЦП; • модуль универсального последовательного интерфейса USI; • возможность самопрограммирования. Структурная схема микроконтроллеров ATtiny25x/45x/85x приведена на Рис. 2.9. Особенностями моделей этой линейки являются: • один 6-битный порт ввода/вывода (порт В); • программный стек; • встроенный тактовый ЛС-генератор; • возможность подключения внешнего резонатора; • возможность использования внешнего тактового сигнала; • наличие делителя тактового сигнала; • два 8-битных таймера/счетчика; • 4 канала ШИМ; • 4-канальный 10-битный АЦП; • модуль универсального последовательного интерфейса USI; • возможность самопрограммирования.
Рис. 2.4. Структурная схема микроконтроллера ATtinyl5L
Рис. 2.5. Структурная схема микроконтроллеров ATtiny2313x
Рис. 2.6. Структурная схема микроконтроллеров ATtiny26x
Рис. 2.7. Структурная схема микроконтроллеров ATtiny28x
Рис. 2.8. Структурная схема микроконтроллеров ATtiny24x/44x/84x
Рис. 2.9. Структурная схема микроконтроллеров ATtiny25x/45x/85x
2.2. Организация памяти Организация памяти микроконтроллеров AVR семейства Tiny выполнена по схеме Гарвардского типа, в которой разделены не только адресные пространства памяти программ и памяти данных, но также и шины доступа к ним. Способы адресации и доступа к этим областям памяти также различны. Такая структура позволяет центральному процессору работать одновременно как с памятью программ, так и с памятью данных, что существенно увеличивает производительность. Каждая из областей памяти данных (ОЗУ и EEPROM) расположена в своем адресном пространстве. Обобщенная карта памяти микроконтроллеров AVR семейства Tiny приведена на Рис. 2.10. Память данных 32 регистра $0000 общего назначения $001F 64 регистра $0020 ввода/вывода $005F $060F Внутреннее статическое ОЗУ S END Модель Память программ (FLASH) Память данных (ОЗУ) Память данных (EEPROM) Верхняя граница (F_END) Объем [слов] Верхняя граница (S_END) Объем [байт] Верхняя граница (E_END) Объем [байт] ATmy11x $01FF 512 — — — — ATiny12x $01FF 512 — — $03F 64 ATiny13x $01 FF 512 $009F 64 $03F 64 ATiny15L $01 FF 512 — — $03F 64 ATmy2313x $03FF 1K $00DF 128 $03F 128 ATiny24x $03FF 1K $00DF 128 $03F 128 ATiny25x $03FF IK $00DF 128 $03F 128 ATiny26x $03FF 1К $00DF 128 $03F 128 ATiny28x $03FF 1К — — — — ATiny44x $07FF 2К $015F 256 $0FF 256 ATiny45x $07FF 2К $015F 256 $0FF 256 ATmy84x $0FFF 4К $025F 512 $1FF 512 ATiny85x $0FFF 4К $025F 512 $1FF 512 Рис. 2.10. Карта памяти микроконтроллеров семейства Tiny Обратите внимание на следующее. Поскольку микроконтроллеры AVR имеют 16-битную систему команд, объем памяти программ на рисунке указан не в байтах, а в 16-битных словах. Символ «$» перед числом означает, что это число записано в шестнадцатеричной системе счисления.
2.2.1. Память программ Как следует из названия, память программ предназначена для хранения команд, управляющих функционированием микроконтроллера. В памяти программ хранятся также различные константы, не меняющиеся во время работы программы. Как уже было сказано, память программ представляет собой электрически стираемое ППЗУ (FLASH-ПЗУ). Поскольку все команды занимают в памяти по 16 бит, память программ имеет 16-битную организацию. Соответственно объем памяти программ микроконтроллеров семейства составляет от 512 до 4К (4x1024) 16-битных слов. Для адресации памяти программ используется счетчик команд (Program Counter — PC). Размер счетчика команд составляет от 9 до 12 бит, в зависимости от объема адресуемой памяти. По адресу $000 памяти программ находится вектор сброса. После инициализации (сброса) микроконтроллера выполнение программы начинается с этого адреса (по данному адресу рекомендуется размещать команду безусловного перехода к инициализационной части программы). Начиная с адреса $001 располагается таблица векторов прерываний. Размер этой области зависит от модели микроконтроллера и составляет от 4 (адреса $001...$004) до 18 (адреса $001...$012) векторов (подробнее о распределении области векторов прерывания — см. раздел 5. 2). При возникновении прерывания после сохранения в стеке текущего значения счетчика команд происходит выполнение команды, расположенной по адресу соответствующего вектора. Поэтому по данным адресам располагаются команды относительного перехода к подпрограммам обработки прерываний. Ниже приведен типичный листинг начала программы для модели ATtiny28: Address Labels Code Comments $000 rjmp RESET ; Обработчик сброса $001 rjmp EXT_INT0 ; Обработчик внешнего прерывания $002 rjmp EXT_INT1 ; Обработчик внешнего прерывания $003 rjmp LOW_LEVEL ; Обработчик прерывания от порта В $004 rjmp TIM_OVF0 ; Обработчик прерывания от таймера ТО $005 rjmp ANA_COMP ; Обработчик прерывания от компаратора $006 MAIN: ldi г16, low(RAMEND) ; Начало основной программы out SPL, г16 <инструкция> ххх Если в программе прерывания не используются (запрещены), то основная программа может начинаться непосредственно с адреса $000. Следует отметить, что память программ может использоваться не только для хранения кода программы, но также и для хранения различных
констант. Для пересылки байта из памяти программ в память данных имеется специальная команда — LPM. Адрес, по которому производится чтение, перед использованием этой команды должен быть загружен в индексный регистр Z (см. далее). При этом старшие 15 бит содержимого регистра будут определять адрес слова, а младший бит будет определять, какой из байтов будет прочитан: 0 — младший байт, 1 — старший байт (см. Рис. 2.11). Рис. 2.11. Косвенная адресация памяти программ В заключение следует отметить, что FLASH-ПЗУ, используемое в микроконтроллерах AVR, рассчитано, как минимум, на 10 ООО циклов стирания/записи (типовое значение — 100 ООО циклов). 2.2.2. Память данных Память данных микроконтроллеров семейства Tiny разделена на три части: регистровая память, оперативная память (статическое ОЗУ) и энергонезависимое ЭСППЗУ (EEPROM). Регистровая память включает 32 регистра общего назначения (РОН), объединенных в так называемый «файл», и служебные регистры ввода/вывода (РВВ). Размер регистровой памяти фиксирован и для всех моделей составляет 96 байт. Соответственно, под РОН отводится 32 байта, а под РВВ — 64 байта. В области регистров ввода/вывода расположены различные служебные регистры (регистр управления микроконтроллера, регистр состояния и т.п.), а также регистры управления периферийными устройствами, входящими в состав микроконтроллера. Общее количество РВВ зависит от конкретной модели микроконтроллера. В ряде моделей для хранения переменных программ помимо регистров общего назначения имеется также статическое ОЗУ объемом от 64 до 512 байт. Для долговременного хранения различной информации, которая может изменяться в процессе функционирования готовой системы (калибровочные константы, серийные номера, ключи и т.п.) во многих
моделях можно использовать EEPROM-память, объем которой составляет от 64 до 512 байт. Эта память расположена в своем адресном пространстве, а доступ к ней осуществляется с помощью определенных РВВ. Статическое ОЗУ Прежде всего, следует сказать, что в микроконтроллерах AVR семейства Tiny используется линейная организация памяти. Объем статического ОЗУ для различных моделей семейства составляет от 0 до 512 байт (см. Табл. 1.1). В адресном пространстве ОЗУ также расположены все регистры микроконтроллеров, под них отведены младшие 96 адресов (Рис. 2.12). Остальные адреса отведены под 64/128/256/512 ячеек статического ОЗУ. Рис. 2.12. Организация статического ОЗУ
Регистры общего назначения Все регистры общего назначения объединены в файл, структура которого показана на Рис. 2,13. Как уже было сказано, в микроконтроллерах AVR все 32 РОН непосредственно доступны АЛУ, в отличие от микроконтроллеров других фирм, в которых имеется только один такой регистр — рабочий регистр W (аккумулятор). Благодаря этому любой РОН может использоваться во всех командах и как операнд-источник, и как операнд-приемник. Исключение составляют лишь пять арифметических и логических команд, выполняющих действия между константой и регистром (SBCI, SUBI, CPI, ANDI, ORI), а также команда загрузки константы в регистр (LDI). Эти команды могут обращаться только ко второй половине регистров (R16...R31). Рис. 2.13. Структура файла регистров общего назначения
В моделях без ОЗУ (ATtinyl 1х/12х, ATtimyl5L и ATtiny28x) два старших регистра общего назначения формируют 16-битный индексный регистр Z, который используется в качестве указателя при косвенной адресации памяти программ и памяти данных. Так как объем адресуемой памяти данных в этих моделях составляет всего 96 байт, при обращении к ней используется только младший байт (регистр R30). Содержимое старшего байта индексного регистра (регистр R31) должно быть равно 0. В остальных моделях предусмотрено уже три 16-битных индексных регистра — X, Уи Z (регистры-указатели), которые формируются из шести последних регистров файла (R26...R31), как показано на Рис. 2.14. Подробно использование регистров-указателей описано в подразделе «Способы адресации памяти данных». Рис. 2.14. Регистры-указатели X, Y и Z Как было показано на Рис. 2.12, каждый регистр файла имеет свой собственный адрес в пространстве памяти данных. Поэтому к ним можно обращаться двумя способами — как к регистрам и как к памяти, несмотря на то, что физически эти регистры не являются ячейками ОЗУ. Такое решение является еще одной отличительной особенностью архитектуры AVR, повышающей эффективность работы микроконтроллера и его производительность. Регистры ввода/вывода Все РВВ можно разделить на две группы: служебные регистры микроконтроллера и регистры, относящиеся к периферийным устройствам (в том числе порты ввода/вывода). Размер каждого регистра — 8 бит. Располагаются эти регистры в так называемом пространстве ввода/вывода размером 64 байта. Распределение адресов пространства ввода/вывода зависит от конкретной модели микроконтроллера, так как разные модели имеют различный состав периферийных устройств и соответственно разное количество
регистров. Размещение РВВ в адресном пространстве ввода/вывода для всех моделей семейства приведено в Табл. 2.1...2.9. Все эти регистры будут подробно описаны в соответствующих главах книги. Таблица 2.1. Регистры ввода/вывода моделей ATtinyllx Название Адрес Функция SREG $3F Регистр состояния GIMSK $ЗВ Общий регистр маски прерываний GIFR $ЗА Общий регистр флагов прерываний TIMSK $39 Регистр маски прерываний от таймера/счетчика TIFR $38 Регистр флагов прерываний от таймера/счетчика MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCR0 $33 Регистр управления таймера/счетчика ТО TCNT0 $32 Счетный регистр таймера/счетчика ТО WDTCR $21 Регистр управления сторожевого таймера PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В ACSR $08 Регистр управления и состояния аналогового компаратора Таблица 2.2. Регистры ввода/вывода моделей ATtinyl2x Название Адрес Функция SREG $3F Регистр состояния GIMSK $ЗВ Общий регистр маски прерываний GIFR $ЗА Общий регистр флагов прерываний TIMSK $39 Регистр маски прерываний от таймера/счетчика TIFR $38 Регистр флагов прерываний от таймера/счетчика MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCR0 $33 Регистр управления таймера/счетчика ТО TCNT0 $32 Счетный регистр таймера/счетчика ТО OSCCAL $31 Регистр калибровки тактового генератора WDTCR $21 Регистр управления сторожевого таймера EEAR $1Е Регистр адреса EEPROM EEDR $1D Регистр данных EEPROM EECR $1С Регистр управления EEPROM PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В ACSR $08 Регистр управления и состояния аналогового компаратора
Таблица 2.3. Регистры ввода/вывода моделей ATtinyl3x Название Адрес Функция SREG $3F Регистр состояния SPL $3D Указатель стека GIMSK $ЗВ Общий регистр маски прерываний GIFR $ЗА Общий регистр флагов прерываний TIMSK0 $39 Регистр маски прерываний от таймера/счетчика TIFR0 $38 Регистр флагов прерываний от таймера/счетчика SPMCSR $37 Регистр управления и состояния операций записи в память программ OCR0A $36 Регистр А совпадения таймера/счетчика ТО MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCR0B $33 Регистр В управления таймера/счетчика ТО TCNT0 $32 Счетный регистр таймера/счетчика ТО OSCCAL $31 Регистр калибровки тактового генератора TCCR0A $2F Регистр А управления таймера/счетчика ТО DWDR $2Е Регистр данных отладочного интерфейса debugWire OCR0B $29 Регистр В совпадения таймера/счетчика ТО GTCCR $28 Общий регистр управления таймеров/счетчиков CLKPR $26 Регистр предцелителя тактового сигнала WDTCR $21 Регистр управления сторожевого таймера EEAR $1Е Регистр адреса EEPROM EEDR $1D Регистр данных EEPROM EECR $1С Регистр управления EEPROM PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В PCMSK $15 Регистр маски прерывания по изменению состояний выводов DIDR0 $14 Регистр 0 отключения цифровых входов ACSR $08 Регистр управления и состояния аналогового компаратора ADMUX $07 Регистр управления мультиплексором АЦП ADCSRA $06 Регистр А управления и состояния АЦП ADCH $05 Регистр данных АЦП, старший байт ADCL $04 Регистр данных АЦП, младший байт ADCSRB $03 Регистр В управления и состояния АЦП
Таблица 2.4. Регистры ввода/вывода модели ATtinyl5L Название Адрес Функция SREG $3F Регистр состояния GIMSK $3B Общий регистр маски прерываний GIFR $3A Общий регистр флагов прерываний TIMSK $39 Регистр маски прерываний от таймера/счетчика TIFR $38 Регистр флагов прерываний от таймера/счетчика MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCRO $33 Регистр управления таймера/счетчика ТО TCNTO $32 Счетный регистр таймера/счетчика ТО OSCCAL $31 Регистр калибровки тактового генератора TCCR1 $30 Регистр управления таймера/счетчика Т1 TCNT1 $2F Счетный регистр таймера/счетчика Т1 OCR1A $2E Регистр А совпадения таймера/счетчика Т1 OCR1B $2D Регистр В совпадения таймера/счетчика Т1 SFIOR $2C Регистр специальных функций WDTCR $21 Регистр управления сторожевого таймера EEAR $1E Регистр адреса EEPROM EEDR $1D Регистр данных EEPROM EECR $1C Регистр управления EEPROM PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В ACSR $08 Регистр управления и состояния аналогового компаратора ADMUX $07 Регистр управления мультиплексором АЦП ADCSR $06 Регистр управления и состояния АЦП ADCH $05 Регистр данных АЦП, старший байт ADCL $04 Регистр данных АЦП, младший байт
Таблица 2.5. Регистры ввода/вывода моделей ATtiny2313x Название Адрес Функция SREG $3F Регистр состояния SPL $3D Указатель стека OCR0B $зс Регистр В совпадения таймера/счетчика ТО GIMSK $зв Общий регистр маски прерываний EIFR $ЗА Регистр флагов внешних прерываний TIMSK $39 Регистр маски прерываний от таймера/счетчика TIFR $38 Регистр флагов прерываний от таймера/счетчика SPMCSR $37 Регистр управления и состояния операций записи в память программ OCR0A $36 Регистр А совпадения таймера/счетчика ТО MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCR0B $33 Регистр В управления таймера/счетчика ТО TCNT0 $32 Счетный регистр таймера/счетчика ТО OSCCAL $31 Регистр калибровки тактового генератора TCCR0A $30 Регистр А управления таймера/счетчика ТО TCCR1A $2F Регистр А управления таймера/счетчика Т1 TCCR1B $2Е Регистр В управления таймера/счетчика Т1 TCNT1H $2D Счетный регистр таймера/счетчика Т1, старший байт TCNT1L $2С Счетный регистр таймера/счетчика Т1, младший байт OCR1AH $2В Регистр А совпадения таймера/счетчика Т1, старший байт OCR1AL $2А Регистр А совпадения таймера/счетчика Т1, младший байт OCR1BH $29 Регистр В совпадения таймера/счетчика Т1, старший байт OCR1BL $28 Регистр В совпадения таймера/счетчика Т1, младший байт CLKPR $26 Регистр предцелителя тактового сигнала ICR1H $25 Регистр захвата таймера/счетчика Т1, старший байт ICR1L $24 Регистр захвата таймера/счетчика Т1, младший байт GTCCR $23 Общий регистр управления таймеров/счетчиков TCCR1C $22 Регистр С управления таймера/счетчика Т1
Таблица 2.5. Регистры ввода/вывода моделей ATtiny2313x (продолжение) Название Адрес Функция WDTCSR $21 Регистр управления и состояния сторожевого таймера PCMSK $20 Регистр маски прерывания по изменению состояний выводов EEAR $1E Регистр адреса EEPROM EEDR $1D Регистр данных EEPROM EECR $1C Регистр управления EEPROM PORTA $1B Регистр данных порта А DDRA $1A Регистр управления порта А PINA $19 Выводы порта А PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В GPIOR2 $15 2-й регистр ввода/вывода общего назначения GPIOR1 $14 1-й регистр ввода/вывода общего назначения GPIORO $13 0-й регистр ввода/вывода общего назначения PORTD $12 Регистр данных порта D DDRD $11 Регистр направления данных порта D PIND $10 Выводы порта D USIDR $0F Регистр данных USI USISR $0E Регистр состояния USI USICR $0D Регистр управления USI UDR $0C Регистр данных USART UCSRA $0B Регистр А управления и состояния USART UCSRB $0A Регистр В управления и состояния USART UBRRL $09 Регистр скорости передачи USART, младший байт ACSR $08 Регистр управления и состояния аналогового компаратора UCSRC $03 Регистр С управления и состояния USART UBRRH $02 Регистр скорости передачи USART, старший байт DIDR $01 Регистр отключения цифровых входов
Таблица 2.6. Регистры ввода/вывода моделей ATtiny24x/44x/84x Название Адрес Функция SREG $3F Регистр состояния SPH $ЗЕ Указатель стека, младший байт SPL $3D Указатель стека, старший байт OCR0B $ЗС Регистр В совпадения таймера/счетчика ТО GIMSK $зв Общий регистр маски прерываний GIFR $ЗА Общий регистр флагов прерываний TIMSK0 $39 Регистр маски прерываний от таймера/счетчика ТО TIFR0 $38 Регистр флагов прерываний от таймера/счетчика ТО SPMCSR $37 Регистр управления и состояния операций записи в память программ OCR0A $36 Регистр А совпадения таймера/счетчика ТО MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCR0B $33 Регистр В управления таймера/счетчика ТО TCNT0 $32 Счетный регистр таймера/счетчика ТО OSCCAL $31 Регистр калибровки тактового генератора TCCR0A $30 Регистр А управления таймера/счетчика ТО TCCR1A $2F Регистр А управления таймера/счетчика Т1 TCCR1B $2Е Регистр В управления таймера/счетчика Т1 TCNT1H $2D Счетный регистр таймера/счетчика Т1, старший байт TCNT1L $2С Счетный регистр таймера/счетчика Т1, младший байт OCR1AH $2В Регистр А совпадения таймера/счетчика Т1, старший байт OCR1AL $2А Регистр А совпадения таймера/счетчика Т1, младший байт OCR1BH $29 Регистр В совпадения таймера/счетчика Т1, старший байт OCR1BL $28 Регистр В совпадения таймера/счетчика Т1, младший байт DWDR $27 Регистр данных отладочного интерфейса debugWire CLKPR $26 Регистр предделителя тактового сигнала ICR1H $25 Регистр захвата таймера/счетчика Т1, старший байт ICR1L $24 Регистр захвата таймера/счетчика Т1, младший байт GTCCR $23 Общий регистр управления таймеров/счетчиков TCCR1C $22 Регистр С управления таймера/счетчика Т1
Таблица 2.6. Регистры ввода/вывода моделей ATtiny24x/44x/84x (продолжение) Название Адрес Функция WDTCSR $21 Регистр управления и состояния сторожевого таймера PCMSK1 $20 Регистр маски 1-го прерывания по изменению состояний выводов EEARH $1F Регистр адреса EEPROM, старший байт EEARL $1E Регистр адреса EEPROM, младший байт EEDR $1D Регистр данных EEPROM EECR $1C Регистр управления EEPROM PORTA $1B Регистр данных порта А DDRA $1A Регистр управления порта А PINA $19 Выводы порта А PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В GPIOR2 $15 2-й регистр ввода/вывода общего назначения GPIOR1 $14 1-й регистр ввода/вывода общего назначения GPIORO $13 0-й регистр ввода/вывода общего назначения PCMSKO $12 Регистр маски 0-го прерывания по изменению состояний выводов USIBR $10 Регистр буфера данных USI USIDR $0F Регистр данных USI USISR $0E Регистр состояния USI USICR $0D Регистр управления USI TIMSK1 $0C Регистр маски прерываний от таймера/счетчика Т1 TIFR1 $0B Регистр флагов прерываний от таймера/счетчика Т1 ACSR $08 Регистр управления и состояния аналогового компаратора ADMUX $07 Регистр управления мультиплексором АЦП ADCSRA $06 Регистр управления и состояния АЦП ADCH $05 Регистр данных АЦП, старший байт ADCL $04 Регистр данных АЦП, младший байт ADCSRB $03 Регистр управления и состояния АЦП DIDRO $01 Регистр отключения цифровых входов PRR $00 Регистр снижения потребляемой мощности
Таблица 2.7. Регистры ввода/вывода моделей ATtiny25x/45x/85x Название Адрес Функция SREG $3F Регистр состояния SPH $ЗЕ Указатель стека, младший байт SPL $3D Указатель стека, старший байт OCR0B $ЗС Регистр В совпадения таймера/счетчика ТО GIMSK $ЗВ Общий регистр маски прерываний GIFR $ЗА Общий регистр флагов прерываний TIMSK $39 Регистр маски прерываний от таймера/счетчика ТО TIFR $38 Регистр флагов прерываний от таймера/счетчика ТО SPMCSR $37 Регистр управления и состояния операций записи в память программ MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCR0B $33 Регистр В управления таймера/счетчика ТО TCNT0 $32 Счетный регистр таймера/счетчика ТО OSCCAL $31 Регистр калибровки тактового генератора TCCR1 $30 Регистр управления таймера/счетчика Т1 TCNT1 $2F Счетный регистр таймера/счетчика Т1 OCR1A $2Е Регистр А совпадения таймера/счетчика Т1 OCR1C $2D Регистр С совпадения таймера/счетчика Т1 GTCCR $2С Общий регистр управления таймеров/счетчиков OCR1B $2В Регистр В совпадения таймера/счетчика Т1 TCCR0A $2А Регистр А управления таймера/счетчика ТО OCR0A $29 Регистр А совпадения таймера/счетчика ТО OCR0B $28 Регистр В совпадения таймера/счетчика ТО PLLCSR $27 Регистр управления и состояния схемы ФАПЧ CLKPR $26 Регистр предделителя тактового сигнала DT1A $25 Регистр А блока формирования интервала запаздывания таймера/счетчика Т1 DT1B $24 Регистр В блока формирования интервала запаздывания таймера/счетчика Т1
Таблица 2.7. Регистры ввода/вывода моделей ATtiny25x/45x/85x (продолжение) Название Адрес Функция DTPS1 $23 Регистр предделителя блока формирования интервала запаздывания таймера/счетчика Т1 DWDR $22 Регистр данных отладочного интерфейса debugWire WDTCR $21 Регистр управления сторожевого таймера PRR $20 Регистр снижения потребляемой мощности EEARH $1F Регистр адреса EEPROM, старший байт EEARL $1E Регистр адреса EEPROM, младший байт EEDR $1D Регистр данных EEPROM EECR $1C Регистр управления EEPROM PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В PCMSK $15 Регистр маски прерывания по изменению состояний выводов DIDRO $14 Регистр отключения цифровых входов GPIOR2 $13 2-й регистр ввода/вывода общего назначения GPIOR1 $12 1-й регистр ввода/вывода общего назначения GPIORO $11 0-й регистр ввода/вывода общего назначения USIBR $10 Регистр буфера данных USI USIDR $0F Регистр данных USI USISR $0E Регистр состояния USI USICR $0D Регистр управления USI ACSR $08 Регистр управления и состояния аналогового компаратора ADMUX $07 Регистр управления мультиплексором АЦП ADCSRA $06 Регистр управления и состояния АЦП ADCH $05 Регистр данных АЦП, старший байт ADCL $04 Регистр данных АЦП, младший байт ADCSRB $03 Регистр управления и состояния АЦП
Таблица 2.8. Регистры ввода/вывода моделей ATtiny26x Название Адрес Функция SREG $3F Регистр состояния SP $3D Указатель стека GIMSK $3B Общий регистр маски прерываний GIFR $3A Общий регистр флагов прерываний TIMSK $39 Регистр маски прерываний от таймера/счетчика ТО TIFR $38 Регистр флагов прерываний от таймера/счетчика ТО MCUCR $35 Общий регистр управления микроконтроллера MCUSR $34 Регистр состояния микроконтроллера TCCR0 $33 Регистр управления таймера/счетчика ТО TCNT0 $32 Счетный регистр таймера/счетчика ТО OSCCAL $31 Регистр калибровки тактового генератора TCCR1A $30 Регистр А управления таймера/счетчика Т1 TCCR1B $2F Регистр В управления таймера/счетчика Т1 TCNT1 $2E Счетный регистр таймера/счетчика Т1 OCR1A $2D Регистр А совпадения таймера/счетчика Т1 OCR1B $2C Регистр В совпадения таймера/счетчика Т1 OCR1C $2B Регистр С совпадения таймера/счетчика Т1 PLLCSR $29 Регистр управления и состояния схемы ФАПЧ WDTCR $21 Регистр управления сторожевого таймера EEAR $1E Регистр адреса EEPROM EEDR $1D Регистр данных EEPROM EECR $1C Регистр управления EEPROM PORTA $1B Регистр данных порта А DDRA $1A Регистр направления данных порта А PINA $19 Выводы порта А PORTB $18 Регистр данных порта В DDRB $17 Регистр направления данных порта В PINB $16 Выводы порта В USIDR $0F Регистр данных USI USISR $0E Регистр состояния USI USICR $0D Регистр управления USI ACSR $08 Регистр управления и состояния аналогового компаратора AD MUX $07 Регистр управления мультиплексором АЦП ADCSR $06 Регистр управления и состояния АЦП ADCH $05 Регистр данных АЦП, старший байт ADCL $04 Регистр данных АЦП, младший байт
Таблица 2.9. Регистры ввода/вывода моделей ATtiny28x Название Адрес Функция SREG $3F Регистр состояния PORTA $1B Регистр данных порта А PACR $1A Регистр управления порта А PINA $19 Выводы порта А PINB $16 Выводы порта В PORTD $12 Регистр данных порта D DDRD $11 Регистр направления данных порта D PIND $10 Выводы порта D ACSR $08 Регистр управления и состояния аналогового компаратора MCUCS $07 Регистр управления и состояния микроконтроллера ICR $06 Регистр управления прерываниями IFR $05 Регистр флагов прерываний TCCRO $04 Регистр управления таймера/счетчика ТО TCNTO $03 Счетный регистр таймера/счетчика ТО MODCR $02 Регистр управления модулятором WDTCR $01 Регистр управления сторожевого таймера OSCCAL $00 Регистр калибровки тактового генератора К любому регистру ввода/вывода можно обратиться с помощью команд IN и OUT, выполняющих пересылку данных между одним из 32-х РОН и пространством ввода/вывода. Кроме того, имеются 4 команды побитового доступа, использующие в качестве операндов регистры ввода/вывода: команды установки/сброса отдельного бита (SBI и CBI) и команды проверки состояния отдельного бита (SBIS и SBIC). К сожалению, указанные команды могут обращаться только к 1-й половине регистров ввода/вывода (адреса $00...$ 1F). Помимо непосредственной адресации (с помощью команд IN и OUT), к РВВ можно обращаться и как к ячейкам ОЗУ с помощью соответствующих команд ST/SD/SDD и LD/LDS/LDD. В первом случае используются адреса РВВ в пространстве ввода/вывода ($00...$3F), а во втором случае значения этих адресов необходимо увеличить на $20. Далее в книге при указании адресов РВВ в скобках указываются соответствующие им адреса ячеек ОЗУ. Среди РВВ есть один регистр, используемый наиболее часто в процессе выполнения программ. Это регистр состояния SREG. Он располагается по адресу $3F ($5F) и содержит набор флагов, показывающих текущее состояние микроконтроллера. Большинство флагов автоматически устанавли-
ваются в 1 или сбрасываются в 0 при наступлении определенных событий (в соответствии с результатом выполнения команд). Все биты этого регистра доступны как для чтения, так и для записи; после сброса микроконтроллера все биты регистра сбрасываются в 0. Формат этого регистра показан на Рис. 2.15, а его описание приведено в Табл. 2.10. Рис. 2.15. Формат регистра состояния SREG Таблица 2.10. Биты регистра состояния SREG Бит Название Описание 7 I Общее разрешение прерываний. Для разрешения прерываний этот флаг должен быть установлен в 1. Разрешение/запрещение отдельных прерываний производится установкой или сбросом соответствующих битов регистров масок прерываний (см. главу 5). Если флаг сброшен, то прерывания запрещены независимо от состояния этих регистров. Флаг сбрасывается аппаратно после входа в прерывание и восстанавливается командой RETI для разрешения обработки следующих прерываний 6 Т Хранение копируемого бита. Этот бит регистра используется в качестве источника или приемника командами копирования битов BLD (Bit LoaD) и BST (Bit STore). Заданный бит любого РОН может быть скопирован в этот бит командой BST или установлен в соответствии с содержимым данного бита командой BLD 5 Н Флаг половинного (Half) переноса. Этот флаг устанавливается в 1, если имел место перенос из младшей половины байта (из 3-го бита в 4-й) или заем из старшей половины байта при выполнении некоторых арифметических операций 4 S Флаг знака (Sign). Этот флаг равен результату операции «Исключающее ИЛИ» (XOR) между флагами N (отрицательный результат) и V (переполнение числа в дополнительном коде). Соответственно, этот флаг устанавливается в 1, если результат выполнения арифметической операции меньше нуля 3 V Флаг переполнения (oVerflow) дополнительного кода. Этот флаг устанавливается в 1 при переполнении разрядной сетки знакового результата. Используется при работе со знаковыми числами (представленными в дополнительном коде). Более подробно — см. описание системы команд 2 N Флаг отрицательного (Negative) значения. Этот флаг устанавливается в 1, если старший бит (7-й) результата операции равен 1. В противном случае флаг равен 0 1 Z Флаг нуля (Zero). Этот флаг устанавливается в 1, если результат выполнения операции равен нулю 0 с Флаг переноса (Сапу). Этот флаг устанавливается в 1, если в результате выполнения операции произошел выход за границы байта
Также в новых моделях семейства (ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x) появились 3 регистра ввода/вывода общего назначения GPIORO, GPIOR1 и GPIOR2. В этих регистрах можно хранить любую информацию, однако основное их назначение — сохранение глобальных переменных и регистра SREG. Регистры GPIORO...2 располагаются в младшей половине пространства ввода/вывода и, соответственно, могут использоваться совместно с командами побитового доступа SBI/CBI и SBIS/SBIC. Остальные РВВ будут подробно описаны в соответствующих разделах книги. Способы адресации памяти данных Микроконтроллеры семейства Tiny поддерживают, в общей сложности, 8 способов адресации для доступа к различным областям памяти данных (РОН, РВВ, ОЗУ). Причем в моделях без ОЗУ можно использовать только четыре из них. Вообще говоря, в действительности способов адресации всего два: прямая адресация и косвенная. Однако каждый способ адресации имеет несколько разновидностей в зависимости от того, к какой области памяти производится обращение (при прямой адресации) или какие дополнительные действия выполняются над индексным регистром (при косвенной адресации). На рисунках этого подраздела, а также далее в книге встречается аббревиатура «КОП». Эта аббревиатура обозначает часть (или части) слова команды, содержащую значение кода операции. Прямая адресация При прямой адресации адреса операндов содержатся непосредственно в слове команды. Микроконтроллеры семейства поддерживают следующие разновидности прямой адресации: прямая адресация одного РОН, прямая адресация двух РОН, прямая адресация РВВ и прямая адресация ОЗУ. Прямая адресация одного регистра общего назначения Этот способ адресации используется в командах, оперирующих с одним из регистров общего назначения. При этом адрес регистра-операнда (его номер) содержится в пяти битах слова команды (Рис. 2.16). Положение битов d на рисунке показано условно.
Рис. 2.16. Прямая адресация одного регистра общего назначения Примером команд, использующих этот способ адресации, являются команды работы со стеком (PUSH, POP), команды инкрементирования (INC), декрементирования (DEC), а также некоторые команды арифметических операций. Прямая адресация двух регистров общего назначения Этот способ адресации используется в командах, оперирующих одновременно с двумя регистрами общего назначения. При этом адрес регистра-источника содержится в битах 9, 3...0 (5 бит), а адрес регистра-приемника — в битах 8...4 (5 бит) слова команды (Рис. 2.17). Положение битов г и d на рисунке показано условно. Рис. 2.17. Прямая адресация двух регистров общего назначения К командам, использующим этот способ адресации, относятся команда пересылки данных из регистра в регистр (MOV), а также большинство команд арифметических операций. Кроме того, этот способ адресации используют даже некоторые команды, имеющие только один регистр-операнд. При этом источником и приемником является один и тот же регистр. В качестве примера можно привести команду очистки регистра (CLR Rd), которая в действительности выполняет операцию «Исключающее ИЛИ» регистра с самим собой (EOR Rd, Rd).
Прямая адресация регистра ввода/вывода Данный способ адресации используется командами пересылки данных между регистром ввода/вывода и регистровым файлом — in и out. В этом случае адрес регистра ввода/вывода содержится в битах 10, 9, 3...0 (6 бит), а адрес РОН — в битах 8...4 (5 бит) слова команды ( Рис. 2.18). Положение битов r/d и Р на рисунке показано условно. Рис. 2.18. Прямая адресация регистра ввода/вывода Прямая адресация ОЗУ Этот способ адресации используется для обращения ко всему адресному пространству памяти данных и поддерживается только микроконтроллерами, имеющими ОЗУ. В системе команд этих моделей имеется только две команды, использующие этот способ адресации. Это команды пересылки байта между одним из РОН и ячейкой ОЗУ — lds и sts. Каждая из этих команд занимает в памяти программ два слова (32 бита). В первом слове содержится код операции и адрес регистра общего назначения (в битах с 8-го по 4-й). Во втором слове находится адрес ячейки памяти, к которой происходит обращение (Рис. 2.19). Рис. 2.19. Прямая адресация ОЗУ
Косвенная адресация При косвенной адресации адрес ячейки памяти находится в одном из индексных регистров X, Y или Z. В зависимости от дополнительных манипуляций, которые производятся над содержимым индексного регистра, различают следующие разновидности косвенной адресации: простая косвенная адресация, относительная косвенная адресация, косвенная адресация с преддекрементом и косвенная адресация с постинкрементом. Простая косвенная адресация Сразу следует отметить, что это единственная разновидность косвенной адресации, поддерживаемая моделями без ОЗУ (ATtinyllx/12x, ATtinyl5L и ATtiny28x). При использовании команд простой косвенной адресации обращение производится к ячейке памяти, адрес которой находится в индексном регистре (Рис. 2.20). Никаких действий с содержимым индексного регистра при этом не производится. Рис. 2.20. Простая косвенная адресация Микроконтроллеры с ОЗУ поддерживают 6 команд (по 2 для каждого индексного регистра) простой косвенной адресации: LD Rd, X/Y/Z (пересылка байта из ОЗУ в РОН) и ST X/Y/Z, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды. Модели без ОЗУ (ATtinyl 1х/12х, ATtinyl5L и ATtiny28x) поддерживают только 2 команды простой косвенной адресации: LD Rd, z (пересылка байта в РОН) и ST z, Rd (пересылка байта из РОН). Относительная косвенная адресация При использовании команд относительной косвенной адресации адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра (Y или Z) и константой, задава-
емой в команде. Другими словами, производится обращение по адресу, указанному в команде, относительно адреса, находящегося в индексном регистре. Иллюстрация данного способа адресации приведена на Рис. 2.21. Положение битов Rr/Rd и q на рисунке показано условно. Рис. 2.21. Относительная косвенная адресация Микроконтроллеры семейства поддерживают 4 команды относительной косвенной адресации (две для регистра Y и две для регистра Z): LDD Rd, Y+q/Z+q (пересылка байта из ОЗУ в РОН) и STD Y+q/Z+q, Rr (пересылка байта йз РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды, а величина смещения — в битах 13, 11,10,2...0. Поскольку под значение смещения отводится только 6 бит, оно не может превышать 64. Косвенная адресация с преддекрементом При использовании команд косвенной адресации с преддекрементом содержимое индексного регистра сначала уменьшается на 1, а затем производится обращение по полученному адресу (Рис. 2.22). Рис. 2.22. Косвенная адресация с преддекрементом
Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с преддекрементом: LD Rd, -X/-Y/-Z (пересылка байта из ОЗУ в РОН) и ST -X/-Y/-Z, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды. Косвенная адресация с постинкрементом При использовании команд косвенной адресации с постинкрементом после обращения по адресу, который находится в индексном регистре, содержимое индексного регистра увеличивается на 1 (Рис. 2.23). Рис. 2.23. Косвенная адресация с постинкрементом Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с постинкрементом: LD Rd, X+/Y+/Z+ (пересылка байта из ОЗУ в РОН) и ST X+/Y+/Z+, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды. 2.2.3. Энергонезависимая память данных (EEPROM) Как говорилось выше, все микроконтроллеры семейства, за исключением моделей ATtiny 11х и ATtiny28x, имеют в своем составе энергонезависимую память данных (EEPROM-память). Эта память расположена в собственном адресном пространстве, а ее объем для различных моделей составляет от 64 до 512 байт. Доступ к EEPROM Для работы с EEPROM-памятью используются несколько регистров ввода/вывода: один или два регистра адреса, регистр данных и регистр управления. Все эти регистры, а также их использование подробно рассматриваются в этом подразделе.
Регистр адреса В этот регистр загружается адрес ячейки, к которой будет производиться обращение. Регистр адреса доступен как для записи, так и для чтения. В моделях ATtinyl2x, ATtinyl3x, ATtinyl5L, ATtiny2313x и ATtiny26 регистр адреса размещается в одном регистре ввода/вывода EEAR, расположенном по адресу $1Е ($ЗЕ). В этом регистре используются только 6 или 7 младших битов (количество задействованных битов зависит от объема EEPROM-памяти). Незадействованные биты регистра доступны только для чтения и содержат 0. А в моделях линеек ATtiny24x/44x/84x и ATtiny25x/45x/85x регистр адреса физически размещается в двух РВВ — EEARH:EEARL, расположенных по адресам $1F:$1E ($3F:$3E). Естественно, в регистре EEARH используется только младший бит. Остальные биты регистра EEARH доступны только для чтения и содержат 0. Регистр данных Регистр данных EEDR во всех моделях размещается по адресу $1D ($3D). При записи в этот регистр загружаются данные, которые будут сохранены в EEPROM по адресу, определяемому регистром адреса, а во время чтения в этот регистр помещаются данные, считанные из EEPROM. Регистр управления Регистр управления EEPROM-памяти EECR во всех моделях размещается по адресу $1С ($ЗС). Как следует из названия, данный регистр используется для управления доступом к EEPROM-памяти. Формат этого регистра для разных моделей показан на Рис. 2.24, а его описание приведено в Табл. 2.11. Рис. 2.24. Формат регистра EECR
Таблица 2.11. Биты регистра EECR Бит Название Описание Модель 7...6 - Зарезервированы, читаются как 0 Все модели 5,4 ЕЕРМ1, ЕЕРМО Выбор режима программирования. Эти биты определяют операцию, которая будет выполнена после записи 1 в бит ЕЕРЕ. При установленном бите ЕЕРЕ запись в биты ЕЕРМ1:0 игнорируется. 13х, 2313х, 24х/44х/84х, 25х/45х/85х ЕЕРМ1 ЕЕРМО Длительность Операция 0 0 3.4 мс Стирание + запись (атомарная операция) 0 1 1.8 мс Только стирание 1 0 1.8 мс Только запись 1 1 - Зарезервировано - Зарезервированы, читаются как 0 Остальные модели 3 EERIE Разрешение прерывания от EEPROM. Этот бит управляет генерацией прерывания, возникающего при завершении цикла программирования EEPROM. Если бит установлен в 1, прерывания разрешены (если флаг I регистра SREG также установлен в 1). При сброшенном бите ЕЕРЕ (см. далее в таблице) прерывание генерируется постоянно Все модели 2 ЕЕМРЕ Управление разрешением записи в EEPROM. Состояние этого бита определяет функционирование флага разрешения записи EEWE (ЕЕРЕ). Если данный бит установлен в 1, то при записи 1 в бит EEWE (ЕЕРЕ) происходит запись данных в EEPROM. В противном случае установка EEWE (ЕЕРЕ) в 1 не производит никакого эффекта. После установки бит EEMWE (ЕЕМРЕ) сбрасывается ап- паратно через 4 такта 13х, 2313х, 24х/44х/84х, 25х/45х/85х EEMWE Остальные модели 1 ЕЕРЕ Разрешение записи в EEPROM. При установке этого бита в 1 происходит запись данных в EEPROM (если EEMWE (ЕЕМРЕ) равен 1) 13х, 2313х, 24х/44х/84х, 25х/45х/85х EEWE Остальные модели 0 EERE Разрешение чтения из EEPROM. После установки этого бита в 1 выполняется чтение данных из EEPROM. По окончании чтения этот бит сбрасывается аппаратно Все модели Таким образом, процедура записи одного байта в EEPROM-память состоит из следующих этапов: 1. Дождаться готовности EEPROM к записи данных (ждать, пока не сбросится флаг EEWE (ЕЕРЕ) регистра EECR). 2. Дождаться завершения записи во FLASH-память программ.
3. Загрузить байт данных в регистр EEDR, а требуемый адрес — в регистр EEAR (при необходимости). 4. Установить флаг EEMWE (ЕЕМРЕ) регистра EECR в 1. 5. В течение 4 тактов после установки флага EEMWE (ЕЕМРЕ) записать 1 в бит EEWE (ЕЕРЕ) регистра EECR. После установки этого бита процессор пропускает 2 такта перед выполнением следующей инструкции. Второй пункт введен из-за того, что запись в EEPROM не может выполняться одновременно с записью в FLASH-память. Поэтому перед выполнением записи в EEPROM следует убедиться, что программирование FLASH-памяти завершено. Если микроконтроллер никогда не изменяет содержимое памяти программ, второй шаг может быть пропущен. Процесс обращения к EEPROM-памяти контролируется внутренним калиброванным Ж?-генератором. Соответственно длительность цикла записи зависит от частоты этого генератора, величины напряжения питания и температуры. Типовое значение длительности этого цикла составляет 3.4 мс для моделей ATtinyl3x, ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x и 8.5 мс — для остальных моделей. По окончании цикла записи бит EEWE (ЕЕРЕ) аппаратно сбрасывается, после чего программа может начать запись следующего байта. Следует также помнить, что после установки бита EEWE (ЕЕРЕ) в 1 процессор пропускает 2 такта перед выполнением следующей инструкции. При записи в EEPROM могут возникнуть некоторые проблемы, вызванные прерываниями. При возникновении прерывания между 4-м и 5-м этапами описанной последовательности запись в EEPROM будет сорвана, так как за время обработки прерывания флаг EEMWE (ЕЕМРЕ) сбросится в 0. Если в подпрограмме обработки прерывания, возникшего во время записи в EEPROM-память, также происходит обращение к EEPROM-памяти, то будет изменено содержимое регистров адреса и данных EEPROM. В результате первая запись (прерванная) будет сорвана. Во избежание описанных проблем настоятельно рекомендуется запрещать все прерывания (сбрасывать бит I регистра SREG) на время выполнения пунктов 2...5 описанной выше последовательности. Ниже приведены два примера реализации функции записи в EEPROM-память (управление прерываниями не производится). Пример на ассемблере EEPROM_write: sbic EECR,ЕЕРЕ ; Ждать завершения предыдущей записи rjmp EEPROM_write ldi rl6, (0«EEPM1) I (0«EEPM0)
out eecr,rl6 ; задать режим записи out eearh, rl8 out eearl, r17 ; занести адрес (rl8:rl7) в регистр адреса out eedr, rl6 ; записать данные (rl6) в регистр данных sbi eecr,еемре ; установить флаг eemwe sbi eecr,еере ; начать запись в eeprom ret Пример на Си void eeprom_write(unsigned int uiaddress, unsigned char ucdata) { while (eecr & (1«eepe)); /* ждать завершения предыдущей записи */ eecr = (0«еерм1) i (0«еерм0); /* задать режим записи */ eear = uiaddress; /* проинициализировать регистры */ eedr = ucdata; eecr 1= (1«еемре); /* установить флаг eemwe */ eecr 1= (1«еере); /* начать запись в eeprom */ } Процедура чтения данных из EEPROM гораздо проще, чем процедура записи. После загрузки требуемого адреса в регистр EEAR программа должна установить бит EERE регистра EECR в 1. Когда запрошенные данные будут находиться в регистре данных EEDR, произойдет аппаратный сброс этого бита. Однако следить за состоянием бита EERE для определения момента завершения операции чтения не требуется, так как операция чтения из EEPROM всегда выполняется за один такт. Кроме того, после установки бита EERE в 1 процессор пропускает 4 такта перед началом выполнения следующей инструкции. Единственное, на что нужно обратить внимание при чтении из EEPROM, — это состояние флага EEWE. Перед выполнением чтения необходимо убедиться, что этот флаг сброшен. В противном случае, в результате загрузки в регистры новых значений адреса и данных во время записи в EEPROM процедура записи будет прервана, а результат этой записи — не определен. С учетом сказанного функция чтения из EEPROM может быть реализована следующим образом: Пример на ассемблере eeprom_read: sbic eecr,еере ; ждать завершения предыдущей записи rjmp eeprom_read out eearh, rl8 out eearl,r17 ; занести адрес (rl8:rl7) в регистр адреса sbi eecr,eere ; начать чтение in rl6 ,eedr ; сохранить данные ret
Пример на Си unsigned char eeprom_write(unsigned int uiaddress) { while (eecr & (1«eepe)); /* ждать завершения предыдущей записи */ eear = uiaddress; /* проинициализировать регистр адреса */ eecr 1= (1«eere); /* выполнить чтение */ return eedr; } Меры предосторожности К сожалению, у EEPROM-памяти есть один недостаток: при снижении напряжения питания хранящиеся в ней данные могут быть повреждены. Это может произойти по двум причинам: • если напряжение питания ниже некоторой величины, то запись в EEPROM будет произведена некорректно; • микроконтроллер сам может выполнять команды некорректно, если напряжение питания будет ниже нормы. Чтобы избежать повреждения данных, хранящихся в EEPROM, достаточно воспользоваться одним из трех следующих решений: 1. Удерживать микроконтроллер в состоянии сброса все время, пока напряжение питания находится ниже нормы. Для этого следует использовать встроенный детектор пониженного напряжения питания (Brown-Out Detector — BOD). Более подробно о нем будет рассказано в подразделе 4.4.4. 2. Удерживать микроконтроллер в «спящем» режиме (Power Down), пока напряжение питания находится ниже нормы. Поскольку в этом режиме микроконтроллер не может выполнять никаких команд, такое решение эффективно защищает служебные регистры EEPROM от непреднамеренной записи. 3. Хранить константы в FLASH-памяти программ, если они не должны меняться во время работы программы. Микроконтроллер не может самостоятельно производить запись в FLASH-память, соответственно, при понижении напряжения питания ее содержимое не будет повреждено. 2.3. Счетчик команд и выполнение программы 2.3.1. Счетчик команд Счетчик команд представляет собой регистр, в котором содержится адрес следующей исполняемой команды. Напрямую из программы он не доступен. Размер счетчика команд зависит от объема имеющейся памяти программ и составляет от 9 до 12 бит.
При нормальном (линейном) выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или на 2 (в зависимости от выполняемой команды) в каждом такте. Этот порядок нарушается при выполнении команд перехода, вызова и возврата из подпрограмм, а также при возникновении прерываний. После включения питания, а также после сброса микроконтроллера в счетчик программ автоматически загружается значение $000. Как правило, по этому адресу располагается команда безусловного относительного перехода (RJMP) к инициализационной части программы. При возникновении прерывания в счетчик команд загружается адрес соответствующего вектора прерывания. Если прерывания используются в программе, то по адресам векторов прерываний должны размещаться команды относительного перехода к подпрограммам обработки прерываний. 2.3.2. Функционирование конвейера Одной из причин, обуславливающей высокое быстродействие микроконтроллеров AVR, является использование двухуровневого конвейера при выполнении программы. Работа этого конвейера показана на Рис. 2.25. Рис. 2.25. Последовательность выполнения команд в конвейере Во время первого такта происходит выборка команды из памяти программ и ее декодирование. Во время второго такта эта команда выполняется, а параллельно происходит выборка и декодирование второй команды и т.д. В результате фактическое время выполнения каждой команды получается равным одному периоду тактового сигнала микроконтроллера. В действительности, при выполнении определенных команд происходит нарушение нормального функционирования конвейера. Наиболее ярким примером команд, вызывающих подобное нарушение, являются
команды условного перехода, а также команды типа Test & Skip (проверка и пропуск следующей команды, если результат проверки положительный). В случае истинности условия, проверяемого командой условного перехода, выполнение программы должно будет продолжиться с некоторого адреса. А поскольку в конвейере уже произошла выборка команды, расположенной за командой перехода, время выполнения команды перехода увеличивается на один такт, во время которого происходит выборка команды, расположенной по требуемому адресу. Во втором случае, при выполнении команд типа Test & Skip следующая команда не выполняется в случае истинности проверяемого условия. Однако выборка пропускаемой команды уже произошла. Вследствие того, что команда не выполняется, в конвейере образуется «дырка», которая заключается в пропуске одного (или двух, в зависимости от пропускаемой команды) тактов. Соответственно, команды типа Test & Skip выполняются за один такт, если результат проверки условия отрицателен, и за два или три такта, если он положителен. Очевидно, что в результате выполнения любой команды, изменяющей содержимое счетчика команд (команды перехода, вызова и возврата из подпрограмм), также возникает «разрыв» в работе конвейера, вследствие чего происходит задержка в выполнении программы. Длительность задержки составляет от двух до четырех тактов в зависимости от команды. Для получения более подробной информации обратитесь к описанию команд, приведенному в главе 3. По той же причине нарушение нормального функционирования конвейера происходит и при возникновении прерываний. Минимальная задержка при этом составляет 4 такта. 2.3.3. Команды типа «проверка/пропуск» (Test & Skip) В командах этого типа производится проверка условия, результат которой влияет на выполнение следующей команды. Если условие истинно, следующая команда игнорируется. Например, команда SBRS Rd. b проверяет бит b регистра Rd и игнорирует следующую команду, если этот бит равен 1. В действительности, переход к следующей инструкции производится увеличением счетчика команд на 1, а пропуск команды требует загрузки нового значения в счетчик команд. Следовательно, когда проверяемое условие истинно, в конвейере возникает задержка. Длительность задержки зависит от размера пропускаемой команды и составляет от одного до двух тактов.
2.3.4. Команды условного перехода В этих командах производится проверка условия, результат которой влияет на состояние счетчика команд. Если условие истинно, происходит переход по заданному адресу. Если же условие ложно, выполняется следующая команда. Команды условного перехода имеют ограничение по области действия. В действительности новое значение счетчика команд получается прибавлением к нему или вычитанием из него некоторого смещения. А поскольку под значение смещения в слове команды отводится всего 7 бит, максимальная величина перехода составляет от -64 до +64 слов. Так как переход по заданному адресу осуществляется загрузкой нового значения в счетчик команд, то в случае истинности проверяемого условия в конвейере возникает задержка длительностью в один такт. 2.3.5. Команды безусловного перехода Для безусловного перехода по требуемому адресу в памяти программ используется команда относительного перехода RJMP и команда косвенного перехода IJMP. Причем, если первая поддерживается всеми моделями семейства, то вторая имеется только в новых микроконтроллерах ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x и ATtiny26x. Относительный переход — команда rjmp При выполнении команды относительного перехода содержимое счетчика команд изменяется прибавлением к нему или вычитанием из него некоторого значения, являющегося операндом команды, как показано на Рис. 2.26. Поскольку под значение операнда в слове команды отводится всего 11 бит, с помощью этой команды можно переходить только в пределах -2047...+2048 слов. Рис. 2.26. Относительная адресация памяти программ
В программах в качестве операндов этой команды вместо констант используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды. Проиллюстрируем сказанное следующим примером: cpi г16,$42 ; Сравниваем регистр R16 с числом $42 brne error ; Переход, если R16 о $42 rjmp ok ; Безусловный переход error: ok: nop ; Место перехода по команде RJMP Поскольку команда относительного перехода изменяет содержимое счетчика команд, она выполняется за 2 такта. Косвенный переход — команда i jmp При выполнении этой команды осуществляется переход по адресу, который находится в индексном регистре Z. Соответственно, процесс выполнения команды сводится к загрузке содержимого индексного регистра в счетчик команд (Рис. 2.27). Как и команда относительного перехода, команда косвенного перехода выполняется за 2 такта. 2.3.6. Команды вызова подпрограмм Для вызова подпрограмм в микроконтроллерах семейства Tiny имеются также две команды: команда относительного вызова RCALL и команда косвенного вызова ICALL (только в моделях ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x и ATtiny26x). Если не принимать во внимание некоторые отличия, описанные ниже, эти команды работают так же, как и соответствующие команды безусловного перехода.
Относительный вызов подпрограммы — команда rcall Сначала команда rcall сохраняет в стеке адрес возврата — текущее значение счетчика команд, увеличенное на 1. Затем содержимое счетчика команд увеличивается или уменьшается на некоторое значение, являющееся операндом команды (см. Рис. 2.26). В программах в качестве операндов этой команды, как и в случае команды rjmp, используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды. Команда относительного вызова подпрограмм выполняется за 3 такта, два из которых затрачиваются на сохранение в стеке двухбайтного счетчика команд. Косвенный вызов подпрограммы — команда icall Команда icall сначала сохраняет в стеке адрес возврата. Затем в счетчик команд загружается содержимое индексного регистра (Рис. 2.27). Выполняется эта команда также за 3 такта. 2.3.7. Команды возврата из подпрограмм Каждая подпрограмма обязательно должна завершаться командой возврата из нее. В системе команд микроконтроллеров семейства имеется две таких команды. Для возврата из обычной подпрограммы, вызываемой командой rcall, используется команда ret. Для возврата из подпрограммы обработки прерывания используется команда reti. Обе команды восстанавливают из стека содержимое счетчика команд, сохраненное там перед переходом к подпрограмме. Команда возврата из подпрограммы reti дополнительно устанавливает в 1 флаг общего разрешения прерываний I регистра SREG, сбрасываемый аппаратно при возникновении прерывания. На выполнение каждой из команд возврата из подпрограммы требуется 4 такта. 2.4. Стек В моделях без ОЗУ ATtinyl 1х/12х, ATtinyl5L и ATtiny28x стек реализован аппаратно. Глубина стека равна трем уровням, а размер равен размеру счетчика команд (9 или 10 бит). Стек расположен в собственной области памяти и имеет LIFO-организацию (Last In First Out — последним вошел, первым вышел), т.е. значение, записанное последним, будет прочитано первым.
При вызове подпрограммы адрес команды, расположенной за командой RCALL, сохраняется в стеке. При возврате из подпрограммы этот адрес извлекается из стека и загружается в счетчик команд. То же происходит и во время прерывания. При генерации прерывания адрес следующей команды сохраняется в стеке, а при возврате из подпрограммы обработки прерывания он восстанавливается из стека. Непосредственно из программы стек недоступен, так как в наборе команд этих моделей отсутствуют команды занесения в стек и извлечения из стека. Указатель стека также недоступен из программы, т.е. его нельзя явно прочитать или модифицировать. Чтобы лучше понять работу стека, обратимся к Рис 2.28. При выполнении команды RCALL (Рис. 2.28, а) содержимое счетчика команд пересылается на 1-й уровень стека, а предыдущие значения предварительно «сползают» на один уровень (значение, находившееся на первом уровне, перемещается на второй уровень и т.д.). Заметим, что в результате этой операции будет потеряно значение, расположенное на 3-м уровне стека. При выполнении команды возврата из подпрограммы RET или RETI (Рис. 2.28, б) значение, хранящееся на 1-м уровне стека, заносится в счетчик команд. Во время этой операции все значения «поднимаются» на один уровень вверх (значение, находившееся на втором уровне, перемещается на первый уровень и т.д.). Рис. 2.28. Работа стека при выполнении команды RCALL (а) и команды RET (б)
В остальных микроконтроллерах семейства, т.е. в моделях с ОЗУ, стек реализован программно. Он размещается в памяти данных, и его глубина определяется только размером свободной области памяти данных. В качестве указателя стека используется либо один регистр ввода/вывода (SPL в моделях ATtinyl3x/ATtiny2313x и SP в моделях ATtiny28x), расположенный по адресу $3D ($5D), либо пара регистров SPH:SPL (в моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x), расположенных по адресам $ЗЕ ($5Е) и $3D ($5D) соответственно. Так как после подачи напряжения питания (или после сброса) в регистрах содержится нулевое значение, в самом начале программы указатель стека необходимо проинициализиро- вать, записав в него значение верхнего адреса памяти данных. Обычно это делается следующим образом: ldi rl6,low(RAMEND) ; Загрузим в рабочий регистр младший байт значения out SPL,rl6 ; Инициализируем указатель стека ldi rl6,high(RAMEND) ; Загрузим в рабочий регистр старший байт значения out SPH,rl6 ; Инициализируем указатель стека При вызове подпрограмм адрес команды, расположенной за командой вызова, сохраняется в стеке (значение указателя стека при этом уменьшается на 2). При возврате из подпрограммы этот адрес извлекается из стека и загружается в счетчик команд. Значение указателя стека, соответственно, увеличивается на 2. То же происходит и во время прерывания. В этих моделях микроконтроллеров стек доступен программно. Для работы со стеком имеются две команды: команда занесения в стек (PUSH) и команда извлечения из стека (POP).
ГЛАВА 3 Система команд 3.1. Общие сведения Система команд микроконтроллеров AVR семейства Tiny весьма развита и насчитывает в различных моделях от 90 до 120 различных инструкций. Несмотря на то что микроконтроллеры AVR — это микроконтроллеры с RISC-архитектурой (процессор с сокращенным набором команд), по количеству реализованных инструкций и их разнообразию они больше похожи на микроконтроллеры с CISC-архитектурой (процессор с полным набором команд). Практически каждая из команд (за исключением команд, у которых одним из операндов является 16-битный адрес) занимает одну ячейку памяти программ. Причем это достигнуто не за счет сокращения количества команд процессора, а за счет увеличения разрядности памяти программ. 3.2. Операнды Программа для любого микроконтроллера представляет собой последовательность команд, записанных в памяти программ. Большинство команд при выполнении изменяют содержимое одного или нескольких регистров общего назначения, регистров ввода/вывода или ячеек ОЗУ. Для обращения к разным областям адресного пространства памяти данных используются различные команды, реализующие, в свою очередь, различные способы адресации. Подробно способы адресации памяти данных были рассмотрены в главе 2. Доступ к регистрам ввода/вывода осуществляется по их адресам, являющимся операндами команды. Однако при написании программ гораздо удобнее обращаться к регистрам, используя вместо числовых значений адресов их стандартные, принятые в документации символические имена. Чтобы задать соответствие этих имен реальным адресам необходимо подключить в начале программы (при помощи директивы ассемблера .INCLUDE) файл определения адресов регистров ввода/вывода. Помимо
всего прочего, такое решение облегчит перенос программного обеспечения с одного типа кристалла на другой. Эти файлы (для каждой модели микроконтроллеров семейства) свободно распространяются фирмой Atmel вместе с документацией на микроконтроллеры (в частности, включаемые файлы для всех выпускаемых микроконтроллеров AVR входят в комплект бесплатно распространяемой интегрированной среды AVR Studio). Для РОН, используемых в индексных регистрах, в этих файлах определяются также дополнительные символические имена (см. Табл. 3.1). Таблица 3.1. Дополнительные символические имена индексных регистров Регистр Символическое имя R26 XL R27 ХН R28 YL R29 YH R30 ZL R31 ZH Названия этих включаемых файлов унифицированы и определяются следующим образом: <номер_модели>(Зе£. inc Например, программа для микроконтроллера ATtinyl3x должна содержать следующую директиву ассемблера: .include "tnl3def.inc" Необходимо только помнить, что если для обращения к регистру ввода/вывода используются команды обмена с ОЗУ, то к символическому имени требуется прибавить число $20. Как говорилось выше, в микроконтроллерах семейства память программ является 16-битной. Поэтому большинство команд описываются 16-битным словом, которое называется также кодом операции (КОП). Код операции — это число, расположенное в памяти программ и определяющее действие, которое необходимо произвести между источником и приемником. Некоторые команды, у которых один из операндов является 16-битным адресом, занимают две ячейки памяти программ. Соответственно, код операции таких команд является 4-байтным числом.
В ряде случаев значение операнда-источника может содержаться непосредственно в коде операции, а не в регистре. Это происходит в том случае, когда операндом-источником является константа. Некоторые константы, которые могут быть полезны при написании программ, определены в упомянутых включаемых файлах: IOEND — значение верхнего адреса области РВВ; SRAM_START — значение младшего адреса ОЗУ, доступного для хранения данных (для моделей без ОЗУ эта константа не определена); SRAM_SIZE — объем ОЗУ в байтах (для моделей без ОЗУ = 0); RAMEND — значение верхнего адреса внутреннего ОЗУ (для моделей без ОЗУ = 0); Е2 END — значение верхнего адреса EEPROM; EEPROMEND — то же, что и E2END; EEADRBITS — число задействованных битов регистра адреса EEPROM; FLASHEND — значение верхнего адреса памяти программ (в 2-байтных словах); PAGESIZE — размер страницы памяти программ (в 2-байтных словах). 3.3. Типы команд Все множество команд микроконтроллеров семейства можно разбить на несколько групп: • команды логических операций; • команды арифметических операций и команды сдвига; • команды операций с битами; • команды пересылки данных; • команды передачи управления; • команды управления системой. Далее подробно описана каждая группа команд. 3.3.1. Команды логических операций Эти команды позволяют выполнять стандартные логические операции над байтами, такие как логическое умножение (И), логическое сложение (ИЛИ), операцию «Исключающее ИЛИ», а также вычисление обратного (дополнение до единицы) и дополнительного (дополнение до двух) кодов числа. К этой группе можно отнести также команды очистки/установки регистров и команду перестановки полубайтов. Операции производятся между регистрами общего назначения либо между регистром и константой; результат сохраняется в РОН. Все команды из этой группы выполняются за один такт.
3.3.2. Команды арифметических операций и команды сдвига К данной группе относятся команды, позволяющие выполнять такие базовые операции, как сложение, вычитание, сдвиг (вправо и влево), инк- рементирование, декрементирование, а также умножение. Все операции производятся только над регистрами общего назначения. При этом микроконтроллеры AVR позволяют легко оперировать как знаковыми, так и беззнаковыми числами, а также работать с числами, представленными в дополнительном коде. Почти все команды рассматриваемой группы выполняются за один такт. Команды умножения и команды, оперирующие двухбайтными значениями, выполняются за два такта. 3.3.3. Команды битовых операций К данной группе относятся команды, выполняющие установку или сброс заданного бита РОН или РВВ. Причем для изменения битов регистра состояния SREG имеются отдельные команды (точнее говоря, эквивалентные мнемонические обозначения общих команд), так как проверка состояния битов именно этого регистра производится чаще всего. Условно к этой группе можно отнести также две команды передачи управления типа «проверка/пропуск», которые пропускают следующую команду в зависимости от состояния бита РОН или РВВ. Все задействованные биты РВВ имеют свои символические имена. Определения этих имен описаны в том же включаемом файле, что и определения символических имен адресов регистров (см. раздел 3.2). Соответственно, после включения в программу указанного файла в командах вместо числовых значений номеров битов можно будет указывать их символические имена. Следует помнить, что в командах CBR и SBR операндом является битовая маска, а не номер бита. Для получения битовой маски из номера бита следует воспользоваться ассемблерным оператором «сдвиг влево» (««»), как показано в следующем примере: sbr т1в, (1«se) + (1«sm) 6ut mcucr,rl6 ; установить флаги se и sm регистра mcucr Всем командам данной группы требуется один такт для выполнения, за исключением случаев, когда в результате проверки происходит пропуск команды. В этом случае команда выполняется за 2 или 3 такта, в зависимости от пропускаемой команды.
3.3.4. Команды пересылки данных Команды этой группы предназначены для пересылки содержимого ячеек, находящихся в адресном пространстве памяти данных. Разделение адресного пространства на три части (РОН, РВВ, ОЗУ) предопределило разнообразие команд данной группы. Пересылка данных, выполняемая командами группы, может производиться в следующих направлениях: • РОН<^>РОН; • РОН о РВВ; • РОН <=> память данных. Также к данной группе можно отнести стековые команды push и pop, позволяющие сохранять в стеке и восстанавливать из стека содержимое РОН. На выполнение команд данной группы требуется от одного до трех тактов, в зависимости от команды. 3.3.5. Команды передачи управления В эту группу входят команды перехода, вызова подпрограмм и возврата из них и команды типа «проверка/пропуск», пропускающие следующую за ними команду при выполнении некоторого условия. Также к этой группе относятся команды сравнения, формирующие флаги регистра SREG и предназначенные, как правило, для работы совместно с командами условного перехода. В системе команд микроконтроллеров семейства имеются команды как безусловного, так и условного переходов. Команды относительного (rjmp) и косвенного (ijmp) безусловного перехода, являются самыми простыми в этой группе. Их функция заключается только в записи нового адреса в счетчик команд. Команды условного перехода также изменяют содержимое счетчика команд, однако это изменение происходит только при выполнении некоторого условия или, точнее, при определенном состоянии различных флагов регистра SREG. Все команды условного перехода можно разбить на две подгруппы. Первая подгруппа — команды условного перехода общего назначения. В эту подгруппу входят две команды — brbs s, к и brbc s, к, в которых явно задается номер тестируемого флага регистра SREG. Соответственно, переход осуществляется при SREG.s = О (brbc) или SREG.s = 1 (brbs). Другую подгруппу составляют 18 специализированных команд, каждая из которых выполняет переход по какому-либо конкретному условию («равно», «больше или равно», «был перенос» и т.п.). Причем одни команды используются после сравнения беззнаковых чисел, другие —
после сравнения чисел со знаком. Возможные проверяемые условия, а также соответствующие им команды условного перехода приведены в Табл. 3.2. Таблица 3.2. Сводная таблица команд условного перехода Проверка Логическое условие Команда Обратная проверка Логическое условие Команда Тип данных Rd>Rr Z«(N0V) = O BRLT1} Rd <Rr Z + (N0V) = 1 BRGEU Co знаком Rd>Rr (N0V) = O BRGE Rd<Rr (N0V)=1 BRLT Co знаком Rd = Rr Z=l BREQ Rd*Rr Z = 0 BRNE Co знаком Rd<Rr Z + (N0V)=1 BRGE1* Rd>Rr Z»(N0V) = O BRLTn Co знаком Rd<Rr (N0V)=1 BRLT Rd>Rr (N0V) = O BRGE Co знаком Rd>Rr c + z=o BRLO1* Rd<Rr C + Z=l BRSHX) Без знака Rd>Rr C = 0 BRHS/BRCC Rd<Rr C=l BRLO/BRCS Без знака Rd = Rr Z=l BREQ Rd*Rr z = o BRNE Без знака Rd<Rr C = Z=1 BRSH11 Rd>Rr c = z=o BRLO1* Без знака Rd<Rr C=l BRLO/BRCS Rd>Rr c=o BRSH/BRCC Без знака Перенос C=l BRCS Нет переноса c = o BRCC - Меньше нуля N = 1 BRMI Больше нуля N = 0 BRPL - Переполнение V=l BRVS Нет переполнения v=o BRVC - Ноль Z=l BREQ Не ноль z=o BRNE - !) Для перехода по этому условию операнды предшествующей команды сравнения должны быть записаны в обратном порядке, т.е. вместо CP Rd,Rr -> CP Rr,Rd. Вообще говоря, команды, указанные в Табл. 3.2, являются всего лишь эквивалентными мнемоническими обозначениями команд BRBS s,k и BRBC s, к с определенными значениями операнда «s». Команда BREQ к имеет, например, такой же код операции, что и команда BRBS 1, k, а команда BRGE k —BRBC 4, к. Команды вызова подпрограммы (RCALL и ICALL) работают практически так же, как и команды безусловного перехода. Отличие заключается в том, что перед тем, как выполнить переход, значение счетчика команд сохраняется в стеке. Кроме того, подпрограмма должна заканчиваться командой возврата RET, как показано в следующем примере:
В приведенном выше примере команда RET заменяет адрес, находящийся в счетчике команд, адресом команды, следующей за командой CALL. Очевидно, что команды передачи управления нарушают нормальное (линейное) выполнение основной программы. Поэтому при каждом выполнении команды этой группы (кроме команд сравнения) нормальное функционирование конвейера нарушается. Перед загрузкой в конвейер нового адреса производится остановка и очистка выполняемой последовательности команд. В результате на выполнение команд затрачивается больше одного такта. Чтобы получить более точную информацию, обратитесь к таблицам, приведенным в разделе 3.4. 3.3.6. Команды управления системой В эту группу входят всего 4 команды: • NOP — пустая команда; • SLEEP — перевод микроконтроллера в режим пониженного энергопотребления; • WDR — сброс сторожевого таймера; • BREAK — команда, используемая внутрисхемным отадчиком. Все команды этой группы, кроме последней, выполняются за один 3.4. Сводные таблицы команд В Табл. 3.3...3.8 указаны все команды, которыми располагают микроконтроллеры AVR семейства Tiny. В каждой таблице команды сгруппированы по функциональному признаку. В таблицах приведены основные сведения о командах, такие как мнемоническое обозначение команды, число тактов, необходимых для ее выполнения, а также флаги регистра SREG, на которые воздействует эта команда. Информация в таблицах изложена в сжатом виде, а детальное описание всех команд приведено в разделе 3.5. Серым цветом в таблицах выделены команды, отсутствующие в моделях без ОЗУ. такт. rcall sp_test ; Вызов подпрограммы «sp_test» ... ; Текст основной программы sp_test ; Метка подпрограммы push г2 ; Сохранить г2 в стеке ; Выполнение подпрограммы pop г2 ; Восстановить г2 из стека ret ; Возврат из подпрограммы
Таблица 3.3. Группа команд логических операций Команда Мнемоника Операция Число тактов Флаги «Логическое И» двух РОН AND Rd,Rr Rd = Rd*Rr 1 Z,N,V «Логическое И» РОН и константы ANDI Rd,K Rd = Rd • К 1 Z, N,V «Исключающее ИЛИ» двух РОН EOR Rd,Rr Rd = Rd0Rr 1 Z.N.V «Логическое ИЛИ» двух РОН OR Rd,Rr Rd = Rd v Rr 1 Z, N,V «Логическое ИЛИ» РОН и константы ORI Rd,K Rd = Rd v К 1 Z, N,V Перевод в обратный код COM Rd Rd = $FF - Rd 1 Z, C, N,V Перевод в дополнительный код NEG Rd Rd = $00 - Rd 1 Z, C,N,V,H Сброс всех битов РОН CLR Rd Rd = Rd0Rd 1 Z,N,V Установка всех битов РОН SER Rd Rd = $FF 1 - Проверка РОН на отрицательное или нулевое значение TST Rd Rd.Rd Z,N,V Обмен местами полубайтов в РОН SWAP Rd Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) 1 - Таблица 3.4. Группа команд арифметических операций Команда Мнемоника Операция Число тактов Флаги Сложение двух РОН ADD Rd,Rr Rd = Rd + Rr 1 Z,C, N,V,H Сложение двух РОН с переносом ADC Rd,Rr Rd = Rd + Rr + C 1 Z,C, N,V,H Сложение регистровой пары с константой ADIW Rdh:Rdl,K Rdh:Rdl-Rdh:Rdl + K 2 Z,C,N,V,S Вычитание двух РОН SUB Rd,Rr Rd = Rd - Rr 1 Z,C,N,V,H Вычитание константы из РОН SUBI Rd,K Rd = Rd - К 1 Z,C, N,V,H Вычитание двух РОН с заемом SBC Rd;Rr Rd = Rd-Rr-C 1 Z,C,N,V,H Вычитание константы из РОН с заемом SBCI Rd,K Rd = Rd - К - С 1 Z,C, N,V,H Вычитание константы из регистровой пары SBIW Rdh:Rdl,К Rdh:Rdl = Rdh:Rdl-K 2 Z,C,N,V,S Декрементирование РОН DEC Rd Rd = Rd - 1 1 Z,N,V Инкрементирование РОН INC Rd Rd = Rd+l 1 Z,N,V Арифметический сдвиг вправо ASR Rd Rd(n) = Rd(/i+l),/i = 0..6 1 Z, C,N,V Логический сдвиг влево LSL Rd Rd(«+l) = Rd(/i),Rd(0) = 0 1 Z, C,N,V Логический сдвиг вправо LSR Rd Rd(w) = Rd(,2+l),Rd(7) = 0 1 Z, C,N,V Сдвиг влево через перенос ROL Rd Rd(0) = C, Rd(/i+l) = Rd(/i), C = Rd(7) 1 Z, C,N,V Сдвиг вправо через перенос ROR Rd Rd(7) = C, Rd(w) = Rd(«+l), C = Rd(0) 1 Z, C,N,V
Таблица 3.5. Группа команд операций с битами Команда Мнемоника Операция Число тактов Флаги Сброс бита(ов) РОН CBR Rd,K Rd = Rd • ($FF - K) 1 Z.N.V Установка бита(ов) РОН SBR Rd,K Rd = Rd v К 1 Z,N,V Сброс бита РВВ CBI A,b A.b = 0 - Установка бита РВВ SBI A,b A.b=l - Сброс флага BCLR s SREG.s = 0 1 SREG.s Установка флага BSET s SREG.s =1 1 SREG.s Загрузка бита РОН из флага Т (SREG) BLD Rd,b Rd.b = T - Запись бита РОН в флаг Т (SREG) BST Rr,b T = Rr.b 1 T Сброс флага переноса CLC C = 0 1 С Установка флага переноса SEC C=l 1 С Сброс флага отрицательного числа CLN N = 0 1 N Установка флага отрицательного числа SEN N = 1 N Сброс флага нуля CLZ Z = 0 1 Z Установка флага нуля SEZ Z=l 1 z Общее запрещение прерываний CLI 1 = 0 1 I Общее разрешение прерываний SEI 1 = 1 1 I Сброс флага знака CLS s = o 1 s Установка флага знака SES S=l 1 s Сброс флага переполнения дополнительного кода CLV v=o V Установка флага переполнения дополнительного кода SEV V=l V Сброс флага Т CLT T = 0 1 T Установка флага Т SET T=l 1 T Сброс флага половинного переноса CLH H = 0 1 H Установка флага половинного переноса SEH H = l 1 H
Таблица 3.6. Группа команд пересылки данных Команда Мнемоника Операция Число тактов Флаги Пересылка между РОН MOV Rd,Rr Rd = Rr 1 - Пересылка двухбайтовых значений MOW Rd,Rr Rd+ l:Rd = Rr+ l:Rr 1 - Загрузка константы в РОН LDI Rd,К Rd = К 1 Косвенное чтение LD Rd,X Rd = [X] 2 - Косвенное чтение с постинкрементом LD Rd,X+ Rd = |X],X=X+ 1 2 - Косвенное чтение с преддекрементом LD Rd,-X X=X-l,Rd = [X] 2 - Косвенное чтение LD Rd,Y Rd=[Y] 2 - Косвенное чтение с постинкрементом LD Rd,Y+ Rd = |Y|, Y = Y+ 1 2 - Косвенное чтение с преддекрементом LD Rd,-Y Y = Y-l,Rd=[Y] 2 - Косвенное относительное чтение LDD Rd,Y+q Rd = [Y+q] 2 - Косвенное чтение LD Rd,Z Rd = [Z] 2 Косвенное чтение с постинкрементом LD Rd,Z+ Rd=[Z],Z = Z+l 2 - Косвенное чтение с преддекрементом LD Rd,-Z Z = Z-l,Rd = [Z] 2 - Косвенное относительное чтение LDD Rd,Z+q Rd = [Z + q] 2 - Непосредственное чтение из ОЗУ LDS Rd,k Rd = [k] 2 - Косвенная запись ST X,Rr [X] = Rr 2 - Косвенная запись с постинкрементом ST X+,Rr [X] = Rr, X = X + 1 2 - Косвенная запись с преддекрементом ST -X,Rr X = X-l,[X] = Rr 2 - Косвенная запись ST Y,Rr [Y] = Rr 2 - Косвенная запись с постинкрементом ST Y+,Rr [Y] = Rr,Y = Y+l 2 - Косвенная запись с преддекрементом ST -Y,Rr Y = Y- 1, [X] = Rr 2 - Косвенная относительная запись STD Y+q,Rr [Y+q] = Rr 2 - Косвенная запись ST Z,Rr [Z] = Rr 2 Косвенная запись с постинкрементом ST Z+,Rr [Z] = Rr, Z = Z + 1 2 - Косвенная запись с преддекрементом ST -Z,Rr Z = Z-l,[Z] = Rr 2 - Косвенная относительная запись STD Z+q,Rr [Z + q] = Rr 2 - Непосредственная запись в ОЗУ STS k,Rr [k] = Rr 2 - Загрузка данных из памяти программ LPM RO = {Z} 3 Загрузка данных из памяти программ LPM Rd,Z Rb = {Z} 3 - Загрузка данных из памяти программ с постинкрементом LPM Rd,Z+ Rb = {Z}, Z = Z + 1 3 - Запись в память программ SPM {Z} = R1:R0 - - Пересылка из РВВ в РОН IN Rd,A Rd = A 1 Пересылка из РОН в РВВ OUT A,Rr A = Rr 1 Сохранение байта в стеке PUSH Rr STACK = Rr 2 - Извлечение байта из стека POP Rd Rd = STACK 2 -
Таблица 3.7. Группа команд передачи управления Команда Мнемоника Операция Число тактов Флаги Относительный безусловный переход RJMP к PC = PC + k+l 2 - Косвенный безусловный переход IJMP PC-Z 2 - Относительный вызов подпрограммы RCALL к PC = PC + k+l 3(4) - Косвенный вызов подпрограммы ICALL PC-Z 3(4) Возврат из подпрограммы RET PC = STACK 4(5) - Возврат из подпрограммы обработки прерывания RETI PC = STACK 4(5) I Сравнение РОН CP Rd,Rr Rd-Rr 1 Z,N,V,C,H Сравнение РОН с учетом переноса CPC Rd;Rr Rd-Rr-C 1 Z,N,V,C,H Сравнение РОН с константой CPI Rd,K Rd-K 1 Z,N,V,C,H Сравнение и пропуск следующей команды при равенстве CPSE Rd,Rr Если Rd = Rr, тоРС = РС + 2(3) 1/2/3 - Пропуск следующей команды, если бит РОН сброшен SBRC Rr,b Если Rr.b = 0, тоРС = РС + 2(3) 1/2/3 - Пропуск следующей команды, если бит РОН установлен SBRS Rr,b Если Rr.b = 1, тоРС = РС + 2(3) 1/2/3 - Пропуск следующей команды, если бит РВВ сброшен SBIC A7b Если A.b = 0, тоРС = РС + 2(3) 1/2/3 - Пропуск следующей команды, если бит РВВ установлен SBIS A,b Если A.b = 1, тоРС = РС + 2(3) 1/2/3 - Переход, если флаг s регистра SREG сброшен BRBC s,k Если SREG.s = 0, тоРС = РС + к+1 1/2 - Переход, если флаг s регистра SREG установлен BRBS s,k Если SREG.s =1, тоРС = РС + к+1 1/2 - Переход по переносу BRCS к Если С = 1, тоРС = РС + к+1 1/2 - Переход, если нет переноса BRCC к Если С = 0, то PC = PC + к + 1 1/2 - Переход по «равно» BREQ к Если Z = 1, то PC = PC + к + 1 1/2 -
(продолжение) Команда Мнемоника Операция Число тактов Флаги Переход по «не равно» BRNE к Если Z = 0, тоРС = РС + к+1 1/2 - Переход по «больше или равно» BRSH к Если С = 0, тоРС = РС + к+1 1/2 - Переход по «меньше» BRLO к Если С = 1, тоРС = РС + к+1 1/2 - Переход по «отрицательное значение» BRMI EaraN = 1, тоРС = РС + к+ 1 1/2 - Переход по «положительное значение» BRPL Если N = 0, тоРС = РС + к+1 1/2 - Переход по «больше или равно» (числа со знаком) BRGE Если (N0V) = O, тоРС = РС + к+ 1 1/2 - Переход по «меньше нуля» (числа со знаком) BRLT Если (N0V) = 1, тоРС = РС + к+1 1/2 - Переход по половинному переносу BRHS ЕслиН = 1, тоРС = РС + к+1 1/2 - Переход, если нет половинного переноса BRHC Если Н = 0, тоРС = РС + к+1 1/2 - Переход, если флаг Т установлен BRTS ЕслиТ= 1, тоРС = РС + к+1 1/2 - Переход, если флаг Т сброшен BRTC Если Т = 0, тоРС = РС + к+1 1/2 - Переход по переполнению дополнительного кода BRVS ЕслиУ= 1, тоРС = РС + к+1 1/2 - Переход, если нет переполнения дополнительного кода BRVC ЕслиУ = 0, тоРС = РС + к+1 1/2 - Переход, если прерывания запрещены BRID Если I = 0, тоРС = РС + к+1 1/2 - Переход, если прерывания разрешены BRIE Если1 = 1, тоРС = РС + к+1 1/2
Таблица 3.8. Группа команд управления системой Команда Мнемоника Операция Число тактов Флаги Нет операции NOP - 1 - Переход в «спящий» режим SLEEP См. соответствующие разделы 3 - Сброс сторожевого таймера WDR См. соответствующие разделы 1 - Останов BREAK Используется только внутрисхемным отладчиком 3.5. Описание команд В этом разделе в алфавитном порядке перечислены все команды, поддерживаемые микроконтроллерами семейства Tiny. Для каждой команды приводится ее детальное описание. При описании команд используются обозначения, приведенные в Табл. 3.9. Таблица 3.9. Обозначения, используемые при описании команд Обозначение, символ Описание Регистр состояния SREG Регистр состояния микроконтроллера С Флаг переноса (0-й бит регистра SREG) Z Флаг нуля (1-й бит регистра SREG) N Флаг отрицательного значения (2-й бит регистра SREG) V Флаг переполнения дополнительного кода (3-й бит регистра SREG) S Флаг знака (4-й бит регистра SREG); S = N Ф V н Флаг половинного переноса (5-й бит регистра SREG) т Пользовательский флаг (6-й бит регистра SREG) I Флаг общего разрешения прерываний (7-й бит регистра SREG) Регистры и операнды Rd Регистр-приемник (иногда также регистр-источник) в регистровом файле
Обозначение, символ Описание Rr Регистр-источник в регистровом файле К Константа (данные) к Адрес — константа b Номер бита РОН или РВВ (0...7) s Номер бита регистра состояния SREG (0...7) X,Y,Z Индексные регистры (X = R27:R26, Y= R29:R28, Z = R31:R30) I/O Регистр ввода/вывода А Адрес в пространстве ввода/вывода q Смещение при относительной косвенной адресации (6-битное значение) Разделитель между названием (адресом) регистра и номером бита [XX] Содержимое ячейки памяти данных по адресу XX {XX} Содержимое ячейки памяти программ по адресу XX Операции Инверсия • Логическое И v Логическое ИЛИ е Исключающее ИЛИ Система PC Счетчик команд STACK Текущий уровень стека SP Указатель стека Флаги о Команда воздействует на флаг 0 Флаг сбрасывается командой в 0 1 Флаг устанавливается командой в 1 - Команда не влияет на состояние флага (продолжение)
ADC Rd, Rr Сложение двух РОН с переносом Операция Rd = Rd + Rr+C Код операции 0001 llrdddddrnr 1 слово (2 байта) Операнды 0 < d < 31,0 < г< 31 Описание Складывает содержимое двух регистров Rr и Rd и прибавляет содержимое флага переноса С. Результат помещается в регистр Rd Регистр SREG I Т н S V N Z С - - о о о о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример ; Сложение двух регистровых пар Rl:R0 add r2,r0 ; Сложить младшие байты adc гЗ , rl ; Сложить старшие байты и R3:R2 с учетом переноса ADD Rd, Rr Сложение двух РОН Операция Rd = Rd + Rr Код операции OOOOllrdddddrrrr 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Складывает содержимое двух регистров Rr и Rd. Результат помещается в регистр Rd Регистр SREG I Т н S V N Z С - о <=> <=> о о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример add rl,r2 add r28,r28 ; Прибавить г2 к rl (rl=rl+r2) ; Сложить г28 с самим собой (г28=г28 <-г28)
ADIW Rd+1 :Rd, К Сложение регистровой пары с константой Операция Rd+l:Rd = Rd+l:Rd + K Код операции 1001 ОНО KKdd КККК 1 слово (2 байта) Операнды d g {24,26,28,30},К = 0...63 Описание Складывает содержимое регистровой пары Rd+l:Rd с 6-битным числом. Результат помещается обратно в регистровую пару Регистр SREG I Т н S V N Z С - - - <=> <=> о о о Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / ✓ ✓ / Пример adiw г25:г24Д ; Прибавить 1 к г25:г24 adiw ZH:ZL,63 ; Прибавить 63 к указателю Z(r31:r30) AND Rd, Rr «Логическое И» двух РОН Операция Rd = Rd • Rr Код операции OOlOOOrdddddrnr 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Выполняет операцию «Логическое И» между содержимым регистров Rd и Rr. Результат помещается в регистр Rd Регистр SREG I Т н S V N Z С - - - <=> 0 о о - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / ✓ / / / / / / Пример ldi г16,1 and r2,r!6 ; Загрузить маску 0000 0001 в ; Выделить 0-й бит в г2 г1б
ANDI Rd, К «Логическое И» РОН и константы Операция Rd = Ro• К Код операции om KKKKdddd КККК 1 слово (2 байта) Операнды 16<d<31,0<K<255 Описание Выполняет операцию «Логическое И» между содержимым регистра Rd и 8-битным числом. Результат помещается в регистр Rd. Команда применима только к 16 старшим РОН (R16...R31) Регистр SREG I т Н V N Z С - - - 0 о о - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример andi andi rl7,$0F ; Обнулить старший полубайт регистра г17 г18,$10 ; Выделить 4-й бит в регистре г18 ASR Rd Арифметический сдвиг вправо Операция fij JjQ с Код операции 1001 010d dddd 0101 1 слово (2 байта) Операнды 0<d<31 Описание Сдвигает содержимое регистра Rd на 1 бит вправо. Состояние 7-го бита не изменяется. Значение 0-го бита помещается в флаг С регистра SREG. Часто используется для деления чисел со знаком на два Регистр SREG I Т Н S V N Z С - - - <=> о <=> Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример ldi г1б,$10 ; Записать число 16 в регистр г16 asr rl6 ; г16=г16/2 ldi rl7,$FC ; Записать число -4 в регистр г17 asr rl7 ; г17=г17/2
BCLRs Сброс бита регистра SREG Операция SREG.s = 0 Код операции 1001 0100 lsss 1000 1 слово (2 байта) Операнды 0<s<7 Описание Сбрасывает в 0 заданный бит регистра SREG. Остальные биты регистра SREG остаются без изменения Регистр SREG I т Н S V N Z С <=> о <=> о о о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример bclr bclr 0 ; Сбросить флаг переноса 7 ; Запретить прерывания BLD Rd, Ь Пересылка флага Т в бит РОН Операция Rd.b = T Код операции 1111100ddddd0bbb 1 слово (2 байта) Операнды 0<d<31,0<b<7 Описание Копирует флаг Т регистра SREG в бит b регистра Rd Регистр SREG I Т н V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример ; Копирование бита: bst rl,2 ; Сохранить 2-й бит регистра rl в Т bid г0,4 ; Записать флаг Т в 4-й бит регистра г0
BRBC s, к Переход, если бит регистра SREG сброшен Операция Если SREG.s = 0, то PC = PC + к + 1, иначе PC = PC + 1 Код операции llllOlkkkkkkksss 1 слово (2 байта) Операнды 0<s<7,- -64<k<+63 Описание Условный относительный переход. Проверяет заданный бит регистра SREG и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде Регистр SREG I T Н S V N Z С - " - - " " Число тактов 1,если SREG.s= 1 2, если SREG.s = 0 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример cpi brbc noteq: r20,5 ; Сравнить г20 с числом 5 1,noteq ; Переход, если не равно BRBS s, к Переход, если бит регистра SREG установлен Операция Если SREG.s = 1, то PC = PC + к + 1, иначе PC = PC + 1 Код операции llllOOkkkkkkksss 1 слово (2 байта) Операнды 0<s<7,- -64 < k < +63 Описание Условный относительный переход. Проверяет заданный бит регистра SREG и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде Регистр SREG I T H V N Z С - - - - - - - Число тактов 1,если SREG.s = 0 2, если SREG.s=l Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример bst brbs bitset: rO,3 ; Сохранить 1,bitset ; Переход, 3-й бит г0 в флаге Т если флаг установлен
BRCCk Переход, если не было переноса Операция Если флаг С = 0, то PC = PC + k + 1, иначе PC = PC + 1 Код операции UllOlkkkkkkkOOO 1 слово (2 байта) Операнды -64 < k < +63 Описание Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 0, к Регистр SREG I Т н S V N Z С - - - - - - - Число тактов 1,еслиС= 1 2, если С = 0 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример add r22,r23 ; Прибавить г23 к г22 brcc nocarry ; Перейти, если не было переполнения nocarry: BRCSk Переход по переносу Операция ЕслифлагС = 1,тоРС = РС + к+1,иначе РС = РС+ 1 Код операции ИИООкккккккООО 1 слово (2 байта) Операнды -64<к<+63 Описание Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 0, к Регистр SREG I Т Н со V N Z С - - - - - - - - Число тактов 1,еслиС = 0 2, если С = 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример cpi brcs greater г26;$56 ; Сравнить г23 с $56 greater ; Перейти, если г23 < $56
BREAKк Останов BREQ к Переход по «равно» Операция Если Rd = = Rt(Z=1),toPC = РС + к+ 1, иначе РС = РС+ 1 Код операции 1111 OOkkkkkkkOOl 1 слово (2 байта) Операнды -64 < k < +63 Описание Условный относительный переход. Проверяет флаг нуля (Z) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды CP, CPI, SUB или SUBI переход произойдет только в том случае, если число (со знаком или без знака), находящееся в регистре Rd, будет равно числу (со знаком или без знака), находящемуся в регистре Rr. Эквивалентна команде BRBS 1, к Регистр SREG I T н S V N Z С - - - - - - - - Число тактов 1,если2 = 0 2, если Z = 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример ср rl,rO breq equal equal: ; Сравнить rl с rO ; Перейти, если rl = r2 Операция Останов программы при внутрисхемной отладке Код операции 1001 0101 1001 1000 1 слово (2 байта) Операнды Нет Описание При выполнении команды ЦПУ AVR переходит в режим останова, в котором внутрисхемный отладчик имеет доступ к внутренним ресурсам микроконтроллера. Если установлены ячейки защиты либо конфигурационные ячейки JTAGEN или OCDEN не запрограммированы (1), то ЦПУ интерпретирует команду BREAK как команду NOP. Используется внутрисхемным отладчиком, в прикладных программах ее использование смысла не имеет Регистр SREG I Т Н S V N Z С --|-|-|---|- Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример —
BRGEk Переход по «больше или равно» (для знаковых данных) BRHCk Переход, если не было половинного переноса Операция ЕслифлагН = 0,тоРС = РС + к + 1,иначе РС = РС+ 1 Код операции 1111 OlkkkkkkklOl 1 слово (2 байта) Операнды -64<k<+63 Описание Условный относительный переход. Проверяет флаг половинного переноса (Н) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 5, к Регистр SREG I Т Н S V N Z С - - - - — - Число тактов 1,еслиН = 1 2, если Н = 0 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / brhc hclear ; Перейти, если флаг Н сброшен Пример hclear: Операция Если Rd>Rr(N0V = O), то PC = PC + k+ 1, иначе РС = РС+ 1 Код операции 1111 OlkkkkkkklOO 1 слово (2 байта) Операнды -64 < к < +63 Условный относительный переход. Проверяет флаг знака (S) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Описание При выполнении данной команды сразу же после команды CP, CPI, SUB или SUBI переход произойдет только в том случае, если число со знаком, находящееся в регистре Rd, будет больше или равно числу со знаком, находящемуся в регистре Rr. Эквивалентна команде BRBC 4, к Регистр SREG I Т н S V N Z С - - " - Число тактов 1, если S = 1 2, если S = 0 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / ср rll,rl2 ; Сравнить rll с г12 Пример brge greater ; Перейти, если rl > г2 greater
BRHSk Переход по половинному переносу Операция Если флаг Н = 1, то PC = PC + k + 1, иначе PC = PC + 1 Код операции 1111 OOkkkkkkklOl 1 слово (2 байта) Операнды -64<k<+63 Описание Условный относительный переход. Проверяет флаг половинного переноса (Н) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 5, к Регистр SREG I Т Н со V N Z С - - - - - - - - Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Число тактов 1,если Н = 0 2, если Н = 1 brhs hset ; Перейти, если флаг Н установлен Пример hset: BRIDk Переход, если прерывания запрещены Операция Если флаг I = 0, то PC = PC + k + 1, иначе PC = PC + 1 Код операции 1111 Olkkkkkkklll 1 слово (2 байта) Операнды -64 < k < +63 Описание Условный относительный переход. Проверяет флаг общего разрешения прерываний (I) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 7, к Регистр SREG I Т Н S V N Z С - - - - - - - - Число тактов 1, если 1 = 1 2, если I = 0 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример brid intdis ; Перейти, если прерывания запрещены intdis:
BRIE к Переход, если прерывания разрешены Операция Если флаг I = 1, то PC = PC + k + 1, иначе PC = PC + 1 Код операции 1111 OOkkkkkk kill 1 слово (2 байта) Операнды -64<k<+63 Описание Условный относительный переход. Проверяет флаг общего разрешения прерываний (I) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 7, к Регистр SREG I Т Н S V N Z С — " — - - — Число тактов 1, если 1 = 0 2, если I = 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / brie inten ; Перейти, если прерывания разрешены Пример inten: BRLOk Переход по «меньше» (для беззнаковых данных) Операция E^HRd<Rr(C=l),ToPC = РС + к+1, иначе РС = РС+1 Код операции 1111 OOkkkkkk kOOO 1 слово (2 байта) Операнды -64<k<+63 Описание Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды CP, CPI, SUB или SUB I переход произойдет только в том случае, если беззнаковое число, находящееся в регистре Rd, будет меньше беззнакового числа, находящегося в регистре Rr. Эквивалентна команде BRBS 0, к Регистр SREG I Т Н со V N Z С - - ~ - " — Число тактов 1,еслиС = 0 2, если С = 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / V / loop: eor г19,г19 inc г19 Очистить г19 г19 = г19 +1 Пример cpi г19,$10 brio loop Сравнить г19 с Перейти, если $10 г19 < $10
BRLT к Переход по «меньше» (для знаковых данных) BRMIk Переход по «отрицательное значение» Операция Если флаг N= 1,тоРС = PC + k + 1, иначе РС = РС+ 1 Код операции 1111 OOkkkkkkkOlO 1 слово (2 байта) Операнды -64 < к < +63 Описание Условный относительный переход. Проверяет флаг отрицательного значения (N) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 2, к Регистр SREG I Т Н сл V N Z С - " - " - Число тактов l,eamN = 0 2, если N = 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / ✓ / / / / / subi г18,4 ; г18 = = г!8 - Пример brmi minus ; Перейти, если результат отрицателен minus: Операция Если Rd<Rr(N0V=l), то РС = РС + к+1, иначе РС = РС+1 Код операции 1111 OOkkkkkkklOO 1 слово (2 байта) Операнды -64 < к < +63 Условный относительный переход. Проверяет флаг знака (S) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Описание При выполнении данной команды сразу же после команды CP, CPI, SUB или SUBI переход произойдет только в том случае, если число со знаком, находящееся в регистре Rd, будет меньше числа со знаком, находящегося в регистре Rr. Эквивалентна команде BRBS 4, к Регистр SREG I Т Н сл V N Z С - - - - - - " Число тактов 1,если S = 0 2, если S = 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / ✓ / / / / / ср rl6,rl ; Сравнить г16 с rl Пример brlt less: less ; Перейти, если rl < г2
BRNEk Переход по «не равно» Операция Если Rd ф Rr (Z = 0), то PC = РС + к+ 1, иначе РС = РС+ 1 Код операции 1111 OlkkkkkkkOOl 1 слово (2 байта) Операнды -64<k<+63 Описание Условный относительный переход. Проверяет флаг нуля (Z) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды CP, CPI, SUB или SUBI переход произойдет только в том случае, если числа (со знаком или без знака), находящиеся в регистрах Rd и Rr, не будут равны. Эквивалентна команде BRBC 1, к Регистр SREG I Т н со V N Z С - - — - " Число тактов 1, если Z = 1 2, если Z = 0 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / у/ / еог г27,г27 loop: inc r27 ; Очистить г27 г27 = г27 +1 Пример cpi r27,5 brne loop Сравнить г27 с 5 Перейти, если г27 * 5 BRPLk Переход по «положительное значение» Операция ЕслифлагЫ = 0,тоРС = РС + к+ 1,иначе РС = РС+ 1 Код операции 1111 OlkkkkkkkOlO 1 слово (2 байта) Операнды -64<к<+63 Описание Условный относительный переход. Проверяет флаг отрицательного значения (N) и выполняет переход, если этот бит сброшен. Величина смещения к представляется ЧИСЛОМ I j дополнительном коде. Эквивалентна команде BRBC 2, к Регистр SREG I T Н S V N Z С — — - — — Число тактов l,eannN = 1 2, если N = 0 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / subi r26,$50 ; r26 = г2б - $50 Пример brpl plus plus: ; Перейти, если результат положителен
BRSHk Переход по «больше или равно» (для беззнаковых данных) BRTCk Переход, если флаг Т сброшен Операция ЕслифлагТ = 0,тоРС = РС + к+ 1,иначе РС = РС+ 1 Код операции 1111 OlkkkkkkkllO 1 слово (2 байта) Операнды -64 < к < +63 Описание Условный относительный переход. Проверяет флаг Т и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 6, к Регистр SREG I Т Н сл V N Z С - - - - Число тактов 1,еслиТ= 1 2,еслиТ = 0 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример bst brtc tclear: гЗ,5 tclear ; Сохранить 5-й бит гЗ в флаге Т ; Перейти, если этот бит был сброшен Операция Если Rd > Rr(C = 0), то PC = PC + k+1,иначе PC = PC+1 Код операции UllOlkkkkkkkOOO 1 слово (2 байта) Операнды -64 < k < +63 Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Описание При выполнении данной команды сразу же после команды CP, CPI, SUB или SUBI переход произойдет только в том случае, если беззнаковое число, находящееся в регистре Rd, будет больше или равно беззнаковому числу, находящемуся в регистре Rr. Эквивалентна команде BRBC 0,k Регистр SREG I T H сл V N Z С - - - Число тактов 1,еслиС= 1 2, если С = 0 Модели 11х/12х 13x 15L 2313x 24x/44x/ 84x 25x/45x/ 85x 26x 28x / / / / / / subi rl9,4 ; rl9 = rl9 - 4 Пример brsh hgsm hgsm: ; Перейти, если rl9 > 4
BRTSk Переход, если флаг Т установлен Операция Если флагТ = 1, то PC = PC + k + 1, иначе PC = PC + 1 Код операции 1111 OOkkkkkk kllO 1 слово (2 байта) Операнды -64<k<+63 Описание Условный относительный переход. Проверяет флаг Т и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 6, к Регистр SREG I Т Н со V N Z С - - - - ~ - Число тактов 1, еслиТ = 0 2, если Т = 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример bst brts tset: гЗ,5 tset ; Сохранить 5-й ; Перейти, если бит гЗ в флаге Т этот бит был установлен BRVCk Переход, если нет переполнения дополнительного кода Операция Если флаг V = 0, то PC = PC + к + 1, иначе PC = PC + 1 Код операции 1111 OlkkkkkkkOll 1 слово (2 байта) Операнды -64 < к < +63 Описание Условный относительный переход. Проверяет флаг переполнения дополнительного кода (V) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 3, к Регистр SREG I Т Н со V N Z С - - - - - - - Число тактов 1,если V= 1 2, еслиУ=0 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / add r3,r4 ; гЗ = гЗ + г4 Пример brvc nover ; Перейти, если не было переполнения nover:
BRVSk Переход по переполнению дополнительного кода Операция Если флаг V= 1, то PC = PC + k + 1, иначе PC = PC + 1 Код операции 1111 OOkk kkkk kOll 1 слово (2 байта) Операнды -64<k<+63 Описание Условный относительный переход. Проверяет флаг переполнения дополнительного кода (V) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 3, к Регистр SREG I Т Н сл V N Z С - - - - - - - - Число тактов 1, если V = 0 2, еслиУ = 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример add brvs overf1: гЗ, г 4 overf1 ; гЗ = гЗ + г4 ; Перейти, если было переполнение BSETs Установка бита регистра SREG Операция SREG.s = 1 Код операции 10010100 Osss 1000 1 слово (2 байта) Операнды 0<s<7 Описание Устанавливает заданный бит регистра SREG Регистр SREG I Т Н сл V N Z С о о о о о о о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример bset bset 6 ; Установить флаг Т 7 ; Разрешить прерывания
BSTRd, b Запись бита РОН в флаг Т Операция T = Rd.b Код операции 1111 lOldddddObbb 1 слово (2 байта) Операнды 0<d<31,0<b<7 Описание Копирует бит b регистра Rd в флаг Т регистра SREG Регистр SREG I Т Н сл V N Z С - о - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример ; Копирование бита: bst rl,2 ; Сохранить 2-й бит регистра rl в Т bid г0,4 ; Записать флаг Т в 4-й бит регистра гО CBIA, Ь Сбросить бит РВВ Операция 1/0(А).Ь = = 0 Код операции 1001 1000 AAAAAbbb 1 слово (2 байта) Операнды 0<A<31,0<b<7 Описание Сбрасывает бит b регистра ввода/вывода, расположенного по адресу А пространства ввода/вывода. Эта команда применима только к младшим 32 регистрам (адреса 0...31) Регистр SREG I т н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример cbi$12,7 Сбросить 7-й бит порта D
CBR Rd, К Сброс битов РОН Операция Rd = Rd • ($FF - К) Код операции 0111 КККК dddd КККК 1 слово (2 байта) Операнды 16<d<31,0<K<255 Описание Сбрасывает биты в регистре Rd в соответствии с маской, задаваемой константой К. Результат помещается в регистр Rd Регистр SREG I Т Н S V N Z С - - - 0 о о - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример cbr rl6,$F0 ; Обнулить старший полубайт регистра г1б cbr г18Д ; Сбросить 4-й бит в регистре г18 CLC Сброс флага переноса Операция С = 0 Код операции 1001 0100 1000 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг переноса С регистра SREG в 0. Эквивалентна команде BCLR 0 Регистр SREG I Т н сл V N Z С - - - - - - - 0 Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример add r0,r0 clc ; Сложить г0 сам с собой ; Сбросить флаг переноса
CLH Сброс флага половинного переноса Операция Н = 0 Код операции 1001 0100 1101 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг половинного переноса Н регистра SREG в 0. Эквивалентна команде BCLR 5 Регистр SREG I Т Н V N Z С - - 0 - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример clh ; Сбросить флаг половинного переноса CLI Общее запрещение прерываний Операция 1 = 0 Код операции 1001 0100 1111 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг общего разрешения прерываний I регистра SREG в 0. Эквивалентна команде BCLR 7 Регистр SREG I Т Н сл V N Z С 0 - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример cli in sei rll,$16 ; Запретить прерывания ; Прочитать состояние порта В ; Разрешить прерывания
CLN Сброс флага отрицательного значения Операция N = 0 Код операции 1001 0100 1010 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг отрицательного значения N регистра SREG в 0. Эквивалентна команде BCLR 2 Регистр SREG I Т н со V N Z С - - - - - 0 - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример add r2,r3 cln ; Сложить г2 и гЗ ; Сбросить флаг отрицательного результата CLR Rd Очистка РОН Операция Rd = Rd( В Rd Код операции 001001dd dddd dddd 1 слово (2 байта) Операнды 0<d<31 Описание Сбрасывает все биты регистра общего назначения путем выполнения операции «Исключающее ИЛИ» регистра с самим собой Регистр SREG I T H S V N Z С - - - 0 0 0 1 - Число тактов 1 Модели 11х/12х 13x 15L 2313x 24х/44х/ 84x 25х/45х/ 85x 26x 28x / / / / / / / Пример ; Организация цикла с заданным числом повторений: clr г18 ; Очистить регистр г18 loop: inc rl8 ; rl8 = rl8 + 1 cpi rl8,$50 brne loop ; Завершить цикл?
CLS Сброс флага знака Операция S = 0 Код операции 100101001100 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг знака S регистра SREG в 0. Эквивалентна команде BCLR 4 Регистр SREG I Т н сл V N Z С - - - 0 - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример add r2,r3 els ; Сложить г2 и ; Сбросить флаг гЗ знака CLT Сброс флага Т Операция Т = 0 Код операции 10010100 1110 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг Т регистра SREG в 0. Эквивалентна команде BCLR 6 Регистр SREG I Т н сл V N Z С - 0 - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример clt Сбросить флаг Т
CLV Операция V = 0 Код операции 1001 01001011 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг переполнения дополнительного кода V регистра SREG в 0. Эквивалентна команде BCLR 3 Регистр SREG I Т н со V N Z С - - - - 0 - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример add r2,r3 civ ; Сложить г2 и гЗ ; Сбросить флаг переполнения CLZ Сброс флага нуля Операция Z = 0 Код операции 1001 0100 1001 1000 1 слово (2 байта) Операнды Нет операндов Описание Сбрасывает флаг нуля Z регистра SREG Эквивалентна команде BCLR 1 вО. Регистр SREG I Т н со V N Z С - - - - - - 0 - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример add r2,r3 clz ; Сложить г2 и ; Сбросить флаг гЗ нуля Сброс флага переполнения дополнительного кода
COM Rd Вычисление обратного кода Операция Rd = $FF - Rd Код операции 1001 OlOd dddd dddd 1 слово (2 байта) Операнды 0<d<31 Описание Вычисляет обратный код числа, находящегося в регистре Rd. Результат помещается обратно в регистр Rd Регистр SREG I Т Н со V N Z С - - - о 0 <=> о 1 Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример com г4 ; Вычислить дополнительный код содержимого г4 CPRd, Rr Сравнение РОН Операция Rd-Rr Код операции 0001 Olrd dddd гпт 1 слово (2 байта) Операнды 0 <d < 31 0<г<31 Описание Сравнивает содержимое двух регистров общего назначения путем вычитания содержимого регистра Rr из содержимого регистра Rd. Данная команда влияет только на флаги регистра состояния SREG, которые устанавливаются в соответствии с результатом вычитания. Содержимое регистров не изменяется. Как правило, данная команда используется совместно с одной из команд условного перехода Регистр SREG I т н сл V N Z С - - <=> о о <=> о о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример ср г4,г19 brne noteq noteq: ; Сравнить г4 с rl9 (R ; Перейти, если г4 о = г4 - г19 г19)
CPC Rd, Rr Сравнение РОН с учетом переноса Операция Rd-Rr- -С Код операции 0000 Olrd dddd rrrr 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Сравнивает содержимое двух регистров общего назначения путем вычитания содержимого регистра Rr и значения флага переноса (С) из содержимого регистра Rd. Данная команда влияет только на флаги регистра состояния SREG, которые устанавливаются в соответствии с результатом вычитания. Содержимое регистров не изменяется. Как правило, данная команда используется совместно с одной из команд условного перехода Регистр SREG I т н сл V N Z С - - о о <=> о <=> Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример ; Сравнение регистровых пар гЗ:г2 и rl:г0: ср г2,г0 ; Сравнить младшие байты срс r3,rl ; Сравнить старшие байты brne noteq ; Перейти, если гЗ:г2 о rl:r0 noteq: CPI Rd, К Сравнениссодержимого РОН с константой Операция Rd-K Код операции ООП КККК dddd КККК 1 слово (2 байта) Операнды 0<d<31,0<K<255 Сравнивает содержимое регистра общего назначения Rd с константой К путем вычитания константы из содержимого регистра Rd. Данная команда влияет тольОписание ко на флаги регистра состояния SREG, которые устанавливаются в соответствии с результатом вычитания. Содержимое регистра Rd не изменяется. Как правило, данная команда используется совместно с одной из команд условного перехода Регистр SREG I T H сл V N Z С - <* <=> <=> <=> Число тактов 1 Модели 11х/12х 13x 15L 2313x 24х/44х/ 84x 25х/45х/ 85х 26х 28х / / / / / / / / cpi rl9,3 ; Сравнить rl9 с числом 3 (R = П9 - 3 ) Пример brne noteq ; Перейти, если rl9 <> 3 noteq:
CPSE Rd, Rr Пропуск команды при равенстве двух РОН Операция Если Rd: = Rr, то PC = PC +2 (или 3), иначе PC = PC + 1 Код операции 0001 OOrd dddd гпт 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Сравнивает содержимое двух регистров общего назначения Rr и Rd и пропускает следующую команду, если в регистрах записаны одинаковые значения Регистр SREG I T Н сл V N Z С - " — " - Число тактов 1, если Rd ф Rr (нет пропуска команды) 2, если Rd = Rr (размер пропускаемой команды — 3, если Rd = Rr (размер пропускаемой команды - 1 слово) 2 слова) Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / inc г4 ; Увеличить г4 (r4 = г4 + 1) Пример cpse neg г4,г0 г4 ; Сравнить содержимое ; Проинвертировать г4, г4 и г0 если г4 ф г0 DEC Rd Декрементирование РОН Операция Rd = Rd- -1 Код операции 1001 010d dddd 1010 1 слово (2 байта) Операнды 0<d<31 Уменьшает содержимое регистра Rd на единицу. Так как эта команда не влияет на флаг переноса С, она идеально подходит для организации счетчика числа итераций цикла при выполнении вычислений над многобитными числами. Описание При работе с беззнаковыми числами для выполнения перехода в соответствии с результатом выполнения команды могут использоваться только команды условного перехода BREQ и BRNE. При работе с числами в дополнительном коде могут использоваться все команды условного перехода для знаковых проверок. Флаг V устанавливается в 1 только в том случае, если до выполнения операции в регистре находилось значение $80 Регистр SREG I T H сл V N Z С - - " о - Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / ldi rl7,$10 ; Записать число 16 в регистр г17 Пример loop: add rl,r2 ; rl = = rl + г2 dec rl7 ; Декрементировать rl7 brne loop ; Перейти, если г17*0
EOR Rd, Rr «Исключающее ИЛИ» двух РОН Операция Rd = Rd( В Rr Код операции 0010 Olrd dddd гпт 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Выполняет операцию «Исключающее ИЛИ» между регистрами Rd и Rr. Результат помещается в регистр Rd Регистр SREG I Т Н S V N Z С - - - о 0 о <=> - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример еог еог г2,г2 г0,г22 ; Очистка регистра г2 ; Побитовое «Исключающее ИЛИ» между г0 и г22 ICALL Косвенный вызов подпрограммы Операция STACK = PC + 1; PQ15..0] = Z, PQ21..16] = 0; SP = SP- 2 (3) Код операции 10010101 0000 1001 1 слово (2 байта) Операнды Нет операндов Описание Косвенный вызов подпрограммы. Выполняет переход к подпрограмме, адрес которой находится в регистре Z. Адрес следующей за ICALL команды (2 или 3 байта) сохраняется в стеке. Область действия команды — младшие 128 Кбайт памяти программ Регистр SREG I Т н со V N Z С - - - - - - - - Число тактов 3 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример mov r30,r0 ; Задать смещение icall ; Вызвать подпрограмму, адрес которой ; находится в регистрах г31:г30
IJMP Косвенный переход Операция PQ15..0] = Z, РС[21..16] = 0 Код операции 1001 01000000 1001 1 слово (2 байта) Операнды Нет операндов Описание Косвенный безусловный переход. Выполняет переход по адресу, находящемуся в регистре Z. Область действия команды — младшие 128 Кбайт памяти программ Регистр SREG I т н со V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример mov ijmp гЗО,гС ; Задать смещение ; Перейти по адресу г31:г30 IN Rd, А Пересылка значения из РВВ в РОН Операция Rd = I/0(A) Код операции 1011 OAAd dddd АААА 1 слово (2 байта) Операнды 0<d<31,0<A<63 Описание Пересылает содержимое регистра ввода/вывода А чения Rd в регистр общего назна- Регистр SREG I Т н S V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример in г25,$16 cpi г25,4 breq exit ; Прочитать содержимое порта В ; Сравнить содержимое с константой ; Перейти, если г25 = 4 exit:
INCRd Инкрементирование РОН LD Rd, X Косвенное чтение памяти данных Операция Rd = [X] Код операции 1001000d dddd 1100 1 слово (2 байта) Операнды 0<d< 31 Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X Регистр SREG I Т Н сл V N Z С - - " — Число тактов 2 Модели 11х/12х 13х i5L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr ldi Id г27 г26,$60 rl,X ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; rl = [$0060] Операция Rd = Rd + l Код операции 1001010d dddd ООН 1 слово (2 байта) Операнды 0<d<31 Увеличивает содержимое регистра Rd на единицу. Так как эта команда не влияет на флаг переноса С, она идеально подходит для организации счетчика числа итераций цикла при выполнении вычислений над многобитными числами. Описание При работе с беззнаковыми числами для выполнения перехода в соответствии с результатом выполнения команды могут использоваться только команды условного перехода BREQ и BRNE. При работе с числами в дополнительном коде могут использоваться все команды условного перехода для знаковых проверок. Флаг V устанавливается в 1 только в том случае, если до выполнения операции в регистре находилось значение $7F Регистр SREG I T H сл V N Z С - - - <=> о — Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / clr r22 ; Очистить регистр r22 loop: inc r22 ; r22 = r22 + 1 Пример cpi r22,$4F brne loop ; Продолжать цикл, если г22 ф $4F
LD Rd, X+ Косвенное чтение памяти данных с постинкрементом Операция Rd = [X],X = X+l Код операции 1001 000d dddd 1101 1 слово (2 байта) Операнды 0 < d < 31, для d = 26 или 27 результат операции не определен Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X. После пересылки байта содержимое регистра X увеличивается на 1 Регистр SREG I Т Н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / Пример clr ldi Id in г 21 г26,$60 rl,X+ rl,r26 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; rl = [$0060] ; В регистре rl - $61 LD Rd, -X Косвенное чтение памяти данных с преддекрементом Операция X = X-l,Rd = [X] Код операции 1001 000d dddd 1110 1 слово (2 байта) Операнды 0 < d < 31, для d = 26 или 27 результат операции не определен Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X, причем перед обращением к памяти данных содержимое регистра X уменьшается на 1 Регистр SREG I Т Н сл V N Z С - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr ldi Id г27 г26,$63 гЗ,-Х ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; гЗ = [$0062]
LD Rd, Y Косвенное чтение памяти данных Операция Rd = [Y] Код операции 1000 000d dddd 1000 1 слово (2 байта) Операнды 0<d<31 Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y Регистр SREG I Т н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr ldi Id г29 г28,$60 rl,Y ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; rl = [$0060] LD Rd, Y+ Косвенное чтение памяти данных с постинкрементом Операция Rd=[YJ,Y = Y+l Код операции 1001 000d dddd 1001 1 слово (2 байта) Операнды 0 < d < 31, для d = 28 или 29 результат операции не определен Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y. После пересылки байта содержимое регистра Y увеличивается на 1 Регистр SREG I T Н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr ldi Id in r29 r28,$60 rl,Y+ r2,r28 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; rl = [$0060] ; В регистре г2 - $61
LD Rd, -Y Косвенное чтение памяти данных с преддекрементом Операция Y = Y-l,Rd = [Y] Код операции 1001 000d dddd 1010 1 слово (2 байта) Операнды 0<d<31,iumd = 28 или 29 результат операции не определен Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y, причем перед обращением к памяти данных содержимое регистра Y уменьшается на 1 Регистр SREG I Т Н V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr ldi Id г29 г28,$63 r3,-Y ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; гЗ = [$0062] LD Rd, Z Косвенное чтение памяти данных Операция Rd = [Z] Код операции 1000 000d dddd 0000 1 слово (2 байта) Операнды 0<d<31 Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z Регистр SREG I Т н со V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример clr г31 ldi г30,$60 Id rl,Z ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; rl = [$0060]
LD Rd, Z+ Косвенное чтение памяти данных с постинкрементом Операция Rd = [Z],Z = Z+l Код операции 1001 000d dddd 0001 1 слово (2 байта) Операнды 0 < d < 31, для d = 30 или 31 результат операции не определен Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z. После пересылки байта содержимое регистра Z увеличивается на 1 Регистр SREG I T Н со V N Z С - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr ldi Id in r31 r30,$60 rl,Z+ r2,r30 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; rl = [$0060] ; В регистре г2 - $61 LD Rd, -Z Косвенное чтение памяти данных с предцекрементом Операция Z = Z-l,Rd = [Z] Код операции 1001 000d dddd 0010 1 слово (2 байта) Операнды 0 < d < 31, для d = 30 или 31 результат операции не определен Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z, причем перед обращением к памяти данных содержимое регистра Z уменьшается на 1 Регистр SREG I Т н со V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr ldi Id г31 г30,$63 r3,-Z ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; гЗ = [$0062]
LDD Rd, Y+q Косвенное относительное чтение памяти данных Операция Rd = [Y + q] Код операции 10q0 qqOd dddd lqqq 1 слово (2 байта) Операнды 0<d<31, 0<q<63 Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Y и константы q. Содержимое индексного регистра не изменяется Регистр SREG I Т Н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / Пример clr ldi ldd г29 г28,$63 r4,Y+2 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; г4 = [$0065] LDD Rd, Z+q Косвенное относительное чтение памяти данных Операция Rd = [Z + q] Код операции 10q0qq0d ddddOqqq 1 слово (2 байта) Операнды 0<d<31, 0<q<63 Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Z и константы q. Содержимое индексного регистра не изменяется Регистр SREG I Т н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / У Пример clr г31 ldi г30,$63 ldd r4,Z+2 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; г4 = [$0065]
LDI Rd, К Загрузка константы в РОН Операция Rd = К Код операции 1110 КККК dddd КККК 1 слово (2 байта) Операнды 16<d<31,0<k<255 Описание Загружает 8-битное число в регистр общего назначения Rd. Данная команда применима только к старшей половине РОН (адреса 16...31). Регистр SREG I Т н со V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример clr г31 ldi r30,$F0 1pm ; Очистить старший байт индексного ; регистра Z ; Загрузить адрес в регистр Z ; Загрузить константу из памяти программ ; по адресу $00F0 LDS Rd, к Непосредственная загрузка из памяти данных Операция Rd = [k] Код операции 1001000d dddd 0000 kkkk kkkk kkkk kkkk 2 слова (4 байта) Операнды 0<d<31,0<k<65535 Описание Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, задается константой к Регистр SREG I Т н со V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример Ids r2,$FF00 ; r2 = [$FF00] add r2,rl ; r2 = r2 + rl sts $FF000;r2 ; Записать результат по тому же адресу
LPM Загрузка данных из памяти программ Операция R0 = {Z} Код операции 1001 0101 1100 1000 1 слово (2 байта) Операнды Нет операндов Описание Загружает один байт из адресного пространства памяти программ в регистр общего назначения R0. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z Регистр SREG I Т н сл V N Z С - - - ~ - - - - Число тактов 3 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример clr ldi 1pm г31 r30,$F0 ; Очистить старший байт индексного ; регистра Z ; Загрузить адрес в регистр Z ; г0 = {$00F0} LPM Rd, Z Загрузка данных из памяти программ Операция Rd = {Z} Код операции 1001000d dddd 0100 1 слово (2 байта) Операнды 0<d<31 Описание Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z Регистр SREG I T н СЛ V N Z С - - - - - - - - Число тактов 3 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr г31 ldi r30;$F0 1pm rl6,Z ; Очистить старший байт индексного регистра Z ; Загрузить адрес в регистр Z ; rl6 = {$00F0}
LPM Rd, Z+ Загрузка данных из памяти программ с постинкрементом Операция Rd = {Z} Код операции 1001 000d dddd 0101 1 слово (2 байта) Операнды 0<d<31 Описание Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z. После пересылки байта содержимое регистра Z увеличивается на 1 Регистр SREG I T н со V N Z С - - - - - - - - Число тактов 3 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / Пример clr г31 ldi r30,$F0 1pm rl6,Z+ ; Очистить старший байт индексного ; регистра Z ; Загрузить адрес в регистр Z ; г1б = {$00F0}, Z = $00F1 LSL Rd Логический сдвиг влево Код операции 1000 1 ldd dddd dddd 1 слово (2 байта) Операнды 0<d< 31 Описание Сдвигает все биты регистра Rd влево. Бит Ь0 сбрасывается в 0, а бит Ь7 загружается в флаг С регистра SREG. Эквивалентна команде ADD Rd, Rd Регистр SREG I Т Н S V N Z С - - - о 0 <=> о Число тактов 1 Модели llx/12x 13x 15L 2313x 24х/44х/ 84x 25х/45х/ 85x 26x 28x / / / / / / / / Пример add r0,r4 ; rO = rO + r4 lsl rO ; rO = rO * 2 Операция
LSR Rd Логический сдвиг вправо Код операции 1001 010d dddd 0110 1 слово (2 байта) Операнды 0<d<31 Описание Сдвигает все биты регистра Rd вправо. Бит Ь7 сбрасывается в 0, а бит Ь0 загружается в флаг С регистра SREG Регистр SREG I Т Н S V N Z С - - «► <=> 0 о о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / У Пример add r0,r4 ; г0 = г0 + г4 lsr г0 ; гО = г0/2 MOVRd, Rr Пересылка между РОН Операция Rd = Rr Код операции 0010 llrd dddd rrrr 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Копирует содержимое регистра Rr в регистр Rd. Регистр-источник (Rr) не изменяется Регистр SREG I T H S V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / mov call rl6,r0 check ; Переслать содержимое rO в rl6 ; Вызвать подпрограмму Пример check: cpi rl6, $rll ; Сравнить г1б с $11 ret ; Вернуться из подпрограммы Операция
M0VWRd+1:Rd,Rr+1:Rr Пересылка между парами РОН Операция Rd+l:Rd = Rr+l:Rr Код операции 0000 0001 dddd гпт 1 слово (2 байта) Операнды d € {0,2,. .., 30}, г е {0,2,..., 30} Описание Копирует содержимое регистровой пары Rr+l:Rr в регистровую пару Rd+l:Rd. Регистры-источники (Rr+1 и Rr) не изменяются Регистр SREG I Т Н СЛ V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример movw rl7:rl6,rl:r0 ; Переслать rl :г0 в г17:г1б NEGRd Вычисление дополнительного кода Операция Rd = $00 -Rd Код операции 1001 010d dddd 0001 1 слово (2 байта) Операнды 0<d<31 Описание Вычисляет дополнительный код числа, находящегося в регистре Rd. Результат помещается обратно в регистр Rd Регистр SREG I T H СЛ V N Z С - - о <=> о о о <=> Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример sub rll,r0 brpl positive neg rll positive: ; Вычесть rO из rll (rll = rll - rO) ; Перейти, если результат положителен ; Вычислить дополнительный код числа
NOP Пустая команда Операция Нет операции Код операции 0000 0000 0000 0000 1 слово (2 байта) Операнды Нет операндов Описание Пропускает один такт Регистр SREG I Т Н S V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr г1б ; Очистить регистр г1б ser г17 ; Установить регистр г17 out $18,г1б ; Записать нули в порт В пор ; Ждать один такт out $18,г17 ; Записать единицы в порт В OR Rd, Rr «Логическое ИЛИ» двух РОН Операция Rd = RdvRr Код операции 0010 10rd dddd птг 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Выполняет операцию «Логическое ИЛИ» между регистрами Rd и Rr. Результат помещается в регистр Rd Регистр SREG I T H СЛ V N Z С - - - О 0 <=> о - Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример or bst brts rl5,rl6 rl5,6 ok ; Побитовое «ИЛИ» rl5 и rl6 ; Записать б-й бит регистра г15 в флаг Т ; Перейти, если флаг Т равен 1 ok:
ORI Rd, К «Логическое ИЛИ» РОН и константы Операция Rd = Rd v К Код операции 0110 КККК dddd КККК 1 слово (2 байта) Операнды 16<d<31,0<K<255 Описание Выполняет операцию «Логическое ИЛИ» между регистром Rd и константой К. Результат помещается в регистр Rd. Команда применима только к 16 старшим РОН (R16...R31) Регистр SREG I Т Н V N Z С - - - <=> 0 о <=> - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример on on rl7,$0F г18,1 ; Установить старший полубайт регистра г17 ; Установить 0-й бит регистра г18 OUT A, Rr Пересылка значения из РОН в РВВ Операция 1/0(А) = Rr Код операции 1011 lAArrrrrAAAA 1 слово (2 байта) Операнды (i<r<31,0<A<63 Описание Пересылает содержимое регистра общего назначения Rr в регистр ввода/вывода А Регистр SREG I T H S V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример clr ser out nop out rl6 rl7 $18,rl6 $18,rl7 ; Очистить регистр rl6 ; Установить регистр г17 ; Записать нули в порт В ; Ждать один такт ; Записать единицы в порт В
POP Rd Извлечение байта из стека Операция SP = SP+l,Rd = STACK Код операции 1001 OOOd dddd 1111 1 слово (2 байта) Операнды 0<d<31 Описание Загружает 1 байт из стека в регистр общего назначения Rd Регистр SREG I T H со V N Z С - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / call routine ; Вызов подпрограммы Пример routine push push rl4 rl5 ; Сохранить ; Сохранить г14 в стеке г15 в стеке pop pop ret rl5 rl4 ; Восстановить rl5 из стека ; Восстановить г14 из стека ; Возврат из подпрограммы PUSH Rr Сохранение байта в стеке Операция STACK = Rr,SP = SP-l Код операции 1001 OOlrrnr 1111 1 слово (2 байта) Операнды 0<г<31 Описание Сохраняет содержимое регистра общего назначения Rr в стеке Регистр SREG I T H со V N Z С - " - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / call routine ; Вызов подпрограммы Пример routine: push rl4 push rl5 ; Сохранить ; Сохранить г14 в стеке г15 в стеке pop pop ret rl5 rl4 ; Восстановить rl5 из стека ; Восстановить г14 из стека ; Возврат из подпрограммы
RCALLк Относительный вызов подпрограммы Операция STACK = PC+l;PC = PC + k+l;SP = SP - 2 (3) Код операции 1101 kkkk kkkk kkkk 1 слово (2 байта) Операнды -2047 <k< 2047 Описание Относительный вызов подпрограммы. Выполняет переход к подпрограмме, адрес которой получается сложением содержимого счетчика команд с константой к. Адрес следующей за RCALL команды (2 или 3 байта) сохраняется в стеке. На практике вместо числовых значений смещения указываются метки подпрограмм (см. пример) Регистр SREG I T H СЛ V N Z С - - - - " - - Число тактов 3 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / rcall routine ; Вызвать подпрограмму Пример routine push rl4 ; Сохранить г14 pop ret rl4 ; Восстановить rl4 ; Возврат из подпрограммы RET Возврат из подпрограммы Операция SP = SP + 2(3); PC = STACK Код операции 1001 01010000 1000 1 слово (2 байта) Операнды Нет операндов Описание Возврат из подпрограммы. Выполняет возврат в то место, откуда подпрограмма была вызвана Регистр SREG I T H СЛ V N Z С - - - - - - - - Число тактов 4 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / rcall routine ; Вызвать подпрограмму Пример routine push rl4 ; Сохранить rl4 pop ret rl4 ; Восстановить rl4 ; Возврат из подпрограммы
RETI Возврат из подпрограммы обработки прерывания Операция SP = SP + 2(3);PC = STACK Код операции 1001 0101 0001 1000 1 слово (2 байта) Операнды Нет операндов Описание Возврат из подпрограммы обработки прерывания. Выполняет возврат в то место, в котором выполнение программы было прервано в результате возникновения прерывания. Следует обратить внимание, что контекст программы (регистр состояния SREG) не сохраняется при вызове подпрограммы обработки прерывания и соответственно не восстанавливается при выходе из нее. В связи с этим сохранение и восстановление этого регистра необходимо выполнять самостоятельно Регистр SREG I T H СЛ V N Z С 1 — — - — - — Число тактов 4 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример extint: push r0 Сохранить rO pop reti rO Восстановить rO Возврат из подпрограммы RJMPk Относительный безусловный переход Операция РС = РС + к+1 Код операции ПООкккккккк кккк 1 слово (2 байта) Операнды -2047 < к < 2047 Команда относительного безусловного перехода. Выполняет переход по адресу, Описание равному сумме содержимого счетчика команд и константы к. На практике вместо числовых значений смещения используются метки (см. пример) Регистр SREG I T H СЛ V N Z С - - - - - — - - Число тактов 2 Модели 11х/12х 13x 15L 2313x 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / ✓ cpi rl6,$42 ; Сравнить г1б с числом $42 brne error ; Перейти, если г1б ф $42 rjmp ok ; Безусловный переход Пример error: add rl6, rl7 ; Прибавить rl6 к г17 inc rl6 ; rl6 = rl6 + 1 ok:
ROLRd Сдвиг влево через перенос ш < ш Операция Ь7 -ЬО Код операции 0001 lldd dddd dddd 1 слово (2 байта) Операнды 0<d<31 Сдвигает содержимое регистра Rd влево на один бит. В бит Ь0 заносится содержимое флага С регистра SREG, а бит Ь7 загружается в флаг С. Описание В комбинации с командой LSL данная команда может использоваться для умножения многобайтных чисел (как знаковых, так и беззнаковых) на два. Эквивалентна команде ADC Rd; Rd. Значение флага Vравно «Исключающему ИЛИ» флагов N и С после сдвига Регистр SREG I Т н S V N Z С — " <=: > Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример ; Умножить регистровую пару г19:г18 на 2: lsl г18 ; г18 = г18 * 2 rol rl9 ; г19:г18 - 16-битное целое ROR Rd Сдвиг вправо через перенос Операция | С | ► Ь7 ЬО ► | С | Код операции 1001010d dddd 0111 1 слово (2 байта) Операнды 0<d<31 Описание Сдвигает содержимое регистра Rd вправо на один бит. В бит Ь7 заносится содержимое флага С регистра SREG, а бит Ь0 загружается в флаг С. В комбинации с командой ASR данная команда может использоваться для деления многобайтных знаковых чисел на два. А в комбинации с командой LSR — для деления многобайтных беззнаковых чисел на два. Значение флага V равно «Исключающему ИЛИ» флагов N и С после сдвига Регистр SREG I Т Н S V N Z С — 1 — 1 "~ | о | <=> | <=> | <=> | о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример lsr г19 ; Разделить регистровую пару г19:г18 на 2 ror rl8 ; г19:г18 - 16-битное целое без знака asr г17 ; Разделить регистровую пару г17:г16 на 2 ror rl6 ; г17:г16 - 16-битное целое со знаком
SBC Rd, Rr Вычитание с заемом Операция Rd = Rd- -Rr-C Код операции 0000 lOrdddddrnr 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Вычитает из регистра Rd содержимое регистра Rr. Если флаг переноса С установлен, полученная разность уменьшается на 1. Результат помещается в регистр Rd. Если результат вычитания не равен нулю, флаг нуля Z сбрасывается в 0, в противном случае он остается без изменений Регистр SREG I Т н сл V N Z С - - о о <=> <=> <=> о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример ; Вычитание регистровой пары Rl:R0 из R3:R2: sub r2,r0 ; Вычесть младшие байты sbc гЗ,rl ; Вычесть старшие байта с учетом переноса SBCI Rd, К Вычитание константы из РОН с заемом Операция Rd = Rd- -К-С Код операции 0100 КККК dddd КККК 1 слово (2 байта) Операнды 16<d<31,0<K<255 Описание Вычитает из регистра Rd значение константы К. Если флаг переноса С установлен, полученная разность уменьшается на 1. Результат помещается в регистр Rd. Если результат вычитания не равен нулю, флаг нуля Z сбрасывается в 0, в противном случае он остается без изменений Регистр SREG I т н СЛ V N Z С - - о о <=> <=> о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример ; Вычитание двухбайтного числа $4F23 из регистровой ; пары R17:R16: subi rl6,$23 ; Вычесть младший байт sbci rl7,$4F ; Вычесть старший байт с учетом переноса
SBIA,b Установить бит РВВ Операция 1/0(А).Ь = 1 Код операции 1001 1010 AAAAAbbb 1 слово (2 байта) Операнды 0<A<31,0<b<7 Описание Устанавливает бит b регистра ввода/вывода, расположенного по адресу А пространства ввода/вывода. Эта команда применима только к младшим 32 регистрам (адреса 0...31) Регистр SREG I Т н СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример out sbi in $1Е,г0 $1С,0 rl,$lD ; Задать адрес ячейки EEPROM ; Установить запрос на чтение ; Считать данные из EEPROM SBICA,b Пропустить команду, если бит РВВ сброшен Операция Если 1/0(А).Ь = 0, то PC = PC +2 (3), иначе PC = PC + 1 Код операции 1001 1001 AAAAAbbb 1 слово (2 байта) Операнды 0<A<31 ,0<b<7 Описание Проверяет состояние бита b регистра ввода/вывода А. Если бит сброшен, то команда, следующая за SBIC А, Ь, пропускается. Эта команда применима только к младшим 32 регистрам (адреса 0...31) Регистр SREG I T H СЛ V N Z С - - - - - - - - Число тактов 1, если 1/0(А).Ь = 1 (нет пропуска команды) 2, если 1/0(А).Ь = 0 (размер пропускаемой команды — 1 слово) 3, если 1/0(А).Ь = 0 (размер пропускаемой команды — 2 слова) Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример e2wait: sbic rjmp $1СД e2wait ; Пропустить команду, ; Запись в EEPROM еще если флаг EEWE сброшен не закончилась
SBISA,b Пропустить команду, если бит РВВ установлен Операция Если I/0(A).b = 1, то PC = PC +2 (3), иначе PC = PC + 1 Код операции 1001 1011 AAAAAbbb 1 слово (2 байта) Операнды 0<A<31,0<b<7 Описание Проверяет состояние бита b регистра ввода/вывода А. Если бит установлен, то команда, следующая за SBIS А, Ь, пропускается. Эта команда применима только к младшим 32 регистрам (адреса 0...31) Регистр SREG I Т Н СЛ V N Z С - - - - - - - - Число тактов 1, если 1/0(А).Ь = 0 (нет пропуска команды) 2, если I/0(A).b = 1 (размер пропускаемой команды — 1 слово) 3, если I/0(A).b = 1 (размер пропускаемой команды — 2 слова) Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример waitset sbis rjmp $1D,0 waitset ; Пропустить следующую команду, если 0-й бит ; порта D установлен ; Ждать, пока бит не будет установлен SBIWRd+1: Rd, К Вычитание константы из регистровой пары Операция Rd+l:Rd = Rd+l:Rd-K Код операции 1001 0111 KKdd КККК 1 слово (2 байта) Операнды d<={24,26,28,30},0<К<63 Описание Вычитает из регистровой пары Rd+l:Rd значение константы К. Результат помещается обратно в регистровую пару. Команда применима только к 4 старшим регистровым парам из регистров общего назначения Регистр SREG I Т н СЛ V N Z С - - - <=> о о Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / Пример ; Вычитание двухбайтного числа ; пары R17:R16: sbiw r25:r24,l ; Вычесть sbiw YH:YL,63 ; Вычесть $4F23 из регистровой единицу из г25:г24 63 из индексного регистра Y
SBR Rd, К Установка битов РОН Операция Rd = Rd v К Код операции 0110 КККК dddd КККК 1 слово (2 байта) Операнды 16<d<31,0<K<255 Описание Устанавливает отдельные биты регистра Rd путем выполнения операции «Логическое ИЛИ» между содержимым регистра Rd и маской, задаваемой константой К. Результат помещается в регистр Rd Регистр SREG I Т Н V N Z С - - - о 0 о о - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример sbr sbr г16,3 ; Установить биты 0 и 1 регистра г1б rl8,$F0 ; Установить 4 старших бита регистра г18 SBRC Rr, b Пропустить команду, если бит РОН сброшен Операция Если Rr.b = 0, то PC = PC +2 (3), иначе PC = PC + 1 Код операции 1111 ПОг rrrrObbb 1 слово (2 байта) Операнды 0<r<31,0<b<7 Описание Проверяет состояние бита b регистра общего назначения Rr. Если бит сброшен, то команда, следующая за SBRC Rr, b, пропускается Регистр SREG I T Н СЛ V N Z С - - - - - - - - Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Число тактов 1, если Rr.b = 1 (нет пропуска команды) 2, если Rr.b = 0 (размер пропускаемой команды — 3, если Rr.b = 0 (размер пропускаемой команды — 1 слово) 2 слова) Пример sub sbrc sub r0,rl г0,7 r0,rl ; Вычесть rl из г0 ; Пропустить команду, ; Выполняется, только если г0.7 = 0 если г0.7 = 1
SBRS Rr ,b Пропустить команду, если бит РОН установлен Операция Если Rr.b = 1, то PC = PC +2 (3), иначе PC = PC + 1 Код операции 1111 lllrrrrrObbb 1 слово (2 байта) Операнды 0 < r< 31, 0<b<7 Описание Проверяет состояние бита b регистра общего назначения Rr. Если бит установлен, то команда, следующая за SBRS Rr, b, пропускается Регистр SREG I T Н со V N Z С - - - - - - - - Число тактов 1, если Rr.b = 0 (нет пропуска команды) 2, если Rr.b = 1 (размер пропускаемой команды — 3, если Rr.b = 1 (размер пропускаемой команды — 1 слово) 2 слова) Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример sub sbrs neg rO,rl г0,7 гО ; Вычесть rl из гО ; Пропустить следующую ; Выполняется, только команду, если г0.7 = 0 если г0.7 = 1 SEC Установка флага переноса Операция С=1 Код операции 1001 01000000 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг переноса С регистра SREG в 1. Эквивалентна команде BSET 0 Регистр SREG I Т Н S V N Z С - - - - - - - 1 Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример sec addc r0,rl ; Установить флаг переноса ; rO = rO + rl + 1
SEH Установка флага половинного переноса Операция Н = 1 Код операции 1001 01000101 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг половинного переноса Н регистра SREG в 1. Эквивалентна команде BSET 5 Регистр SREG I Т Н со. V N Z С - - 1 - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример slh ; Установить флаг половинного переноса SEI Общее разрешение прерываний Операция 1 = 1 Код операции 1001 01000111 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг общего разрешения прерываний I регистра SREG i Эквивалентна команде BSET 7 3 1. Регистр SREG I Т н V N Z С 1 - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример cli in sei г!3,$16 ; Запретить прерывания ; Прочитать состояние порта ; Разрешить прерывания в
SEN Установка флага отрицательного значения Операция N=1 Код операции 100101000010 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг отрицательного значения N регистра SREG в 1. Эквивалентна команде BSET 2 Регистр SREG I Т Н СЛ V N Z С - - - - - 1 - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример add sin г2,г19 ; Сложить г2 и ; Установить ф г19 лаг отрицательного результата SER Rd Установка РОН Операция Rd = $FF Код операции 11101111 dddd 1111 1 слово (2 байта) Операнды 16 < d < 31 Описание Устанавливает все биты регистра общего назначения в 1. Команда применима только к регистрам из старшей половины регистрового файла Регистр SREG I Т Н S V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример clr г16 ; Очистить регистр г1б ser г17 ; Установить регистр г17 out $18,г16 ; Записать в порт В нули пор out $18,г17 ; Записать в порт В единицы
SES Установка флага знака Операция S=l Код операции 100101000100 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг знака S регистра SREG в 1. Эквивалентна команде BSET 4 Регистр SREG I Т н СЛ V N Z С - - - 1 - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример add r2,rl9 ses ; Сложить г2 и г19 ; Установить флаг знака SET Установка флага Т Операция Т=1 Код операции 100101000110 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг Т регистра SREG в 1. Эквивалентна команде BSET 6 Регистр SREG I Т н СЛ V N Z С - 1 - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример set Установить флаг Т
SEV Установка флага переполнения дополнительного кода Операция V=l Код операции 100101000011 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг переполнения дополнительного кода V регистра SREG в 1. Эквивалентна команде BSET 3 Регистр SREG I Т н со V N Z С - - - - 1 - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример add r2,rl9 sev ; Сложить г2 и г19 ; Установить флаг переполнения SEZ Установка флага нуля Операция Z=l Код операции 1001 01000001 1000 1 слово (2 байта) Операнды Нет операндов Описание Устанавливает флаг нуля Z регистра SREG в 1. Эквивалентна команде BSET 1 Регистр SREG I Т н V N Z С - - - - - - 1 - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример add r2,rl9 sez ; Сложить г2 ; Установить и г19 флаг нуля
SLEEP Перевод микроконтроллера в режим пониженного энергопотребления Операция См. описание режимов пониженного энергопотребления в подразделе 4.3.1 Код операции 1001 0101 10001000 1 слово (2 байта) Операнды Нет операндов Описание Переводит микроконтроллер в режим пониженного энергопотребления. Конкретные действия зависят от модели микроконтроллера и от выбранного режима. Для получения более подробной информации обратитесь к разделу 4.3 Регистр SREG I T H S V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13x 15L 2313x 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / Пример mov r0,rll ldi rl6, (1«SE) out MCUCR,rl6 sleep Скопировать регистр rll в rO Разрешить переход в «спящий» режим Переключиться в «спящий» режим SPM Изменение содержимого памяти программ Операция Зависит от контекста: {RAMPZiZ} = $FFFF — стирание страницы памяти программ; {RAMPZ:Z} = Rl :R0 — запись слова в память программ или запись страницы в буфер; {RAMPZ:Z( = TEMP — пересылка содержимого буфера страницы в память программ; {BLBITS} = R1:R0 — запись ячеек защиты блока загрузчика Код операции 1001 0101 1110 1000 1 слово (2 байта) Операнды Нет операндов Описание Эта команда может выполнять стирание отдельной страницы памяти программ, запись страницы памяти программ, а также изменение ячеек защиты блока загрузчика. Адрес страницы памяти программ или слова в ней содержится в регистре Z, а данные, если они необходимы, находятся в регистровой паре R1:R0. Подробно использование этой команды описано в главе 12 Регистр SREG I Т н СЛ V N Z С - - - - - - - - Число тактов Зависит от операции
(продолжение) Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / Пример ; Пример записи слей ldi r31,$F0 clr гЗО ldi rl6,$CF mov rl,rl6 ldi rl6,$FF mov r0,rl6 ldi rl6,$03 out SPMCR,rl6 spm ldi rl6,$01 out SPMCR,rl6 spm за в память программ: • Загрузить адрес в регистр Z • Загрузить данные Разрешить SPM (стереть страницу) Стереть страницу памяти программ по адресу $F000 Разрешить SPM (записать слово в память программ) Записать содержимое rl:rO по адресу $F000 STX, Rr Косвенная запись в память данных Операция 1X1 = Rr Код операции 1001 OOlr rrrrllOO 1 слово (2 байта) Операнды 0<r<31 Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X Регистр SREG I T Н со V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr ldi St r27 r26,$60 X,rl ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Загрузить rl по адресу $0060
STX+, Rr Косвенная запись в память данных с постинкрементом Операция [X] = Rr,X = X+l Код операции 1001 OOlrrnr 1101 1 слово (2 байта) Операнды 0<г<31,дляг = 26 или 27 результат операции не определен Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X. После пересылки байта содержимое регистра X увеличивается на 1 Регистр SREG I T Н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr ldi St in r27 r26,$60 X+,rl rl,r26 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Загрузить rl по адресу $0060 ; В регистре rl - $61 ST-X, Rr Косвенная запись в память данных с преддекрементом Операция X = X-l,[X] = Rr Код операции 1001 OOlrrnr 1110 1 слово (2 байта) Операнды 0 < г < 31, для г = 26 или 27 результат операции не определен Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X, причем перед обращением к памяти данных содержимое регистра X уменьшается на 1 Регистр SREG I Т н СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr ldi St г27 г26,$63 -Х,гЗ ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Загрузить гЗ по адресу $0062
STY, Rr Косвенная запись в память данных Операция [Y] = Rr Код операции 1000 OOlrrnr 1000 1 слово (2 байта) Операнды 0<r<31 Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y Регистр SREG I Т Н S V N Z С - - - - - - - - Число тактов 2 Модели Пх/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / Пример clr ldi St г29 г28,$60 Y,rl ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать rl по адресу $0060 STY+, Rr Косвенная запись в память данных с постинкрементом Операция [Y] = Rr,Y = Y+l Код операции 1001 001г nrrllOl 1 слово (2 байта) Операнды 0<г<31,дляг = 28 или 29 результат операции не определен Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y. После пересылки байта содержимое регистра Y увеличивается на 1 Регистр SREG I T H СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr ldi St in r29 r28,$60 Y+,rl r2,r28 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать rl по адресу $0060 ; В регистре г2 - $61
ST -Y, Rr Косвенная запись в память данных с преддекрементом Операция Y = Y-l,[Y] = Rr Код операции 1001 OOlrrrrr 1010 1 слово (2 байта) Операнды 0 < г < 31, для г = 28 или 29 результат операции не определен Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y, причем перед обращением к памяти данных содержимое регистра Y уменьшается на 1 Регистр SREG I Т Н сл V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr ldi St г29 г28,$63 -Y,r3 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать гЗ по адресу $0062 STZ, Rr Косвенная запись в память данных Операция [Z] = Rr Код операции 1000 OOlrrrrr 0000 1 слово (2 байта) Операнды 0<r< 31 Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z Регистр SREG I Т н со V N Z С - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / / Пример clr ldi St г31 г30,$60 Z,rl ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать rl по адресу $0060
STZ+, Rr Косвенная запись в память данных с постинкрементом Операция [Z] = Rr,Z = Z+l Код операции 1001 OOlrrrrr 1001 1 слово (2 байта) Операнды 0 < г < 31, для г = 30 или 31 результат операции не определен Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z. После пересылки байта содержимое регистра Z увеличивается на 1 Регистр SREG I T Н СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84ч 25х/45х/ 85х 26х 28х / / / / Пример clr ldi St in r31 r30,$60 Z+,rl r2,r30 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать rl по адресу $0060 ; В регистре г2 - $61 ST-Z, Rr Косвенная запись в память данных с преддекрементом Операция Z = Z-l,[Z] = Rr Код операции 1001 OOlrrrrr 1010 1 слово (2 байта) Операнды 0 < г < 31, для г = 30 или 31 результат операции не определен Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z, причем перед обращением к памяти данных содержимое регистра Z уменьшается на 1 Регистр SREG I Т н СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / Пример clr ldi St г31 г30,$бЗ -Z,r3 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать гЗ по адресу $0062
STDY+q, Rr Косвенная относительная запись в память данных Операция [Y+q] = Rr Код операции lOqOqqlrmr lqqq 1 слово (2 байта) Операнды 0<г<31, 0<q<63 Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Дцрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Y и константы q. Содержимое индексного регистра не изменяется Регистр SREG I Т н СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr г29 ldi г28,$63 std Y+2,r4 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать г4 по адресу $0065 STD Z+q, Rd Косвенная относительная запись в память данных Операция [Z + q] = Rr Код операции lOqOqqlr rrrrOqqq 1 слово (2 байта) Операнды 0<г<31, 0<q<63 Описание Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Z и константы q. Содержимое индексного регистра не изменяется Регистр SREG I T н СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример clr г31 ldi г30,$63 std Z+2,r4 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать г4 по адресу $0065
STS к, Rd Непосредственная запись в память данных Операция [k] = Rd Код операции 1001 OOld dddd 0000 кккк кккк кккк кккк 1 слово (2 байта) Операнды 0<d<31,0<k<65535 Описание Сохраняет содержимое регистра общего назначения Rd в памяти данных. Адрес ячейки памяти, к которой производится обращение, задается константой к Регистр SREG I Т н СЛ V N Z С - - - - - - - - Число тактов 2 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример Ids r2,$FF00 ; r2 = [$FF00] add r2,rl ; r2 = r2 + rl sts $FF000,r2 ; Записать результат по тому же адресу SUB Rd, Rr Вычитание двух РОН Операция Rd = Rd- -Rr Код операции 0001 lOrdddddrnr 1 слово (2 байта) Операнды 0<d<31,0<r<31 Описание Вычитает из регистра Rd содержимое регистра Rr. Результат помещается в регистр Rd Регистр SREG I T H СЛ V N Z С - - <=> о <=> о о о Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример sub rl3,rl2 brne noteq noteq: ; Вычесть rl2 из rl3 ; Перейти, если rl2 * (г13 = г13 - г12) г13
SUBI Rd, К Вычитание константы из регистра Операция Rd = Rd - -К Код операции 1010 КККК dddd КККК 1 слово (2 байта) Операнды 16<d<31,K = 0...255 Описание Вычитает из регистра Rd значение константы К. Результат помещается обратно в регистр. Данная команда применима только к старшей половине регистров общего назначения Регистр SREG I т Н S V N Z С - - о о о <=> <=> о Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример subi brne noteq: г22,$11 noteq ; Вычесть $11 из г22 ; Перейти, если г22 ф $11 SWAP Rd Перестановка полубайтов РОН Операция Rd(7:4) = Rd(3:0), Rd(3:0) = Rd(7:4) Код операции 1001010d dddd 0010 1 слово (2 байта) Операнды 0<d<31 Описание Команда производит перестановку старшего и младшего полубайта содержимого регистра Rd Регистр SREG I T H S V N Z С - - - - - - - Число тактов 1 Модели 11х/12х 13x 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример inc swap inc swap rl rl rl rl Инкрементировать rl Переставить полубайты Инкрементировать старший полубайт rl Переставить полубайты обратно
TSTRd Проверка РОН на нулевое или отрицательное значение Операция Rd = Rd«Rd Код операции OOlOOOdd dddd dddd 1 слово (2 байта) Операнды 0<d<31 Описание Проверяет содержимое регистра на нулевое или отрицательное значение путем выполнения операции «Логическое И» регистра с самим собой. Содержимое регистра Rd не изменяется Регистр SREG I Т Н S V N Z С - - - о 0 о о - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / Пример tst breq zero: гО zero ; Проверить гО ; Перейти, если гО = 0 WDR Сброс сторожевого таймера Операция Рестарт сторожевого таймера Код операции 10010101 10101000 1 слово (2 байта) Операнды Нет Описание Выполняет сброс сторожевого таймера. При включенном сторожевом таймере данная команда должна выполняться через определенный промежуток времени, определяемый коэффициентом деления предделителя сторожевого таймера. Для получения подробной информации обратитесь к разделу 7.7 Регистр SREG I Т Н со V N Z С - - - - - - - - Число тактов 1 Модели 11х/12х 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х / / / / / / / Пример wdr ; Сбросить сторожевой таймер
ГЛАВА 4 Тактирование, режимы пониженного энергопотребления и сброс 4.1. Общие сведения Микроконтроллеры семейства Tiny предоставляют пользователю достаточно широкие возможности по выбору источника тактового сигнала. Во-первых, все без исключения микроконтроллеры могут работать от встроенного калиброванного jRC-генератора. В некоторых моделях в качестве тактового может использоваться также встроенный генератор с внешней времязадающей Ж7-цепочкой, а также 7?С-генератор сторожевого таймера. Во-вторых, в большинстве моделей имеется встроенный кварцевый генератор с подключаемым внешним резонатором. И, наконец, в качестве тактового сигнала может использоваться сигнал от внешнего источника. Исключение составляет лишь микроконтроллер ATtinyl5L — в этой модели тактовый сигнал может формироваться только встроенным калиброванным /?С-генератором. Все микроконтроллеры семейства имеют несколько (до четырех) режимов пониженного энергопотребления, обычно называемых одним термином — «спящий» режим. Каждый из этих режимов позволяет снизить энергопотребление микроконтроллера в периоды его бездействия. Вход в любой из этих режимов выполняется по команде SLEEP. При выходе микроконтроллера из «спящего» режима выполнение программы продолжается с места остановки. Сброс микроконтроллера может произойти в результате наступления определенных событий. К этим событиями относится появление на выводе RESET сигнала НИЗКОГО уровня, включение напряжения питания, снижение напряжения питания ниже минимально допустимого уровня, срабатывание сторожевого таймера, а также получение команды сброса по интерфейсу JTAG.
4.2. Тактовый генератор В общем виде устройство синхронизации микроконтроллеров семейства Tiny представлено на Рис. 4.1 (блок предделителя, возможность подключения внешней jRC-цепочки и встроенная схема ФАПЧ имеются не во всех моделях). Рис. 4.1. Устройство синхронизации Как видно из рисунка, на базе системного тактового сигнала формируются дополнительные сигналы, используемые для тактирования различных модулей и блоков микроконтроллера: • clkcpu — тактовый сигнал центрального процессора. Используется для тактирования блоков микроконтроллера, отвечающих за работу с ядром микроконтроллера (регистровый файл, память данных и
т.п.). При выключении этого сигнала ЦПУ останавливается и соответственно прекращаются все вычисления; • clk|/0 — тактовый сигнал подсистемы ввода/вывода. Используется большинством периферийных устройств, таких как таймеры/счетчики и интерфейсные модули. Этот сигнал используется также подсистемой внешних прерываний, однако ряд внешних прерываний могут генерироваться и при его отсутствии; • c^flash — тактовый сигнал для FLASH-памяти программ. Как правило, этот сигнал активируется и деактивируется одновременно с тактовым сигналом центрального процессора clkCPU; • c^adc — тактовый сигнал модуля АЦП. Наличие выделенного тактового сигнала позволяет осуществлять преобразования при остановленном ЦПУ и подсистеме ввода/вывода. При этом значительно уменьшается уровень помех, генерируемых микроконтроллером, и соответственно увеличивается точность преобразования; • clkpCK — тактовый сигнал с выхода схемы ФАПЧ, используемой для умножения частоты сигнала от встроенного ЛС-генератора. Сигнал clkPCK используется в качестве тактового сигнала таймера/счетчика Т1 в моделях ATtiny 15L, ATtiny25x/45x/85x и ATtiny26x. Тактовый генератор микроконтроллеров семейства может работать с внешним кварцевым/керамическим резонатором, внешней или внутренней ЯС-цепочкой, а также с внешним сигналом синхронизации. Возможность использования того или иного источника тактового сигнала зависит от модели микроконтроллера (см. Табл. 4.1). Поскольку архитектура микроконтроллеров полностью статическая, минимально допустимая частота ничем не ограничена (вплоть до пошагового режима работы), а максимальная рабочая частота опять же определяется конкретной моделью микроконтроллера. Таблица 4.1. Источники тактового сигнала Источник тактового сигнала Их 12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26х 28х Кварцевый генератор • • • • • • • Генератор с внешней ЛС-цепочкой • • • • Внутренний калиброванный ЛС-генератор о в • • • • • • ЯС-генератор сторожевого таймера е • • • • Внешний сигнал синхронизации в • • • • • • •
Во всех моделях, кроме ATtinyl5L, выбор режима работы тактового генератора осуществляется программированием конфигурационных ячеек (FUSE Bits) CKSELx. Требуемые значения для каждого режима работы приведены в Табл. 4.2. Подробно о конфигурационных ячейках будет рассказано в главе 12, посвященной программированию микроконтроллеров. Таблица 4.2. Выбор режима работы тактового генератора Источник тактового сигнала CLKSELc Их 12х 13х 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х Кварцевый генератор 111 1111...1010 - 1111...1000 1111...1000 1111...1000 11И...10Ю 1111...1010 Низкочастотный кварцевый генератор 110 1001...1000 - - оно оно 1001 1001. 1000 Генератор с внешней /?С-цепочкой 101 0111...0101 - - - - 1000...0101 0111...0101 Внутренний ЛС-генератор на 128 кГц - - 11 оно 0100 0100 - - Внутренний калиброванный ЛС-генератор1* 100 0100...0010 01, 10 0010,0100 0010 0010, ООП 0100...0001 0100...0010 Схема ФАПЧ - - - - - 0001 0001 - Внешний сигнал синхронизации ООО 0001...0000 00 0000 0000 0000 0000 0001...0000 Зарезервировано - - - 0001,0011, 0101,0111 0101,0111, 0011,0001 0101,0111 - - 1} Режим по умолчанию. От значений, занесенных в эти ячейки, зависит также длительность задержки сброса /тоит (см- раздел 4.4).
4.2.1. Генератор с внешним резонатором Резонатор подключается к выводам XTAL1 и XTAL2 микроконтроллеров, как показано на Рис. 4.2. Эти выводы являются соответственно входом и выходом инвертирующего усилителя тактового генератора. При необходимости сигнал, формируемый генератором, можно использовать для управления какими-либо внешними устройствами. Данный сигнал снимается с вывода XTAL2, при этом между Рис 4 2 Подключе- внешней схемой и выводом микроконтроллера обя- ние кварцевого зательно должен быть включен буфер, или керамического Емкости конденсаторов С\ и С2, подключаемых резонатора между выводами резонатора и общим проводом, зависят от типа резонатора. Для кварцевых резонаторов емкости этих конденсаторов обычно находятся в пределах 12...22 пФ, а для керамических должны выбираться согласно рекомендациям производителей резонаторов. Теперь рассмотрим, каким образом осуществляется конфигурирование тактового генератора с внешним резонатором (далее, для простоты, кварцевого генератора) в различных моделях. ATtiny11x Для использования внешнего резонатора в этой модели необходимо записать в конфигурационные ячейки CKSEL2...0 значение 111. При этом выводы РВЗ и РВ4 задействуются генератором и, следовательно, не могут использоваться в качестве контактов ввода/вывода. ATtiny12x, ATtiny28x В этих моделях для использования внешнего резонатора в конфигурационные ячейки CKSEL3...0 необходимо занести значение из диапазона 1010...1111. Различные установки этих ячеек определяют длительность задержки сброса /тоит- ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x В этих моделях кварцевый генератор может работать в четырех различных режимах, каждый из которых предназначен для определенного диапазона частот. Эти режимы определяются состоянием ячеек CKSEL3...0. Вообще говоря, для выбора режима используются только ячейки CKSEL3...1, а ячейка CKSEL0 совместно с ячейками SUT1:0 определяет длительность задержки сброса /тоит- Диапазоны частот, для которых предназначен тот или иной режим генератора, приведены в Табл. 4.3.
Таблица 4.3. Режимы работы кварцевого генератора CKSEL3...1 Примерный диапазон частот [МГц] 1001) 0.4...0.9 101 0.9...3.0 по 3.0...8.0 111 >8.0 !) В этом режиме должен использоваться только керамический резонатор. ATtiny26x В этой модели кварцевый генератор может работать в трех режимах, определяемых состоянием ячеек CKSEL3...1. Диапазоны частот, для которых предназначен тот или иной режим, приведены в Табл. 4.4. Таблица 4.4. Режимы работы кварцевого генератора CKSEL3...1 Примерный диапазон частот [МГц] НИ» 0.4...0.9 110 0.9...3.0 111 3.0... 16.0 1) В этом режиме должен использоваться только керамический резонатор. При использовании данного тактового генератора конфигурационная ячейка СКОРТ должна быть незапрограммированной (1). ATtiny28x В этой модели для использования внешнего резонатора в конфигурационные ячейки CKSEL3...0 необходимо занести любое значение из диапазона 0101...1111. Различные установки этих ячеек определяют, как и в ATtinyl2x, длительность задержки сброса /тоит- Кроме того, в этой модели имеются внутренние конденсаторы емкостью -50 пФ, подключаемые между выводами XTAL1/XTAL2 и общим проводом при программировании (записи в нее 0) конфигурационной ячейки INTCAP. 4.2.2. Низкочастотный кварцевый генератор В этом режиме используется низкочастотный кварцевый резонатор на частоту 32 768 Гц, так называемый часовой кварц. Как и обычные резонаторы, он подключается к выводам XTAL1 и XTAL2 микроконтроллеров. В двух моделях семейства имеются внутренние конденсаторы, которые можно при использовании данного режима подключить между выводами резонатора и общим проводом. При этом надобность во внешних конденса- 303
торах, естественно, отпадает. В модели ATtiny26x конденсаторы емкостью 36 пФ подключаются при запрограммированной конфигурационной ячейке СКОРТ, а в модели ATtiny28x конденсаторы (50 пФ) подключаются в результате программирования конфигурационной ячейки INTCAP. 4.2.3. Внешний сигнал синхронизации Сигнал от внешнего источника подается на вывод XTAL1 (в модели ATtinyl3x на вывод CLKI), как показано на Рис. 4.3. Разумеется, этот сигнал должен удовлетворять требованиям микроконтроллера по частоте, скважности и уровням напряжения. Вывод XTAL2 в этом режиме оставляют неподключенным, причем в тех моделях, в которых он совмещен с контактом ввода/вывода, его можно использовать по прямому назначению — в качестве линии порта (см. Рис. 4.3, а). Рис. 4.3. Подключение внешнего источника тактового сигнала: а — для ATtinyl 1х/12х, ATtinyl3x и ATtiny26x; б — для ATtiny28x, ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x В моделях ATtiny26x между выводом XTAL1 и общим проводом можно включить внутренний конденсатор емкостью 36 пФ. Это осуществляется записью 0 в конфигурационную ячейку СКОРТ. 4.2.4. Генератор с внешней ДС-цепочкой При реализации приложений, не требующих высокой временной точности, в некоторых моделях семейства можно использовать простейший ЛС-генератор. При этом внешняя ЛС-цепочка подключается к выводу XTAL1, как показано на Рис. 4.4. Разумеется, вывод XTAL2, совмещенный с контактом ввода/вывода, в этом режиме можно использовать по прямому назначению — в качестве линии порта. Емкость конденсатора цепочки должна быть не менее 22 пФ, а сопротивление резистора рекомендуется Рис. 4.4. Подключение внешней ЯС-цепочки
выбирать из диапазона 3.3... 100 кОм. Значения R и С для типовых частот приведены в Табл. 4.5 и Табл. 4.6. Причем в модели ATtiny26x внешний конденсатор можно исключить, задействовав внутренний емкостью 36 пФ, который подключается при записи 0 в конфигурационную ячейку СКОРТ. Таблица 4.5. Параметры внешней ЯС-цепочки для моделей ATtinyllx/12x и ATtiny28x R [кОм] С[пФ] /№] 100 70 100 31.5 20 1000 6.5 20 4000 Таблица 4.6. Параметры внешней 7?С-цепочки для модели ATtiny26x R [кОм] С[пФ] /[кГц] 33 22 650 10 22 2000 В модели ATtiny26x тактовый ЯС-генератор, как и кварцевый, может работать в четырех различных режимах, каждый из которых оптимизирован для определенного диапазона частот. Эти режимы определяются содержимым ячеек CKSEL3...0 согласно Табл. 4.7. Таблица 4.7. Режимы работы генератора с внешней 7?С-цепочкой для модели ATtiny26x CKSEL3...0 Примерный диапазон частот [МГц] 0101 0.1...0.9 оно 0.9...3.0 0111 3.0...8.0 1000 8.0...12.0 4.2.5. Внутренний калиброванный ЯС-генератор Использование встроенного ЛС-генератора с внутренней времязадаю- щей Ж?-цепочкой (внутреннего Ж7-генератора) является наиболее экономичным решением, так как при этом не требуются никакие внешние компоненты. Во всех моделях по умолчанию включен именно этот режим, а в модели ATtinyl5L внутренний ЛС-генератор вообще является единственно возможным источником тактового сигнала. Номинальные частоты генератора для различных моделей приведены в Табл. 4.8.
Таблица 4.8. Номинальные частоты внутреннего ЛС-генератора Модели Частота [МГц] CKSELx ATtinyllx 1.0 100 ATtinyl2x 1.2 0100...0010 ATtinyl3x 4.8 01 9.6» 10 ATtinyl5L 1.6 - ATtiny2313x 4.0 0010...0011 8.0!) 0100...0101 ATtiny24x/44x/84x 8.0 0010 ATtiny25x/45x/85x 6.42) ООП 8.0'> 0010 ATtiny26x 1.0'> 0001 2.0 0010 4.0 ООН 8.0 0100 ATtiny28x 1.2 0100...0010 !) Частота по умолчанию. 2) Режим совместимости с ATtinyl5L. Следует отметить, что при работе с внутренним ЛС-генератором в конфигурационной ячейке СКОРТ (если она имеется в микроконтроллере) должна быть записана 1. Во всех микроконтроллерах семейства, кроме ATtinyllx, предусмотрена возможность подстройки частоты внутреннего генератора (так называемая калибровка). Для этой цели используется регистр OSCCAL, который во всех моделях, кроме ATtiny28x, располагается по адресу $31 ($51). В ATtiny28x регистр OSCCAL расположен по адресу $00 ($20). Чем больше значение, записанное в регистре OSCCAL, тем выше частота генератора. Диапазон возможного изменения частоты Ж?-генератора в зависимости от содержимого этого регистра указан в Табл. 4.9. Таблица 4.9. Влияние содержимого регистра OSCCAL на частоту внутреннего ЛС-генератора Содержимое регистра OSCCAL /min (в % от номинальной) /мах (в % от номинальной) ATtinyl3x, ATtiny28x Остальные модели $00 $00 50 100 $3F $7F 75 150 $7F $FF 100 200
Значение, необходимое для подстройки генератора на номинальную частоту с точностью не хуже ±1% при температуре +25°С (для всего диапазона рабочих температур это значение соответствует точности не хуже ±3%) записывается при изготовлении микроконтроллера в специальные калибровочные ячейки, количество которых равно числу номинальных частот внутреннего ЯС-генератора данной модели. Эти ячейки доступны только в режиме программирования микроконтроллеров. Загрузка калибровочной константы для частоты, установленной по умолчанию, осуществляется аппаратно при каждом включении питания. Если же используется другая частота внутреннего ЯС-генератора, соответствующее значение должно загружаться в регистр OSCCAL программным путем. Для этого программатор должен считать содержимое калибровочной ячейки и записать его в заранее определенное место в FLASH-памяти программ или EEPROM. А в самом начале программы следует прочитать содержимое по этому адресу и загрузить его в регистр OSCCAL. Следует помнить, что внутренний генератор предназначен для работы на номинальных частотах. Поэтому подстройка на другие частоты хотя и возможна, но не гарантируется. Более того, внутренний ЯС-генератор определяет временные параметры доступа к FLASH- и EEPROM-памяти, поэтому увеличение частоты генератора более чем на 10% может привести к невозможности записи в эти области памяти. 4.2.6. Внутренний RC-генератор на 128 кГц В моделях ATtinyl3x, ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x в качестве тактового можно использовать еще один внутренний ЛС-генера- тор, имеющий фиксированную частоту 128 кГц (генератор сторожевого таймера). Для использования этого источника тактового сигнала в ячейках CKSELx модели ATtinyl3x должно быть записано значение 11, в модели ATtiny2313 - 0110, а в моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x - 0100. 4.2.7. Схема ФАПЧ В моделях ATtiny25x/45x/85x и ATtiny26x в качестве тактового можно использовать сигнал, формируемый встроенной схемой ФАПЧ. Входным сигналом для схемы ФАПЧ является сигнал от калиброванного jRC-генера- тора, а системный тактовый сигнал получается делением выходного сигнала схемы ФАПЧ частотой 64 МГц на 4. Поэтому частота источника тактового сигнала в данном режиме равна 16 МГц. Для использования этого режима должна быть запрограммирована конфигурационная ячейка PLLCK, отвечающая за включение схемы ФАПЧ, а в ячейки CKSEL3...0 должно быть записано значение 0001.
4.2.8. Управление тактовой частотой В новых моделях семейства ATtinyBx, ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x имеется возможность программного уменьшения частоты сигнала, поступающего от тактового генератора. Понятно, что одновременно с уменьшением тактовой частоты уменьшаются частоты сигналов clkCPU, clkI/0, clkFLASH» clkADc» т.е. замедляется работа всех периферийных устройств микроконтроллера. Для управления предделителем тактового сигнала используется регистр CLKPR, расположенный по адресу $26 ($46). Формат этого регистра приведен на Рис. 4.5. Рис. 4.5. Формат регистра CLKPR Старший бит (СРСЕ) служит для разрешения изменения частоты тактового сигнала, а биты CLKPS3...CLKPS0 задают коэффициент деления предделителя (Табл. 4.10). Таблица 4.10. Выбор коэффициента деления предделителя тактового сигнала CLKPS3 CLKPS2 CLKPS1 CLKPS0 Коэффициент деления 0 0 0 0 1 0 0 0 1 2 0 0 1 0 4 0 0 1 1 8 0 1 0 0 16 0 1 0 1 32 0 1 1 0 64 0 1 1 1 128 1 0 0 0 256 1 0 0 1 Зарезервировано 1 1 1 1
Для изменения содержимого битов CLKPS3...0 необходимо выполнить следующие действия: 1. Записать 1 в бит СРСЕ, а в биты CLKPS3...0 — 0. 2. В течение следующих четырех тактов занести требуемое значение в биты CLKPS3...0, при этом бит СРСЕ будет сброшен в 0. В противном случае, бит СРСЕ буден сброшен аппаратно по истечении четырех тактов, запрещая дальнейшее изменение битов CLKPS3...0. Начальное состояние битов CLKPS3...0 определяется конфигурационной ячейкой CKDIV8. Если она не запрограммирована (1), то при запуске микроконтроллера в битах CLKPS3...0 будет находиться значение 0000. Если же ячейка CKDIV8 запрограммирована (0), стартовым значением битов CLKPS3...0 является ООН (коэффициент деления — 8). Поскольку по умолчанию в этих моделях задается максимальная частота встроенного ЛС-генератора, конфигурационная ячейка CKDIV8 по умолчанию также запрограммирована, чтобы не допустить превышения максимально возможной частоты тактового сигнала, независимо от используемого рабочего напряжения. 4.3. Управление электропитанием Микроконтроллеры семейства Tiny предоставляют пользователю широкие возможности по уменьшению тока, потребляемого кристаллом. Для этого в любой модели семейства имеется несколько режимов пониженного потребления, при переходе в которые выполнение программы приостанавливается, а возобновляется при наступлении определенных событий. В некоторых новых моделях, кроме того, предусмотрен менее радикальный способ снижения энергопотребления кристалла — отключение тактовых сигналов незадействованных периферийных модулей. 4.3.1. Режимы пониженного энергопотребления Различные модели микроконтроллеров семейства поддерживают от двух до четырех режимов пониженного энергопотребления (Табл. 4Л1). Режимы отличаются числом периферийных устройств микроконтроллера, функционирующих во время «сна» микроконтроллера, и соответственно степенью уменьшения энергопотребления.
Таблица 4.11. Режимы пониженного энергопотребления Режим пониженного энергопотребления llx/12x 13x 15L 2313x 24x/44x/ 84x 25x/45x/ 85x 26x 28x Idle • • • • 0 • • • ADC Noise Reduction • • • • • Power Down • • • • • • • • Standby • • • Для управления «спящим» режимом используется либо регистр управления MCUCR, расположенный по адресу $35 ($55), либо (в модели ATtiny28x) регистр управления и состояния MCUCS, расположенный по адресу $07 ($27). Форматы этих регистров приведены на Рис. 4.6 и Рис. 4.7 (биты, не имеющие отношения к управлению энергопотреблением, выделены серым цветом). Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 4.6. Формат регистра MCUCR Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 4.7. Формат регистра MCUCS модели ATtiny28x
В общей сложности для управления «спящим» режимом в микроконтроллерах семейства используется до четырех битов указанных регистров ввода/вывода. Назначение этих битов приведено в Табл. 4.12. Таблица 4.12. Биты регистров для управления «спящим» режимом Название бита Описание SE Разрешение перехода в режим пониженного энергопотребления. Установка этого бита в 1 разрешает перевод микроконтроллера в режим пониженного энергопотребления. Переключение осуществляется по команде SLEEP. При сброшенном бите SE выполнение команды не производит никаких действий SM1.SM0 (SM1*) Выбор режима пониженного энергопотребления. Состояние этих битов определяет, в какой режим перейдет микроконтроллер после выполнения команды SLEEP 1) В моделях ATtinyl 1х/12х и ATtiny28x. Переключение в любой из режимов пониженного потребления осуществляется командой SLEEP. При этом флаг SE должен быть установлен в 1. Во избежание непреднамеренного переключения микроконтроллера в «спящий» режим рекомендуется устанавливать этот флаг непосредственно перед выполнением команды SLEEP. Режим, в который перейдет микроконтроллер после выполнения команды SLEEP, определяется состоянием битов SM1...SM0 (SM). Соответствие между содержимым этих битов и режимом пониженного энергопотребления приведено в Табл. 4.13. Таблица 4.13. Выбор режима пониженного энергопотребления SM1 (SM1*) SM0 Режим 24х/44х/84х, 26х 2313x 13x, 15L, 25x/45x/85x llx/12x, 28x 0 0 Idle Idle Idle Idle 0 1 ADC Noise Reduction Power Down ADC Noise Reduction - 1 0 Power Down Power Down Power Down Power Down 1 1 Standby2* Standby2* Зарезервировано - Х) В моделях ATtinyl 1х/12х и ATtiny28x. 2) Этот режим можно использовать только при работе с внешним резонатором.
Выход из «спящего» режима может быть осуществлен: 1. В результате прерывания. При генерации прерывания микроконтроллер переходит в рабочий режим, останавливается на 4 такта, выполняет подпрограмму обработки прерывания и возобновляет выполнение программы с инструкции, следующей за командой SLEEP. Содержимое РОН, ОЗУ и РВВ при этом не изменяется. 2. В результате сброса. После перехода микроконтроллера в рабочий режим управление передается по адресу вектора сброса. Idle (режим холостого хода) В этом режиме прекращается формирование тактовых сигналов clkCPU и clkFLASH. При этом ЦПУ микроконтроллера останавливается, а все остальные периферийные устройства (интерфейсные модули, таймеры/счетчики, аналоговый компаратор, АЦП, сторожевой таймер), а также подсистема прерываний продолжают функционировать. Поэтому выход из режима Idle возможен как по внешнему, так и по внутреннему прерыванию. Если разрешена работа АЦП, то преобразование начнет выполняться сразу же после перехода в «спящий» режим. Основным преимуществом режима Idle является быстрая реакция на события, приводящие к «пробуждению» микроконтроллера. Другими словами, выполнение программы начинается сразу же после перехода из режима Idle в рабочий режим. ADC Noise Reduction (режим снижения шумов АЦП) Данный режим имеется только в моделях, содержащих модуль АЦП. В этом режиме прекращает работу ЦПУ микроконтроллера и подсистема ввода/вывода (отключаются тактовые сигналы clkCPU, clkFLASH и clkI/0), а АЦП, подсистема обработки внешних прерываний, сторожевой таймер и схема обнаружения состояния СТАРТ модуля USI продолжают функционировать. За счет этого уменьшаются помехи на входах АЦП, вызываемые работой системы ввода/вывода микроконтроллера, что, в свою очередь, позволяет повысить точность преобразования. Если АЦП включен, преобразование начнет выполняться сразу же после перехода в «спящий» режим. Поскольку тактовый сигнал подсистемы ввода/вывода clki/0 в этом режиме не формируется, возврат микроконтроллера в рабочий режим может произойти только в результате сброса (аппаратного, от сторожевого таймера, от схемы BOD) или в результате генерации следующих прерываний: • прерывания от сторожевого таймера; • прерывания по обнаружению модулем USI состояния СТАРТ;
• внешнего прерывания, обнаруживаемого асинхронно; • прерывания по изменению состояния выводов; • прерывания от EEPROM-памяти и SPM-прерывания; • прерывания от АЦП. Power Down (режим микропотребления) В режиме Power Down отключаются все внутренние тактовые сигналы, соответственно прекращается функционирование всех систем микроконтроллера, работающих в синхронном режиме. Единственными узлами, продолжающими работать в этом режиме, являются асинхронные модули микроконтроллера: сторожевой таймер (если он включен), подсистема обработки внешних прерываний и схема обнаружения состояния СТАРТ модуля USI. Соответственно, выход из режима Power Down возможен либо в результате сброса (аппаратного, от сторожевого таймера, от схемы BOD) или в результате генерации следующих прерываний: • прерывания по обнаружению модулем USI состояния СТАРТ; • внешнего прерывания (обнаруживаемого асинхронно). Поскольку тактовый генератор микроконтроллера в режиме Power Down останавливается, между наступлением события, приводящего к «пробуждению» микроконтроллера и началом его работы проходит некоторое время, в течение которого тактовый генератор микроконтроллера выходит на рабочий режим. Эта задержка определяется теми же конфигурационными ячейками, которые задают задержку сброса микроконтроллера (см. раздел 4.4). Также следует помнить, что для «пробуждения» микроконтроллера по внешнему прерыванию, генерируемому по НИЗКОМУ уровню, длительность активного сигнала на входе микроконтроллера должна быть не меньше времени запуска микроконтроллера ts (см. раздел 4.4). Если сигнал, вызвавший «пробуждение» микроконтроллера, будет снят раньше, чем микроконтроллер перейдет в рабочий режим, то обработчик соответствующего прерывания вызван не будет! Standby (режим ожидания) Этот режим рекомендуется задействовать только при использовании в качестве источника тактового сигнала встроенного генератора с внешним резонатором. Режим Standby полностью идентичен режиму Power Down, за исключением того, что тактовый генератор продолжает функционировать. Благодаря этому, переход микроконтроллера в рабочий режим происходит гораздо быстрее — за 6 тактов. Основные отличия разных режимов пониженного энергопотребления приведены в Табл. 4.14.
Таблица 4.14. Основные отличия режимов пониженного энергопотребления Активные внутренние тактовые сигналы Генераторы Источники «пробуждения» микроконтроллера Режим э Ом о x О J u ^£ Основной источник тактового сигнала Внешние прерывания Схема обнаружения состояния СТАРТ модуля USI Готовность SPM/EEPROM АЦП Сторожевой таймер Другие модули ввода/вывода Idle • • • • • • • • • • ADC Noise Reduction • • • • • • Power Down • 2> • • Standby0 • • 2> • • 1) Источником тактового сигнала должен быть кварцевый генератор. 2) Только прерывания, обнаруживаемые асинхронно. 4.3.2. Управление тактовыми сигналами модулей В моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x помимо энергосберегающих режимов предусмотрен еще один метод снижения суммарного потребления кристалла. Этот метод заключается в отключении тактовых сигналов тех периферийных модулей, которые не задействованы в конкретном приложении. При этом состояние периферийного модуля «замораживается», а его регистры становятся недоступными для операций чтения/записи. Перед отключением тактового сигнала периферийного модуля желательно запрещать функционирование данного модуля. Это связано с тем, что при отключении тактового сигнала аппаратные ресурсы кристалла, используемые периферийным модулем, остаются в его распоряжении. Для управления локальными тактовыми сигналами используется регистр снижения потребляемой мощности PRR, расположенный по адресу $00 ($20) в моделях ATtiny24x/44x/84x и $20 ($40) в моделях ATtiny25x/45x/85x. Формат этого регистра приведен на Рис. 4.8. Рис. 4.8. Формат регистра PRR
Назначение битов регистра снижения потребляемой мощности приведено в Табл. 4.15. Таблица 4.15. Биты регистров PRR Бит Название Описание 7...4 - Зарезервированы, читаются как 0 3 PRTIM1 Отключение таймера/счетчика Т1. При установке этого бита в 1 отключается таймер/счетчик Т1. После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме 2 PRTIM0 Отключение таймера/счетчика ТО. При установке этого бита в 1 отключается таймер/счетчик ТО. После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме 1 PRUSI Отключение модуля USI. При установке этого бита в 1 прекращается формирование тактового сигнала модуля USI, в результате чего он отключается. После повторного включения модуль необходимо реинициализировать 0 PRADC Отключение модуля АЦП. При установке этого бита в 1 отключается АЦП. Перед отключением функционирование АЦП необходимо запретить. Примечание. При выключенном АЦП аналоговый компаратор не может использовать входной мультиплексор модуля АЦП Использовать отключение тактовых сигналов модулей можно как при нормальном функционировании микроконтроллера, так и совместно с энергосберегающим режимом Idle. 4.3.3. Общие рекомендации по уменьшению энергопотребления Если требуется свести энергопотребление микроконтроллера к минимуму, то при разработке программы необходимо учитывать два момента. Во-первых, необходимо как можно активнее использовать энергосберегающие режимы, причем режим следует выбирать так, чтобы в нем функционировало минимально необходимое количество узлов микроконтроллера. Во-вторых, должна быть запрещена работа всех неиспользуемых модулей. Ниже перечислены модули, на которые рекомендуется обратить более пристальное внимание при решении задачи минимизации суммарного энергопотребления кристалла.
Аналого-цифровой преобразователь Если функционирование АЦП разрешено, то он будет работать во всех «спящих» режимах. Соответственно, для снижения потребляемого тока модуль АЦП необходимо отключать перед переводом микроконтроллера в любой из энергосберегающих режимов. Аналоговый компаратор Если компаратор не используется, то при переводе микроконтроллера в режим Idle или ADC Noise Reduction его необходимо отключить. В других «спящих» режимах модуль аналогового компаратора отключается автоматически. Тем не менее, если в качестве одного из входных сигналов в компараторе используется сигнал от внутреннего ИОН, модуль аналогового компаратора необходимо отключать вручную перед переводом микроконтроллера в любой из «спящих» режимов. В противном случае, ИОН останется включенным независимо от «спящего» режима, увеличивая суммарное потребление кристалла. Подробнее о конфигурировании аналогового компаратора будет рассказано в главе 8. Детектор пониженного напряжения питания Если детектор пониженного напряжения питания (Brown-Out Detector — BOD) в приложении не требуется, этот узел необходимо отключить. Если же работа данного узла разрешена, то он будет работать в любом из «спящих» режимов, увеличивая суммарное потребление кристалла. Внутренний источник опорного напряжения Внутренний ИОН будет работать, если включен хотя бы один из следующих узлов микроконтроллера: детектор пониженного напряжения питания, аналоговый компаратор, АЦП. При отключении всех этих модулей ИОН выключится автоматически. Не забудьте, что при повторном включении ИОН его выходной сигнал можно будет использовать только спустя некоторый промежуток времени (см. раздел 4.4). Сторожевой таймер Если сторожевой таймер в приложении не требуется, его необходимо отключить. В противном случае, он будет работать в любом из «спящих» режимов, увеличивая общее потребление кристалла. Порты ввода/вывода Перед переключением в «спящий» режим все выводы портов ввода/вывода необходимо сконфигурировать так, чтобы они потребляли наименьший ток. Главное — свести к минимуму количество
линий, управляющих резистивной нагрузкой. Во всех «спящих» режимах, в которых прекращается формирование тактовых сигналов clkI/0 и clkADc> входные буферы портов ввода/вывода отключаются. Исключение составляют только входные узлы тех линий ввода/вывода, которые используются для вывода микроконтроллера из «спящего» режима. Если же при включенном входном буфере вывод микроконтроллера останется неподключенным или на нем будет присутствовать аналоговый сигнал с напряжением, близким к Ксс/2, то буфер будет потреблять чрезмерный ток. В моделях, позволяющих отключать цифровые входные буферы на аналоговых входах, они всегда должны быть выключены. 4.4. Сброс Реинициализация, или так называемый сброс, переводит микроконтроллер в определенное устойчивое состояние. Сброс может быть вызван следующими событиями: • включение напряжения питания микроконтроллера; • подача сигнала НИЗКОГО уровня на вывод RESET (аппаратный сброс); • тайм-аут сторожевого таймера; • падение напряжения питания ниже заданной величины. При наступлении любого из перечисленных событий во все регистры ввода/вывода заносятся их начальные значения, а в счетчик команд загружается значение адреса вектора сброса $000. По этому адресу должна находиться команда безусловного перехода RJMP на начало программы. Если же прерывания в программе не используются, то она может начинаться непосредственно с адреса вектора сброса. Структурные схемы подсистемы сброса приведены на Рис. 4.9 (ATtinyl3x) и Рис. 4.10 (остальные модели). Следует сразу же сказать, что разные модели микроконтроллеров семейства предоставляют различные возможности по управлению процессом сброса. Тем не менее, логика работы схемы сброса одинакова для всех моделей. При наступлении события, приводящего к сбросу микроконтроллера, формируется внутренний сигнал сброса. Одновременно запускается таймер формирования задержки сброса. По истечении определенного промежутка времени внутренний сигнал сброса снимается и начинается выполнение программы.
Рис. 4.9. Структурная схема подсистемы сброса микроконтроллеров ATtinyl 1х Рис. 4.10. Обобщенная структурная схема подсистемы сброса микроконтроллеров семейства Tiny (кроме ATtinyl 1х)
Все микроконтроллеры семейства позволяют определить событие, в результате которого произошел сброс устройства. В модели ATtiny28x для этого используется регистр управления и состояния MCUCS, расположенный по адресу $07 ($27), а в остальных моделях — регистр состояния MCUSR, расположенный по адресу $34 ($54). Оба указанных регистра содержат набор флагов, состояние которых зависит от события, вызвавшего сброс устройства. Формат регистров MCUSR и MCUCS приведен на Рис. 4.11 (биты, не относящиеся к подсистеме сброса, выделены серым цветом). Описание флагов, используемых для определения источника сброса, приведено в Табл. 4.16. Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции Рис. 4.11. Формат регистров MCUSR (а) и MCUCS (б) Таблица 4.16. Флаги источников сброса регистров MCUSR и MCUCS Название флага Описание WDRF Флаг сброса от сторожевого таймера. Устанавливается в 1, если источником сброса был сторожевой таймер. Бит сбрасывается в результате сброса по питанию или непосредственной записью в него 0 BORF Флаг сброса по снижению питания. Устанавливается в 1, если источником сброса была подсистема BOD. Бит сбрасывается в результате сброса по питанию или непосредственной записью в него 0 EXTRF Флаг аппаратного сброса. Устанавливается в 1, если сброс произошел в результате подачи на вывод сброса сигнала НИЗКОГО уровня. Бит сбрасывается в результате сброса по питанию или непосредственной записью в него 0 PORF Флаг сброса по включению питания. Устанавливается в 1 после подачи напряжения питания на микроконтроллер. Бит сбрасывается только непосредственной записью в него 0
Обратите внимание, что в модели ATtinyl 1х отсутствует флаг сброса от сторожевого таймера. Чтобы распознать этот вид сброса, следует в самом начале программы сбросить оба бита регистра MCUSR. Если затем во время работы программы произойдет сброс устройства, источник сброса можно будет определить согласно Табл. 4.17. Таблица 4.17. Определение источника сброса в моделях ATinyllx PORF EXTRF Источник сброса 0 0 Сброс от сторожевого таймера 0 1 Аппаратный сброс 1 0 Сброс по питанию 1 1 Сброс по питанию 4.4.1. Сброс по включению питания Во всех микроконтроллерах семейства имеется схема сброса по включению питания (Power-On Reset — POR). Эта схема удерживает микроконтроллер в состоянии сброса до тех пор, пока напряжение питания не превысит некоторого порогового значения КР0Т. При достижении напряжением питания значения КРОт схема POR запускает таймер задержки сброса. По окончании счета (после формирования задержки /тоит) внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Управление выводом RESET микроконтроллера при включении питания может осуществляться двумя способами. Если время нарастания напряжения источника питания известно и не превышает величины /тоит» можно использовать способ, при котором напряжение на выводе RESET «повторяет» напряжение питания. Соответствующие данному способу временные диаграммы показаны на Рис. 4.12. Для реализации этого способа вывод RESET следует подключить к источнику питания. Рис. 4.12. Временные диаграммы сигналов при сбросе по включению питания; вывод RESET подключен к VDD
При втором способе вывод RESET управляется внешней схемой, и сигнал ВЫСОКОГО уровня подается на него только после установления напряжения питания. Временные диаграммы, соответствующие этому способу, показаны на Рис. 4.13. Рис. 4.13. Временные диаграммы сигналов при сбросе по включению питания; вывод RESET управляется внешней схемой В этом случае работой таймера задержки сброса будет управлять схема аппаратного сброса, и он начнет работать при достижении напряжением на выводе RESET порогового значения VRST. Данное решение является более дорогостоящим, так как требует применения внешних компонентов. Однако этот способ позволяет «подгонять» время запуска микроконтроллера под время нарастания напряжения используемого источника питания. 4.4.2. Аппаратный сброс Аппаратный (или внешний) сброс микроконтроллера осуществляется подачей на вывод RESET сигнала НИЗКОГО уровня. Микроконт- роллер остается в состоянии сброса до тех пор, пока на выводе RESET будет присутствовать сигнал НИЗКОГО уровня. Минимальная длительность импульса, при которой гарантируется сброс микроконтроллера, для разных моделей различна, но не превышает 2.5 мкс. При достижении напряжением на выводе RESET порогового значения KRST запускается таймер задержки сброса. После формирования задержки /тоит внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Временные диаграммы сигналов при аппаратном сбросе показаны на Рис. 4.14.
Рис. 4.14. Временные диаграммы сигналов при аппаратном сбросе 4.4.3. Сброс от сторожевого таймера По тайм-ауту сторожевого таймера (если он включен) устанавливается внутренний сигнал сброса и генерируется короткий положительный импульс, длительность которого равна одному периоду тактового сигнала микроконтроллера. По спадающему фронту этого импульса запускается таймер задержки сброса. После формирования задержки /тоит внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Временные диаграммы, соответствующие сбросу от сторожевого таймера, показаны на Рис. 4.15. Рис. 4.15. Временные диаграммы сигналов при сбросе от сторожевого таймера 4.4.4. Сброс при снижении напряжения питания Все модели микроконтроллеров семейства, за исключением ATtinyllx и ATtiny28x, имеют в своем составе схему BOD (Brown-Out Detection), которая отслеживает величину напряжения источника питания. Если работа этой схема разрешена, то при снижении напряжения питания ниже некоторого значения она переводит микроконтроллер в состояние сброса.
4.4. Сброс ■ 181 Когда напряжение питания вновь увеличится до порогового значения, запускается таймер задержки сброса. После формирования задержки *тоит внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Временные диаграммы, соответствующие сбросу от схемы BOD, показаны на Рис. 4.16. Для уменьшения вероятности ложных срабатываний порог переключения схемы имеет гистерезис относительно порога срабатывания КВОъ равный 50 мВ (КВОт+ = ^вот + 25 мВ, Рвот- = ^вот - - 25 мВ). Кроме того, срабатывание схемы BOD произойдет только в том случае, если длительность провала напряжения питания превысит определенное значение /ВОо- Рис. 4.16. Временные диаграммы сигналов при сбросе по снижению напряжения питания Управление схемой BOD зависит от модели микроконтроллера. ATtiny12x В этой модели включением/выключением схемы BOD управляет конфигурационная ячейка BODEN. Для разрешения работы схемы эта ячейка должна быть запрограммирована (0). Порог срабатывания определяется состоянием конфигурационной ячейки BODLEVEL. Если в этой ячейке записана 1, порог срабатывания равен 1.8 В. Если же в ней записан 0 (после ее программирования), то порог срабатывания равен 2.7 В. Типовые значения /bod схемы составляют 7 мкс (для VB0T = 2.7 В) и 24 мкс (для КВот =1.8 В). ATtiny13x В этих моделях для управления схемой BOD используются две конфигурационные ячейки BODLEVEL1...0. Соответствие между содержимым этих ячеек и порогом срабатывания схемы BOD приведено в Табл. 4.18. Типовое значение 7Bod составляет 2 мкс.
Таблица 4.18. Задание порога срабатывания схемы BOD в модели ATtinyl3x BODLEVEL1...0 Порог срабатывания VB0T (typ) [В] 11 Схема BOD выключена 10 1.8 01 2.7 00 4.3 ATtiny15L В модели ATtinyl5L, также как в ATtinyl2х, для управления схемой BOD используются две конфигурационные ячейки: BODEN и BODLEVEL. Первая управляет включением/выключением схемы BOD, а вторая задает порог срабатывания схемы. Если в ячейке BODLEVEL записана 1, порог срабатывания равен 2.7 В. Если же в ней записан О (после ее программирования), то порог срабатывания равен 4.0 В. Типовые значения /воо схемы составляют 3 мкс (для КВОт = 4.0 В) и 7 мкс (для Квот = 2.7 В). ATtiny2313x В этих моделях для управления схемой BOD используются уже три конфигурационные ячейки BODLEVEL2...0. Соответствие между содержимым этих ячеек и порогом срабатывания схемы BOD приведено в Табл. 4.19. Типовое значение /B0D составляет 2 мкс. Таблица 4.19. Задание порога срабатывания схемы BOD в модели ATtiny2313x BODLEVEL2...0 Порог срабатывания VB0T (typ) [В] 111 Схема BOD выключена ПО 1.8 101 2.7 100 4.3 011 Зарезервировано 010 001 000 ATtiny24x/44x/84x, ATtiny25x/45x/85x В этих моделях для управления схемой BOD также используются три конфигурационные ячейки BODLEVEL2...0. Соответствие между содержимым этих ячеек и порогом срабатывания схемы BOD приведено в Табл. 4.20. Типовое значение tB0D составляет 2 мкс.
Таблица 4.20. Задание порога срабатывания схемы BOD в моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x BODLEVEL2...0 Порог срабатывания VB0T (typ) [В] 111 Схема BOD выключена ПО 1.8 101 2.7 100 4.3 011 2.3 010 2.2 001 1.9 000 2.0 ATtiny28x В этой модели для управления схемой BOD используются две конфигурационные ячейки: BODEN и BODLEVEL. Первая управляет включением/выключением схемы BOD, а вторая задает порог срабатывания схемы. Если в ячейке BODLEVEL записана 1, порог срабатывания равен 2.7 В. Если же в ней записан 0 (после ее программирования), то порог срабатывания равен 4.0 В. Типовое значение tB0D составляет 2 мкс. 4.4.5. Управление схемой сброса Управление схемой сброса заключается в задании длительности задержки сброса /тоит- Для этого используются те же конфигурационные ячейки, которые определяют режим работы тактового генератора микроконтроллера плюс (в некоторых моделях) ряд других. Во всех моделях, кроме ATtinyl 1х, задержка сброса имеет две составляющие. В течение первой части задержки (/s) происходит выход на рабочий режим и стабилизация частоты тактового генератора перед началом выполнения команд. Кроме того, эта составляющая определяет длительность перехода микроконтроллера в рабочий режим из режимов Power Down и Power Save. При формировании данной составляющей таймер задержки сброса работает от тактового генератора микроконтроллера. Вторая часть задержки (/R) предназначена для того, чтобы дать возможность установиться напряжению питания. При формировании этой составляющей задержки таймер работает от ДС-генератора сторожевого таймера. Обратите внимание, что поскольку на частоту этого таймера влияют различные факторы, в частности температура и величина напряжения питания, действительные значения задержек сброса могут отличаться от указанных ниже.
ATtinyllx Длительность задержки сброса /тоит зависит от состояния конфигурационной ячейки FSTRT (Function STaRT) и от режима работы тактового генератора (от состояния конфигурационных ячеек CKSEL2...CKSEL0). Соответствующие значения задержки приведены в Табл. 4.21. Таблица 4.21. Задержка сброса ГТОит в модели ATtinyllx Режим работы тактового генератора CKSEL2...0 *гоит(*сс~2.7В) FSTRT = 1 FSTRT = 0 Кварцевый или керамический резонатор 111 67 мс 4.2 мс Внешний низкочастотный резонатор ПО 4.2 с 4.2 с Внешняя ЛС-цепочка 101 4.2 мс 67 мкс Внутренняя /?С-цепочка 100 4.2 мс 67 мкс Внешний сигнал синхронизации ООО 4.2 мс 5 тактов при сбросе, 2 такта при выходе из режима Power Down ATtiny12x Длительность задержки сброса /tout в модели ATtinyl2х зависит от режима работы тактового генератора (от состояния конфигурационных ячеек CKSEL2...CKSEL0) и от состояния конфигурационной ячейки BODLEVEL. Действие ячейки BODLEVEL не зависит от того, включена схема BOD или нет. Соответствующие значения задержек /s и /R приведены в Табл. 4.22. Таблица 4.22. Задержка сброса ГТОцт = *s + *r в микроконтроллерах ATtiny 12х Режим работы тактового генератора CKSEL3...0 [СК1*] 'r[mc] BODLEVEL =1 ГСС=2.7В, BODLEVEL = 0 Кварцевый или керамический резонатор 1111 1К 0 0 1110 1К 3.6 4.2 1101 1К 57 67 1100 16К 0 0 1011 16К 3.6 4.2 1010 16К 57 67
(продолжение) [СК1*] /r[mc] Режим работы тактового генератора CKSEL3...0 ГСС=1.8В, BODLEVEL =1 Fcc = 2.7 В, BODLEVEL = 0 Низкочастотный кварцевый резонатор 1001 1К 57 67 1000 32К 57 67 0111 6 0 0 Внешняя ЛС-цепочка оно 6 3.6 4.2 0101 ON 57 67 0100 6 0 0 Внутренняя ЯС-цепочка ООП 6 3.6 4.2 00102) 6 57 67 Внешний сигнал синхронизации 0001 6 0 0 0000 6 3.6 4.2 1) СК — период тактового сигнала микроконтроллера. 2) Режим по умолчанию. ATtinyWx В данном микроконтроллере для управления длительностью задержки сброса используются конфигурационные ячейки SUT1 и SUT0. Зависимость длительности задержки сброса от состояния этих ячеек приведена в Табл. 4.23. Таблица 4.23. Определение задержки сброса *гоит = *s + *r в модели ATtinyl3x SUT1...0 иск1*] /к[мс] (*сс = 5.0В) Рекомендуемые условия использования 00 6 0+14СК1* Схема BOD включена 01 6 4+14СК Малое время нарастания напряжения питания 102> 6 16+14СК Большое время нарастания напряжения питания и - - Зарезервировано 1) СК — период тактового сигнала микроконтроллера. 2) Значение по умолчанию. ATtiny15L В этих моделях длительность задержки сброса /тоит определяется состоянием конфигурационных ячеек CKSEL1...CKSEL0, а также состоянием конфигурационной ячейки BODEN. Значения задержек, соответствующие различным комбинациям указанных ячеек, приведены в Табл. 4.24.
Таблица 4.24. Задержка сброса *гоит = *s + *r в микроконтроллере ATtinyl5L BODEN CKSEL1...0 Ik* мс] [СК!>] Ксс = 2.7 В Гсс=5.0В X 003) 18 256 64 X 01 18 256 64 X 10 18 16 4 1 11 18 0.032 0.008 0 11 18 0.128 0.032 !) СК — период тактового сигнала микроконтроллера. 2) При подаче напряжения питания значение /R увеличивается примерно на 0.6 мс. 3) Режим по умолчанию. ATtiny2313x В этой модели для управления длительностью задержки сброса используются три конфигурационные ячейки: CKSEL0 и SUT1...0. Задание длительности задержки сброса для каждого из режимов работы тактового генератора показано в Табл. 4.25. Таблица 4.25. Определение задержки сброса ГТОит = + 'к в моделях ATtiny2313x Режим работы тактового генератора CKSEL0 SUT1...0 's [СК1*] гк[мс] Рекомендуемые условия использования Примечание КСС = 5.0В Гсс = 3.0В Кварцевый или керамический резонатор (1И1..Л000) 0 00 256 4.1 + 14СК 4.3+14СК Керамический резонатор, малое время нарастания напряжения питания Могут быть использованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы 0 01 256 65+14СК 69+14СК Керамический резонатор, большое время нарастания напряжения питания 0 10 1К 0+14СК 0+14СК Керамический резонатор, схема BOD включена Могут быть использованы также для кварцевых резонаторов при работе на частотах, далеких от максимальной и при отсутствии жестких требований к стабильности тактовой частоты при старте программы 0 11 1К 4.1 + 14СК 4.3 + 14СК Керамический резонатор, малое время нарастания напряжения питания I 00 1К 65+14СК 69+14СК Керамический резонатор, большое время нарастания напряжения питания
(продолжение) Режим работы тактового генератора CKSEL0 SUT1...0 [СК!>] мс] Рекомендуемые условия использования Примечание Гсс = 5.0В Гсс = 3.0В Кварцевый или керамический резонатор (И И... 1000) 1 01 16К 0 + 14CK 0+14СК Кварцевый резонатор, схема BOD включена - 1 10 16К 4.1 + 14CK 4.3 + 14CK Кварцевый резонатор, малое время нарастания напряжения питания 1 11 16К 65+ИСК 69 + 14 СК Кварцевый резонатор, большое время нарастания напряжения питания Внутренний RC-re- нератор (0010,0100) - 00 6 0 + 14СК 0+14CK Схема BOD включена - 01 6 4.1 + 14СК 4.3+14CK Малое время нарастания напряжения питания - 10 6 65+14СК 69+14СК Большое время нарастания напряжения питания Состояние по умолчанию - 11 - — — Зарезервировано — ДС-генера- тор сторожевого таймера (ОНО) - 00 6 0 + 14CK 0+14CK Схема BOD включена - - 01 6 4.1 + 14СК 4.3 + 14CK Малое время нарастания напряжения питания - 10 6 65 + 14СК 69+14CK Большое время нарастания напряжения питания - 11 - - - Зарезервировано Внешний сигнал синхронизации (0000) - 00 6 0+14СК 0+14CK Схема BOD включена - - 01 6 4.1 +ИСК 4.3 + 14CK Малое время нарастания напряжения питания - 10 6 65+14СК 69+14СК Большое время нарастания напряжения питания — 11 — - — Зарезервировано !) СК — период тактового сигнала микроконтроллера.
ATtiny24x/44x/84x, ATtiny25x/45x/85x В этих моделях для управления длительностью задержки сброса также используются три конфигурационные ячейки: CKSEL0 и SUT1...0. Задание длительности задержки сброса для каждого из режимов работы тактового генератора показано в Табл. 4.26. Таблица 4.26. Определение задержки сброса tT0UT = ts + fR в моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x Режим работы тактового генератора 'r[mc] Рекомендуемые CKSEL0 SUT1...0 [CK1*] Гсс = 5.0В Гсс = 3.0В условия использования Примечание 0 00 256 4.1 +ИСК 4.3+14СК Керамический резонатор, малое время нарастания напряжения питания Могут быть использованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы Кварцевый 0 01 256 65 + 14СК 69+14СК Керамический резонатор, большое время нарастания напряжения питания или керамический резонатор (1111...1000) 0 10 1К 0+14СК 0+14СК Керамический резонатор, схема BOD включена Могут быть использованы также для кварцевых резонаторов при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы 0 11 1К 4.1 + 14СК 4.3 + 14СК Керамический резонатор, малое время нарастания напряжения питания 1 00 1К 65+14СК 69+ 14 СК Керамический резонатор, большое время нарастания напряжения питания
(продолжение) Режим /к[мс] Рекомендуемые работы тактового генератора CKSEL0 SUT1...0 [СК!)] *сс = 5.0В Гсс = 3.0В условия использования Примечание 1 01 16К 0+14СК 0+14СК Кварцевый резонатор, схема BOD включена Кварцевый или керамический резонатор (1111...1000) 1 10 16К 4.1 + 14СК 4.3+14СК Кварцевый резонатор, малое время нарастания напряжения питания - 1 11 16К 65+14СК 69+14СК Кварцевый резонатор, большое время нарастания напряжения питания - 00 1К 4.1 4.3 Малое время нарастания напряжения питания или схема BOD включена Могут быть использованы только в том случае, если стабильность тактовой частоты при старте программы не требуется Низкочастотный кварцевый резонатор (ОНО) - 01 1К 65 69 Малое время нарастания напряжения питания или схема BOD включена - 10 32К 65 69 Необходима стабильная частота при запуске - и - - - Зарезервировано - 00 6 0 + 14СК 0+14CK Схема BOD включена Внутренний ДС-ге- - 01 6 4.1 + 14СК 4.3+14СК Малое время нарастания напряжения питания нератор (0010) - 10 6 65+14СК 69+14СК Большое время нарастания напряжения питания Состояние по умолчанию - 11 - - - Зарезервировано -
(продолжение) Режим работы тактового генератора CKSEL0 SUT1...0 's [СК1*] Гк[мс] Рекомендуемые условия использования Примечание Гсс = 5.0В Гсс = 3.0В ЯС-генера- тор сторожевого таймера (0100) - 00 6 0+14СК 0+14СК Схема BOD включена - - 01 6 4.1 + 14СК 4.3 +ИСК Малое время нарастания напряжения питания - 10 6 65 + 14СК 69 +ИСК Большое время нарастания напряжения питания - 11 - - - Зарезервировано Схема ФАПЧ (0001) - 00 6 0+14СК 0 + 14СК Схема BOD включена Только в моделях ATtiny25x/45x/ 85х - 01 ON 4.1 +ИСК 4.3 +ИСК Малое время нарастания напряжения питания - 10 6 65 + 14СК 69+ИСК Большое время нарастания напряжения питания - 11 - - - Зарезервировано Внешний сигнал синхронизации (0000) - 00 6 0+14СК 0 + 14СК Схема BOD включена - - 01 6 4.1 + 14СК 4.3 +ИСК Малое время нарастания напряжения питания - 10 6 65 + 14СК 69+ИСК Большое время нарастания напряжения питания - 11 - - - Зарезервировано ]) СК — период тактового сигнала микроконтроллера.
ATtiny26x В этой модели для управления длительностью задержки сброса также используются три конфигурационные ячейки: CKSEL0 и SUT1...0. Задание длительности задержки сброса для каждого из режимов работы тактового генератора показано в Табл. 4.27. Таблица 4.27. Определение задержки сброса /tout = + 'r в модели ATtiny26x Режим работы тактового генератора CKSEL0 SUT1...0 's [СК1*] Гк[мс] Рекомендуемые условия использования Примечание ГСС = 5.0В Гсс = 3.0В Кварцевый или керамический резонатор (1111...1010) 0 00 256 4.1 4.3 Керамический резонатор, малое время нарастания напряжения питания Могут быть использованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы 0 01 256 65 69 Керамический резонатор, большое время нарастания напряжения питания 0 10 1К 0 0 Керамический резонатор, схема BOD включена Могут быть использованы также для кварцевых резонаторов при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы 0 11 1К 4.1 4.3 Керамический резонатор, малое время нарастания напряжения питания 1 00 1К 65 69 Керамический резонатор, большое время нарастания напряжения питания 1 01 16К 0 0 Кварцевый резонатор, схема BOD включена - 1 10 16К 4.1 4.3 Кварцевый резонатор, малое время нарастания напряжения питания
(продолжение) Режим работы тактового генератора CKSEL0 SUT1...0 [СК1*] гк[мс] Рекомендуемые условия использования Примечание Гсс = 5.0В Гсс = 3.0В Кварцевый или керамический резонатор (1111...1010) 1 11 16К 65 69 Кварцевый резонатор, большое время нарастания напряжения питания - Низкочастотный кварцевый резонатор (1001) - 00 1К 4.1 4.3 Малое время нарастания напряжения питания или схема BOD включена Могут быть использованы только в том случае, если стабильность тактовой частоты при старте программы не требуется - 01 1К 65 69 Малое время нарастания напряжения питания или схема BOD включена - 10 32К 65 69 Необходима стабильная частота при запуске - - и - - - Зарезервировано Генератор с внешней ЯС-цепоч- кой (1000...0101) - 00 18 0 0 Схема BOD включена - - 01 18 4.1 4.3 Малое время нарастания напряжения питания - 10 18 65 69 Большое время нарастания напряжения питания Состояние по умолчанию - 11 6 4.1 4.3 Малое время нарастания напряжения питания или схема BOD включена Могут быть использованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы
(продолжение) Режим работы тактового генератора CKSEL0 SUT1...0 's [СК!)] 'r [мс] Рекомендуемые условия использования Примечание ГСС = 5.0В *сс = 3.0В Внутренний RC-tc- нератор (0100...0001) - 00 6 0 0 Схема BOD включена - - 01 6 4.1 4.3 Малое время нарастания напряжения питания - 10 6 65 69 Большое время нарастания напряжения питания Состояние по умолчанию - 11 - - - Зарезервировано - Внешний сигнал синхронизации (0000) - 00 6 0 0 Схема BOD включена - - 01 6 4.1 4.3 Малое время нарастания напряжения питания - 10 6 65 69 Большое время нарастания напряжения питания - 11 - - - Зарезервировано ]) СК — период тактового сигнала микроконтроллера. ATtiny28x Длительность задержки сброса /tout в модели ATtiny28x зависит от режима работы тактового генератора, т.е. от состояния конфигурационных ячеек CKSEL3...CKSEL0. Соответствующие значения задержек приведены в Табл. 4.28. Таблица 4.28. Задержка сброса ГТОит = 's + *r в микроконтроллерах ATtiny28x Режим работы тактового генератора CKSEL3...0 К Гк[мс] [СК1*] КСС = 2.7В 1111 1К 0 Керамический резонатор 1110 1К 4.2 1101 1К 67
(продолжение) Режим работы тактового генератора CKSEL3...0 к гк[мс] [СК!)] Гсс=2.7В 1100 16К 0 Кварцевый резонатор 1011 16К 4.2 1010 16К 67 Низкочастотный кварцевый резонатор 1001 1К 67 1000 32К 67 0111 6 0 Внешняя ЯС-цепочка оно 6 4.2 0101 6 67 0100 ON 0 Внутренняя ЯС-цепочка ООН ON 4.2 00102) 6 67 Внешний сигнал синхронизации 0001 6 0 0000 6 4.2 1) СК — период тактового сигнала микроконтроллера. 2) Режим по умолчанию. В заключение необходимо сказать несколько слов еще об одном узле микроконтроллера, функционирование которого косвенно связано со схемой сброса — встроенном источнике опорного напряжения (ИОН). Дело в том, что напряжение этого ИОН становится стабильным только через некоторое время после его включения. Типовое время запуска ИОН составляет 40 мс, а максимальное — 70 мс. Напоминаю, что ИОН включается в следующих случаях: • включен детектор пониженного напряжения питания; • выход ИОН подключен к аналоговому компаратору; • разрешена работа АЦП.
ГЛАВА 5 Прерывания 5.1. Общие сведения Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу, как правило, находится команда безусловного перехода к подпрограмме обработки прерывания. Последней командой подпрограммы обработки прерывания должна быть команда RETI, которая осуществляет возврат в основную программу и восстановление предварительно сохраненного счетчика команд. Поскольку основными источниками прерываний являются различные периферийные устройства микроконтроллеров, количество прерываний зависит от конкретной модели. 5.2. Таблица векторов прерываний Микроконтроллеры AVR семейства Tiny имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ, начиная с адреса $001, отведены под таблицу векторов прерываний. Каждому прерыванию соответствует адрес в этой таблице, который загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице также определяет и приоритет соответствующего прерывания: чем младше адрес, тем выше приоритет. Размер вектора прерывания равен одному байту, поэтому для перехода к подпрограммам обработки прерываний используется команда RJMP. Размер таблицы зависит от модели микроконтроллера и составляет от 4 (модель ATtinyl 1х) до 18 (модель ATtiny2313x) векторов. Распределение адресов таблицы векторов прерываний для различных микроконтроллеров семейства приведено в Табл. 5.1...5.9.
Таблица 5.1. Таблица векторов прерываний моделей ATtinyllx Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 PCINT Прерывание по изменению состояния выводов 2 $002 TIMER0OVF Переполнение таймера/счетчика ТО 3 $003 ANA_COMP Аналоговый компаратор 4 $004 Таблица 5.2. Таблица векторов прерываний моделей ATtinyl2х Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 PCINT Прерывание по изменению состояния выводов 2 $002 TIMER0OVF Переполнение таймера/счетчика ТО 3 $003 EE_RDY EEPROM готово 4 $004 ANA_COMP Аналоговый компаратор 5 $005 Таблица 5.3. Таблица векторов прерываний моделей ATtinylЗх Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 PCINT Прерывание по изменению состояния выводов 2 $002 TIMER0OVF Переполнение таймера/счетчика ТО 3 $003 EE_RDY EEPROM готово 4 $004 ANA_COMP Аналоговый компаратор 5 $005 TIMER0COMPA Совпадение А таймера/счетчика ТО 6 $006 TIMER0 COMPB Совпадение В таймера/счетчика ТО 7 $007 WDT Тайм-аут сторожевого таймера 8 $008 ADC Преобразование АЦП завершено 9 $009 Таблица 5.4. Таблица векторов прерываний моделей ATtinyl5L Источник Описание № Адрес INTO Внешнее прерывание 0 1 $0001 PCINT Прерывание по изменению состояния выводов 2 $0002 TIMER1 СОМРА Совпадение А таймера/счетчика Т1 $0003 TIMER1 OVF Переполнение таймера/счетчика Т1 4 $0004 TIMER0OVF Переполнение таймера/счетчика ТО 5 $0005 EE_RDY EEPROM готово 6 $0006 ANA_COMP Аналоговый компаратор 7 $0007 ADC Преобразование АЦП завершено 8 $0008
Таблица 5.5. Таблица векторов прерываний моделей ATtiny2313x Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 INT1 Внешнее прерывание 1 2 $002 TIMER1 САРТ Захват таймера/счетчика Т1 3 $003 TIMER1 СОМРА Совпадение А таймера/счетчика Т1 4 $004 TIMER1 OVF Переполнение таймера/счетчика Т1 5 $005 TIMER0OVF Переполнение таймера/счетчика ТО $006 USARTO, RXC USARTO, прием завершен 7 $007 USARTO, UDRE Регистр данных USARTO пуст 8 $008 USARTO, ТХС USARTO, передача завершена 9 $009 ANA_COMP Аналоговый компаратор 10 $00А PCINT Прерывание по изменению состояния выводов 11 $00В TIMER1 СОМРВ Совпадение В таймера/счетчика Т1 12 $оос TIMER0 СОМРА Совпадение А таймера/счетчика ТО 13 $00D TIMER0 СОМРВ Совпадение В таймера/счетчика ТО 14 $00Е USI START Состояние СТАРТ USI 15 $00F USI OVF Переполнение USI 16 $010 EE_RDY EEPROM готово 17 $011 WDT Тайм-аут сторожевого таймера 18 $012 Таблица 5.6. Таблица векторов прерываний моделей ATtiny24x/44x/84x Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 PCINT0 Прерывание 0 по изменению состояния выводов 2 $002 PCI NT 1 Прерывание 1 по изменению состояния выводов 3 $003 WDT Тайм-аут сторожевого таймера 4 $004 TIMER1 CAPT Захват таймера/счетчика Т1 5 $005 TIMER1 COMPA Совпадение А таймера/счетчика Т1 6 $006 TIMER1 COMPB Совпадение В таймера/счетчика Т1 7 $007 TIMER1 OVF Переполнение таймера/счетчика Т1 8 $008 TIMER0 COMPA Совпадение А таймера/счетчика ТО $009 TIMER0 COMPB Совпадение В таймера/счетчика ТО 10 $00А TIMER0 OVF Переполнение таймера/счетчика ТО 11 $00В ANA_COMP Аналоговый компаратор 12 $00С ADC Преобразование АЦП завершено 13 $00D EE_RDY EEPROM готово 14 $00Е USI START Состояние СТАРТ USI 15 $00F USI OVF Переполнение USI 16 $010
Таблица 5.7. Таблица векторов прерываний моделей ATtiny25x/45x/85x Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 PCINT Прервание 0 по изменению состояния выводов 2 $002 TIMER1 СОМРА Совпадение А таймера/счетчика Т1 $003 TIMER1 OVF Переполнение таймера/счетчика Т1 4 $004 TIMEROOVF Переполнение таймера/счетчика ТО 5 $005 EE_RDY EEPROM готово 6 $006 ANA_COMP Аналоговый компаратор 7 $007 ADC Преобразование АЦП завершено 8 $008 TIMER1 COMPB Совпадение В таймера/счетчика Т1 9 $009 TIMEROCOMPA Совпадение А таймера/счетчика ТО 10 $00А TIMERO COMPB Совпадение В таймера/счетчика ТО 11 $00В WDT Тайм-аут сторожевого таймера 12 $00С USI START Состояние СТАРТ USI 13 $00D USI OVF Переполнение USI 14 $00Е Таблица 5.8. Таблица векторов прерываний моделей ATtiny26x Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 PCINT Прерывание по изменению состояния выводов 2 $002 TIMER1 СОМРА Совпадение А таймера/счетчика Т1 3 $003 TIMER1 COMPB Совпадение В таймера/счетчика Т1 4 $004 TIMER1 OVF Переполнение таймера/счетчика Т1 5 $005 TIMEROOVF Переполнение таймера/счетчика ТО 6 $006 USI START Состояние СТАРТ USI 7 $007 USI OVF Переполнение USI 8 $008 EERDY EEPROM готово 9 $009 ANA_COMP Аналоговый компаратор 10 $00А ADC Преобразование АЦП завершено 11 $00В Таблица 5.9. Таблица векторов прерываний моделей ATtiny28x Источник Описание № Адрес INTO Внешнее прерывание 0 1 $001 INT1 Внешнее прерывание 1 2 $002 LOW LEVEL Прерывание по НИЗКОМУ уровню на линиях порта 3 $003 TIMEROOVF Переполнение таймера/счетчика ТО 4 $004 ANA_COMP Аналоговый компаратор 5 $005
Если прерывания в работе микроконтроллера не предусматриваются, то на месте таблицы векторов прерываний может быть размещена часть основной программы. 5.3. Обработка прерываний Для глобального разрешения/запрещения прерываний предназначен флаг I регистра SREG. Для разрешения прерываний он должен быть установлен в 1, а для запрещения — сброшен в 0. Индивидуальное разрешение или запрещение (маскирование) прерываний производится установкой/сбросом соответствующих битов регистров масок прерываний, рассматриваемых ниже. При возникновении прерывания флаг I регистра SREG аппаратно сбрасывается, запрещая тем самым обработку следующих прерываний. Однако в подпрограмме обработки прерывания этот флаг можно снова установить в 1 для разрешения вложенных прерываний. При возврате из подпрограммы обработки прерывания (при выполнении команды reti) флаг I устанавливается аппаратно. Все имеющиеся прерывания можно разделить на два типа. Прерывания первого типа генерируются при наступлении некоторого события, в результате которого устанавливается флаг прерывания. Затем, если прерывание разрешено, в счетчик команд загружается адрес вектора соответствующего прерывания. При этом флаг прерывания аппаратно сбрасывается. Он также может быть сброшен программно, записью 1 в бит регистра, соответствующий флагу. Прерывания второго типа не имеют флагов прерываний и генерируются в течение всего времени, пока присутствуют условия, необходимые для генерации прерывания. Соответственно, если условия, вызывающие прерывание, исчезнут до разрешения прерывания, генерации прерывания не произойдет. Следует помнить, что при вызове подпрограмм обработки прерываний регистр состояния SREG не сохраняется. Поэтому пользователь должен самостоятельно запоминать содержимое этого регистра при входе в подпрограмму обработки прерывания (если это необходимо) и восстанавливать его значение перед вызовом команды reti. Микроконтроллеры семейства Tiny поддерживают очередь прерываний, которая работает следующим образом: если условия генерации одного или более прерываний возникают в то время, когда флаг общего разрешения прерываний сброшен (все прерывания запрещены), соответ-
ствующие флаги устанавливаются в 1 и остаются в этом состоянии до установки флага общего разрешения прерываний. После разрешения прерываний выполняется их обработка в порядке приоритета. Наименьшее время отклика для любого прерывания составляет 4 такта. В течение этого времени происходит сохранение счетчика команд в стеке. В течение последующих двух тактов выполняется команда перехода к подпрограмме обработки прерывания. Если прерывание произойдет во время выполнения команды, длящейся несколько тактов, то генерация прерывания произойдет только после выполнения этой команды. Если же прерывание произойдет во время нахождения микроконтроллера в «спящем» режиме, время отклика увеличивается еще на 4 такта. Возврат в основную программу занимает 4 такта, в течение которых происходит восстановление счетчика команд из стека. После выхода из прерывания процессор всегда выполняет одну команду основной программы, прежде чем обслужить любое отложенное прерывание. 5.4. Внешние прерывания Сразу следует сказать, что в микроконтроллерах семейства Tiny имеется две разновидности внешних прерываний. Прерывания первого типа генерируются при появлении на входе внешнего прерывания заданного сигнала. Прерывания второго типа генерируются при любом изменении состояния определенных выводов микроконтроллера. Наличие тех или иных внешних прерываний в различных моделях показано в Табл. 5.10. Таблица 5.10. Внешние прерывания Внешнее прерывание Их 12x 15L 2313x 24x/44x/84x 25x/45x/85x 26x 28x INTO INT1 • • PCI • • • • • • • PCIO • РСИ • LOWLEV •
Обратите внимание, что обнаружение фронтов сигналов на входах внешних прерываний происходит синхронно, т.е. требует наличия тактового сигнала <?1к|/0. В то же время внешние прерывания по НИЗКОМУ уровню и прерывания по изменению состояния выводов регистрируются асинхронно, поэтому они могут использоваться для вывода микроконтроллера из «спящих» режимов, отличных от режима Idle. Для разрешения/запрещения всех разновидностей внешних прерываний в зависимости от модели используется либо общий регистр маски прерываний GIMSK, расположенный по адресу $ЗВ ($5В), либо (в модели ATtiny28x) — регистр управления прерываниями ICR, расположенный по адресу $06 ($26). Формат регистров GIMSK различных моделей и регистра ICR показаны на Рис. 5.1. Описания битов этих регистров, относящихся к прерываниям, приведены в Табл. 5.11. Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции Рис. 5.1. Формат регистров GIMSK (а) и ICR (б)
Таблица 5.11. Биты регистров GIMSK и ICR Название Описание Модель INT1 Разрешение внешнего прерывания INT1. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT1. Условие генерации прерывания определяется содержимым битов ISC11 и ISC10 регистра MCUCR (ICR в ATtiny28x) 2313х, 28х INTO Разрешение внешнего прерывания INTO. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INTO. Условие генерации прерывания определяется содержимым битов ISC01 и ISC00 регистра MCUCR (ICR в ATtiny28x) Все модели PCI El Разрешение прерывания по изменению состояния выводов 1-й группы. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов PCINT11...8 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом из указанных выводов 24х/44х/84х Разрешение прерывания по изменению состояния выводов 1-й группы. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов РВ7...4, РА7...6 и РАЗ микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом из указанных выводов 26х PCIEO Разрешение прерывания по изменению состояния выводов 0-й группы. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов PCINT7...0 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом из указанных выводов 13х, 24х/44х/84х, 25х/45х/85х Разрешение прерывания по изменению состояния выводов 0-й группы. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов РВ3...0 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом из указанных выводов 26х PCIE Разрешение прерывания по изменению состояния выводов 0-й группы. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов PCINT7...0 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом из указанных выводов 2313х Разрешение прерывания по изменению состояния выводов. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом выводе микроконтроллера 11х/12х, 15L, 26х LLIE Разрешение прерывания по НИЗКОМУ уровню на линии порта В. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание при появлении НИЗКОГО уровня на любой из линий порта В микроконтроллера 28х
Для индикации внешних прерываний в зависимости от модели используется либо общий регистр флагов прерываний GIFR (EIFR в модели ATtiny231 Зх), расположенный по адресу $ЗА ($5А), либо (в модели ATtiny28x) — регистр флагов прерываний IFR, расположенный по адресу $05 ($25). Формат регистров GIFR различных моделей и регистра IFR показаны на Рис. 5.2. Описания битов этих регистров, относящихся к прерываниям, приведены в Табл. 5.12. Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 5.2. Формат регистров GIFR (a), EIFR (б) и IFR (в) Таблица 5.12. Биты регистров GIFR, EIFR и IFR Название Описание Модель INTF1 Флаг внешнего прерывания INT1. Если в результате события на выводе INT1 сформировался запрос на внешнее прерывание, этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него 1. Флаг INTF1 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT1 2313х, 28х INTF0 Флаг внешнего прерывания INTO. Если в результате события на выводе INTO сформировался запрос на внешнее прерывание, этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него 1. Флаг INTF0 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INTO Все модели
(продолжение) Название Описание Модель PCIF1 Флаг прерывания по изменению состояния выводов 1-й группы. Если в результате события на любом из выводов PCINT11...8 сформировался запрос на прерывание, этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него 1 24х/44х/84х PCIFO Флаг прерывания по изменению состояния выводов 0-й группы. Если в результате события на любом из выводов PCINT7...0 сформировался запрос на прерывание, этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него 1 13х, 24х/44х/84х, 25х/45х/85х PCIF Флаг прерывания по изменению состояния выводов 0-й группы. Если в результате события на любом из выводов PCINT7...0 сформировался запрос на прерывание, этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него 1 2313х Флаг прерывания по изменению состояния выводов. Если в результате события на любом из выводов микроконтроллера сформировался запрос на прерывание, этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него 1 11х/12х, 15L, 26х Следует иметь в виду, что в ранних моделях микроконтроллеров, таких как ATtinyl lx/12x, ATtinyl5L и ATtiny26x/28x, для программного сброса флагов прерываний нельзя использовать команду SBI (установить бит регистра ввода/вывода), так как при ее выполнении будут сброшены все флаги в регистре. Это связано с тем, что команда сначала считывает содержимое регистра, затем изменяет указанный бит и записывает результат обратно в регистр. Аналогично, при выполнении команды CBI (сбросить бит регистра ввода/вывода) будут сброшены все биты регистра, кроме указанного. В остальных моделях указанные команды влияют только на заданный бит, поэтому для сброса флага прерывания в этих моделях можно использовать команду SBI. Прерывания INTO и INT1 могут быть сгенерированы по нарастающему/спадающему фронту сигнала или при появлении НИЗКОГО уровня на входе. Условия генерации этих прерываний определяются состоянием определенных битов либо регистра MCUCR, расположенного по адресу $35 ($55), либо (в модели ATtiny28x) регистра ICR, расположенного по адресу $06 ($26). В свою очередь, прерывания PCI, РСЮ и РСП генерируются при изменении состояния любого заданного вывода соответствующей группы. Указание выводов, изменение состояния которых вызывает генерацию прерываний PCI, РСЮ и РСИ, производится с помощью регистров PCMSK, PCMSK1 и PCMSK0 соответственно. В моделях ATtinyl lx/12x, ATtinyl5L и ATtiny26x такая возможность отсутствует, т.е. при разрешении прерывания PCI оно будет гененрироваться при изменении состояния любого из выводов
(для выводов, совмещенных с сигналами RESET и XTAL1, — только при их использовании в качестве контактов ввода/вывода). Минимальная длительность импульса, гарантирующая генерацию внешнего прерывания, составляет один период тактового сигнала микроконтроллера. Формат регистров, используемых для конфигурирования внешних прерываний, показан на Рис. 5.3 и Рис. 5.4, а описание соответствующих битов приведено в Табл. 5.13 и Табл. 5.14. Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции Рис. 5.3. Формат регистров MCUCR (а) и ICR (б) Рис. 5.4. Формат регистров PCMSK (я), PCMSK0 (б) и PCMSK1 (в)
Таблица 5.13. Определение условий генерации внешних прерываний Регистр Бит Описание Определяют условие генерации внешних прерываний INTO и INT1 следующим образом: ISChI ISC/iO Условие MCUCR/ ICR ISCOWSCOO ISC11:ISC10 0 0 По НИЗКОМУ уровню на выводе INTw 0 1 При любом изменении сигнала на выводе INT/i 1 0 По спадающему фронту сигнала на выводе INTw 1 1 По нарастающему фронту сигнала на выводе ШТл Таблица 5.14. Биты, определяющие генерацию прерываний по изменению состояния выводов (регистры PCMSK, PCMSK1 и PCMSK0) Регистр Бит Описание PCMSK0 (PCMSK) PCINT7 PCINT0 Определяют условие генерации прерывания РСЮ. Если какой-либо бит установлен в 1, то изменение состояния соответствующего вывода вызовет генерацию прерывания PCMSK1 PCINT 11 PCINT8 Определяют условие генерации прерывания РСП. Если какой-либо бит установлен в 1, то изменение состояния соответствующего вывода вызовет генерацию прерывания Следует отметить, что все внешние прерывания генерируются даже в том случае, если соответствующие выводы сконфигурированы как выходы. Эта особенность микроконтроллеров позволяет генерировать прерывания программно.
ГЛАВА б Порты ввода/вывода 6.1. Общие сведения Каждый порт микроконтроллера имеет определенное число выводов, через которые микроконтроллер может осуществлять прием и передачу цифровых сигналов. Задание направления передачи данных через любой контакт ввода/вывода может быть осуществлено программно в любой момент времени. Выходные буферы всех портов, имея симметричные нагрузочные характеристики, обеспечивают высокую нагрузочную способность при любом уровне сигнала. Нагрузочной способности достаточно для непосредственного управления светодиодными индикаторами. Входные буферы всех выводов построены по схеме триггера Шмитта. Для большинства входов имеется возможность подключения внутреннего подтягивающего резистора между входом и шиной питания Vcc. Отличительной особенностью портов микроконтроллеров AVR (в том числе и микроконтроллеров семейства Tiny) при использовании их в качестве цифровых портов ввода/вывода общего назначения является реализация истинной функциональности «чтение/модификация/запись». Благодаря этому можно выполнять операции над любым выводом (с помощью команд SBI и CBI), не влияя на другие выводы порта. Это относится к изменению режима работы контакта ввода/вывода, к изменению состояния выходного буфера (для выходов) и к изменению состояния внутреннего подтягивающего резистора (для входов). Отличительной особенностью моделей семейства, выпускающихся в 8-выводном корпусе, является совмещение функций ввода/вывода с функциями управления (выводы для подключения внешнего резонатора и вывод сброса). Соответственно, в распоряжении пользователя оказываются до 6 линий ввода/вывода, так как эти модели могут быть сконфигурированы для работы без внешнего резонатора и без вывода аппаратного сброса. Микроконтроллеры различных моделей семейства имеют различное количество портов и соответственно контактов ввода/вывода. Эти данные приведены в Табл. 6.1.
Таблица 6.1. Порты ввода/вывода микроконтроллеров семейства Tiny Порт ввода/вывода Их 12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26х 28х А - - - - 3 8 - 8 4J) В 6 8 4 6 8 8 D - - - - 7 - - - оо Количество контактов ввода/вывода ON 6 6 6 18 12 6 16 20 !) Вывод РВ5 — только вход (совмещен с входом RESET). 2) Вывод РВ5 — вход или выход с открытым стоком (совмещен с входом RESET). 3) Вывод РА2 — только выход с высокой нагрузочной способностью. 4) Все выводы — только входы. 6.2. Регистры портов ввода/вывода Обращение к портам производится через регистры ввода/вывода. Под каждый порт (за исключением порта В модели ATtiny28x) в адресном пространстве ввода/вывода зарезервировано по 3 адреса. По этим адресам размещаются следующие регистры: регистр данных порта PORT*, регистр направления данных DDRx (для порта А модели ATtiny28x — регистр управления PACR) и регистр выводов порта PIN*. Действительные названия регистров получаются подстановкой названия порта вместо символа х, соответственно регистры порта А называются PORTA, DDRA, PINA, порта В — PORTB, DDRB, PINB и т.д. Адреса регистров всех портов ввода/вывода приведены в Табл. 6.2. Таблица. 6.2. Регистры портов ввода/вывода Порт Регистр Адрес Их 12x 13x 15L 2313x 24x/44x/84x 25x/45x/85x 26x 28x А PORTA $1B($3B) • • • • DDRA $1A($3A) • • • PACR • PINA $19($39) • • • • В PORTB $18($38) • • • • • • • • DDRB $17($37) • • • • • • • • PINB $16($36) • D PORTD $12($32) • • DDRD $11($31) • • PIND $10($30) • •
Вообще говоря, «регистры» PINx регистрами не являются, по этим адресам осуществляется доступ к физическим значениям сигналов на выводах порта. Соответственно, они доступны только для чтения, тогда как остальные регистры доступны и для чтения, и для записи. 6.3. Конфигурирование портов ввода/вывода Упрощенная структурная схема одного из каналов порта ввода/вывода Рхл при работе его в качестве цифрового входа/выхода общего назначения приведена на Рис. 6.1. Примечание Сигналы WPx, WDx, RPx, RDx являются общими для всех выводов одного порта; сигналы clk|/o, SLEEP и PUD являются общими для всех портов микроконтроллера. Рис. 6.1. Структурная схема канала ввода/вывода Каждому выводу порта в большинстве случаев соответствуют три бита регистров ввода/вывода: PORTxai регистра PORTx, DDxn регистра DDRx и РШхл регистра PINx. Действительные названия битов регистров получаются подстановкой названия порта вместо символах и номера бита вместо символа п. Порядковый номер вывода порта соответствует порядковому номеру бита регистров этого порта.
Бит DDxn регистра DDx определяет направление передачи данных через контакт ввода/вывода. Если этот бит установлен в 1, то я-й вывод порта является выходом, если же сброшен в 0 — входом. Бит PORTxh регистра PORT* выполняет двойную функцию. Если вывод функционирует как выход (DDxn = 1), то этот бит определяет состояние вывода порта. Если бит установлен в 1, на выводе устанавливается напряжение ВЫСОКОГО уровня. Если бит сброшен в 0, на выводе устанавливается напряжение НИЗКОГО уровня. Если же вывод функционирует как вход (DDxn = 0), то бит PORTx/i определяет состояние внутреннего подтягивающего резистора для данного вывода. При установке бита PORTxaz в 1 подтягивающий резистор подключается между выводом микроконтроллера и шиной питания. Обратите внимание на то, что при переключении вывода между третьим состоянием (DDxn = 0, PORTx« = 0) и состоянием ВЫСОКОГО уровня (DDxn = 1, PORTxtz = 1) происходит переход через одно из промежуточных состояний: либо включается подтягивающий резистор (DDxn = 0, PORTjxtz = 1), либо выход переключается в состояние НИЗКОГО уровня (DDxn= 1, PORTxji = 0). Наиболее применимым является, как правило, первый вариант, поскольку для высокоимпедансных систем безразлично, каким образом формируется ВЫСОКИЙ уровень. Если в каком-либо случае это не подходит, в большинстве моделей пользователь может отключить подтягивающие резисторы от всех портов установкой бита PUD в 1. Аналогичная ситуация возникает и при переключении между состоянием с включенным подтягивающим резистором (DDxn = 0, PORTxaj = 1) и состоянием НИЗКОГО уровня (DDxn = 1, PORTxh = 0). В этом случае промежуточным состоянием является либо высокоимпедансное состояние (DDxn = 0, PORTxaj = 0), либо состояние ВЫСОКОГО уровня (DDx>i=l,PORTx/i=l). Состояние вывода микроконтроллера (независимо от установок бита DDxn) может быть получено путем чтения бита PINx/i регистра PINx. При этом следует помнить, что между действительным изменением сигнала на выводе и изменением бита РШхя существует задержка. Эта задержка вносится узлом синхронизации, состоящим, как показано на Рис. 6.1, из триггера регистра PINx и дополнительного триггера-защелки. Значение сигнала на выводе микроконтроллера фиксируется триггером-защелкой при НИЗКОМ уровне тактового сигнала и переписывается затем в бит РШхя по нарастающему фронту тактового сигнала. Соответственно, величина задержки может составлять от 0.5 до 1.5 периодов системного тактового сигнала, как показано на Рис 6.2, а.
По этой же причине между операциями изменения и повторного считывания состояний вывода необходимо вставлять команду NOP. Поскольку команда OUT устанавливает сигнал SYNC LATCH в 1 по положительному фронту тактового сигнала, задержка в этом случае равна одному периоду тактового сигнала (Рис. 6.2, б). Рис. 6.2. Синхронизация при чтении состояния вывода: а — при считывании бита РШхя; б — при считывании состояния вывода, заданного программно Рассмотрим теперь конфигурирование портов ввода/вывода в конкретных моделях семейства. ATtiny11x В этой модели имеется единственный порт В. Формат всех регистров, относящихся к этому порту, приведен на Рис. 6.3. На этом и последующих рисунках данной главы начальные значения, обозначенные N/A, не определены.
Рис. 6.3. Регистры PORTB, PINB, DDRB в модели ATtinyl lx Возможные конфигурации линий порта В этой модели (кроме РВ5) приведены в Табл. 6.3. Таблица 6.3. Конфигурации выводов порта В модели ATtinyllx DDB/i PORTB/i Функция вывода Резистор Примечания 0 0 Вход Отключен Третье состояние (Hi-Z)1* 0 1 Вход Подключен При подключении нагрузки между выводом и общим проводом вывод является источником тока 1 0 Выход Отключен Выход установлен в 0 1 1 Выход Отключен Выход установлен в 1 !) Состояние выводов порта при сбросе. Нагрузочная способность выходов РВ4...РВ0 составляет 20 мА при Ксс = 5Ви ЮмАпри КСС = ЗВ. ATtinyl 2х, ATtinyl 5L В этих моделях также имеется единственный порт В. Формат всех регистров, относящихся к этому порту, приведен на Рис. 6.4. В отличие от предыдущей модели, в этих микроконтроллерах управление внутренними подтягивающими резисторами осуществляется на двух уровнях. Общее управление осуществляется битом PUD регистра MCUCR (см. Рис. 6.5). Если этот бит установлен в 1, то подтягивающие резисторы отключены от всех выводов порта. Если же этот бит сброшен в 0, то состояние подтягивающих резисторов определяется регистром PORTB, как было описано выше. Возможные конфигурации линий порта В (кроме РВ5) микроконтроллеров ATtinyl2x и ATtinyl5L приведены в Табл. 6.4.
Рис. 6.4. Регистры PORTB, PINB, DDRB в моделях ATtinyl2x и ATtinyl5L Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 6.5. Регистр MCUCR Таблица 6.4. Конфигурации выводов порта В моделей ATtinyl2х и ATtinyl5L DDB* РОКГВл PUD Функция вывода Резистор Примечания 0 0 X Вход Отключен Третье состояние (Hi-Z)1* 0 1 0 Вход Подключен При подключении нагрузки между выводом и общим проводом вывод является источником тока 0 1 1 Вход Отключен Третье состояние (Hi-Z) 1 0 X Выход Отключен Выход установлен в 0 1 1 X Выход Отключен Выход установлен в 1 ]) Состояние выводов портов при сбросе. Нагрузочная способность выходов порта составляет: РВ4...РВ0 — 20 мА при Vcc = 5 В и 10 мА при Vcc = 3 В; РВ5 — 12 мА при VCc = 5 В и 6 мА при Ксс = 3 В.
ATtinyl Зх, ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x, ATtiny26x Во всех этих моделях имеется разное количество портов ввода/вывода. Формат этих регистров приведен на Рис. 6.6...6.9. Рис. 6.7. Регистры портов ввода/вывода в моделях ATtinyl Зх и ATtiny25x/45x/85x
Рис. 6.8. Регистры портов ввода/вывода в модели ATtiny2313x
Рис. 6.9. Регистры портов ввода/вывода в модели ATtiny26x В этих моделях управление внутренними подтягивающими резисторами также осуществляется на двух уровнях. Общее управление осуществляется битом PUD регистра MCUCR (см. Рис. 6.5). Если этот бит установлен в 1, подтягивающие резисторы отключены от всех выводов порта. Если же этот бит сброшен в 0, состояние подтягивающих резисторов определяется регистром PORTB. Возможные конфигурации линий портов ввода/вывода рассматриваемых моделей приведены в Табл. 6.5. Таблица 6.5. Конфигурации выводов портов DDxn PORTjc/i PUD Функция вывода Резистор Примечания 0 0 X Вход Отключен Третье состояние (Hi-Z)!) 0 1 0 Вход Подключен При подключении нагрузки между выводом и общим проводом вывод является источником тока 0 1 1 Вход Отключен Третье состояние (Hi-Z) 1 0 X Выход Отключен Выход установлен в 0 1 1 X Выход Отключен Выход установлен в 1 !) Состояние выводов портов при сбросе.
Нагрузочная способность выходов всех линий портов ввода/вывода составляет 10 мА при Vcc = 5 В и 5 мА при Vcc = 3 В (в модели ATtiny26x — 20 мАпри Vcc = 5 В и 10 мАпри Vcc = 3 В). ATtiny28x В этой модели все три порта имеют свои особенности и конфигурируются по-своему. Порт А Это 4-битный порт с двунаправленными выводами РАЗ, РА1 и РАО и однонаправленным (только выход) выводом РА2. Формат регистров этого порта приведен на Рис. 6.10. Рис. 6.10. Регистры порта А модели ATtiny28x Регистр PACR используется для управления выводами порта. Состояние битов DDA3, DDA1 и DDA0 определяет направление передачи данных через соответствующий вывод порта. Если бит установлен в 1, вывод работает как выход. Если же бит сброшен в 0, вывод работает как вход. А 2-й бит регистра (РА2НС) управляет нагрузочной способностью выхода РА2, который предназначен специально для управления светодиодным индикатором. Если бит сброшен в 0, нагрузочная способность вывода составляет 15 мА (при Vcc = 1.8 В). При записи 1 в этот бит к выходу подключается дополнительный драйвер, и нагрузочная способность увеличивается до 25 мА при Усс = 1.8 В. Управление внутренними подтягивающими резисторами для выводов РАЗ, РА1 и РАО осуществляется с помощью регистра данных PORTA. Если вывод является входом, то при установке в 1 соответствующего ему бита PORTA/i между выводом и шиной питания подключается внутренний подтягивающий резистор. При сбросе этого бита в 0 или при переключении вывода в режим выхода подтягивающий резистор отключается. Возможные конфигурации линий порта А этой модели (кроме РА2) указаны в Табл. 6.6 (для х = А).
Таблица 6.6. Конфигурации выводов портов А и D модели ATtiny28x DDxnl) PORTjoi1* Функция вывода Резистор Примечания 0 0 Вход Отключен Третье состояние (Hi-Z)2) 0 1 Вход Подключен При подключении нагрузки между выводом и общим проводом вывод является источником тока 1 0 Выход Отключен Выход установлен в 0 1 1 Выход Отключен Выход установлен в 1 ])х = Аши D. 2) Состояние выводов порта при сбросе. Вывод РА2 микроконтроллера может управляться не только программно (посредством регистра PORTA), но и аппаратно. Для аппаратного управления состоянием этого вывода в составе микроконтроллеров ATtiny28x имеется специальное периферийное устройство, называемое аппаратным модулятором (Hardware Modulator). Подробно об этом устройстве будет рассказано в следующем разделе. Порт В Поскольку выводы порта В могут работать только как входы, то регистры PORTB и DDRB в модели ATtiny28x отсутствуют. Формат регистра PINB показан на Рис 6.11. Рис. 6.11. Регистр порта В моделей ATtiny28x Соответственно, пользователь может управлять только подключением или отключением внутренних подтягивающих резисторов (одновременно для всех выводов порта). Для этой цели служит бит PLUPB регистра MCUSR, формат которого приведен на Рис 6.12. Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 6.12. Регистр MCUSR моделей ATtiny28x
Если этот бит установлен в 1, внутренние подтягивающие резисторы на всех входах порта В подключены; если сброшен в 0 — отключены. При использовании какого-либо вывода порта периферийным устройством соответствующий подтягивающий резистор отключается автоматически, независимо от состояния бита PLUPB. ПортО Порт D является обычным 8-битным портом ввода/вывода с подключаемыми внутренними подтягивающими резисторами. Формат регистров этого порта приведен на Рис. 6.13. Рис. 6.13. Регистры порта D модели ATtiny28x Этот порт конфигурируется так же, как и порт А. Направление передачи данных определяется содержимым регистра направления данных DDRD, а управление внутренними подтягивающими резисторами осуществляется индивидуально для каждого вывода с помощью регистра данных PORTD. Все возможные конфигурации выводов порта D указаны в Табл. 6.6 (для х = D). Нагрузочная способность выходов порта D составляет 20 мА при Vcc = 5 В и 10 мА при VCQ = 3 В. В заключение напомню, что подавляющее большинство контактов ввода/вывода всех микроконтроллеров семейства имеют дополнительные функции и могут использоваться различными периферийными устройствами микроконтроллеров. При этом возможны две ситуации. В одних случаях пользователь должен самостоятельно задавать конфигурацию вывода, а в других — вывод конфигурируется автоматически при включении соответствующего периферийного устройства. Об этом будет сказано при рассмотрении соответствующих периферийных устройств.
6.4. Аппаратный модулятор Аппаратный модулятор (Hardware Modulator) предназначен для управления выводом РА2 микроконтроллеров ATtiny28x. Единственной задачей модулятора является генерирование последовательности импульсов с заданными параметрами. Структурная схема блока аппаратного модулятора приведена на Рис. 6.14. Рис. 6.14. Структурная схема аппаратного модулятора Для управления параметрами генерируемого сигнала предназначен регистр MODCR (Modulation Control Register), расположенный по адресу $02. Формат этого регистра приведен на Рис. 6.15. Рис. 6.15. Формат регистра MODCR Старшие 5 битов регистра (ONTIM4...ONTIM0) определяют время нахождения выхода РА2 в активном состоянии (НИЗКИЙ уровень). Число тактов, в течение которых вывод РА2 будет находиться в активном
состоянии, на единицу больше значения, записанного в битах ONTIM4...ONTIM0. Младшие три бита регистра (MCONF2...MCONF0) определяют соотношение между длительностями активного и неактивного состояния вывода РА2 и соответственно скважность генерируемого сигнала. Значения скважности сигнала для различного содержимого этих битов, а также возможные значения периода генерируемого сигнала приведены в Табл. 6.7. Таблица 6.7. Зависимость скважности и периода модуляции от содержимого битов MCONF2...MCONF0 MCONF2...0 Длительность сигнала Период модуляции0 Пояснения 0 1 Скважность min max ООО X X 1 X X Нет модуляции 001 ONTIM + 1 ONTIM + 1 0.5 2CK 64 CK - 010 ONTIM + 1 2 (ONTIM+ 1) 0.33 зек 96 CK - 011 ONTIM + 1 3 (ONTIM+1) 0.25 4CK 128 CK - 100 2 (ONTIM+1) ONTIM + 1 0.67 зек 96 CK - 101 3 (ONTIM + 1) ONTIM + 1 0.75 4CK 128 CK - 110 Зарезервировано 111 X X Q2) 1CK 1CK Сигнал высокой частоты 1) Минимальный период модуляции соответствует ONTIM = 0, а максимальный — ONTIM = 31. 2) В этом режиме сигнал на выходе РА2 идентичен тактовому сигналу микроконтроллера. Поэтому скважность Q зависит от параметров тактового сигнала. Несущая частота (частота генерируемого сигнала) определяется соотношением: /osc ^ON + ^OFF где /osc — тактовая частота микроконтроллера, Ton — время нахождения вывода РА2 в активном состоянии, ^off — время нахождения вывода РА2 в выключенном состоянии. При значении MCONF =111 частота сигнала равна частоте тактового сигнала микроконтроллера.
Для примера в Табл. 6.8 приводятся значения рассмотренных параметров для типовых значений частот тактового и генерируемого сигналов (см. также Рис. 6.16). Таблица 6.8. Типовые конфигурации модулятора Частота резонатора [М1ц] Несущая частота [кГц] Погрешность установки частоты [%] Скважность Значения параметров ONTIM MCONF 0.455 38 0.2 0.25 2 011 0.455 38 0.2 0.33 3 010 0.455 38 0.2 0.50 5 001 0.455 38 0.2 0.67 3 100 0.455 38 0.2 0.75 2 101 1 38 1.2 0.50 12 001 1.8432 38 1.1 0.25 11 011 1.8432 38 1.1 0.33 15 010 1.8432 38 1.1 0.50 23 001 2 38 1.2 0.25 12 011 2 38 1.2 0.50 25 001 2.4576 38 1.1 0.50 31 001 3.2768 38 2.0 0.25 21 011 4 38 1.2 0.25 25 011 0.455 455 0.0 «0.50 X 111 1 455 9.9 0.50 0 001 1.82 455 0.0 0.25 0 011 1.82 455 0.0 0.50 1 001 1.8432 455 1.3 0.25 0 011 1.8432 455 1.3 0.50 1 001 2 455 9.9 0.25 0 011 2 455 9.9 0.50 1 001 2.4576 455 10.0 0.33 1 010 2.4576 455 10.0 0.50 2 001 3.2768 455 10.0 0.25 1 011 3.2768 455 10.0 0.50 3 001
(продолжение) Частота резонатора [МГц] Несущая частота [кГц] Погрешность установки частоты [%] Скважность Значения параметров ONTIM MCONF 3.64 455 0.0 0.25 1 011 3.64 455 0.0 0.50 3 001 4 455 9.9 0.25 1 011 4 455 9.9 0.50 3 001 Рис. 6.16. Примеры сигналов, формируемых аппаратным модулятором Разумеется, состояние выхода РА2 может определяться не только аппаратным модулятором. Все возможные условия функционирования выхода РА2 приведены в Табл. 6.9. Таблица 6.9. Функционирование выхода РА2 PORTA2 MCONF2...MCONF0 Состояние выхода РА2 0 000 0 0 001...111 Определяется модулятором 1 X 1 Аппаратный модулятор имеет еще одну полезную функцию. Помимо управления состоянием вывода РА2 микроконтроллера, выходной сигнал аппаратного модулятора может использоваться в качестве входного для предделителя таймера/счетчика ТО. В этом случае таймер/счетчик может использоваться как для ограничения длительности посылки, так и для
задания интервала между посылками. Последнее возможно благодаря тому, что сигнал с выхода модулятора может подаваться на вход предделителя таймера/счетчика, даже если бит PORTA2 установлен в 1 и генерация отсутствует. Для использования таймера/счетчика ТО в описанном режиме он должен быть сконфигурирован таким образом, чтобы при его переполнении изменялось состояние выхода РА2. Подробнее о конфигурировании таймера см. главу 7. Перед запуском модулятора следует занести требуемые значения в регистр MODCR. Далее запуск может быть осуществлен двумя способами: 1. Сброс бита PORTA2 регистра PORTA. 2. Задание конфигурации таймера/счетчика ТО таким образом, чтобы он сбросил выход РА2 при переполнении. Остановить генерацию можно также двумя способами: вручную или с помощью таймера (установка выхода РА2 при переполнении).
ГЛАВА 7 Таймеры 7.1. Общие сведения Все микроконтроллеры семейства Tiny имеют в своем составе, в зависимости от модели, один или два таймера/счетчика общего назначения (Табл. 7.1). Таблица 7.1. Таймеры/счетчики общего назначения Таймер/счетчик 11х/12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26х 28х Таймер/счетчик ТО (8-битный) • • • • • • • • Таймер/счетчик Т1 (8-битный) • • • Таймер/счетчик Т1 (16-битный) • • Таймер/счетчик ТО имеет минимальный набор функций, зависящий, тем не менее, от модели микроконтроллера. В одних моделях он может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий. В других моделях к этим функциям добавляется возможность генерации сигналов с широтно-импульсной модуляцией (ШИМ) фиксированной разрядности (два канала). Таймер/счетчик Т1 тоже может использоваться для отсчета временных интервалов и как счетчик внешних событий. Как и таймер/счетчик ТО, он может работать в качестве 1- или 2-канального широтно-импульсного модулятора фиксированной (8-битное исполнение) или переменной (16-битное исполнение) разрядности. Помимо этого 16-битный таймер/счетчик может выполнять запоминание своего состояния по внешнему сигналу. В составе всех микроконтроллеров семейства имеется также сторожевой таймер, являющийся непременным атрибутом всех современных микроконтроллеров. Этот таймер позволяет избежать несанкционированного зацикливания программы, возникающего по тем или иным причинам.
7.2. Назначение выводов таймеров/счетчиков Каждый таймер/счетчик использует один или более выводов микроконтроллера. Как правило, эти выводы — линии портов ввода/вывода общего назначения, а функции, реализуемые этими выводами при работе совместно с таймерами/счетчиками, являются их альтернативными функциями. Все выводы микроконтроллеров, используемые таймерами/счетчиками общего назначения, сведены в Табл. 7.2. Там же указаны их функции. Таблица 7.2. Выводы, используемые таймерами/счетчиками общего назначения Название 11х/12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26х 28х Описание ТО РВ2 РВ2 РВ2 PD4 РАЗ РВ2 РВ6 РВ2 Вход внешнего сигнала таймера ТО ОСОА - РВО - РВ2 РВ2 РВО - - Выход схемы сравнения таймера ТО ОСОБ - РВ1 - PD5 РА7 РВ1 - - Т1 - - - PD5 РА4 - - - Вход внешнего сигнала таймера Т1 ICP - - - PD6 РА7 - - - Вход захвата таймера Т1 ОС1А - - РВ1 РВЗ РА6 РВ1 РВ1 - Выход схемы сравнения таймера Т1 ОС1В - - - РВ4 РА5 РВ4 РВЗ - ОС1А РВО РВО - Инверсный выход схемы сравнения таймера Т1 ОС1В РВЗ РВ2 - Не забывайте о том, что при использовании альтернативных функций линий портов ввода/вывода необходимо, как правило, самостоятельно сконфигурировать эти выводы в соответствии с их функциональным назначением. 7.3. Прерывания от таймеров/счетчиков Во всех моделях, кроме ATtiny28x, для разрешения/запрещения прерываний от таймеров/счетчиков используются выделенные регистры ввода/вывода (в ATtiny28x для этой цели используется тот же регистр, что и для внешних прерываний). Точно так же дело обстоит и с регистрами, содержащими флаги прерываний. Названия и адреса всех этих регистров приведены в Табл. 7.3.
Форматы регистров, используемых для разрешения/запрещения прерываний от таймеров/счетчиков, показаны на Рис. 7.1...7.2, а описание их битов приведено в Табл. 7.4. Рис. 7.1. Формат регистров TIMSK (a), TIMSK0 (б), TIMSK1 (в) Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 7.2. Формат регистра ICR
Таблица 7.3. Регистры для управления прерываниями от таймеров/счетчиков Модель Разрешение прерываний Флаги прерываний Таймер/счетчик Регистр Адрес Регистр Адрес ATtinyl 1х/12х ТО TIMSK $39($59) TIFR $38 ($58) ATtinyl Зх ТО TIMSK0 $39($59) TIFR0 $38($58) ATtinyl5L Т0Д1 TIMSK $39($59) TIFR $38 ($58) ATtiny2313x Т0,Т1 TIMSK $39($59) TIFR $38($58) АШпу24х/44х/84х то TIMSK0 $39 ($59) TIFR0 $38 ($58) Т1 TIMSK1 $0С ($2С) TIFR1 $0В ($2В) ATtiny25x/45x/85x Т0Д1 TIMSK $39($59) TIFR $38($58) ATtiny26x Т0Д1 TIMSK $39 ($59) TIFR $38 ($58) ATtiny28x то ICR $06 ($26) ICF $05 ($25) Таблица 7.4. Биты регистров TIMSK (TIMSfoi) и ICR Название бита Описание TOIE/2 Флаг разрешения прерывания по переполнению таймера /счетчика Тп (п = 0,1) ОСШлА Флаг разрешения прерывания по событию «Совпадение А» таймера/счетчика Тп (п = 0,1) ОСШлВ Флаг разрешения прерывания по событию «Совпадение В» таймера/счетчика Тл (л = 0,1) ICIE1 Флаг разрешения прерывания по событию «Захват» таймера/счетчика Т1 Для разрешения какого-либо прерывания от таймера/счетчика необходимо установить в 1 соответствующий бит регистра TIMSK/TIMSKaz/ICR и, разумеется, флаг I регистра SREG. Форматы регистров, используемых для индикации наступления прерываний от таймеров/счетчиков, показаны на Рис. 7.3...7.4, а описание их битов приведено в Табл. 7.5. Таблица 7.5. Биты регистров TIFR (TIFRu) и ICF Название бита Описание TOVn Флаг прерывания по переполнению таймера /счетчика In (п - 0,1) OCF/iA Флаг прерывания по событию «Совпадение А» таймера/счетчика Тп (п = 0,1) OCF/iB Флаг прерывания по событию «Совпадение В» таймера/счетчика Тп (п = 0,1) ICF1 Флаг прерывания по событию «Захват» таймера/счетчика Т1 При наступлении какого-либо события соответствующий флаг регистра TIFR/TIFR/i/ICF устанавливается в 1. При запуске подпрограммы обработки прерывания он аппаратно сбрасывается в 0. Любой флаг может быть также сброшен программно, записью в него 1.
Рис. 7.3. Формат регистров TIFR (a), TIFR0 (б), TIFR1 (в) Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции Рис. 7.4. Формат регистра ICF
7.4. Предделители таймеров/счетчиков Блоки предделителей предназначены для формирования тактовых сигналов таймеров/счетчиков clkT0, clkT1. Упрощенные структурные схемы блока предделителя таймеров/счетчиков ТО и Т1 для различных моделей приведены на Рис. 7.5 и Рис. 7.6 соответственно. Рис. 7.5. Блоки предделителя таймера/счетчика ТО
Рис. 7.6. Блоки предделителя таймера/счетчика Т1
В ряде моделей имеется возможность ручного сброса предделителей. Следует отметить, что в моделях ATtiny2313x и ATtiny24x/44x/84x оба таймера/счетчика используют один и тот же 10-битный предделитель. Однако управление тактовым сигналом каждого таймера/счетчика осуществляется индивидуально. Следует понимать, что предделители работают независимо от таймеров/счетчиков. Следствием этого является, в частности, неопределенный промежуток времени (I...N+1 тактов исходного сигнала, где N — коэффициент деления предделителя) между разрешением таймера/счетчика и первым его отсчетом при работе совместно с предделителем. Чтобы избежать этой неопределенности, в ряде моделей можно воспользоваться средствами, описанными в следующем подразделе. 7.4.1. Управление предделителями Помимо управления тактовым сигналом таймера/счетчика, в некоторых микроконтроллерах семейства имеется возможность сброса предделителей, а отдельные модели позволяют также осуществлять их остановку (Табл. 7.6). Форматы регистров, предназначенных для управления предделителями в различных моделях, приведены на Рис. 7.7 (форматы регистров TCCR0 и TCCR1B, используемых в модели ATtiny28x, будут приведены далее). Биты, не используемые для управления предделителями, выделены на рисунке серым цветом. Таблица 7.6. Регистры управления предделителями Модель Сброс предделителя TO Сброс предделителя Tl Остановка предделителей Бит Регистр Адрес Бит Регистр Адрес Бит Регистр Адрес ATtinyl 1х/12х - - - ATtinyl Зх PSR10 GTCCR $28($48) - TSM GTCCR $28($48) ATtinyl 5L PSRO SFIOR $2C($4C) PSR1 SFIOR $2C($4C) - ATtiny2313x PSR10 GTCCR $23($43) PSR10 GTCCR $23($43) - ATtiny24x/44x/84x PSR10 GTCCR $23 ($43) PSR10 GTCCR $23($43) TSM GTCCR $23($43) ATtiny25x/45x/85x PSRO GTCCR $2C($4C) PSR1 GTCCR $2C($4C) TSM GTCCR $2C($4C) ATtiny26x PSRO TCCRO $33($53) PSR1 TCCR1B $33($53) - ATtiny28x - - -
Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 7.7. Управление предделителямитаймеров/счетчиков — регистры SFIOR (а) hGTCCR (б) Для сброса предделителей таймеров/счетчиков используются биты PSRx. При записи 1 в эти биты предделители соответствующих таймеров/счетчиков переводятся в исходное состояние. Биты сбрасываются в О аппаратно после выполнения операции сброса. Остановка всех предделителей микроконтроллера осуществляется записью 1 в бит TSM регистра SFIOR или GTCCR. Последующий запуск предделителей осуществляется записью 0 в бит TSM. Указанная функция может использоваться, в частности, для синхронизации таймеров/счетчиков. После установки бита TSM и битов PSRx соответствующие таймеры/счетчики останавливаются и могут быть проинициализированы требуемыми значениями. После сброса бита TSM биты PSRx аппаратно сбрасываются и все таймеры/счетчики начинают работать одновременно. 7.4.2. Использование внешнего тактового сигнала Практически все таймеры/счетчики могут тактироваться от внешнего сигнала. Исключение составляют лишь таймеры/счетчики Т1 в моделях ATtinyl5L, ATtiny25x/45x/85x и ATtiny26x.
Прежде чем внешний сигнал, поступающий на вход Тп (п = 0 или 1) микроконтроллера, попадает на вход селектора тактового сигнала, он проходит через специальный узел, содержащий схему синхронизации и детектор фронтов. В общем виде схема этого узла приведена на Рис. 7.8. Рис. 7.8. Входной каскад выводов Тп Синхронизация внешнего сигнала осуществляется тактовым сигналом микроконтроллера (состояние вывода Т1 считывается по нарастающему фронту тактового сигнала clkI/0). Поэтому частота внешнего сигнала должна быть в 2 раза ниже частоты тактового сигнала микроконтроллера (/ext < /cik_i/o/2). Однако, чтобы гарантировать обнаружение фронтов внешнего сигнала во всем диапазоне возможных изменений частоты и скважности тактового сигнала микроконтроллера (из-за разброса параметров элементов тактового генератора), частота внешнего сигнала должна быть меньше, чем/cik_i/o/2.5. Также следует понимать, что из-за входного каскада происходит временная задержка между изменением состояния вывода и обновлением счетного регистра таймера/счетчика. Величина задержки составляет от 2.5 до 3.5 тактов. 7.5. Таймер/счетчик ТО Восьмибитный таймер/счетчик ТО присутствует во всех моделях микроконтроллеров семейства. Всего в семействе реализовано два исполнения восьмибитного таймера/счетчика ТО, отличающихся набором выполняемых функций. Самым простым является таймер/счетчик ТО в моделях ATtinyl lx/12x, ATtinyl5L, ATtiny26x и ATtiny28x (Рис 7.9, а). Он может использоваться только для отсчета временных интервалов или как счетчик внешних событий. В остальных моделях таймер/счетчик ТО, помимо упомянутых функций, может использоваться в качестве двухканального генератора 8-битного ШИМ-сигнала (Рис. 7.9, б).
Рис. 7.9. Структурные схемы 8-битных таймеров/счетчиков ТО
Количество регистров ввода/вывода, имеющихся в составе таймеров/счетчиков, зависит от сложности и возможностей последних. Все регистры 8-битных таймеров/счетчиков указаны в Табл. 7.7. Эти же факторы влияют и на количество прерываний, генерируемых конкретным таймером/счетчиком. Таблица 7.7. Регистры таймеров/счетчиков ТО Регистр Адрес 11х/12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26х 28х Назначение TCCR0 $33($53) • • • Регистр управления $04 ($24) • TCCR0A $2А($4А) • $2F($4F) • $30($50) • • ТСС ROB $33($53) • • • • TCNT0 $32($52) Счетный регистр $03($23) • OCR0A $29($49) • Регистр сравнения $36 ($56) • • • OCR0B $28($48) • $29 ($49) • $ЗС($5С) • • Счетный регистр таймера/счетчика TCNT0 входит в состав основного блока модуля — блока реверсивного счетчика. В зависимости от режима работы модуля содержимое счетного регистра сбрасывается, инкременти- руется или декрементируется по каждому импульсу тактового сигнала таймера/счетчика clkT0. Независимо от того, присутствует тактовый сигнал или нет, регистр доступен в любой момент времени как для чтения, так и для записи. Однако следует помнить, что любая операция записи в счетный регистр блокирует работу блока сравнения на время одного периода тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNT0 находится нулевое значение. При достижении таймером/счетчиком максимального или минимального значения (конкретный
вариант зависит от его режима работы) устанавливается флаг TOV0 в регистре флагов. Разрешение прерывания осуществляется установкой бита TOIE0 соответствующего регистра маски в 1. Разумеется, флаг I регистра SREG также должен быть установлен в 1. Регистры сравнения OCR0A/OCR0B входят в состав блоков сравнения модуля. Во время работы таймера/счетчика производится непрерывное (в каждом такте) сравнение этих регистров с регистром TCNT0. В случае равенства содержимого этих регистров в следующем такте устанавливается флаг OCF0A/OCF0B в соответствующем регистре флагов и генерируется прерывание (если оно разрешено). Кроме того, при наступлении данного события может изменяться состояние вывода ОС0А/ОС0В микроконтроллера. Чтобы таймер/счетчик мог управлять состоянием этих выводов, они должны быть сконфигурированы как выходы (соответствующий бит регистра DDRx должен быть установлен в 1). Особенностью работы блоков сравнения в режимах, предназначенных для формирования ШИМ-сигналов, является двойная буферизация записи в регистры сравнения. Она заключается в том, что записываемое число на самом деле сохраняется в специальном буферном регистре, а изменение содержимого регистра сравнения происходит только при достижении счетчиком максимального значения. Следует напомнить, что любая операция записи в счетный регистр блокирует формирование сигнала о совпадении, если оно произойдет в следующем такте. Регистры TCCRO (TCCR0A/TCCR0B) предназначены для управления модулем таймера/счетчика. Формат этих регистров приведен на Рис. 7.10...7.11, а описание их битов — в Табл. 7.8...7.9 соответственно. Рис. 7.10. Формат регистра TCCR0
Таблица 7.8. Биты регистра TCCRO Бит Название Описание Модель 7 FOV0 Принудительное формирование переполнения. При записи 1 в этот бит состояние вывода РА2 изменяется в соответствии с установками битов ООМ01:ООМ00. Прерывание при этом не генерируется. При чтении бита всегда возвращается 0 ATtiny28x Состояние вывода РА2 при переполнении. Эти биты определяют состояние вывода РА2 при переполнении таймера/счетчика следующим образом: ООМ01 ООМОО Описание 4,3 ООМ01: ООМОО 0 0 Таймер/счетчик ТО отключен от вывода РА2 ATtiny28x 0 1 Сигнал на выходе РА2 меняется на противоположный 1 0 Выход РА2 сбрасывается в 0 1 1 Выход РА2 устанавливается в 1 3 PSRO Сброс предделителя таймера/счетчика ТО. При записи 1 в этот бит сбрасывается предделитель таймера. После выполнения этой операции бит автоматически сбрасывается, так что при чтении этого бита всегда возвращается 0 ATtiny26x 2...0 CS02...CS00 Управление тактовым сигналом. Эти биты определяют источник тактового сигнала таймера/счетчика. Действие этих битов будет описано ниже ATtinyl lx/12x, ATtinyl5x, ATtiny26x, ATtiny28x ATtinyl 3x Puc. 7.11. Формат регистров TCCROA (а) и TCCROB (6)
Таблица 7.9. Биты регистров TCCR0A и TCCR0B Регистр Бит Название Описание 7,6 COM0A1: COM0A0 Режим работы блока сравнения А. Эти биты определяют состояние вывода OC0A при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика 5,4 COM0B1: сомово Режим работы блока сравнения В. Эти биты определяют состояние вывода OC0B при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика 3,2 - Зарезервированы, читаются как 0 TCCR0A Режим работы таймера/счетчика. Эти биты совместно с битом WGM02 регистра TCCR0B определяют режим работы таймера/счетчика следующим образом: Номер режима WGM02 WGM01 WGM00 Режим работы таймера/счетчика ТО 0 0 0 0 Normal 1,0 WGM01: 1 0 0 1 Phase correct PWM WGM00 2 0 1 0 CTC (сброс при совпадении) 3 0 1 1 Fast PWM 4 1 0 0 Зарезервировано 5 1 0 1 Phase correct PWM 6 1 1 0 Зарезервировано 7 1 1 1 Fast PWM 7 FOC0A Принудительное изменение состояния вывода OC0A (режимы Normal и CTC). При записи 1 в этот бит состояние вывода OC0A изменяется в соответствии с установками битов СОМ0А1:СОМ0А0. Прерывание при этом не генерируется и сброс таймера (в режиме CTC) не производится. В режимах Fast PWM и Phase Correct PWM этот бит должен быть сброшен в 0. При чтении бита всегда возвращается 0 TCCR0B 6 FOC0B Принудительное изменение состояния вывода OC0B (режимы Normal и CTQ. При записи 1 в этот бит состояние вывода OC0B изменяется в соответствии с установками битов СОМОВ 1:СОМ0В0. Прерывание при этом не генерируется и сброс таймера (в режиме CTC) не производится. В режимах Fast PWM и Phase Correct PWM этот бит должен быть сброшен в 0. При чтении бита всегда возвращается 0 5,4 - Зарезервированы, читаются как 0 3 WGM02 Режим работы таймера/счетчика. Этот бит совместно с битами WGM01:WGM00 регистра TCCR0A определяет режим работы таймера/счетчика 2...0 CS02...CS00 Управление тактовым сигналом. Эти биты определяют источник тактового сигнала микроконтроллера. Действие этих битов будет описано ниже
7.5.1. Управление тактовым сигналом Формирование тактового сигнала таймера/счетчика clkT0 осуществляется блоком предделителя, который был рассмотрен в разделе 7.4. В качестве тактового сигнала clkT0 таймеров/счетчиков может использоваться (см. Рис. 7.5): • системный тактовый сигнал (clkT0 = clkI/0); • масштабированный системный тактовый сигнал (clkT0 = clkI/0/A/V); • внешний сигнал, поступающий на вход ТО микроконтроллера (clkT0 = clkEXT). Выбор источника тактового сигнала, а также запуск и остановка таймера/счетчика осуществляются с помощью битов CS02...CS00 регистров управления таймером TCCR0/TCCR0A согласно Табл. 7.10. Таблица 7.10. Выбор источника тактового сигнала таймера/счетчика ТО CS02 CS01 CS00 Источник тактового сигнала 0 0 0 Таймер/счетчик остановлен 0 0 1 clki/o 0 \ 0 clkI/0/8 Сигнал разрешения счета от аппаратного модулятора1) 0 1 1 clkI/0/64 1 0 0 clkI/0/256 1 0 1 clk,/o/1024 1 1 0 Вывод ТО, счет осуществляется по спадающему фронту импульсов 1 1 1 Вывод ТО, счет осуществляется по нарастающему фронту импульсов ]) В модели ATtiny28x. 7.5.2. Режимы работы В моделях ATtinyl Зх, ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x таймер/счетчик может работать в нескольких различных режимах. Режим работы определяется состоянием битов WGM02:WGM00 регистров TCCR0A/TCCR0B. Зависимость режима работы таймера/счетчика от состояния этих битов показана в Табл. 7.11.
Таблица 7.11. Режимы работы таймера/счетчика ТО Номер режима WGM02 WGM01 WGM00 Режим работы таймера/счетчика ТО Модуль счета (TOP) Обновление регистров OCROjc Момент установки флага TOV0 0 0 0 0 Normal $FF Немедленно $FF 1 0 0 1 Phase correct PWM $FF При TOP $00 2 0 1 0 CTC (сброс при совпадении) OCROA Немедленно $FF 3 0 1 1 Fast PWM $FF При TOP $FF 4 1 0 0 Зарезервировано - - - 5 1 0 1 Phase correct PWM OCROA При TOP $00 6 1 1 0 Зарезервировано - - - 7 1 1 1 Fast PWM OCROA При TOP TOP Режим Normal Это наиболее простой режим работы таймеров/счетчиков. А в таймере/счетчике ТО моделей ATtinyl lx/12x, ATtinyl5L, ATtiny26x и ATtiny28x это вообще единственный режим. В этом режиме счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала clkT0 осуществляется инкрементирование счетного регистра. При переходе через значение $FF возникает переполнение, и счет продолжается со значения $00. В том же такте сигнала clkT0, в котором обнуляется регистр TCNT0, флаг прерывания по переполнению TOV0 устанавливается в 1. При равенстве счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг прерывания OCF0A/OCF0B и, если бит OCIE0A/OCIE0B регистра маски установлен в 1, генерируется прерывание. Наряду с установкой флага, при равенстве счетного регистра и регистра сравнения может изменяться состояние вывода ОС0А/ОС0В микроконтроллера. Каким образом оно будет изменяться, определяется битами СОМ0х1:СОМ0х0 регистра управления TCCR0A в соответствии с Табл. 7.12. Таблица 7.12. Управление выводами ОС0А/ОС0В в режиме Normal COM0A1 (COM0B1) COM0A0 (COM0B0) Описание 0 0 Таймер/счетчик ТО отключен от вывода ОС0А (OC0B) 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в 0 1 1 Вывод устанавливается в 1
При необходимости состояние вывода ОС0А/ОС0В может быть изменено принудительно записью 1 в бит FOC0A/FOC0B регистра управления TCCR0B. Прерывание при этом не генерируется. Режим СТС (сброс при совпадении) В этом режиме счетный регистр тоже функционирует как обычный суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала clkT0. Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяется регистром сравнения OCR0A. После достижения значения, записанного в регистре сравнения, счет продолжается со значения $00. Если в регистре сравнения записано $FF, то в том же такте сигнала clkT0, в котором обнуляется счетный регистр, устанавливается флаг прерывания по переполнению TOV0 в соответствующем регистре флагов. Временные диаграммы для этого режима работы таймера/счетчика приведены на Рис. 7.12. Рис. 7.72. Временные диаграммы для режима СТС При достижении счетчиком максимального значения устанавливается флаг OCF0A и, если бит OCIE0A соответствующего регистра маски установлен в 1, генерируется прерывание. Одновременно с установкой флага может изменяться состояние выводов ОС0А/ОС0В микроконтроллера. Состояние выводов определяется битами СОМ0А1:СОМ0А0 (СОМОВ 1:СОМ0В0) регистра управления TCCR0A, как указано в Табл. 7.13.
Таблица 7.13. Управление выводами ОС0А/ОС0В в режиме СТС СОМ0А1 (COM0B1) СОМ0А0 (СОМ0В0) Описание 0 0 Таймер/счетчик ТО отключен от вывода ОСОА (ОСОБ) 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в 0 1 1 Вывод устанавливается в 1 Для генерации сигнала заданной частоты необходимо записать в биты СОМ0А1:СОМ0А0 значение 01 (переключение вывода). Частота генерируемого сигнала будет определяться выражением г _ /clk_I/0 /осоа 2-^(1+OCR0A)' где N— коэффициент деления предделителя (см. Табл. 7.10). При необходимости состояние вывода ОС0А/ОС0В можно изменить принудительно записью 1 в бит FOC0A/FOC0B регистра управления TCCR0B. Прерывание при этом не генерируется и сброса счетного регистра не производится. Режим Fast PWM Режим Fast PWM («Быстродействующий ШИМ») позволяет генерировать высокочастотный сигнал с широтно-импульсной модуляцией. Благодаря высокой частоте генерируемого сигнала данный режим с успехом может использоваться в таких приложениях, как регулирование мощности, выпрямление, цифро-аналоговое преобразование и др. Счетный регистр в этом режиме функционирует как суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала clkT0. Состояние счетчика изменяется от $00 до максимального значения, после чего счетный регистр сбрасывается и цикл повторяется. При достижении счетчиком максимального значения устанавливается флаг прерывания по переполнению TOV0 в соответствующем регистре флагов, а при равенстве содержимого счетного регистра и регистра сравнения OCR0A/OCR0B устанавливается флаг OCF0A/OCF0B. Максимальное значение равно $FF (при WGM02 = 0) или задается регистром OCR0A (при WGM02 = 1). Особенностью работы схемы сравнения в этом режиме является двойная буферизация записи в регистр OCR0A/OCR0B, заключающаяся в том, что записываемое число на самом деле сохраняется в специальном буфер-
ном регистре, а изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения. Благодаря такому решению исключается появление несимметричных импульсов сигнала на выходе модулятора (glitches), которые были бы неизбежны при непосредственной записи в регистр сравнения. Состояние выводов ОС0А/ОС0В микроконтроллера в этом режиме также определяется содержимым битов СОМ0А1:СОМ0А0 (СОМОВ 1:СОМ0В0) регистра TCCR0A (см. Табл. 7.14 и Рис. 7.13). Таблица 7.14. Управление выводами ОС0А/ОС0В в режиме Fast PWM СОМ0А1 (СОМ0В1) СОМ0А0 (СОМ0В0) Описание 0 0 Таймер/счетчик ТО отключен от вывода ОСОА (ОСОБ) 0 1 ОСОА: WGM02 = 0 — таймер/счетчик ТО отключен от вывода ОСОА; WGM02 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNT0 и OCR0A. ОСОВ: Зарезервировано 1 0 Сбрасывается в 0 при равенстве регистров TCNT0 и OCROx. Устанавливается в 1 при достижении счетчиком максимального значения (неин- вертированный ШИМ-сигнал) 1 1 Устанавливается в 1 при равенстве регистров TCNT0 и OCROx. Сбрасывается в 0 при достижении счетчиком максимального значения (инвертированный ШИМ-сигнал) Рис. 7.13. Формирование ШИМ-сигнала в режиме Fast PWM
Частота генерируемого сигнала определяется выражением г _ /с!к_1/0 /ос0х " лГмб' где N — коэффициент деления предделителя (см. Табл. 7.10). Отдельно следует рассматривать случаи, когда в регистре сравнения находятся предельно возможные значения. Если в регистре сравнения OCR0A/OCR0B содержится $00, то на выходе ОС0А/ОС0В будут наблюдаться короткие выбросы с периодом, равным максимальному значению таймера/счетика. Если же содержимое регистра сравнения равно максимальному значению, то вывод ОС0А/ОС0В переключится в устойчивое состояние, определяемое установками битов СОМ0А1:СОМ0А0 (СОМОВ 1:СОМ0В0). В частности, подобным образом функционирует выход ОС0А, когда максимальное значение задается регистром OCR0A. Режим Phase Correct PWM Режим Phase Correct PWM («ШИМ с точной фазой»), как и режим Fast PWM, предназначен для генерации сигналов с широтно-импульсной модуляцией. Однако в этом режиме счетный регистр функционирует как реверсивный счетчик, изменение состояния которого осуществляется по каждому импульсу тактового сигнала clkT0. Состояние счетчика сначала изменяется от $00 до максимального значения, а затем обратно до $00. Соответственно, максимальная частота сигнала в этом режиме в два раза меньше максимальной частоты сигнала в режиме Fast PWM. Тем не менее, благодаря «симметричности» изменения состояния счетчика, режим Phase Correct PWM предпочтительнее использовать для решения задач управления двигателями. Максимальное значение равно $FF (при WGM02 = 0) или задается регистром OCR0A (при WGM02 = 1). При достижении счетчиком максимального значения происходит смена направления счета, однако счетчик остается в этом состоянии в течение одного периода сигнала clkT0. При достижении счетчиком минимального значения ($00) также происходит смена направления счета и одновременно устанавливается флаг прерывания TOV0 в соответствующем регистре флагов. При равенстве содержимого счетного регистра и регистра сравнения OCR0A/OCR0B устанавливается флаг OCF0A/OCF0B и изменяется состояние вывода ОС0А/ОС0В. Характер изменения определяется, как обычно, содержимым битов СОМ0А1:СОМ0А0 (СОМОВ 1:СОМ0В0) регистра TCCR0A (Табл. 7.15 и Рис. 7.14).
Таблица 7.15. Управление выводами ОС0А/ОС0В в режиме Phase Correct PWM СОМ0А1 (COM0B1) COM0A0 (COM0B0) Описание 0 0 Таймер/счетчик TO отключен от вывода ОСОА (ОСОБ) 0 1 ОСОА: WGM02 = 0 — таймер/счетчик ТО отключен от вывода ОСОА; WGM02 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNT0 и OCR0A. ОСОВ: Зарезервировано 1 0 Сбрасывается в 0 при прямом счете и устанавливается в 1 при обратном счете (неинвертированный ШИМ-сигнал) 1 1 Устанавливается в 1 при прямом счете и сбрасывается в 0 при обратном счете (инвертированный ШИМ-сигнал) Рис. 7.14. Формирование ШИМ-сигнала в режиме Phase Correct PWM Чтобы избежать несимметричных выбросов, в этом режиме тоже реализована двойная буферизация записи в регистры сравнения. Поэтому действительное изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения.
Если в регистр сравнения записать минимальное ($00) или максимальное значение, то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.16. Таблица 7.16. Устойчивые состояния выхода схемы сравнения COMOjcI COMOjcO Регистр OCR0A/OCR0B Состояние вывода OC0A/OC0B 1 0 $00 0 1 0 Максимальное значение 1 1 1 $00 1 1 1 Максимальное значение 0 Частота генерируемого в рассматриваемом режиме сигнала определяется выражением г _ /clk_I/Q foc0x~ F*512' где N — коэффициент деления предделителя (см. Табл. 7.10). 7.6. Таймер/счетчик Т1 Второй таймер/счетчик (Т1) реализован в моделях ATtinyl5L, ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x и ATtiny26x, причем структура таймера/счетчика и выполняемые им функции зависят от модели. 7.6.1. Таймер/счетчик Т1 в модели ATtinyl 5L Структурная схема 8-битного таймера/счетчика Т1 модели ATtinyl5L приведена на Рис. 7.15. В отличие от таймера/счетчика ТО этой же модели, в нем отсутствует возможность счета внешних импульсов. Однако он может использоваться в качестве 1-канального генератора ШИМ-сигнала. В состав таймера/счетчика входят три 8-битных регистра (счетный регистр TCNT1 и два регистра сравнения OCR1A и OCR1B), два 8-битных компаратора, два управляющих регистра (регистр управления TCCR1 и регистр специальных функций SFIOR), а также блок управления таймером. Все флаги состояния таймера/счетчика (переполнения и совпадения) находятся в регистре флагов прерываний от таймеров TIFR, а разрешение
Рис. 7.15. Структурная схема таймера/счетчика Т1 модели ATtinyl5L и запрещение прерываний от таймера осуществляется установкой/сбросом соответствующих флагов регистра TIMSK (см. раздел 7.3). Счетный регистр таймера/счетчика TCNT1, расположенный по адресу $2F ($4F), реализован как суммирующий счетчик и доступен в любой момент времени как для чтения, так и для записи. При записи в регистр TCNT1 во время работы таймера, счет будет продолжен по следующему за операцией записи импульсу тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNT1 находится нулевое значение. Управление таймером/счетчиком Т1 осуществляется с помощью регистра управления TCCR1 и регистра специальных функций SFIOR, расположенных по адресам $30 ($50) и $2С ($4С) соответственно. Формат этих регистров приведен на Рис. 7.16 и Рис. 7.17, а описание их битов — в Табл. 7.17 и Табл. 7.18 соответственно. Неиспользуемые биты регистров доступны только для чтения и содержат 0.
Рис. 7.16. Формат регистра TCCR1 модели ATtinyl5L Таблица 7.17. Биты регистра TCCR1 Бит Название Описание 7 CTC1 Сброс таймера/счетчика по совпадению. Если этот бит установлен в 1, то при совпадении содержимого счетного регистра и регистра сравнения OCR1А производится сброс таймера/счетчика в состояние $00 6 PWM1 Включение режима ШИМ. При записи 1 в этот бит таймер/счетчик переключается в режим ШИМ. Работа таймера/счетчика в режиме ШИМ будет рассмотрена в подразделе «Режим ШИМ» 5,4 COM1A1: COM 1 АО Режим работы блока сравнения. Эти биты определяют состояние вывода OC1A при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика 3...0 CS13...CS10 Управление тактовым сигналом. Эти биты определяют источник тактового сигнала микроконтроллера. Действие этих битов будет описано ниже - - - - - FOC1A PSR1 PSR0 Чтение (R)/3arwcb(W) R R R R R R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 0 ATtinyl 5L Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 7.17. Формат регистра SFIOR Таблица 7.18. Биты регистра SFIOR Бит Название Описание 7...3 - Зарезервированы, читаются как 0 2 FOCI А Принудительное изменение состояния вывода OC1A. При записи 1 в этот бит состояние вывода OC1A (РВ1) изменяется в соответствии с установками битов СОМ1А1:СОМ1А0. Прерывание при этом не генерируется и сброс таймера (при установленном бите CTC1 регистра TCCR1) не производится. При чтении бита всегда возвращается 0. В режиме ШИМ этот бит не работает 1 PSR1 Сброс предделителя таймера/счетчика Т1. При записи 1 в этот бит сбрасывается предделитель таймера. После выполнения этой операции бит автоматически сбрасывается, так что при чтении этого бита всегда возвращается 0 0 PSR0 Сброс предделителя таймера/счетчика ТО. При записи 1 в этот бит сбрасывается предделитель таймера. После выполнения этой операции бит автоматически сбрасывается, так что при чтении этого бита всегда возвращается 0
Выбор источника тактового сигнала Выбор источника тактового сигнала, а также запуск и остановка таймера/счетчика осуществляются с помощью битов CS13...CS10 регистра управления TCCR1. Соответствие между состоянием этих битов и режимом работы таймера/счетчика приведено в Табл. 7.19. Таблица 7.19. Выбор источника тактового сигнала CS13 CS12 CS11 CS10 Источник тактового сигнала 0 0 0 0 Таймер/счетчик остановлен 0 0 0 1 СКх 16(=РСК) 0 0 1 0 СКх8(= РСК/2) 0 0 1 1 СКх4(= РСК/4) 0 1 0 0 СКх2(= РСК/8) 0 1 0 1 СК (частота тактового сигнала микроконтроллера) 0 1 1 0 СК/2 0 1 1 1 СК/4 1 0 0 0 СК/8 1 0 0 1 СК/16 1 0 1 0 СК/32 1 0 1 1 СК/64 1 1 0 0 СК/128 1 1 0 1 СК/256 1 1 1 0 СК/512 1 1 1 1 СК/1024 Обратите внимание, что в первых строках таблицы указаны значения тактовой частоты таймера/счетчика, превышающие значение тактовой частоты микроконтроллера. При этих установках на вход предделителя таймера/счетчика поступает сигнал с выхода схемы ФАПЧ, частота которого в 16 раз выше частоты тактового сигнала встроенного RC-генератора (1.6 х 16 = 25.6 МГц). Режим таймера Принцип работы таймера/счетчика Т1 в данном режиме такой же, как и у таймера/счетчика ТО. В этом режиме счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала
clkxl осуществляется инкрементирование счетного регистра. При переходе через значение $FF возникает переполнение, и счет продолжается со значения $00. В том же такте сигнала clkT1, в котором обнуляется регистр TCNT1, флаг прерывания по переполнению TOV1 устанавливается в 1. При равенстве счетного регистра и регистра сравнения OCR1A устанавливается флаг прерывания OCF1A и, если бит OCIE1A регистра маски установлен в 1, генерируется прерывание. Наряду с установкой флага, при равенстве счетного регистра и регистра сравнения может изменяться состояние вывода ОС1А (РВ1), а также осуществляться сброс счетного регистра. Состояние вывода ОС1А определяется битами СОМ 1А1:СОМ1А0 регистра управления TCCR1 в соответствии с Табл. 7.20. Таблица 7.20. Управление выводом ОС1А в режиме таймера COM1A1 COM1A0 Описание 0 0 Таймер/счетчик Т1 отключен от вывода OC1A 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в 0 1 1 Вывод устанавливается в 1 Сброс счетного регистра при равенстве счетного регистра и регистра сравнения производится при установленном бите СТС1 регистра TCCR1. При необходимости состояние вывода ОС1А может быть изменено принудительно записью 1 в бит FOCI А регистра SFIOR. Прерывание при этом не генерируется и сброс таймера (при установленном бите СТС1) не производится. Режим ШИМ В этом режиме таймер/счетчик Т1 работает в качестве широтно-импульсного модулятора и используется для генерирования сигнала с программируемыми частотой и скважностью. Для перевода таймера/счетчика Т1 в режим ШИМ необходимо установить бит PWM1 регистра TCCR1 в 1. При работе таймера/счетчика Т1 в режиме ШИМ состояние счетного регистра изменяется от $00 до значения, находящегося в регистре OCR1B, после чего счетный регистр сбрасывается и цикл повторяется. При равенстве содержимого счетного регистра и регистра сравнения OCR1А состояние вывода ОС1А микроконтроллера изменяется в соответствии со значением битов СОМ1А1:СОМ1А0 регистра TCCR1 (см. Табл. 7.21 и
Рис. 7.18). Таким образом, содержимое регистра OCR1A определяет скважность ШИМ-сигнала, а содержимое регистра OCR1B — его частоту: г _ /ti /ос1а ! + QCR1B ' Таблица 7.21. Управление выводом ОС1А в режиме ШИМ СОМ1А1 СОМ1А0 Описание 0 0 Таймер/счетчик Т1 отключен от вывода ОС1А 0 1 Таймер/счетчик Т1 отключен от вывода ОС1А 1 0 Сбрасывается в 0 при равенстве регистров TCNT1 и OCR1A. Устанавливается в 1 при TCNT1 = $00 (неинвертированный ШИМ-сигнал) 1 1 Устанавливается в 1 при равенстве регистров TCNT1 и OCR1A. Сбрасывается в 0 при TCNT1 = $00 (инвертированный ШИМ-сигнал) Рис. 7.18. Формирование ШИМ-сигнала Соответственно, если содержимое регистра сравнения OCR1A равно $00 или содержимому регистра OCR1B, то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.22. Таблица 7.22. Устойчивые состояния вывода ОС1А (РВ1) СОМ1А1 СОМ1А0 Регистр OCR1A Состояние вывода ОС1А (РВ1) 1 0 $00 0 1 0 OCR1B 1 1 1 $00 1 1 1 OCR1B 0
В схеме ШИМ приняты меры, позволяющие избежать появления несимметричных выбросов (glitches). Для этого изменение содержимого регистра OCR1А происходит только в момент достижения счетчиком максимального значения. До того момента записываемое в регистр OCR1A число сохраняется в специальном временном регистре. И напоследок несколько слов о прерываниях. При работе таймера/счетчика Т1 в режиме ШИМ может генерироваться прерывание по переполнению счетного регистра таймера/счетчика, а также прерывание от схемы сравнения. Разрешение и обработка этих прерываний выполняется обычным образом. 7.6.2. Таймер/счетчик Т1 в моделях ATtiny231 Зх иАТ«пу24х/44х/84х Таймер/счетчик Т1 в моделях ATtiny231 Зх и ATtiny24x/44x/84x является 16-битным. Как и 8-битный таймер/счетчик ТО тех же моделей, он может использоваться для формирования временных интервалов, подсчета числа внешних событий и генерации сигналов с ШИМ (2 канала). Кроме того, таймер/счетчик Т1 может по внешнему сигналу сохранять свое текущее состояние в отдельном регистре ввода/вывода. Упрощенная структурная схема таймера/счетчика Т1 приведена на Рис. 7.19. В состав таймера/счетчика входят следующие регистры ввода/вывода: • 16-битный счетный регистр TCNT1; • 16-битный регистр захвата ICR1; • два 16-битных регистра сравнения — OCR1A и OCR1B; • три 8-битных регистра управления — TCCR1A, TCCR1B и TCCR1C. Каждый из 16-битных регистров физически размещается в двух регистрах ввода/вывода, названия которых получаются добавлением к названию регистра буквы «Н» (старший байт) и «L» (младший байт). Счетный регистр таймера/счетчика Tl TCNT1, например, размещается в регистрах TCNT1Н :TCNT 1L. Таймер/счетчик Т1 может генерировать прерывание при наступлении следующих событий: • переполнение счетного регистра; • равенство счетного регистра и регистра сравнения (по одному прерыванию на каждый блок сравнения); • сохранение счетного регистра в регистре захвата. Флаги всех прерываний находятся в регистрах флагов TIFR (ATtiny2313x) и TIFR1 (ATtiny24x/44x/84x), а разрешение/запрещение этих прерываний осуществляется установкой/сбросом соответствующих флагов регистров TIMSK/TIMSK1 (см. раздел 7.3).
Рис. 7.19. Структурная схема таймера/счетчика Т1 моделей ATtiny2313x и ATtiny24x/44x/84x Счетный регистр таймера/счетчика TCNT1 входит в состав основного блока модуля — блока реверсивного счетчика. В зависимости от режима работы модуля содержимое счетного регистра сбрасывается, инкременти- руется или декрементируется по каждому импульсу тактового сигнала таймера/счетчика clkT1. Независимо от того, присутствует тактовый сигнал или нет, регистр доступен в любой момент времени как для чтения, так и для записи. При этом любая операция записи в счетный регистр блокирует работу всех блоков сравнения на время одного периода тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNT1 находится нулевое значение. При некоторых изменениях состояния таймера/счетчика, определяемых режимом его работы, устанавливается бит
TOV1 в соответствующем регистре флагов. Разрешение прерывания осуществляется установкой в 1 бита TOIE1 соответствующего регистра маски. Регистры сравнения OCR1A/OCR1B входят в состав блоков сравнения. Во время работы таймера/счетчика производится непрерывное (в каждом такте) сравнение этих регистров с регистром TCNT1. В случае равенства содержимого регистра сравнения и счетного регистра в следующем такте устанавливается флаг OCF1A/OCF1B в соответствующем регистре флагов и генерируется прерывание (если оно разрешено). Также при наступлении этого события может изменяться состояние вывода ОС1А/ОС1В микроконтроллера. Чтобы таймер/счетчик мог управлять состоянием какого-либо из этих выводов, он должен быть сконфигурирован как выходной (соответствующий бит регистра DDRx должен быть установлен в 1). Как и в 8-битном таймере/счетчике ТО, при формировании ШИМ-сиг- налов используется двойная буферизация записи в регистры сравнения. Регистр захвата ICR1 входит в состав блока захвата, назначение которого — сохранение в определенный момент времени состояния таймера/счетчика в регистре захвата. Это действие может производиться либо по активному фронту сигнала на выводе ICP1 микроконтроллера, либо по сигналу от аналогового компаратора. Одновременно с записью в регистр захвата устанавливается флаг ICF1 соответствующего регистра флагов и генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой бита TICIE1 регистра маски в 1. Программно запись в регистр ICR1 возможна только в тех режимах, в которых регистр захвата определяет модуль счета таймера/счетчика (см. Табл. 7.27). Вывод ICP1 в этих режимах отключен от микроконтроллера, а функция захвата соответственно выключена. Упрощенная структурная схема блока захвата приведена на Рис. 7.20. Для управления схемой захвата используются два бита регистра TCCR1B — ICNC1 и ICES1. Бит ICNC1 управляет схемой подавления помех. Если этот бит сброшен в 0, схема подавления помех выключена, и захват производится по первому же активному фронту на выходе мультиплексора (Рис 7.20). Если же этот бит установлен в 1, то при появлении активного фронта производится 4 выборки с частотой, равной тактовой частоте микроконтроллера. Захват будет выполнен только в том случае, если все выборки имеют уровень, соответствующий активному фронту сигнала (1 — для нарастающего и 0 — для спадающего). Активный фронт сигнала, т.е. фронт, по которому будет выполнено сохранение содержимого счетного регистра в регистре захвата, определяется битом ICES1. Если этот бит сброшен в 0, то активным является спадающий фронт. Если бит установлен в 1, то активным является нарастающий
Рис. 7.20. Структурная схема блока захвата фронт. Для захвата по сигналу с вывода ICP1 этот вывод должен быть сконфигурирован как вход (бит регистра DDRx, соответствующий выводу, должен быть сброшен в 0). Если же он будет сконфигурирован как выход, захват можно будет осуществлять программно, управляя соответствующим битом порта. Следует понимать, что между изменением состояния входа блока захвата и копированием счетного регистра в регистр захвата таймера/счетчика проходит некоторое время. Эту задержку вносит каскад, состоящий из синхронизатора (на рисунке не показан) и детектора фронтов. Величина задержки составляет от 2.5 до 3.5 тактов. При включении схемы подавления помех задержка увеличивается еще на 4 такта. Как уже упоминалось, для управления таймером/счетчиком используются три регистра управления: TCCR1A, расположенный по адресу $2F ($4F), TCCR1B, расположенный по адресу $2Е ($4Е), и TCCR1C, расположенный по адресу $22 ($42). Формат этих регистров приведен на Рис. 7.21...7.23, а описание их битов — в Табл. 7.23...7.25 соответственно. Рис. 7.21. Формат регистра TCCR1A
Таблица 7.23. Биты регистра TCCR1A Бит Название Описание 7,6 СОМ1А1:СОМ1А0 Режим работы блока сравнениях1*. Эти биты определяют состояние вывода ОС 1 А/ОС 1В при наступлении события «Совпадение». Влияние содержимого этих битов на сосюяние вывода зависит от режима работы таймера/счетчика 5,4 СОМ1В1:СОМ1В0 3,2 - Зарезервированы, читаются как 0 1,0 WGM11:WGM10 Режим работы таймера/счетчика. Совместно с битами WGM13.WGM 12 регистра TCCR1B определяют режим работы таймера/счетчика Т1 (см. Табл. 7.27) ]) х = А или В. Рис. 7.22. Формат регистра TCCR1B Таблица 7.24. Биты регистра TCCR1B Бит Название Описание 7 ICNC1 Управление схемой подавления помех блока захвата. Если бит сброшен в 0, то схема подавления помех выключена (захват производится по первому активному фронту). Если бит установлен в 1, то схема подавления помех включена, и захват осуществляется только в случае 4 одинаковых выборок, соответствующих активному фронту сигнала 6 ICES1 Выбор активного фронта сигнала захвата. Если бит ICES/? сброшен в 0, то сохранение счетного регистра в регистре захвата осуществляется по спадающему фронту сигнала. Если бит установлен в 1, то сохранение счетного регистра в регистре захвата осуществляется по нарастающему фронту сигнала Одновременно с сохранением счетного регистра устанавливается также флаг прерывания ICF1 регистра флагов 5 - Не используется, читается как 0 4,3 WGM13:WGM12 Режим работы таймера/счетчика. Совместно с битами WGM 11 :WGM 10 регистра TCCR1А определяют режим работы таймера/счетчика Т1 (см. Табл. 7.27) 2...0 CS12...CS10 Управление тактовым сигналом. Эти биты определяют источник тактового сигнала микроконтроллера (см. подраздел «Управление тактовым сигналом»)
Рис. 7.23. Формат регистра TCCR 1С Таблица 7.25. Биты регистра TCCR1C Бит Название Описание 7 FOCI А Принудительное изменение состояния выводов ОС1А/ОС1В. При записи 1 в бит FOC1A/FOC1В состояние вывода ОС1А/ОС1В изменяется в соответствии с установками битов СОМ1А1:СОМ1А0 (СОМ1В1:СОМ1В0) регистра TCCR1A. Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. Эта функция доступна только в тех режимах, которые не используются для генерации сигнала с ШИМ. При чтении бита всегда возвращается 0 6 FOCI В 5...0 - Не используются, читаются как 0 Обращение к 16-битным регистрам Каждый 16-битный регистр таймеров/счетчиков физически размещается в двух 8-битных регистрах. Соответственно, для обращения к ним требуется выполнить по две операции чтения или записи. Для того чтобы запись или чтение обоих байтов содержимого 16-битного регистра происходило одновременно, в составе каждого таймера/счетчика имеется специальный 8-битный регистр TEMP, предназначенный для хранения старшего байта значения (этот регистр используется только процессором и программно не доступен). Для выполнения цикла записи 16-битного регистра первым должен быть загружен старший байт значения, который помещается в регистр TEMP. При последующей записи младшего байта он объединяется с содержимым регистра TEMP, и оба байта одновременно (в одном и том же такте) записываются в 16-битный регистр. Если требуется изменить несколько 16-битных регистров таймера/счетчика, а старшие байты всех записываемых значений одинаковы, то загрузку старшего байта достаточно выполнить только один раз. Для выполнения цикла чтения 16-битного регистра первым должен быть прочитан младший байт. При его чтении содержимое старшего байта помещается в регистр TEMP. При последующем чтении старшего байта возвращается значение, сохраненное в регистре TEMP. Исключение
составляют только регистры сравнения OCR1A/OCR1B, при чтении которых регистр TEMP не задействуется. При выполнении цикла обращения к 16-битному регистру таймера/счетчика прерывания должны быть запрещены. В противном случае, если прерывание произойдет между двумя командами обращения к 16-битному регистру, а в подпрограмме обработки этого прерывания тоже будет произведено обращение к какому-либо из 16-битных регистров того же таймера/счетчика, содержимое регистра TEMP будет изменено. Как следствие, результат обращения к 16-битному регистру в основной программе будет неверным. Управление тактовым сигналом Формирование тактового сигнала 16-битного таймера/счетчика clkT1 осуществляется блоком предделителя, который был рассмотрен в разделе 7.4 этой главы. В качестве тактового сигнала clkTi таймера/счетчика Т1 может использоваться (см. Рис. 7.6, а): • системный тактовый сигнал (clkT1 = clkj/0); • масштабированный системный тактовый сигнал (clkT1 = с1к1/о/Л0; • внешний сигнал, поступающий на вход Т1 микроконтроллера (clkT1 = clkEXT). Выбор источника тактового сигнала, а также запуск и остановка таймеров/счетчиков осуществляются с помощью битов CS12...CS10 регистра управления TCCR1B согласно Табл. 7.26. Таблица 7.26. Выбор источника тактового сигнала таймера/счетчика Т1 CS12 CS11 CS10 Источник тактового сигнала 0 0 0 Таймер/счетчикИ остановлен 0 0 1 clkI/0 0 1 0 clkI/0/8 0 1 1 clkI/0/64 1 0 0 clkl/0/256 1 0 1 clk,/o/1024 1 1 0 Вывод Tl, счет осуществляется по спадающему фронту импульсов 1 1 1 Вывод Т1, счет осуществляется по нарастающему фронту импульсов
Режимы работы Режим работы таймера/счетчика Т1 определяется состоянием битов WGM13:WGM12 регистра TCCR1B совместно с битами WGM11:WGM10 регистра TCCR1A. Зависимость режима работы таймера/счетчика от состояния этих битов показана в Табл. 7.27. Таблица 7.27. Режимы работы таймера/счетчика Т1 Номер режима WGM13 WGM12 WGM11 WGM10 Режим работы таймера/счетчика Т1 Модуль счета (TOP) Обновление регистров OCRIjc Момент установки флага TOV1 0 0 0 0 0 Normal $FFFF Немедленно $FFFF 1 0 0 0 1 Phase correct PWM, 8-битный $00FF При TOP $0000 2 0 0 1 0 Phase correct PWM, 9-битный $01FF При TOP $0000 3 0 0 1 1 Phase correct PWM, 10-битный $03FF При TOP $0000 4 0 1 0 0 СТС (сброс при совпадении) OCR1A Немедленно $FFFF 5 0 1 0 1 Fast PWM, 8-битный $00FF При TOP При TOP 6 0 1 1 0 Fast PWM, 9-битный $01FF При TOP При ТОР 7 0 1 1 1 Fast PWM, 10-битный $03FF При TOP При ТОР 8 1 0 0 0 Phase and Frequency Correct PWM ICR1 $0000 $0000 9 0 0 1 Phase and Frequency Correct PWM OCR1A $0000 $0000 10 1 0 1 0 Phase correct PWM ICR1 При TOP $0000 11 1 0 1 1 Phase correct PWM OCR1A При TOP $0000 12 1 0 0 СТС (сброс при совпадении) ICR1 Немедленно $FFFF 13 1 1 0 1 Зарезервировано - - - 14 1 1 1 0 Fast PWM ICR1 При ТОР При ТОР 15 1 1 1 1 Fast PWM OCR1A При ТОР При ТОР Режим Normal Это наиболее простой режим работы 16-битного таймера/счетчика. В данном режиме счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала clkT1 инкременти- руется счетный регистр. При переходе через значение $FFFF возникает
переполнение, и счет продолжается со значения $0000. В том же такте сигнала с1ктЬ в котором обнуляется регистр TCNT1, флаг прерывания по переполнению TOV1 устанавливается в 1. Блоки сравнения обоих таймеров в этом режиме могут использоваться как для генерации прерываний, так и для формирования сигналов. Состояние выходов ОС1А/ОС1В каждого из блоков сравнения определяется содержимым битов СОМ1А1:СОМ1А0 (СОМ 1В1:СОМ 1В0) регистра TCCR1A, как показано в Табл. 7.28. Таблица 7.28. Управление выводами ОС1А/ОС1В в режиме Normal COM1A1 (COM1B1) COM1A0 (COM1B0) Описание 0 0 Таймер/счетчик Т1 отключен от вывода OC1A (OC1B) 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в 0 1 1 Вывод устанавливается в 1 Состояние выхода любого блока сравнения также может быть изменено принудительно, записью 1 в бит FOC1A/FOC1B регистра TCCR1C. Прерывание при этом не генерируется. Режим СТС (сброс при совпадении) В этом режиме счетный регистр тоже функционирует как обычный суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала clkT1. Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяются либо регистром сравнения OCR1A (WGM13.-0 = 0100), либо регистром захвата ICR1 (WGM13:0 = 1100). После достижения максимального значения счет продолжается со значения $0000. Как и в режиме Normal, флаг прерывания TOV1 устанавливается при изменении значения счетного регистра с $FFFF на $0000. Временные диаграммы для этого режима работы таймера/счетчика приведены на Рис. 7.24. При достижении счетчиком максимального значения устанавливается флаг: • OCF1A, если модуль счета определяется регистром сравнения OCR1A(WGM13:0 = 0100); • ICF1, если модуль счета определяется регистром захвата ICR1 (WGM13:0= 1100).
Рис. 7.24. Временные диаграммы для режима СТС Одновременно с установкой флага может изменяться состояние выводов ОС1А/ОС1В микроконтроллера. Состояние каждого из выводов определяется состоянием битов СОМ1А1:СОМ1А0 (СОМ1В1:СОМ1В0) регистра TCCR1 А, как указано в Табл. 7.29. Таблица 7.29. Управление выводами ОС1А/ОС1В в режиме СТС СОМ1А1 (СОМ1В1) СОМ1А0 (СОМ1В0) Описание 0 0 Таймер/счетчик Т1 отключен от вывода ОС1А (ОС1В) 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в 0 1 1 Вывод устанавливается в 1 Для генерации сигнала заданной частоты необходимо записать в биты СОМ1А1:СОМ1А0 значение 01 (переключение состояния вывода). Частота генерируемого сигнала будет определяться выражением f - /clk_i/0 /ocia 2-#-(1 + ОСК1А)* где N— коэффициент деления предделителя (см. Табл. 7.26). Как и в режиме Normal, состояние выводов ОС1А/ОС1В при необходимости может быть изменено принудительно, записью 1 в бит FOC1A/FOC1B регистра TCCR1C. Прерывание при этом не генерируется и сброс счетного регистра не производится.
Режим Fast PWM Режим Fast PWM («Быстродействующий ШИМ») позволяет генерировать высокочастотный сигнал с широтно-импульсной модуляцией. Этот режим практически полностью идентичен одноименному режиму 8-битных таймеров/счетчиков. Отличие заключается только в том, что 16-битные таймеры/счетчики позволяют генерировать ШИМ-сигнал различной разрядности. Счетный регистр в этом режиме функционирует как суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала clkT1. Состояние счетчика изменяется от $0000 до максимального значения, после чего счетный регистр сбрасывается и цикл повторяется. В зависимости от установок битов WGM13:10 максимальное значение счетчика (разрешение ШИМ-сигнала) либо является фиксированным значением, либо определяется содержимым определенных регистров таймера/счетчика (см. Табл. 7.30). При этом разрешающая способность определяется выражением я _ 1о8(7Ш>+1) " log(2) ' где ТОР — модуль счета. Таблица 7.30. Разрешающая способность модулятора в режиме Fast PWM Номер режима WGM13 WGM12 WGM11 WGM10 Разрешающая способность Модуль счета (ТОР) 5 0 1 0 1 8 бит $00FF 6 0 1 1 0 9 бит $01FF 7 0 1 1 1 10 бит $03FF 14 1 1 1 0 Переменная (2... 16) ICR1A($0003...$FFFF) 15 1 1 1 1 Переменная (2... 16) OCR1A($0003...$FFFF) При работе с какими-либо фиксированными значениями модуля счета для задания модуля рекомендуется использовать регистр захвата. При этом регистр OCR1A может использоваться для формирования ШИМ-сигнала. Если же в процессе формирования ШИМ-сигнала его частота меняется очень часто, то для задания модуля счета рекомендуется использовать регистр сравнения. В этом случае, за счет буферизации записи в регистры сравнения, исключается появление несимметричных импульсов сигнала на выходе модулятора.
При достижении счетчиком максимального значения устанавливается флаг прерывания TOV1 соответствующего регистра флагов. Одновременно с ним устанавливается флаг ICF1 (режим 14) либо OCF1A (режим 15). При равенстве содержимого счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг прерывания OCF1A/OCF1B. Одновременно изменяется состояние выхода блока сравнения ОС1А/ОС1В. Состояние этих выходов определяется содержимым битов СОМ 1 Al :СОМ 1 АО (СОМ 1В1 :СОМ 1 ВО) регистра TCCR1А (Табл. 7.31). Временные диаграммы для случая, когда модуль счета определяется содержимым регистра ICR1A или OCR1A, показаны на Рис. 7.25. Таблица 7.31, Управление выводами ОС1А/ОС1В в режиме Fast PWM СОМ1А1 (СОМ1В1) COM1A0 (COM1B0) Описание 0 0 Таймер/счетчикTl отключен от вывода ОС1А (ОСIB) 0 1 OCIA: WGM13 = 0 — таймер/счетчик Tl отключен от вывода ОС1А; WGM13 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNT1 и OCR1A. ОС1В: Зарезервировано 1 0 Сбрасывается в 0 при равенстве счетного регистра и соответствующего регистра сравнения. Устанавливается в 1 при достижении счетчиком максимального значения (неинвертированный ШИМ-сигнал) 1 1 Устанавливается в 1 при равенстве счетного регистра и соответствующего регистра сравнения. Сбрасывается в 0 при достижении счетчиком максимального значения (инвертированный ШИМ-сигнал) Если содержимое регистра сравнения равно модулю счета, то выход соответствующего блока сравнения переключится в устойчивое состояние, определяемое установками битов СОМ1А1:СОМ1А0 (СОМ1В1:СОМ1В0) (см. Рис. 7.25). Частота генерируемого в этом режиме сигнала определяется выражением г _ /clk_I/Q /001* ~ N.T0P> где N— коэффициент деления предделителя (см. Табл. 7.26).
Рис. 7.25. Формирование ШИМ-сигнала в режиме Fast PWM При необходимости, блок сравнения А в этом режиме может также использоваться для генерации сигнала меандра. Для этого необходимо записать в биты СОМ1А1:СОМ1А0 значение 01, задающее переключение состояния вывода ОС1А при наступлении события «Совпадение». Режим Phase Correct PWM Режим Phase Correct PWM («ШИМ с точной фазой»), как и режим Fast PWM, предназначен для генерации сигналов с широтно-импульсной модуляцией. Однако в этом режиме счетный регистр функционирует как реверсивный счетчик, состояние которого сначала изменяется от $0000 до максимального значения, а затем обратно до $0000. Соответственно, максимальная частота сигнала в этом режиме в два раза меньше максимальной частоты сигнала в режиме Fast PWM. В зависимости от установок битов WGM13:10 максимальное значение счетчика (разрешение ШИМ-сигнала) либо является фиксированным значением, либо определяется содержимым определенных регистров таймера/счетчика (Табл. 7.32). При этом разрешеющая способность определяется выражением я _ \og(TOP+l) " log(2) ' где ТОР — модуль счета.
Таблица 7.32. Разрешающая способность модулятора в режиме Phase Correct PWM Номер режима WGM13 WGM12 WGM11 WGM10 Разрешающая способность Модуль счета (ТОР) 1 0 0 0 1 8 бит $00FF 2 0 0 1 0 9 бит $01FF 3 0 0 1 1 10 бит $03FF 10 1 0 1 0 Переменная (2... 16) ICR1A ($0003...$FFFF) 11 1 0 1 1 Переменная (2... 16) OCR1A ($0003...$FFFF) Как и в режиме Fast PWM, при работе с какими-либо фиксированными значениями модуля счета для задания модуля рекомендуется использовать регистр захвата. При этом регистр OCR1A может использоваться для формирования ШИМ-сигнала. Если же в процессе формирования ШИМ-сигнала его частота меняется очень часто, то для задания модуля счета рекомендуется использовать регистр сравнения. При достижении счетчиком максимального значения происходит смена направления счета, но счетчик остается в этом состоянии в течение одного периода сигнала clkxl. В этом же такте производится обновление содержимого регистра сравнения. Если модуль счета определяется регистром сравнения ICR1A (режим 10) или OCR1A (режим 11), то одновременно с обновлением регистра сравнения устанавливается соответственно флаг ICF1 либо OCF1A. При достижении счетчиком минимального значения ($0000) также происходит смена направления счета и одновременно устанавливается флаг прерывания TOV1 соответствующего регистра флагов. При равенстве содержимого счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг OCF1A/OCF1 В. Одновременно изменяется состояние выхода блока сравнения ОС1А/ОС1В. Как обычно, состояние вывода определяется содержимым битов СОМ1А1:СОМ1А0 (СОМ1В1:СОМ1В0) регистра TCCR1A (Табл. 7.33). Временные диаграммы для случая, когда модуль счета определяется содержимым регистра ICR1A или OCR1A, показаны на Рис. 7.26. Следует понимать, что при изменении модуля счета во время работы таймера/счетчика на выходе блоков сравнения могут появиться несимметричные (относительно середины периода модуляции) импульсы. Поскольку обновление содержимого регистра сравнения происходит в момент достижения счетчиком максимального значения, период
Рис. 7.26. Формирование ШИМ-сигнала в режиме Phase Correct PWM ШИМ-сигнала равен времени между этими моментами. При этом время обратного счета определяется предыдущим значением модуля счета, а время прямого счета — новым значением. Если эти значения различны, то время прямого и время обратного счета также отличаются. Результатом этого и являются несимметричные импульсы на выходе блоков сравнения, как показано на Рис. 7.26 (3-й период сигнала). Таблица 7.33. Управление выводами ОС1А/ОС1В в режиме Phase Correct PWM COM1A1 (COM1B1) COM1A0 (COM1B0) Описание 0 0 Таймер/счетчик Tl отключен от вывода OC1A (OC1B) 0 1 OC1A: WGM 13 = 0 — таймер/счетчик Tl отключен от вывода OC1A; WGM 13 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNT1 и OCR1A. OC1B: Зарезервировано 1 0 Сбрасывается в 0 при прямом счете и устанавливается в 1 при обратном счете (неинвертированный ШИМ-сигнал) 1 1 Устанавливается в 1 при прямом счете и сбрасывается в 0 при обратном счете (инвертированный ШИМ-сигнал)
Поэтому при частом изменении модуля счета во время работы таймера/счетчика рекомендуется использовать режим Phase and Frequency Correct PWM, описанный в следующем подразделе. Если же используется постоянное значение модуля счета, то между этими двумя режимами нет никакой разницы. Если значение, находящееся в регистре сравнения, равно $0000 или модулю счета (ТОР), то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.34. Таблица 7.34. Устойчивые состояния выхода схемы сравнения СОМ1А1 (СОМ1В1) СОМ1А0 (СОМ1В0) Регистр OCRIA(OCRIB) Состояние вывода ОС1А (ОС1В) 1 0 $0000 0 1 0 ТОР 1 1 1 $0000 1 1 1 ТОР 0 Частота генерируемого сигнала определяется выражением f - ^clk_I/Q /оси 2-N-TOP9 где N — коэффициент деления предделителя, задаваемый согласно Табл. 7.26. Режим Phase and Frequency Correct PWM Режим Phase and Frequency Correct PWM («ШИМ с точной фазой и частотой») очень похож на режим Phase Correct PWM. Единственная принципиальная разница между ними — момент обновления содержимого регистра сравнения. Максимальное значение счетчика (разрешение ШИМ-сигнала) в этом режиме может определяться только регистрами ICR1A или OCR1A таймера/счетчика, как показано в Табл. 7.35. Разрешающая способность модулятора в этом режиме определяется выражением я _ log(7Pf+1) " log(2) ' где ТОР — модуль счета.
Таблица 7.35. Разрешающая способность модулятора в режиме Phase and Frequency Correct PWM Номер режима WGM13 WGM 12 WGM11 WGM10 Разрешающая способность Модуль счета (ТОР) 8 1 0 1 0 Переменная (2... 16) ICR1A($0003...$FFFF) 9 1 0 1 1 Переменная (2... 16) OCR1A($0003...$FFFF) Как и в остальных режимах, при работе с какими-либо фиксированными значениями модуля счета для задания модуля рекомендуется использовать регистр захвата. При этом регистр OCR1A может использоваться для формирования ШИМ-сигнала. Если же в процессе формирования ШИМ-сигнала его частота меняется очень часто, то для задания модуля счета рекомендуется использовать регистр сравнения. При достижении счетчиком максимального значения происходит смена направления счета, но счетчик остается в этом состоянии в течение одного периода сигнала clkxl. В этом же такте устанавливается флаг ICF1 либо OCF1A (зависит от того, какой из регистров используется для задания модуля счета). При достижении счетчиком минимального значения ($0000) направление счета опять изменяется. При этом устанавливается флаг прерывания TOV1 и производится обновление содержимого регистра сравнения. При равенстве содержимого счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг OCF1A/OCF1B соответствующего регистра. Одновременно изменяется состояние выхода блока сравнения ОС1А/ОС1В. Как обычно, состояние вывода определяется содержимым битов СОМ1А1:СОМ1А0 (СОМ1В1:СОМ1В0) регистра TCCR1А (Табл. 7.36 и Рис. 7.27). Таблица 7.36. Управление выводами ОС1А/ОС1В в режиме Phase and Frequency Correct PWM COM1A1 (COM1B1) COM1A0 (COM1B0) Описание 0 0 Таймер/счетчик Tl отключен от вывода OC1A (ОСIB) 0 1 OC1A: WGM 13 = 0 — таймер/счетчик Tl отключен от вывода OC1A; WGM 13 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNT1 и OCR1 А. OC1B: Зарезервировано 1 0 Сбрасывается в 0 при прямом счете и устанавливается в 1 при обратном счете (неинвертированный ШИМ-сигнал) 1 1 Устанавливается в 1 при прямом счете и сбрасывается в 0 при обратном счете (инвертированный ШИМ-сигнал)
Рис. 7.27. Формирование ШИМ-сигнала в режиме Phase and Frequency Correct PWM Если сравнить Рис. 7.26 и 7.27, то можно увидеть, что в режиме Phase and Frequency Correct PWM каждый период сигнала является полностью симметричным. Это связано с тем, что обновление содержимого регистра сравнения происходит в момент достижения счетчиком минимального значения. Поэтому время прямого счета всегда равно времени обратного счета, выходные импульсы симметричны и соответственно частота генерируемого сигнала остается постоянной. Частота генерируемого сигнала определяется выражением /с ОС\х clk_I/Q 2-N- ТОР' где N— коэффициент деления предделителя (см. Табл. 7.26). Если значение, находящееся в регистре сравнения, равно $0000 или модулю счета (ТОР), то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.37.
Таблица 7.37. Устойчивые состояния выхода схемы сравнения COM1A1 (COM1B1) COM1A0 (COM1B0) Регистр OCRIA(OCRIB) Состояние вывода OC1A (OC1B) 1 0 $0000 0 1 0 ТОР 1 1 1 $0000 1 1 1 ТОР 0 7.6.3. Таймер/счетчик Т1 в моделях ATtiny25x/45x/85x и ATtiny26x Структурная схема 8-битного таймера/счетчика Т1 моделей ATtiny25x/45x/85x и ATtiny26x приведена на Рис. 7.28. Из рисунка видно, что возможность счета внешних импульсов у таймера/счетчика Т1 этих моделей отсутствует. Однако, как и таймер/счетчик ТО, он может использоваться в качестве двухканального генератора ШИМ-сигнала. Обратите внимание, что блок генерации времени запаздывания (Dead Time Generation — DTG) имеется только в моделях ATtiny25x/45x/85x. В состав таймера/счетчика входят следующие регистры ввода/вывода: • счетный регистр TCNT1; • три регистра сравнения — OCR1A, OCR1B и OCR1C; • два регистра управления — TCCR1A/TCCR1B в модели ATtny26x и TCCR1/GTCCR в моделях ATtiny25x/45x/85x. Все флаги состояния таймера/счетчика (переполнения и совпадения) находятся в регистре флагов прерываний от таймеров TIFR, а разрешение и запрещение прерываний от таймера осуществляется установкой/сбросом соответствующих флагов регистра TIMSK (см. раздел 7.3). Адреса регистров таймера/счетчика Т1 рассматриваемых моделей приведены в Табл. 7.38. Таблица 7.38. Адреса регистров таймера/счетчика Т1 Регистр ATtiny25x/45x/85x ATtiny26x Назначение TCCR1 $30($50) - Регистр управления GTCCR $2С ($4С) - TCCR1A - $30($50) TCCR1B - $2F($4F) TCNT1 $2F($4F) $2E($4E) Счетный регистр OCR1A $2Е ($4Е) $2D($4D) Регистр сравнения OCR1B $2В ($4В) $2C ($4C) OCR1C $2D ($4D) $2B ($4B)
Рис. 7.28. Структурная схема таймера/счетчика Т1
7.6. Таймер/счетчик Tl ■ 273 к-ск k-PCK моделей ATtiny25x/45x/85x (а) и ATtiny26x (б)
Счетный регистр таймера/счетчика TCNT1 реализован как суммирующий счетчик и доступен в любой момент времени как для чтения, так и для записи. При записи в регистр TCNT1 во время работы таймера счет будет продолжен по следующему за операцией записи импульсу тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNT1 находится нулевое значение. Управление таймером/счетчиком Т1 осуществляется (в зависимости от модели) либо с помощью регистра TCCR1 и регистра GTCCR, либо с помощью регистров TCCR1A/TCCR1B (Табл. 7.38). Формат указанных регистров приведен на Рис. 7.29 и Рис. 7.30, а описание их битов — в Табл. 7.39 и Табл. 7.40 соответственно. Неиспользуемые биты регистров доступны только для чтения и содержат 0. Рис. 7.29. Формат регистра TCCR1 (а) и GTCCR (б) моделей ATtiny25x/45x/85x Таблица 7.39. Биты регистров TCCR1 и GTCCR моделей ATtiny25x/45x/85x Регистр Бит Название Описание 7 СТС1 Сброс таймера/счетчика по совпадению. Если этот бит установлен в 1, то при совпадении содержимого счетного регистра и регистра сравнения OCR1C производится сброс таймера/счетчика в состояние $00 TCCR1 6 PWM1A Включение А-канала ШИМ. При записи 1 в этот бит первый блок сравнения таймера/счетчика переключается в режим ШИМ. Работа таймера/счетчика в режиме ШИМ будет рассмотрена в подразделе «Режим ШИМ» 5,4 СОМ1А1: СОМ 1 АО Режим работы блока сравнения А. Эти биты определяют состояние вывода ОС1А при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика
(продолжение) Регистр Бит Название Описание TCCR1 3...0 CS13...CS10 Управление тактовым сигналом. Эти биты определяют источник тактового сигнала микроконтроллера. Действие этих битов будет описано ниже 6 PWM1B Включение В-канала ШИМ. При записи 1 в этот бит второй блок сравнения таймера/счетчика переключается в режим ШИМ. Работа таймера/счетчика в режиме ШИМ будет рассмотрена в подразделе «Режим ШИМ» 5,4 С0М1В1: СОМ 1 во Режим работы блока сравнения В. Эти биты определяют состояние вывода ОС 1В при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика GTCCR 3 FOCI В Принудительное изменение состояния вывода OC1B. При записи 1 в этот бит состояние вывода OC1В изменяется в соответствии с установками битов COM 1В1 :СОМ 1 ВО. Прерывание при этом не генерируется. При установленном бите PWM1B (в режиме ШИМ) бит FOCI В должен быть сброшен в 0. При чтении бита всегда возвращается 0 2 FOCI А Принудительное изменение состояния вывода OC1A. При записи 1 в этот бит состояние вывода OC1A изменяется в соответствии с установками битов СОМ1А1:СОМ1А0. Прерывание при этом не генерируется. При установленном бите PWM1A (в режиме ШИМ) бит FOC1A должен быть сброшен в 0. При чтении бита всегда возвращается 0 1 PSR1 Сброс предделителя таймера/счетчика Т1. При записи 1 в этот бит сбрасывается предделитель таймера. После выполнения этой операции бит автоматически сбрасывается, так что при чтении этого бита всегда возвращается 0 7 6 5 4 3 см 1 0 COM1A1 СОМ 1 АО СОМ1В1 СОМ1 ВО FOC1A FOC1B PWM1A PWM1B Чтение (R)/3aniicb (W) Начальное значение R/W 0 R/W 0 R/W 0 R/W 0 г) R/W 0 R/W 0 R/W 0 R/W 0 7 6 5 4 3 2 1 0 CTC1 PSR1 - - CS13 CS12 CS11 CS10 Чтение (R)/3anncb (W) Начальное значение R/W 0 R/W 0 R 0 R 0 R/W 0 R/W 0 R/W 0 R/W 0 Рис. 7.30. Формат регистра TCCR1A (а) и TCCR1B (б) модели ATtiny26x
Таблица 7.40. Биты регистров TCCR1A и TCCR1B модели ATtiny26x Регистр Бит Название Описание 7,6 СОМ1А1: СОМ 1 АО Режим работы блока сравнения А. Эти биты определяют состояние вывода ОС1А при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика 5,4 СОМ1В1: СОМ 1 ВО Режим работы блока сравнения В. Эти биты определяют состояние вывода ОС1В при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика TCCR1A 3 FOCI А Принудительное изменение состояния вывода ОС1А. При записи 1 в этот бит состояние вывода ОС1А изменяется в соответствии с установками битов СОМ1А1:СОМ1А0. Прерывание при этом не генерируется. При установленном бите PWM 1А (в режиме ШИМ) бит FOCI А должен быть сброшен в 0. При чтении бита всегда возвращается 0 2 FOCI В Принудительное изменение состояния вывода ОС1В. При записи 1 в этот бит состояние вывода ОС1В изменяется в соответствии с установками битов СОМ1В1:СОМ1В0. Прерывание при этом не генерируется. При установленном бите PWM1B (в режиме ШИМ) бит FOCI В должен быть сброшен в 0. При чтении бита всегда возвращается 0 1 PWM1A Включение А-канала ШИМ. При записи 1 в этот бит первый блок сравнения таймера/счетчика переключается в режим ШИМ. Работа таймера/счетчика в режиме ШИМ будет рассмотрена в подразделе «Режим ШИМ» 0 PWM1B Включение В-канала ШИМ. При записи 1 в этот бит второй блок сравнения таймера/счетчика переключается в режим ШИМ. Работа таймера/счетчика в режиме ШИМ будет рассмотрена в подразделе «Режим ШИМ» 7 СТС1 Сброс таймера/счетчика по совпадению. Если этот бит установлен в 1, то при совпадении содержимого счетного регистра и регистра сравнения OCR1C производится сброс таймера/счетчика в состояние $00 TCCR1B 6 PSR1 Сброс предделителя таймера/счетчика Т1. При записи 1 в этот бит сбрасывается предделитель таймера. После выполнения этой операции бит автоматически сбрасывается, так что при чтении этого бита всегда возвращается 0 5,4 - Зарезервированы, читаются как 0 3...0 CS13...CS10 Управление тактовым сигналом. Эти биты определяют источник тактового сигнала микроконтроллера. Действие этих битов будет описано ниже
Выбор источника тактового сигнала Выбор источника тактового сигнала, а также запуск и остановка таймера/счетчика осуществляются с помощью битов CS13...CS10 регистра управления TCCR1 (ATtiny25x/45x/85x) и TCCR1B (ATtiny26x). Соответствие между состоянием этих битов и частотой тактового сигнала таймера/счетчика приведено в Табл. 7.41. Таблица 7.41. Выбор источника тактового сигнала CS13 CS12 CS11 CS10 Источник тактового сигнала Асинхронный режим Синхронный режим 0 0 0 0 Таймер/счетчик остановлен Таймер/счетчик остановлен 0 0 0 1 PCK СК 0 0 1 0 PCK/2 CK/2 0 0 1 1 PCK/4 CK/4 0 1 0 0 PCK/8 CK/8 0 1 0 1 PCK/16 CK/16 0 1 1 0 PCK/32 CK/32 0 1 1 1 PCK/64 CK/64 1 0 0 0 PCK/128 CK/128 1 0 0 1 PCK/256 CK/256 1 0 1 0 PCK/512 CK/512 1 0 1 1 PCK/1024 CK/1024 1 1 0 0 PCK/2048 CK/2048 1 1 0 1 PCK/4096 CK/4096 1 1 1 0 PCK/8192 CK/8192 1 1 1 1 PCK/16 384 CK/16 384 Из таблицы видно, что таймер счетчик Т1 рассматриваемых моделей может работать в двух режимах — синхронном и асинхронном. В первом режиме на вход предделителя таймера/счетчика поступает сигнал от системного тактового генератора, а во втором — сигнал с выхода схемы ФАПЧ (см. также Рис 7.6). Для управления схемой ФАПЧ в таймере/счетчике Т1 предназначен регистр PLLCSR, расположенный по адресу $27 ($47) в моделях ATtiny25x/45x/85x и по адресу $29 ($49) в моделях ATtiny26x. Формат этого регистра приведен на Рис. 7.31, а описание его битов — в Табл. 7.42.
Рис. 7.31. Формат регистра PLLCSR моделей ATtiny25x/45x/85x и ATtiny26x Таблица 7.42. Биты регистра PLLCSR Бит Название Описание 7 LSM!) Низкоскоростной режим. Этот бит определяет частоту сигнала PC К. По умолчанию используется высокоскоростной режим и/РСК = 64 МГц. При записи 1 в бит LSM частота уменьшается в два раза и становится равной 32 МГц. Помимо всего прочего, этот бит должен быть установлен, если напряжение питания микроконтроллера меньше 2.7 В. При изменении бита LSM таймер/счетчик Т1 рекомендуется останавливать 2 РСКЕ Разрешение сигнала РСК. Этот бит определяет источник тактового сигнала таймера/счетчика Т1. Если бит РСКЕ установлен в 1, таймер/счетчик работает в асинхронном режиме, и на вход предделителя поступает сигнал с выхода схемы ФАПЧ. Если же этот бит сброшен, то таймер/счетчик тактируется от системного тактового сигнала. Бит РСКЕ может быть установлен только при установленном бите PLLE. Более того, для обеспечения надежной работы бит РСКЕ рекомендуется устанавливать только при захвате частоты ФАПЧ, т.е. при установленном бите PLOCK 1 PLLE Разрешение работы ФАПЧ. При установке этого бита в 1 начинает работать схема ФАПЧ. При использовании сигнала схемы ФАПЧ в качестве тактового сигнала микроконтроллера этот бит будет всегда установлен в 1 0 PLOCK Захват частоты ФАПЧ. Установка этого бита в 1 означает, что схема ФАПЧ вышла на рабочий режим и, соответственно, можно переключать таймер/счетчик Т1 в асинхронный режим. Захват частоты происходит в течение примерно 100 мкс после включения схемы ФАПЧ 1) Только в моделях ATtiny25x/45x/85x. Таким образом, алгоритм переключения таймера/счетчика Т1 в асинхронный режим выглядит следующим образом: 1. Разрешить работу схемы ФАПЧ (установить бит PLLE регистра PLLCSR). 2. Дождаться установки бита PLOCK и установить бит РСКЕ.
В моделях ATtiny25x/45x/85x, кроме того, предусмотрен специальный режим совместимости с ATtinyl5L. Этот режим включается при записи в конфигурационные ячейки CKSEL значения 0011. В данном режиме предделитель таймера/счетчика Т1 работает так же, как и в ATtinyl5L, а частота выходного сигнала ФАПЧ равна 25.6 МГц (для получения частоты системного тактового сигнала 1.6 МГц в биты CLKPS3...0 регистра CLKPR необходимо записать 0010). Зависимость между состоянием битов CS13...CS10 и тактовой частотой таймера/счетчика определяется согласно Табл. 7.19. Схема ФАПЧ в этом режиме постоянно включена, т.е. биты РСКЕ и PLLE автоматически устанавливаются в 1. Бит LSM не используется и равен 0. Режим таймера В этом режиме счетный регистр таймера/счетчика Т1 функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала clkT1 осуществляется его инкрементирование. При переходе через значение $FF возникает переполнение, и счет продолжается со значения $00. В том же такте сигнала clkT1, в котором обнуляется регистр TCNT1, флаг прерывания по переполнению TOV1 устанавливается в 1. При равенстве счетного регистра и регистра сравнения OCR1A/OCR1B устанавливается флаг соответствующего прерывания OCF1A/OCF1B и, если бит OCIE1A/OCIE1B регистра маски установлен в 1, генерируется прерывание. Наряду с установкой флага, при равенстве счетного регистра и регистра сравнения может изменяться состояние выводов ОС1А/ОС1В. Состояние выводов ОС1А/ОС1В определяется битами СОМ1А1:СОМ1А0 (СОМ1В1:СОМ1В0) регистра управления TCCR1 в соответствии с Табл. 7.43. Таблица 7.43. Управление выводом ОС1А в режиме таймера COM1A1 (COM1B1) COM1A0 (COM1B0) Описание 0 0 Таймер/счетчик Т1 отключен от вывода OC1A (OC1B) 0 1 Состояние вывода меняется на противоположное 1 0 Вывод сбрасывается в 0 1 1 Вывод устанавливается в 1 Третий регистр сравнения (OCR 1С) в режиме таймера используется для хранения максимального значения таймера/счетчика. Если бит СТС1 регистра TCCR1 установлен в 1, то при равенстве регистра сравнения OCR1C и счетного регистра последний сбрасывается в $00.
При необходимости состояние выводов ОС1А/ОС1В может быть изменено принудительно записью 1 в бит FOC1A/FOC1B регистра GTCCR. Прерывание при этом не генерируется. В режиме совместимости с ATtinyl5L в моделях ATtiny25x/45x/85x задействуется только один блок сравнения, подключенный к выводу ОС1А. Функционирование таймера/счетчика в этом случае ничем не отличается от ATtinyl5L, за исключением названий управляющих регистров и положений соответствующих битов (см. подраздел «Режим таймера» в разделе 7.6.1). Режим ШИМ В этом режиме таймер/счетчик Т1 работает в качестве широтно-импульсного модулятора и используется для генерирования сигнала с программируемыми частотой и скважностью. Для перевода таймера/счетчика Т1 в режим ШИМ необходимо установить в 1 биты PWM1A регистра TCCR1 и/или PWM1B регистра GTCCR. В отличие от других микроконтроллеров семейства, в моделях ATtiny25x/45x/85x и ATtiny26x наряду с прямыми выходами ШИМ ОС1А и ОС1В имеются еще и инверсные — ОС1А и ОС1В. Причем моменты изменения состояний каждой пары выходов (прямого и инверсного) не перекрываются (Рис. 7.32) благодаря задержке формирования нарастающих фронтов выходных сигналов относительно исходного ШИМ-сигнала. В модели ATtiny26x эта задержка фиксирована и равна одному периоду сигнала clkT1. В моделях ATtiny25x/45x/85x величина задержки может варьироваться в определенных пределах блоком генерации времени запаздывания, который мы рассмотрим в следующем подразделе. Рис. 7.32. Прямой и инверсный выходы ШИМ При работе таймера/счетчика Т1 в режиме ШИМ состояние счетного регистра изменяется от $00 до значения, находящегося в регистре OCR1C, после чего счетный регистр сбрасывается и цикл повторяется. При равенстве содержимого счетного регистра и регистра сравнения OCR1A
(0CR1B) состояние выводов ОС1А/ОС1А (ОСIB/ОС 1В) микроконтроллера изменяется в соответствии со значением битов СОМ1А1:СОМ1А0 регистра TCCR1 (СОМ 1В1:СОМ1В0 регистра GTCCR) (см. Табл. 7.44 и Рис. 7.33). Таким образом, содержимое регистра OCR1A/OCR1B определяет скважность ШИМ-сигнала соответствующего канала, а содержимое регистра OCR1C — его частоту: /ocia/в = 1 + OCR1C- Таблица 7.44. Управление выводами ОС1А/ОС1А (ОС1В/ОС1В) в режиме ШИМ СОМ1А1 (COM1B1) COM1A0 (COM1B0) Описание 0 0 Таймер/счетчик Т1 отключен от вывода OC1A (OC1B) Таймер/счетчик Т1 отключен от вывода OC1A (0C1B) 0 1 OCIA(OCIB): Сбрасывается в 0 при равенстве регистров TCNT1 и OCR1A (OCR1B). Устанавливается в 1 при TCNT1 = $01 OCIA(OCIB): Устанавливается в 1 при равенстве регистров TCNT1 и OCR1A (OCR1 В). Сбрасывается в 0 при TCNT1 = $00 1 0 OCIA(OCIB): Сбрасывается в 0 при равенстве регистров TCNT1 и OCR1A (OCR1B). Устанавливается в 1 при TCNT1 = $01 OCIA(OCIB): Отключен от таймера/счетчика 1 1 OCIA(OCIB): Устанавливается в 1 при равенстве регистров TCNT1 и OCR1A (OCR1B). Сбрасывается в 0 при TCNT1 = $00 OCIA(OCIB): Отключен от таймера/счетчика Рис. 7.33. Формирование ШИМ-сигнала
Соответственно, если содержимое регистра сравнения OCR1A/OCR1B равно $00 или содержимому регистра OCR1C, то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.45. Таблица 7.45. Устойчивые состояния выходов схем сравнения СОМ1А1 (СОМ1В1) СОМ1А0 (СОМ1В0) Регистр OCR1A (OCR1B) Вывод OCIA(OCIB) Вывод OCIA(OCIB) 0 1 $00 0 1 0 1 OCR1C 1 0 1 0 $00 0 Не подключен 1 0 OCR1C 1 Не подключен 1 1 $00 1 Не подключен 1 1 OCR1C 0 Не подключен Как и в остальных моделях, изменение содержимого регистров OCR1A/OCR1B происходит только в момент достижения счетчиком максимального значения. До этого момента записываемое в данные регистры число сохраняется в специальном временном регистре. При работе таймера/счетчика Т1 в режиме ШИМ может генерироваться прерывание по переполнению счетного регистра таймера/счетчика, а также прерывания от блоков сравнения. Причем прерывание по переполнению генерируется при смене состояния счетного регистра как с $FF на $00, так и с OCR 1С на $FF. Разрешение и обработка всех прерываний выполняется обычным образом. В режиме совместимости с ATtinyl5L в моделях ATtiny25x/45x/85x задействуется только один блок сравнения, подключенный к выводу ОС 1 А. Функционирование таймера/счетчика в этом случае ничем не отличается от ATtinyl 5 L, за исключением названий управляющих регистров и положений соответствующих битов (см. подраздел «Режим ШИМ» в разделе 7.6.1). Блок генерации времени запаздывания Блоки генерации времени запаздывания (Dead Time Generation — DTG) реализованы только в моделях ATtiny25x/45x/85x и предназначены для задержки формирования нарастающих фронтов выходных сигналов (прямого и инверсного) относительно исходного ШИМ-сигнала. Наличие такой задержки позволяет осуществлять безопасное управление силовыми ключами в системах управления двигателями и предотвращает возникновение в них сквозных токов. Причем длительность этой задержки («мертвое время») задается индивидуально для прямого и инверсного выхода ШИМ.
Структурная схема одного блока DTG (в микроконтроллере их два — по одному на каждый канал ШИМ) приведена на Рис. 7.34. Рис. 7.34. Блок генерации времени запаздывания Для управления блоками DTG используется 3 регистра ввода/вывода — общий регистр управления предделителем DTPS1, расположенный по адресу $23 ($43), и регистры длительности задержек DT1A и DT1B, расположенные по адресам $25 ($45) и $24 ($44) соответственно. Формат этих регистров приведен на Рис. 7.35...7.37, а описание их битов — в Табл. 7.46...7.48 соответственно. Рис. 7.35. Формат регистра DTPS1 Таблица 7.46. Биты регистра DTPS1 Бит Название Описание 7...2 - Не используются, читаются как 0 Выбор коэффициента деления предделителя. Значения этих битов определяют коэффициент деления предделителя блоков генерации времени запаздывания: следующим образом: DTPS И DTPS 10 Коэффициент деления предделителя 1,0 DTPSllrDTPSlO 0 0 1 0 1 2 1 0 4 1 1 8
Рис. 7.36. Формат регистра DT1A Таблица 7.47. Биты регистра DT1A Бит Название Описание 7...4 DT1AH3:DT1AH0 Длительность задержки для выхода OCIA. Эти биты определяют длительность задержки /н формирования нарастающего фронта сигнала ОС1А (см. Рис. 7.38). Величина задержки задается в тактах выходного сигнала предделителя блоков DTG 3...0 DT1AL3:DT1AL0 Длительность задержки для выхода ОС1А. Эти биты определяют длительность задержки tL формирования нарастающего фронта сигнала ОС1А (см. Рис. 7.38). Величина задержки задается в тактах выходного сигнала предделителя блоков DTG 1 Рис. 7.37. Формат регистра DT1B Таблица 7.48. Биты регистра DT1B Бит Название Описание 7...4 DT1BH3:DT1BH0 Длительность задержки для выхода ОС1В. Эти биты определяют длительность задержки /н формирования нарастающего фронта сигнала ОС1В (см. Рис. 7.38). Величина задержки задается в тактах выходного сигнала предделителя блоков DTG 3...0 DT1BL3:DT1BL0 Длительность задержки для выхода ОС1В. Эти биты определяют длительность задержки tL формирования нарастающего фронта сигнала ОС1В (см. Рис. 7.38). Величина задержки задается в тактах выходного сигнала предделителя блоков DTG Взаимосвязь между выходным сигналом ШИМ и выходами блока DTG показана на Рис. 7.38.
Рис. 7.38. Выходной сигнал блока DTG 7.7. Сторожевой таймер Все микроконтроллеры семейства Tiny имеют в своем составе сторожевой таймер, предназначенный для защиты микроконтроллера от сбоев в процессе работы. В общей сложности в микроконтроллерах семейства можно встретить сторожевой таймер двух исполнений — стандартный и расширенный. Сторожевой таймер обоих исполнений имеет независимый тактовый генератор, поэтому он работает даже во время нахождения микроконтроллера в любом из спящих режимов. Если сторожевой таймер включен, то через промежутки времени, равные его периоду, он выполняет сброс микроконтроллера (расширенный сторожевой таймер может также генерировать прерывание). Чтобы избежать сброса при нормальном выполнении программы, сторожевой таймер необходимо регулярно сбрасывать через промежутки времени, меньшие его периода. Сброс сторожевого таймера осуществляется командой WDR. Конфигурирование сторожевого таймера зависит от его исполнения. ATtinyl 1х/12х, ATtinyl 5Ц ATtiny26xf ATtiny28x В этих моделях реализован стандартный сторожевой таймер, структурная схема которого приведена на Рис. 7.39. Рис. 7.39. Стандартный сторожевой таймер
Типовые значения частот генератора составляют: 1 МГц при ксс = = 5.0 в, 350 кГц при Vqc = 3.0 в и по кГц при ксс = 2.0 в (в модели ATtiny26x частота генератора изменяется от 1.2 до 1.3 МГц во всем диапазоне питающего напряжения). Для управления сторожевым таймером используется регистр WDTCR. Этот регистр расположен по адресу $01 ($21) в модели ATtiny28x и по адресу $21 ($41) в остальных моделях. Формат регистра WDTCR приведен на Рис. 7.40, а описание его битов — в Табл. 7.49. - - - WDTOE WDE WDP2 WDP1 WDP0 Чтение (Я)/Запись (W) R R R R/W R/W R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 0 7 6 5 4 со 2 1 0 - - - WDCE WDE WDP2 WDP1 WDP0 Чтение (R)/3anncb (W) R R R R/W R/W R/W R/W R/W Начальное значение 0 0 0 0 0 0 0 0 ATtinyl 1х/12х ATtinyl 5L ATtiny28x ATtiny26x Рис. 7.40. Формат регистра WDTCR Таблица 7.49. Биты регистра WDTCR Бит Название Краткое описание 7...5 - Зарезервированы, читаются как 0 4 WDTOE (WDCE1*) Разрешение выключения сторожевого таймера 3 WDE Разрешение сторожевого таймера (1 — включен) 2 WDP2 Коэффициент деления предделителя сторожевого таймера 1 WDP1 0 WDP0 Х) В модели ATtiny26x. Для включения/выключения сторожевого таймера используются два бита регистра WDTCR — WDE и WDTOE (WDCE). Если бит WDE установлен в 1, то сторожевой таймер включен, если сброшен в 0 — выключен. Причем, для сброса бита WDE необходимо выполнить следующие действия: 1. Одной командой записать 1 в биты WDE и WDTOE (WDCE). 2. в течение следующих четырех тактов записать 0 в бит WDE. Период тайм-аута сторожевого таймера задается с помощью битов WDP2...WDP0 регистра WDTCR согласно Табл. 7.50.
Таблица 7.50. Задание периода сторожевого таймера WDP2 WDP1 WDP0 Число тактов генератора Период тайм-аута (типовое значение) Vcc =2.0 В Vcc =3.0 В Vcc =5.0 В ATtiny28x Остальные ATtiny28x Остальные 0 0 0 16К 0.15с 17.1 мс 47 мс 16.3 мс 15 мс 0 0 1 32К 0.30 с 34.3 мс 94 мс 32.5 мс 30 мс 0 1 0 64К 0.60 с 68.5 мс 0.19 с 65 мс 60 мс 0 1 1 128К 1.2с 0.14с 0.38 с 0.13с 0.12с 1 0 0 256К 2.4 с 0.27 с 0.75 с 0.26 с 0.24 с 1 0 1 512К 4.8 с 0.55 с 1.5с 0.52 с 0.49 с 1 1 0 1024К 9.6 с 1.1с 3.0 с 1.0с 0.97 с 1 1 1 2048К 19с 2.2 с 6.0 с 2.1с 1.9 с Чтобы избежать непреднамеренного сброса микроконтроллера при изменении периода сторожевого таймера, необходимо перед записью битов WDP2:0 либо запретить сторожевой таймер, либо сбросить его. ATtinyl Зх, ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x В этих моделях реализован расширенный сторожевой таймер, основным отличием которого от обычного таймера является возможность работы в нескольких режимах. Структурная схема расширенного сторожевого таймера приведена на Рис. 7.41. Рис. 7.41. Расширенный сторожевой таймер
Частота генератора расширенного сторожевого таймера равна 128 кГц, благодаря чему максимальный период тайм-аута увеличился до 8 с. Для управления расширенным сторожевым таймером используется регистр управления WDTCR (модели ATtinyl Зх и ATtiny25x/45x/85x) или регистр управления и состояния WDTCSR (модели ATtiny2313x и ATtiny24x/44x/84x), расположенные по адресу $21 ($41). Формат этих регистров приведен на Рис. 7.42, а описание его битов — в Табл. 7.51. WDTCR WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDPO Чтение (FO/Запись (W) Начальное значение R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 7 6 5 4 3 2 1 0 WDTCSR WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDPO Чтение (R)/3anncb (W) Начальное значение R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 ATtinyl 3x ATtiny25x/45x/85x ATtiny2313x ATtiny24x/44x/84x Рис. 7.42. Формат регистра WDTCSR/WDTCR Таблица 7.51. Биты регистра WDTCSR/WDTCR Бит Название Краткое описание 7 WDIF Флаг прерывания от сторожевого таймера 6 WDIE Разрешение прерывания от сторожевого таймера 5 WDP3 Коэффициент деления предделителя сторожевого таймера (совместно с битами WDP2...0) 4 WDCE Разрешение изменения конфигурации сторожевого таймера 3 WDE Разрешение сброса по тайм-ауту сторожевого таймера 2 WDP2 Коэффициент деления предделителя сторожевого таймера 1 WDP1 0 WDPO Для включения/выключения сторожевого таймера используются два бита регистра WDTCSR/WDTCR - WDE и WDCE. Если бит WDE установлен в 1, то сторожевой таймер включен, если сброшен в 0 — выключен. Включение сторожевого таймера (при незапрограммированной конфигурационной ячейке WDTON) осуществляется простой записью 1 в бит WDE. А для выключения таймера (сброса бита WDE) необходимо выполнить следующие действия: 1. Одной командой записать 1 в биты WDE и WDCE. 2. В течение следующих четырех тактов записать 0 в бит WDE.
Обратите внимание на то, что состояние флага сброса WDRF регистра MCUSR отменяет состояние бита WDE. Это означает, что бит WDE установлен всегда, когда установлен флаг WDRF, поэтому перед сбросом WDE необходимо также сбросить WDRF. Разрешение прерывания от сторожевого таймера осуществляется установкой бита WDIE регистра WDTCSR/WDTCR в 1. Для индикации прерывания служит флаг WDIF того же регистра. При генерации запроса на прерывание этот флаг устанавливается в 1. Сбрасывается он аппаратно при запуске соответствующей подпрограммы обработки прерывания или же вручную, записью в него 1. Таким образом, расширенный сторожевой таймер может работать в нескольких режимах (Табл. 7.52). В режиме сброса он работает как стандартный сторожевой таймер, вызывая сброс микроконтроллера через заданные промежутки времени. Как правило, этот режим используется для предотвращения зависания программы из-за сбоя в работе микроконтроллера. Таблица 7.52. Режимы работы расширенного сторожевого таймера WDTON WDE WDIE Режим Действие по тайм-ауту 1 0 0 Остановлен Нет действий 1 0 1 Режим прерывания Прерывание 1 1 0 Режим сброса Сброс 1 1 1 Режим прерывания и сброса Прерывание, затем переключение в режим сброса 0 X X Режим сброса Сброс В режиме прерывания по тайм-ауту сторожевого таймера вместо сброса микроконтроллера генерируется прерывание. Это прерывание можно использовать для вывода микроконтроллера из «спящего» режима или же в качестве системного события, например, для ограничения времени выполнения какой-либо операции. Режим прерывания включается установкой бита WDIE при сброшенном бите WDE. Третий режим — режим прерывания и сброса — объединяет в себе два предыдущих. В этом режиме по первому тайм-ауту сторожевого таймера генерируется прерывание, после завершения обработки которого сторожевой таймер автоматически переключается в режим сброса. Соответственно, при последующем тайм-ауте выполняется сброс микроконтроллера. Данный режим позволяет перед сбросом микроконтроллера сохранить различные критические переменные программы.
Режим сброса и прерывания включается одновременной установкой битов WDE и WDIE. При выполнении подпрограммы обработки прерывания флаги WDIE и WDIF автоматически сбрасываются (таймер переключается в режим сброса). Чтобы сторожевой таймер оставался в режиме сброса и прерывания, бит WDIE необходимо устанавливать после каждого прерывания. Причем, это рекомендуется осуществлять вне обработчика прерывания. Период тайм-аута сторожевого таймера задается с помощью битов WDP3...WDP0 регистра WDTCSR/WDTCR согласно Табл. 7.53. Таблица 7.53. Задание периода сторожевого таймера WDP3 WDP2 WDP1 WDPO Число тактов генератора Период тайм-аута (типовое значение) при Vcq = 5.0 В 0 0 0 0 2К(2048) 16 мс 0 0 0 1 4К(4096) 32 мс 0 0 1 0 8К (8192) 64 мс 0 0 1 1 16К(16 384) 0.125 с 0 1 0 0 32К (32768) 0.25 с 0 1 0 1 64К(65 536) 0.5 с 0 1 1 0 128К(131 072) 1.0с 0 1 1 1 256К (262 144) 2.0 с 1 0 0 0 512К(524 288) 4.0 с 1 0 0 1 1024К(1 048 576) 8.0 с 1 0 1 0 1 0 1 1 1 1 0 0 Зарезервировано 1 1 0 1 1 1 1 0 1 1 1 1 Для изменения периода тайм-аута необходимо выполнить следующие, действия: 1. Одной командой записать 1 в биты WDE и WDCE. 2. В течение следующих четырех тактов записать требуемое значение в биты WDP3:0 и WDE, одновременно сбрасывая бит WDCE. Перед изменением битов WDP3:0 сторожевой таймер рекомендуется сбрасывать.
ГЛАВА 8 Аналоговый компаратор 8.1. Общие сведения Модуль аналогового компаратора входит в состав всех без исключения микроконтроллеров семейства. Будучи включенным, компаратор позволяет сравнивать значения напряжений, присутствующих на двух выводах микроконтроллера. Результатом сравнения является логическое значение, которое может быть прочитано из программы. По результату сравнения может быть сгенерировано прерывание, а также осуществлен захват состояния таймера/счетчика Т1. Последняя функция позволяет, в частности, измерять длительность аналоговых сигналов. Используемые компаратором выводы являются контактами портов ввода/вывода общего назначения (см. Табл. 8.1). Таблица 8.1. Выводы, используемые аналоговым компаратором Название Их 13х 15L 2313х 24х/44х/ 84х 25х/45х/ 85х 26х 28х Назначение AIN0 РВО РВО РВО РВО РА1 РВО РА6 РВО Неинвертирующий вход AIN1 РВ1 РВ1 РВ1 РВ1 РА2 РВ1 РА7 РВ1 Инвертирующий вход Чтобы указанные выводы можно было использовать с компаратором, они должны быть сконфигурированы как входы (соответствующий бит регистра DDRx установлен в 0). Кроме того, необходимо отключить внутренние подтягивающие резисторы записью 0 в соответствующий бит регистра PORT*. Кроме того, в моделях ATtinyl3x, ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x имеется возможность отключения входных цифровых буферов в случае, если контакты микроконтроллера, соответствующие выводам AIN0 и AIN1, используются только для ввода аналоговых сигналов. При отключенных цифровых буферах уменьшается общий ток потребления микроконтроллера, а соответствующие биты регистра PINx всегда читаются как 0. Отключение цифровых буферов на входах AIN0 и AIN1 осуществляется записью 1 соответственно в биты AIN0D и AIN1D регистра DIDRO (DIDR в ATtiny2313x), расположенного по адресу $01 ($21) в моделях ATtiny2313x
и ATtiny24x/44x/84x и по адресу $14 ($34) в моделях ATtinyl3x и ATtiny25x/45x/85x. В моделях ATtiny24x/44x/84x входы компаратора совмещены со входами АЦП, поэтому используемые биты называются ADC1D и ADC2D. Формат этих регистров приведен на Рис. 8.1. Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции. Рис. 8.1. Формат регистров DIDRO (DIDR) 8.2. Функционирование компаратора Структурная схема аналогового компаратора приведена на Рис. 8.2. Пунктирной линией обведены узлы, имеющиеся только в моделях с АЦП. Также обратите внимание на то, что в моделях ATtinyl 1х и ATtiny28x внутренний источник опорного напряжения отсутствует. Рис. 8.2. Структурная схема аналогового компаратора
Основное управление компаратором и контроль его состояния осуществляется с помощью регистра ACSR (Analog Comparator Status Register), расположенного по адресу $08 ($28). Формат этого регистра приведен на Рис. 8.3, а назначение его битов кратко описано в Табл. 8.2. Таблица 8.2. Биты регистра ACSR Бит Название Описание 7 ACD Выключение компаратора (0 — включен, 1 — выключен) 6 ACBG (AINBG1*) Подключение к неинвертирующему входу компаратора внутреннего ИОН (1 — подключен, 0 — не подключен) 5 ACO Результат сравнения (выход компаратора) 4 ACI Флаг прерывания от компаратора 3 ACIE Разрешение прерывания от компаратора 2 ACIC Подключение компаратора к блоку захвата таймера/счетчика Tl (1 — подключен, 0 — не подключен) АСМЕ2) Подключение выхода мультиплексора АЦП к инвертирующему входу компаратора (1 — подключен, 0 — не подключен) 1 ACIS1 Условие возникновения прерывания от компаратора 0 ACIS0 ,} В модели ATtinyl2х. 2) В модели ATtiny26x.
По своему действию рассматриваемый узел микроконтроллера является обычным компаратором. Если напряжение на выводе AIN0 (неинвер- тирующий вход) больше напряжения на выводе AIN1 (инвертирующий вход), то результат сравнения будет равен 1. В противном случае результат сравнения будет равен 0. Этот результат (состояние выхода компаратора) сохраняется в бите АСО регистра ACSR. Бит ACD отвечает за включение и выключение компаратора. Поскольку при подаче напряжения питания все биты регистра ACSR сбрасываются в 0, при включении микроконтроллера компаратор включается автоматически. Для выключения компаратора бит ACD следует установить в 1. Перед изменением состояния этого бита прерывание от компаратора следует запретить во избежание случайной генерации прерывания. Как говорилось выше, по результату сравнения схема компаратора может генерировать запрос на прерывание. Если состояние выхода компаратора (бит АСО) изменилось заданным образом, то устанавливается флаг прерывания ACI регистра ACSR и генерируется запрос на прерывание. Как и для других прерываний, этот флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него 1. Для разрешения прерывания необходимо установить в 1 бит ACIE регистра ACSR и, разумеется, флаг I регистра SREG. Какое именно изменение состояния выхода компаратора вызовет прерывание, определяется состоянием битов ACIS1:ACIS0 регистра ACSR в соответствии с Табл. 8.3. При изменении этих битов прерывание от компаратора (как и для бита ACD) должно быть запрещено. Таблица 8.3. Условия генерации запроса на прерывание от компаратора ACIS1 ACIS0 Условие 0 0 Любое изменение состояния выхода компаратора 0 1 Зарезервировано 1 0 Изменение состояния выхода компаратора с 1 на 0 1 1 Изменение состояния выхода компаратора с 0 на 1 В моделях ATtiny2313x и ATtiny24x компаратор помимо генерации прерывания может также управлять схемой захвата таймера/счетчика Т1. Для этого необходимо установить бит ACIC регистра ACSR в 1. В результате выход компаратора подключится к схеме захвата вместо вывода ICP1 мик-
роконтроллера. Если же бит ACIC сброшен в 0, компаратор полностью отключен от блока захвата таймера/счетчика. Компаратор может сравнивать сигналы, присутствующие не только на выводах AIN0 и AIN1. Так, вместо вывода AIN0 микроконтроллера к неинвертирующему входу компаратора может быть подключен внутренний источник опорного напряжения (ИОН) с номинальным напряжением 1.1 или 1.23 В (Табл. 8.4). Для этого необходимо установить бит ACBG (AINBG в моделях ATtinyl2x) регистра ACSR в 1. Причем, если выключена схема BOD и модуль АЦП, то между подключением ИОН к компаратору и началом использования компаратора необходимо выждать некоторое время (не более 70 мкс). Таблица 8.4. Напряжение внутреннего ИОН Модель Напряжение ИОН [В] min typ max ATtinyl 2х 1.17 1.22 1.27 ATtinyl Зх 1.10 1.11 1.12 ATtinyl5L 1.17 1.22 1.27 ATtiny2313x 1.10 1.11 1.12 ATtiny24x/44x/84x 1.10 1.11 1.12 ATtiny25x/45x/85x 1.10 1.11 1.12 ATtiny26x 1.15 1.18 1.40 В моделях с АЦП (ATtinylЗх, ATtiny24x/44x/84x, ATtiny25x/45x/85x и ATtiny26x) на инвертирующий вход компаратора может поступать сигнал с выхода мультиплексора модуля АЦП. Другими словами, вместо вывода AJN1 инвертирующий вход компаратора может быть подключен к любому из входов АЦП — ADC0...ADC10. Подключение выхода мультиплексора АЦП к входу компаратора осуществляется установкой в 1 бита ACME (2-й бит регистра ACSR в модели ATtiny26x и 6-й бит регистра ADCSRB в остальных моделях). Разумеется, модуль АЦП при этом должен быть выключен (бит ADEN регистра ADCSR/ADCSRA сброшен в 0). Какой именно из входов АЦП будет использоваться в качестве инвертирующего входа компаратора, определяется битами MUX3...0 регистра ADMUX, как показано в Табл. 8.5.
Таблица 8.5. Управление инвертирующим входом компаратора ACME ADEN михз...о!) Инвертирующий вход компаратора 13х 24х/44х/84х 25х/45х/85х 26х 0 X хххх AIN1 AIN1 AIN1 AIN1 1 1 хххх AIN1 AIN1 AIN1 AIN1 1 0 0000 ADC0 ADC0 ADC0 ADC0 1 0 0001 ADC1 ADC1 ADC1 ADC1 1 0 0010 ADC2 ADC2 ADC2 ADC2 1 0 ООН ADC3 ADC3 ADC3 ADC3 1 0 0100 - ADC4 - ADC4 1 0 0101 - ADC5 - ADC5 1 0 оно - ADC6 - ADC6 1 0 0111 - ADC7 - ADC7 1 0 1000 - - - ADC8 1 0 1001 - - - ADC9 1 0 1010 - - - ADC10 1 0 1011 - - - Не определено 1 0 1100 - - - Не определено 1 0 1101 - - - Не определено 1 0 1110 - - - Не определено 1 0 1111 - - - Не определено ]) MUX1:0 в моделях ATtinyl3x и ATtiny25x/45x/85x; MUX4:0 в моделях ATtiny24x/44x/84x (MUX4 = 0). Подробно регистры ADCSRB и ADMUX будут рассмотрены в следующем разделе, посвященном модулю АЦП. В заключение ознакомьтесь с Табл. 8.6, в которой представлены основные параметры аналогового компаратора. Таблица 8.6. Основные параметры аналогового компаратора Обозначение Параметр Условия min typ max ^асю Входное напряжение смещения, мВ ^cc = 5B,FIN = Fcc/2 - <10 40.0 ACLK Ток утечки на входе, нА Kx = 5B,KIN=Fcc/2 -50.0 - 50.0 'acpd Время отклика, не КСС = 2.7В - - 750 КСС = 4.0В 500
Аналого-цифровой преобразователь 9.1. Общие сведения Модуль 10-битного АЦП последовательного приближения входит в состав моделей ATtinyl3x, ATtinyl5L, ATtiny24x/44x/84x, ATtiny25x/45x/85x и ATtiny26x. Основные параметры данного АЦП следующие: • абсолютная погрешность: ±2 LSB!); • интегральная нелинейность: ±0.5 LSB; • быстродействие: до 15 тыс. выборок/с. На входе модуля АЦП имеется многоканальный аналоговый мультиплексор, предоставляющий в распоряжение пользователя несколько каналов с несимметричными входами (количество каналов зависит от модели). Кроме того, в большинстве моделей входы АЦП могут объединяться попарно для формирования каналов с дифференциальным входом. При этом некоторые каналы имеют возможность 20-кратного (26 дБ) предварительного усиления входного сигнала. В моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x к одному из входов АЦП подключен встроенный датчик температуры. В качестве источника опорного напряжения для АЦП может использоваться как напряжение питания микроконтроллера, так и внутренний либо внешний источник опорного напряжения. Модуль АЦП может функционировать в двух режимах: • режим одиночного преобразования, когда запуск каждого преобразования инициируется пользователем; • режим непрерывного преобразования, когда запуск преобразований выполняется непрерывно через определенные интервалы времени. ГЛАВА 9 ]) Least Significant Bit — младший значащий бит. Соответствует обозначению M3P, которое можно встретить в отечественной литературе. Аналогично, MSB (Most Significant Bit — старший значащий бит) соответствует обозначению СЗР.
9.2. Функционирование модуля АЦП Обобщенная структурная схема модуля АЦП приведена на Рис. 9.1. Обратите внимание, что регистр ADCSRB, триггер запуска и связанные с ним цепи, а также датчик температуры (на рисунке выделены серым цветом) имеются не во всех моделях. Рис. 9.1. Структурная схема модуля АЦП
Регистры управления модулей АЦП различных моделей приведены в Табл. 9.1. Таблица 9.1. Регистры управления модулей АЦП /84x /85x Регистр Адрес 44x, 45x, Описание X X со IT) IT) NO ADCSR $06($26) • • Регистр управления и состояния ADCSRA $06($26) • • • Регистр А управления и состояния ADCSRB $03 ($23) • • • Регистр В управления и состояния ADMUX $07 ($27) Регистр управления мультиплексором ADCH:ADCL $05:$04 ($25:$24) Регистр данных Формат служебных регистров ADCSRA (ADCSR), ADCSRB и ADMUX приведен на Рис. 9.2...9.4, а краткое описание функций их битов — в Табл. 9.2...9.4 соответственно. Рис. 9.2. Формат регистра ADCSRA (ADCSR) Таблица 9.2. Биты регистра ADCSRA (ADCSR1 >) Бит Название Описание 7 ADEN Разрешение АЦП (1 - включен, 0 - выключен) 6 ADSC Запуск преобразования (1 - начать преобразование) 5 ADATE (ADFR1*) Выбор режима работы АЦП 4 ADIF Флаг прерывания от компаратора 3 ADIE Разрешение прерывания от компаратора 2...0 ADPS2:ADPS0 Выбор частоты преобразования 1) В моделях ATtinyl5L и ATtiny26x.
Рис. 9.3. Формат регистра ADCSRB Таблица 9.3. Биты регистра ADCSRB Название Описание BIN Включение биполярного режима ACME Подключение выхода мультиплексора АЦП к инвертирующему входу компаратора IPR Смена полярности дифференциального входа ADLAR Выравнивание результата преобразования ADTS2...ADTS0 Выбор источника стартового сигнала для запуска АЦП Рис. 9.4. Формат регистра ADMUX
Таблица 9.4. Биты регистра ADMUX Название Описание REFS2...REFS0 Выбор источника опорного напряжения ADLAR Выравнивание результата преобразования MUX5...MUX0 Выбор входного канала Для разрешения работы АЦП необходимо записать 1 в бит ADEN регистра ADCSR (ADCSRA), а для выключения — соответственно 0. Если АЦП будет выключен во время цикла преобразования, то преобразование завершено не будет (в регистре данных АЦП останется результат предыдущего преобразования). В моделях ATtinyl5L и ATtiny26x режим работы АЦП определяется состоянием бита ADFR. Если он установлен в 1, то АЦП работает в режиме непрерывного преобразования. В этом режиме запуск каждого следующего преобразования осуществляется автоматически после окончания текущего. Если же бит ADFR сброшен в 0, то АЦП работает в режиме одиночного преобразования, и запуск каждого преобразования осуществляется по команде пользователя. В остальных моделях запуск АЦП возможен не только по команде пользователя, но и по прерыванию от некоторых периферийных устройств микроконтроллера. Для выбора режима работы в этих моделях используется бит ADATE регистра ADCSRA и биты ADTDS2:0 регистра ADCSRB. Если бит ADATE сброшен в 0, то АЦП работает в режиме одиночного преобразования. Если же бит ADATE установлен в 1, то функционирование АЦП определяется содержимым битов ADTS2:0 согласно Табл. 9.5. Таблица 9.5. Источник сигнала для запуска преобразования Источник стартового сигнала ADTS2 ADTS1 ADTS0 ATtinyl3x, ATtiny25x/45x/85x ATtiny24x/44x/84x 0 0 0 Режим непрерывного преобразования Режим непрерывного преобразования 0 0 1 Прерывание от аналогового компаратора Прерывание от аналогового компаратора 0 1 0 Внешнее прерывание INTO Внешнее прерывание INTO 0 1 1 Прерывание по событию «Совпадение А» таймера/счетчика ТО Прерывание по событию «Совпадение А» таймера/счетчика ТО 1 0 0 Прерывание по переполнению таймера/счетчика ТО Прерывание по переполнению таймера/счетчика ТО 1 0 1 Прерывание по событию «Совпадение В» таймера/счетчика ТО Прерывание по событию «Совпадение В» таймера/счетчика Т1 1 1 0 Прерывание по изменению состояния выводов Прерывание по переполнению таймера/счетчика Т1 1 1 1 Зарезервировано Прерывание по событию «Захват» таймера/счетчика Т1
Запуск каждого преобразования в режиме одиночного преобразования, а также запуск первого преобразования в режиме непрерывного преобразования осуществляется установкой бита ADSC регистра ADCSR (ADCSRA) в 1. Запуск преобразования по прерыванию осуществляется при установке в 1 флага выбранного прерывания. Бит ADSC регистра ADCSRA при этом аппаратно устанавливается в 1. Запуск преобразования в этих режимах также может быть осуществлен установкой бита ADSC регистра ADCSRA в 1. В режимах одиночного и непрерывного преобразования цикл преобразования начинается по первому нарастающему фронту тактового сигнала после установки бита ADSC. Если используется запуск по прерыванию, то цикл преобразования начинается по первому нарастающему фронту тактового сигнала после установки флага выбранного прерывания. Причем, в момент установки этого флага осуществляется сброс предделителя модуля АЦП. Тем самым обеспечивается фиксированная задержка между генерацией запроса на прерывание и началом цикла преобразования. Обратите внимание, что преобразование запускается при установке соответствующего флага, т.е. даже если само прерывание запрещено. Длительность цикла составляет 13 тактов при использовании несимметричного входа и 13 либо 14 тактов — при использовании дифференциального входа (разные значения связаны с работой схемы синхронизации); выборка и запоминание входного сигнала осуществляется в течение первых 1.5 и 2.5 тактов соответственно. Через 13 (14) тактов преобразование завершается, бит ADSC аппаратно сбрасывается в 0 (в режиме одиночного преобразования), и результат преобразования сохраняется в регистре данных АЦП. Одновременно устанавливается флаг прерывания ADIF регистра ADCSR и генерируется запрос на прерывание. Как и флаги остальных прерываний, флаг ADIF сбрасывается аппаратно при запуске подпрограммы обработки прерывания от АЦП или программно, записью в него 1. Разрешение прерывания осуществляется установкой в 1 бита ADIE регистра ADCSR при установленном флаге I регистра SREG. Если АЦП работает в режиме непрерывного преобразования, то новый цикл начнется сразу же после записи результата. В режиме одиночного преобразования новое преобразование может быть запущено сразу же после сброса бита ADSC (до сохранения результата текущего преобразования). Однако реально цикл преобразования начнется не ранее, чем через один такт после окончания текущего преобразования. Временные диаграммы, иллюстрирующие сказанное, приведены на Рис. 9.5.
Рис. 9.5. Временные диаграммы работы АЦП в режиме одиночного преобразования (д), в режиме запуска по прерыванию (б) и в режиме непрерывного преобразования (в)
При первом запуске после включения АЦП для выполнения преобразования потребуется 25 тактов, т.е. на 12 тактов больше, чем обычно. В течение этих 12 тактов выполняется «холостое» преобразование, во время которого производится инициализация АЦП (Рис. 9.6). Рис. 9.6. Временные диаграммы работы АЦП при первом преобразовании (режим одиночного преобразования) Для формирования тактовой частоты модуля АЦП в нем имеется отдельный предделитель. Коэффициент деления предделителя и соответственно длительность преобразования определяется состоянием битов ADPS2...ADPS0 регистра ADCSR (ADCSRA) (см. Табл. 9.6). Таблица 9.6. Задание коэффициента деления предделителя АЦП ADPS2 ADPS1 ADPS0 Коэффициент деления 0 0 0 2 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128
Наибольшая точность преобразования достигается, если тактовая частота модуля АЦП находится в диапазоне 50...200 кГц. Соответственно, коэффициент деления предделителя рекомендуется выбирать таким, чтобы тактовая частота модуля АЦП находилась в указанном диапазоне. Если же точности преобразования меньше 10 битов достаточно, можно использовать более высокую частоту, увеличивая тем самым частоту выборки. В зависимости от модели выводы микроконтроллера, подключенные к входу АЦП, определяются состоянием битов MUX1:0, MUX2:0, MUX3:0, MUX4:0 либо MUX5:0 регистра ADMUX. Для каналов с дифференциальным входом указанные биты определяют также коэффициент предварительного усиления входного сигнала. Соответствие установок этих битов используемым входам АЦП для различных моделей микроконтроллеров приведено в Табл. 9.7...9.11. Таблица 9.7. Управление входным мультиплексором в моделях ATtinyl3x MUX1...MUX0 Несимметричный вход 00 ADC0 01 ADC1 10 ADC2 11 ADC3 Таблица 9.8. Управление входным мультиплексором в модели ATtinyl5L MUX2...MUX0 Несимметричный вход Дифференциальный вход Предварительное усиление положительный отрицательный 000 ADC0 - 001 ADC1 010 ADC2 011 ADC3 100° - ADC2 ADC2 1х \0\l) ADC2 ADC2 20х по ADC2 ADC3 1х 111 ADC2 ADC3 20х 1} Для калибровки смещения.
Таблица 9.9. Управление входным мультиплексором в моделях ATtiny24x/44x/84x MUX5...MUX0 Несимметричный Дифференциальный вход Предварительное вход положительный отрицательный усиление 000000 ADC0 000001 ADC1 000010 ADC2 000011 ADC3 000100 ADC4 000101 ADC5 000110 ADC6 000111 ADC7 001000 ADC0 ADC1 1х 001001 ADC0 ADC1 20х 001010 ADC0 ADC3 1х 001011 ADC0 ADC3 20х 001100 ADC1 ADC2 1х 001101 ADC1 ADC2 20х 001110 ADC1 ADC3 1х 001111 ADC1 ADC3 20х 010000 ADC2 ADC3 1х 010001 ADC2 ADC3 20х 010010 ADC3 ADC4 1х 010011 ADC3 ADC4 20х 010100 ADC3 ADC5 1х 010101 ADC3 ADC5 20х 010110 ADC3 ADC6 1х 010111 ADC3 ADC6 20х 011000 ADC3 ADC7 1х 011001 ADC3 ADC7 20х 011010 ADC4 ADC5 1х 011011 ADC4 ADC5 20х 011100 ADC5 ADC6 1х 011101 ADC5 ADC6 20х 011110 ADC6 ADC7 1х 011111 ADC6 ADC7 20х
(продолжение) MUX5...MUX0 Несимметричный Дифференциальный вход Предварительное вход положительный отрицательный усиление 100000 OB(GND) 100001 1.1В - 1000102) ADC8 100011й ADC0 ADC0 20х 100100° ADC3 ADC3 1х 100101° ADC3 ADC3 20х 100110° ADC7 ADC7 1х 100111° ADC7 ADC7 20х 101000 ADC1 ADC0 1х 101001 ADC1 ADC0 20х 101010 ADC3 ADC0 1х 101011 ADC3 ADC0 20х 101100 ADC2 ADC1 1х 101101 ADC2 ADC1 20х 101110 ADC3 ADC1 1х 101111 ADC3 ADC1 20х 110000 ADC3 ADC2 1х 110001 - ADC3 ADC2 20х 110010 ADC4 ADC3 1х 110011 ADC4 ADC3 20х 110100 ADC5 ADC3 1х 110101 ADC5 ADC3 20х 110110 ADC6 ADC3 1х 110111 ADC6 ADC3 20х 111000 ADC7 ADC3 1х 111001 ADC7 ADC3 20х 111010 ADC5 ADC4 1х 111011 ADC5 ADC4 20х 111100 ADC6 ADC5 1х 111101 ADC6 ADC5 20х 111110 ADC7 ADC6 1х 111111 ADC7 ADC6 20х ° Для калибровки смещения. 2) Для измерения температуры.
Таблица 9.10. Управление входным мультиплексором в моделях ATtiny25x/45x/85x MUX3...MUX0 Несимметричный вход Дифференциальный вход Предварительное усиление положительный отрицательный 0000 ADC0 - 0001 ADC1 0010 ADC2 ООП ADC3 0100° - ADC2 ADC2 1х 0101° ADC2 ADC2 20х оно ADC2 ADC3 1х 0111 ADC2 ADC3 20х 1000° ADC0 ADC0 1х 1001|} ADC0 ADC0 20х 1010 ADC0 ADC1 1х 1011 ADC0 ADC1 20х 1100 1.1 В/2.6 В - 1101 0 В (GND) 1110 Зарезервировано 11112> ADC4 1} Для калибровки смещения. 2) Для измерения температуры. Таблица 9.11. Управление входным мультиплексором в моделях ATtiny26x MUX4...MUX0 Несимметричный вход Дифференциальный вход Предварительное усиление положительный отрицательный 00000 ADC0 - 00001 ADC1 00010 ADC2 00011 ADC3 00100 ADC4 00101 ADC5 00110 ADC6 00111 ADC7 01000 ADC8 01001 ADC9
(продолжение) MUX4...MUX0 Несимметричный вход Дифференциальный вход Предварительное усиление положительный отрицательный 01010 ADC10 - 01011 - ADC0 ADC1 20х 01100 ADC0 ADC1 1х 01101° ADC1 ADC1 20х OHIO ADC2 ADC1 20х они ADC2 ADC1 1х 10000 - ADC2 ADC3 1х 10001° ADC3 ADC3 20х 10010 ADC4 ADC3 20х 10011 ADC4 ADC3 1х 10100 - ADC4 ADC5 20х 10101 ADC4 ADC5 1х 10110° ADC5 ADC5 20х 10111 ADC6 ADC5 20х 11000 ADC6 ADC5 1х 11001 - ADC8 ADC9 20х 11010 ADC8 ADC9 1х 11011° ADC9 ADC9 20х 11100 ADC10 ADC9 20х 11101 ADC10 ADC2 1х 11110 1.18В - 11111 0 В (GND) ° Для калибровки смещения. Следует отметить, что предварительный усилитель, используемый каналами с дифференциальным входом, имеет встроенную схему коррекции смещения. Оставшаяся после коррекции величина смещения может быть учтена программным способом. Для этого следует оба входа дифференциального усилителя подключить к одному и тому же выводу микроконтроллера (см. примечания к Табл. 9.8...9.11), а затем вычитать полученное значение из результата последующих преобразований. Таким образом, ошибка смещения может быть снижена до величины, меньшей 1 LSB.
Состояние битов MUX5...MUX0 можно изменить в любой момент, однако если это будет сделано во время цикла преобразования, смена канала произойдет только после завершения преобразования. Благодаря этому в режиме непрерывного преобразования можно легко осуществлять последовательное преобразование сигналов нескольких каналов. Причем, при смене канала с дифференциальным входом первое измерение следует производить не ранее, чем через 125 мкс после выбора канала. Указанное время требуется для установления значения коэффициента усиления пред- усилителя. Соответственно, значения, измеренные до истечения этого срока, не могут считаться достоверными. Кроме того, при переключении на канал с изменяемым коэффициентом усиления результат первого преобразования может иметь пониженную точность из-за времени установления автоматической схемы коррекции смещения. Поэтому будет лучше считать результат первого преобразования некорректным. По умолчанию при использовании дифференциальных входов АЦП работает в униполярном режиме, при котором напряжение на положительном входе дифференциального канала должно быть всегда больше или равно напряжению на отрицательном входе. В противном случае, результат преобразования будет всегда соответствовать величине опорного напряжения. Микроконтроллеры ATtiny25x/45x/85x отличаются от остальных моделей семейства тем, что в них имеется возможность инвертирования входного сигнала. Для этого используется бит IRP регистра ADCSRB. Более того, в моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x АЦП может работать и в биполярном режиме, при этом результат преобразования будет представлять собой число со знаком (в дополнительном коде). Разумеется, разрешение АЦП в этом режиме уменьшается до 9 бит. Для перевода АЦП в биполярный режим следует установить бит BIN регистра ADCSRB в 1. В моделях ATtinyBx, ATtiny24x/44x/84x и ATtiny25x/45x/85x имеется возможность отключения входных цифровых буферов на выводах ADC0...ADC7 в случае, если соответствующие выводы используются только для считывания аналоговых сигналов. При отключенных цифровых буферах уменьшается общий ток потребления микроконтроллера, а соответствующие биты регистров PINx всегда читаются как 0. Отключение цифровых буферов осуществляется записью 1 соответственно в биты ADC0D...ADC7D регистра DIDR0. В моделях ATtinyl3x и ATtiny25x/45x/85x этот регистр располагается по адресу $14 ($34), а в моделях ATtiny25x/45x/85x — по адресу $01 ($21). Формат регистра DIDR0 приведен на Рис. 9.7.
Примечание. Серым цветом выделены биты, которые не относятся к рассматриваемой функции Рис. 9.7. Формат регистра DIDRO Как уже было отмечено, в модуле АЦП могут использоваться различные источники опорного напряжения (ИОН). Выбор конкретного источника опорного напряжения осуществляется с помощью битов REFS2:REFS0 регистра ADMUX (см. Табл. 9.12...9.14). Таблица 9.12. Выбор источника опорного напряжения в моделях ATtinyl3x REFS0 Источник опорного напряжения 0 Напряжение питания Vcc 1 Внутренний ИОН напряжением 1.1В Таблица 9.13. Выбор источника опорного напряжения в моделях ATtinyl5L, ATtiny24x/44x/84x и ATtiny26x REFS1 REFS0 Источник опорного напряжения 0 0 Напряжение питания Vcc 0 1 Внешний ИОН, подключенный к выводу AREF; внутренний ИОН выключен 1 0 Внутренний ИОН0, отключенный от вывода AREF 1 1 Внутренний ИОН1}, подключенный к выводу AREF (для подключения блокировочного конденсатора) 1) Напряжение ИОН составляет 1.1 В в моделях ATtiny24x/44x/84x и 2.56 В в моделях ATtmyl5LHATtiny26x.
Таблица 9.14. Выбор источника опорного напряжения в моделях ATtiny25x/45x/85x REFS2 REFS1 REFS0 Источник опорного напряжения 0 0 0 Напряжение питания Vcc 0 0 1 Внешний ИОН, подключенный к выводу AREF; внутренний ИОН выключен 0 1 0 Внутренний ИОН напряжением 1.1В, отключенный от вывода AREF 0 1 1 Внутренний ИОН напряжением 1.1В, подключенный к выводу AREF (для подключения блокировочного конденсатора) 1 1 0 Внутренний ИОН напряжением 2.56 В, отключенный от вывода AREF 1 1 1 Внутренний ИОН напряжением 2.56 В, подключенный к выводу AREF (для подключения блокировочного конденсатора) При использовании канала с дифференциальным входом первое измерение после смены источника опорного напряжения следует производить не ранее, чем через 125 мкс. Указанное время требуется для установления значения коэффициента усиления предусилителя. В моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x появился новый элемент — встроенный датчик температуры, который подключен к одному из входов АЦП. В моделях ATtiny24x/44x/84x для измерения температуры необходимо выбрать 8-й канал (MUX5:0 = 100010), а в моделях ATtiny25x/45x/85x — 4-й канал АЦП (MUX3:0 = 1111). В обоих случаях в качестве источника опорного напряжения должен использоваться внутренний ИОН (1.1 В). Зависимость измеренного напряжения датчика от температуры является линейной. Типовые значения базовых точек характеристики для моделей обеих линеек приведены в Табл. 9.15. Датчик имеет чувствительность около 1 мВ/°С и после калибровки позволяет измерять температуру с точностью ±10°С. Таблица 9.15. Зависимость напряжения от температуры Модель Напряжение [мВ] при -45°С при +25°С при+105°С ATtiny24x/44x/84x 225 297 372 ATtiny25x/45x/85x 242 314 403
Следует подчеркнуть, что значения, указанные в таблице, являются типовыми, которые могут отличаться для разных экземпляров микроконтроллеров. Поэтому для достижения приемлемой точности датчик температуры необходимо подвергнуть программной калибровке. При этом значение температуры будет определяться формулой [(ADCH«8)|ADCL] - Tos к ' где ADO* — составляющие регистра данных АЦП, к — фиксированный коэффициент, Tos — смещение характеристики, полученное при проведении заводских испытаний и сохраненное в энергонезависимой памяти. 9.3. Результат преобразования После завершения преобразования (при установке флага ADIF регистра ADCSR в 1) его результат сохраняется в регистре данных АЦП. Поскольку АЦП — 10-битный, этот регистр физически размещен в двух регистрах ввода/вывода — ADCH:ADCL, доступных только для чтения и расположенных по адресам $05:$04 ($25:$24). При включении микроконтроллера в регистре данных АЦП содержится значение $0000. По умолчанию результат преобразования выравнивается вправо (старшие 6 битов регистра ADCH — незначащие). Однако он может выравниваться и влево (младшие 6 битов регистра ADCL — незначащие). Для управления выравниванием результата преобразования служит бит ADLAR регистра ADMUX (ADCSRB в моделях ATtiny24x/44x/84x). Если этот бит установлен в 1, то результат преобразования выравнивается по левой границе 16-битного слова, если сброшен в 0 — по правой границе. Обращение к регистрам ADCH и ADCL для получения результата преобразования должно выполняться в определенной последовательности: сначала необходимо прочитать регистр ADCL, а затем ADCH. Это требование связано с тем, что после обращения к регистру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH. Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очередное преобразование завершится до обращения к регистру ADCH, результат преобразования будет потерян. С другой стороны, если результат преобразования выравнивается влево и достаточно 8-битной точности, то для получения результата можно прочитать только содержимое регистра ADCH.
Для каналов с несимметричным входом результат преобразования определяется выражением ADC = in 1024 ^ref где KIN — значение входного напряжения, KREF — величина опорного напряжения. Для каналов с дифференциальным входом результат преобразования зависит от режима работы (униполярный или биполярный). В униполярном режиме: лдс_(кроз-^ео)-*-1024; ^ref в биполярном режиме: (^pos-*neg)-*-512 ADC = ^ref В обоих выражениях VP0S — величина напряжения на положительном входе, KNEG — величина напряжения на отрицательном входе, а К— коэффициент усиления. В последнем случае результат преобразования представляется в дополнительном коде, а его значение лежит в диапазоне от $200 (-512) до$1РР(+512). 9.4. Повышение точности преобразования В этом разделе приведены некоторые рекомендации, позволяющие в наибольшей степени использовать возможности АЦП. Прежде всего, для минимизации погрешности самого АЦП необходимо правильно выбрать тактовую частоту преобразования. С этой же целью на входе АЦП рекомендуется устанавливать фильтр нижних частот. Кроме того, при разработке конструкции и разводке печатной платы следует придерживаться общих правил проектирования цифро-аналоговых устройств: 1. На печатной плате необходимо предусмотреть область сплошной металлизации под аналоговую «землю». Аналоговая часть микроконтроллера и аналоговая часть всего устройства должна располагаться над этой областью. Аналоговая и цифровая «земли» должны соединяться друг с другом только в одной точке печатной платы.
2. Проводники, по которым распространяются аналоговые сигналы, должны быть как можно короче и располагаться над аналоговой «землей». Кроме того, они должны быть размещены как можно дальше от быстродействующих цифровых цепей. 3. Если какие-либо выводы АЦП используются как цифровые выходы, они не должны переключаться во время преобразования. Для сведения к минимуму электромагнитных помех, наводимых ядром процессора, во всех моделях с АЦП имеется специальный «спящий» режим — ADC Noise Reduction (режим снижения шумов АЦП). В этом режиме из всех периферийных устройств функционируют только АЦП и сторожевой таймер. Для той же цели (но с меньшим эффектом) может быть использован режим Idle. Для использования АЦП в любом из указанных режимов необходимо выполнить следующее: 1. Убедиться, что АЦП включен и не занят преобразованием. Затем переключить АЦП в режим одиночного преобразования и разрешить прерывание от АЦП. 2. Перевести микроконтроллер в режим ADC Noise Reduction (или Idle). Сразу же после остановки процессора начнется цикл преобразования. 3. По завершении преобразования будет сгенерировано прерывание от АЦП, которое переведет микроконтроллер в рабочий режим, и начнется выполнение подпрограммы обработки этого прерывания. 9.5. Параметры АЦП Основные параметры АЦП приведены в Табл. 9.16. Все значения указаны для диапазона температур окружающей среды —40...+80°С. Таблица 9.16. Основные параметры АЦП Параметр Обозначение Условия min typ max Ед. изм. Разрешение - Несимметричный вход - 10 - Бит Дифференциальный вход - 8 - Бит Абсолютная погрешность - Несимметричный вход, KREF = 4B,KCC = 4B, /АОС = 200кГц - 2 - LSB Несимметричный вход, KREF = 4B,KCC = 4B, /adc=1Mui - 3 - LSB
(продолжение) Параметр Обозначение Условия min typ max Ед. изм. Абсолютная погрешность Несимметричный вход, *W = 4B,KCC = 4B, /ADC = 200 кГц, режим ADCNRl) - 1.5 - LSB Несимметричный вход, Kref = 4B,FCc = 4B /adc =1 МГц, режим ADCNR0 - 2.5 - LSB Интегральная нелинейность INL Несимметричный вход, *W = 4B,KCC = 4B, /ADC = 200 кГц - 1 - LSB Дифференциальная нелинейность DNL Несимметричный вход, *W = 4B,KCC = 4B, /adc = 200 кГц - 0.5 - LSB Ошибка смещения - Несимметричный вход, KREF = 4B,KCC = 4B, /adc = 200 кГц - 1.5 - LSB Время преобразования - Режим непрерывного преобразования 13 - 260 mkc Тактовая частота /adc - 50 - 1000 кГц Опорное напряжение Vref - OB - Vcc В Полоса пропускания - - - 38.5 - кГц Напряжение внутреннего ИОН Vm 2.56 В 2.4 2.56 2.7 В 1.1В 1.0 1.1 1.2 В Входное сопротивление канала опорного напряжения ^ref - - 32 - кОм Входное сопротивление аналогового входа - - 100 - МОм ]) ADCNR - ADC Noise Reduction.
ГЛАВА 10 Универсальный синхронный/асинхронный приемо-передатчик 10.1. Общие сведения Модуль универсального синхронно/асинхронного приемо-передатчика (USART) реализован только в одном микроконтроллере семейства — в ATtiny2313x. Модуль USART обеспечивает полнодуплексный обмен по последовательному каналу, при этом скорость передачи данных может варьироваться в довольно широких пределах. Длина посылки может составлять от 5 до 9 бит. Также в модуле имеется схема контроля и формирования бита четности. Модуль USART, реализованный в ATtiny2313x, может обнаруживать следующие внештатные ситуации: • переполнение; • ошибка кадрирования; • неверный старт-бит. Для уменьшения вероятности сбоев в модуле также реализована такая полезная функция, как фильтрация помех. Для взаимодействия с программой в модуле предусмотрены 3 прерывания, запрос на генерацию которых формируется при наступлении следующих событий: «передача завершена», «регистр данных передатчика пуст» и «прием завершен». Как обычно, выводы микроконтроллера, используемые модулем USART, являются линиями портов ввода/вывода общего назначения. В общей сложности модуль USART задействует три линии: • PDO(RXD)- вход USART; • PD1 (TXD) — выход модуля USART; • PD2 (ХСК) — вход/выход внешнего тактового сигнала. 10.2. Использование модуля USART Упрощенная структурная схема модуля USART приведена на Рис. 10.1. Как показано на рисунке, модуль состоит из трех основных частей: блока тактирования, блока передатчика и блока приемника. В состав блока тактирования модуля USART входят схема синхронизации, которая используется при работе в синхронном режиме, и контроллер скорости передачи.
Рис. 10.1. Структурная схема модуля USART Блок передатчика содержит одноуровневый буфер, сдвиговый регистр, схему формирования бита четности и схему управления. Блок приемника, в свою очередь, включает в себя схемы восстановления тактового сигнала и данных, схему контроля четности, двухуровневый буфер, сдвиговый регистр, а также схему управления.
Буферные регистры приемника и передатчика располагаются по одному и тому же адресу $0С ($2С) и обозначаются как регистр данных UDR. В этом регистре хранятся младшие 8 бит принимаемых и передаваемых данных. При чтении регистра UDR выполняется обращение к буферному регистру приемника, при записи — к буферному регистру передатчика. Буфер приемника — двухуровневый (FIFO-буфер), его состояние изменяется при любом обращении к регистру UDR. В связи с этим не следует использовать регистр UDR в качестве операндов команд типа «чтение/модификация/запись» (sbi и cbi). Кроме того, следует быть очень аккуратными при использовании команд проверки sbic и sbis, поскольку они также изменяют состояние буфера приемника. Для управления модулем USART используются три регистра: UCSRA, UCSRB и UCSRC, расположенные соответственно по адресам $0В ($2В), $0А ($2А) и $03 ($23). Формат этих регистров приведен на Рис. 10.2... 10.4, а описание битов этих регистров — соответственно в Табл. 10.1...10.3. Рис. 10.2. Формат регистра UCSRA Таблица 10.1. Биты регистра UCSRA Бит Название Описание 7 RXC Флаг завершения приема. Флаг устанавливается в 1 при наличии непрочитанных данных в буфере приемника (регистр данных UDR). Сбрасывается флаг аппаратно после опустошения буфера. Если бит RXCIE регистра UCSRB установлен, то при установке флага генерируется запрос на прерывание «прием завершен» ТХС Флаг завершения передачи. Флаг устанавливается в 1 после передачи всех битов посылки из сдвигового регистра передатчика, при условии, что в регистр данных UDR не было загружено нового значения. Если бит TXCIE регистра UCSRB установлен, то при установке флага генерируется прерывание «передача завершена». Флаг сбрасывается аппаратно при выполнении подпрограммы обработки прерывания или программно, записью в него 1
(продолжение) Бит Название Описание 5 UDRE Флаг опустошения регистра данных. Данный флаг устанавливается в 1 при пустом буфере передатчика (после пересылки байта из регистра данных UDR в сдвиговый регистр передатчика). Установленный флаг означает, что в регистр данных можно загружать новое значение. Если бит UDRIE регистра UCSRB установлен, генерируется запрос на прерывание «регистр данных пуст». Флаг сбрасывается аппаратно, при записи в регистр данных 4 FE Флаг ошибки кадрирования. Флаг устанавливается в 1 при обнаружении ошибки кадрирования, т.е. если первый стоп-бит принятой посылки равен 0. Флаг сбрасывается при приеме стоп-бита, равного 1 3 DOR Флаг переполнения. Флаг устанавливается в 1, если в момент обнаружения нового старт-бита в сдвиговом регистре приемника находится последнее принятое слово, а буфер приемника полон (содержит два байта). Флаг сбрасывается при пересылке принятых данных из сдвигового регистра приемника в буфер 2 UPE Флаг ошибки контроля четности. Флаг устанавливается в 1, если в данных, находящихся в буфере приемника, выявлена ошибка контроля четности. При отключенном контроле четности этот бит постоянно сброшен в 0 1 U2X Удвоение скорости обмена. Если этот бит установлен в 1, то коэффициент деления предделителя контроллера скорости передачи уменьшается с 16 до 8, удваивая тем самым скорость асинхронного обмена по последовательному каналу. Этот бит используется только при асинхронном режиме работы и в синхронном режиме должен быть сброшен 0 МРСМ Режим мультипроцессорного обмена. Если этот бит установлен в 1, то ведомый микроконтроллер ожидает приема кадра, содержащего адрес. Кадры, не содержащие адреса устройства, игнорируются Рис. 10.3. Формат регистра UCSRB
Таблица 10.2. Биты регистра UCSRB Бит Название Описание 7 RXCIE Разрешение прерывания по завершении приема. Если данный бит установлен в 1, то при установке флага RXC регистра UCSRA генерируется прерывание «прием завершен» (если флаг I регистра SREG установлен в 1) 6 TXCIE Разрешение прерывания по завершении передачи. Если данный бит установлен в 1, то при установке флага TXC регистра UCSRA генерируется прерывание «передача завершена» (если флаг I регистра SREG установлен в 1) 5 UDRIE Разрешение прерывания при очистке регистра данных UART. Если данный бит установлен в 1, то при установке флага UDRE регистра UCSRA генерируется прерывание «регистр данных пуст» (если флаг I регистра SREG установлен в 1) 4 RXEN Разрешение приема. При установке этого бита в 1 разрешается работа приемника USART и переопределяется функционирование вывода RXD. При сбросе бита RXEN работа приемника запрещается, а его буфер сбрасывается. Значения флагов TXC, DOR и FE при этом становятся недействительными 3 TXEN Разрешение передачи. При установке этого бита в 1 разрешается работа передатчика USART и переопределяется функционирование вывода TXD. Если бит сбрасывается в 0 во время передачи, то выключение передатчика произойдет только после завершения передачи данных, находящихся в сдвиговом регистре и буфере передатчика 2 UCSZ2 Формат посылок. Этот бит совместно с битами UCSZliO регистра UCSRC используется для задания размера слов данных, передаваемых по последовательному каналу 1 RXB8 8-й бит принимаемых данных. При использовании 9-битных слов данных этот бит содержит значение старшего бита принятого слова. Содержимое этого бита должно быть считано до прочтения регистра данных UDR 0 ТХВ8 8-й бит передаваемых данных. При использовании 9-битных слов данных содержимое этого бита является старшим битом передаваемого слова. Требуемое значение должно быть занесено в этот бит до загрузки байта данных в регистр UDR Рис. 10.4. Формат регистра UCSRC
Таблица 10J. Биты регистра UCSRC Бит Название Описание 7 - Зарезервирован, читается как 0 UMSEL Режим работы USART. Если бит сброшен в 0, то модуль работает в асинхронном режиме. Если бит установлен в 1, то модуль работает в синхронном режиме 5 UPM1 Режим работы схемы контроля и формирования бита четности. Эти биты определяют функционирование схем контроля и формирования бита четности (см. подраздел 10.2.2) 4 UPMO 3 USBS Количество стоп-битов. Этот бит определяет количество стоп-битов, посылаемых передатчиком. Если бит сброшен в 0, то передатчик посылает 1 стоп-бит, если установлен в 1, то 2 стоп-бита. Для приемника содержимое этого бита безразлично 2 UCSZ1 Формат посылок. Совместно с битом UCSZ2 регистра UCSRB эти биты определяют количество битов данных в посылках (размер слова) I UCSZO 0 UCPOL Полярность тактового сигнала. Значение этого бита определяет момент выдачи и считывания данных на выводах модуля. Бит используется только при работе в синхронном режиме. При работе в асинхронном режиме он должен быть сброшен в 0. UCPOL Выдача данных на вывод TXD Считывание данных с вывода RXD 0 Спадающий фронт ХСК Нарастающий фронт ХСК 1 Нарастающий фронт ХСК Спадающий фронт ХСК 10.2.1. Скорость приема/передачи В асинхронном режиме, а также в синхронном режиме при работе в качестве ведущего скорость приема и передачи данных задается контроллером скорости передачи, функционирующим как делитель системного тактового сигнала с программируемым коэффициентом деления. Коэффициент определяется содержимым регистра контроллера скорости передачи UBRR. В блок приемника сформированный сигнал поступает сразу, а в блок передатчика — через дополнительный делитель, коэффициент деления которого (2, 8 или 16) зависит от режима работы модуля USART. Регистр UBRR является 12-битным и физически размещается в двух регистрах ввода/вывода: UBRRH, расположенном по адресу $02 ($22), и UBRRL, расположенном по адресу $09 ($29). При работе в асинхронном режиме скорость обмена определяется не только содержимым регистра UBRR, но и состоянием бита U2X регистра UCSRA. Если этот бит установлен в 1, то коэффициент деления предделителя уменьшается в два раза, а скорость обмена соответственно удваивается. При работе в синхронном режиме этот бит должен быть сброшен.
Итак, скорость обмена определяется следующим образом: • асинхронный режим (обычный, U2X = 0) BAUD = — ^ 16-(UBRR + 1) • асинхронный режим (ускоренный, U2X = 1) BAUD = — 8(UBRR+1) • синхронный режим ведущего BAUD = ^ , 2(UBRR+1)' где BAUD — скорость передачи, бит/с; /ск — тактовая частота микроконтроллера; UBRR — содержимое регистра контроллера скорости передачи (0...4095). В качестве примера в Табл. 10.4 приведены значения регистра UBRR, позволяющие получить стандартные для асинхронного режима скорости передачи при использовании различных резонаторов, а также величины ошибок получаемых значений относительно стандартных. Значения регистра UBRR, при которых получаемая скорость передачи отличается от требуемого значения меньше чем на 0.5%, выделены в таблице жирным шрифтом. Значения, дающие большую ошибку, также можно использовать, однако следует иметь в виду, что при этом снижается помехозащищенность линии передачи. При работе в синхронном режиме в качестве ведомого скорость приема и передачи определяется частотой сигнала, поступающего на вывод ХСК. Частота этого сигнала должна удовлетворять выражению /хек < /osc/4- Это ограничение связано с тем, что сигнал с вывода ХСК сначала синхронизируется с тактовой частотой микроконтроллера, а затем проходит через детектор фронтов. Задержка сигнала при прохождении этих узлов равна двум тактам.
Таблица 10.4. Пример установок регистра UBRR 1.0000 МГц 1.8432 МП* 2.0000 МГц 3.6864 МГц 4.0000 МГц 7.3728 МП* »[бит/с] U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 g g g g g g g g g g g рость ¥ й ¥ й ¥ й ¥ S Л я S ¥ S ¥ p§ ¥ ¥ 3 ¥ я ¥ 10 ¥ «о Ско] ми PQ Р 1 О Рч PQ Р I о CQ Р 1 о им pq р 1 О PQ р 1 О PQ Р i о PQ P 3 0 PQ P i 0 PQ P i 0 PQ P В О PQ P i 0 PQ p 0 2400 25 0.2 51 0.2 47 0.0 95 0.0 51 0.2 103 0.2 95 0.0 191 0.0 103 0.2 207 0.2 191 0.0 383 0.0 4800 12 0.2 2S 0? 23 0.0 47 0.0 25 0.2 51 0.2 47 0.0 95 0.0 51 0.2 103 0.2 95 0.0 191 0.0 9600 6 7.5 12 0.2 11 00 73 00 17, 0? 25 0.2 23 0.0 47 0.0 25 0.2 51 0.2 47 0.0 95 0.0 14400 3 7.8 8 -3.5 7 0.0 15 0.0 8 -3.5 16 2.1 15 0.0 31 0.0 16 2.1 34 -0.8 31 0.0 63 0.0 19 200 2 7.8 6 -7.0 5 0.0 11 0.0 6 -7.0 12 0.2 11 0.0 23 0.0 12 0.2 25 0.2 23 0.0 47 0.0 28 800 1 7.8 3 8.5 3 0.0 7 0.0 3 8.5 8 -3.5 7 0.0 15 0.0 8 -3.5 16 2.1 15 0.0 31 0.0 38 400 1 22.9 2 8.5 2 0.0 5 0.0 2 8.5 6 -7.0 5 0.0 11 0.0 6 -7.0 12 0.2 11 0.0 23 0.0 57 600 0 7.8 1 8.5 1 0.0 3 0.0 1 8.5 3 8.5 3 0.0 7 0.0 3 8.5 8 -3.5 7 0.0 15 0.0 76 800 - - 1 -18.6 1 -25.0 2 0.0 1 -18.6 2 8.5 2 0.0 5 0.0 2 8.5 6 -7.0 5 0.0 11 0.0 115 200 - - 0 8.5 0 0.0 1 0.0 0 8.5 1 8.5 1 0.0 3 0.0 1 8.5 3 8.5 3 0.0 7 0.0 230400 - - - - - - 0 0.0 - - - - 0 0.0 1 0.0 0 8.5 1 8.5 1 0.0 3 0.0 250 000 0 0.0 0 -7.8 1 -7.8 0 0.0 1 0.0 1 -7.8 3 -7.8 0.5М - - - - - - - - - - - - - - 0 -7.8 - - 0 0.0 0 -7.8 1 -7.8 КОМ 0 -7.8 Мах1* 62.5К 125К 115.2К 230.4К 125К 250К 230.4K 460.8K 250K 0.5M 460.8K 921.6K !)При UBRR = = 0 и ошибке 0.0%.
(продолжение) 8.0000 МГц 11.0592 М1ц 14.7456 МГц 16.0000 МГц 18.4320 МГц 20.0000 МГц »[бит/с] U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 U2X = 0 U2X=1 g g g g g g g g g g g g g s. 3 ¥ S ¥ VO 3 ¥ vo 3 ¥ vo 3 ¥ 3 ¥ vo 3 ¥ vo 3 vo Рн ¥ vo 3 ¥ vo Pn ¥ vo ¥ vo Ско PQ Р Omi PQ P О PQ P О PQ P 1 PQ P i о PQ P i о PQ P i о PQ P i о PQ P i о NN CQ P Oim Pn" PQ P i о PS PQ P i о 2400 207 0.2 416 -0.1 287 0.0 575 0.0 383 0.0 767 0.0 416 -0.1 832 0.0 479 0.0 959 0.0 520 0.0 1041 0.0 4800 103 0.2 207 0.2 143 0.0 287 0.0 191 0.0 383 0.0 207 0.2 416 -0.1 239 0.0 479 0.0 259 0.2 520 0.0 9600 51 0.2 103 0.2 71 0.0 143 0.0 95 0.0 191 0.0 103 0.2 207 0.2 119 0.0 239 0.0 129 0.2 259 0.2 14400 34 -0.8 68 0.6 47 0.0 95 0.0 63 0.0 127 0.0 68 0.6 138 -0.1 79 0.0 159 0.0 86 -0.2 173 -0.2 19 200 25 0.2 51 0.2 35 0.0 71 0.0 47 0.0 95 0.0 51 0.2 103 0.2 59 0.0 119 0.0 64 0.2 129 0.2 28 800 16 2.1 34 -0.8 23 0.0 47 0.0 31 0.0 63 0.0 34 -0.8 68 0.6 39 0.0 79 0.0 42 0.9 86 -0.2 38 400 12 0.2 25 0.2 17 0.0 35 0.0 23 0.0 47 0.0 25 0.2 51 0.2 29 0.0 59 0.0 32 -1.4 64 0.2 57 600 8 -3.5 16 2.1 11 0.0 23 0.0 15 0.0 31 0.0 16 2.1 34 -0.8 19 0.0 39 0.0 21 -1.4 42 0.9 76 800 6 -7.0 12 0.2 8 0.0 17 0.0 11 0.0 23 0.0 12 0.2 25 0.2 14 0.0 29 0.0 15 1.7 32 -1.4 115 200 3 8.5 8 -3.5 5 0.0 11 0.0 7 0.0 15 0.0 8 -3.5 16 2.1 9 0.0 19 0.0 10 -1.4 21 -1.4 230400 1 8.5 3 8.5 2 0.0 5 0.0 3 0.0 7 0.0 3 8.5 8 -3.5 4 0.0 9 0.0 4 8.5 10 -1.4 250 ООО 1 0.0 3 0.0 2 -7.8 5 -7.8 3 -7.8 6 5.3 3 0.0 7 0.0 4 -7.8 8 2.4 4 0.0 9 0.0 0.5М 0 0.0 1 0.0 - - 2 -7.8 1 -7.8 3 -7.8 1 0.0 3 0.0 - - 4 -7.8 - - 4 0.0 1.0М - - 0 0.0 - - - - 0 -7.8 1 -7.8 0 0.0 1 0.0 - - - - - - - - Мах0 0.5М 1.0M 691.2K 1.3824M 921.6K 1.8432K 1.0M 2.0M 1.152M 2.304M 1.25M 2.5M ]) При UBRR = = 0 и ошибке 0.0%.
10.2.2. Формат кадра Под кадром в данном случае понимается совокупность одного слова данных и сопутствующей информации (см. Рис. 10.5). Кадр начинается со старт-бита, за которым следует младший бит слова данных. После старшего бита слова данных следует один или два стоп-бита. Если включена схема формирования бита четности, то этот бит включается между старшим битом слова данных и первым стоп-битом. Рис. 10.5. Формат кадра Формат кадра определяется различными битами регистров UCSRB и UCSRC. В частности, размер слова данных определяется битами UCSZ2...UCSZ0 в соответствии с Табл. 10.5. Таблица 10.5. Определение размера слова данных UCSZ2 UCSZ1 UCSZ0 Размер слова данных 0 0 0 5 бит 0 0 1 6 бит 0 1 0 7 бит 0 1 1 8 бит 1 0 0 Зарезервировано 1 0 1 Зарезервировано 1 1 0 Зарезервировано 1 1 1 9 бит Выбор количества стоп-битов осуществляется с помощью бита USBS регистра UCSRC. Если этот бит сброшен в 0, то блок передатчика формирует 1 стоп-бит в конце посылки. В противном случае, если бит установлен
в 1, то блок передатчика формирует 2 стоп-бита. Следует отметить, что приемником второй стоп-бит игнорируется, и соответственно ошибки кадрирования выявляются только для первого стоп-бита. Биты UPM1:UPM0 регистра UCSRC определяют функционирование схемы контроля четности модуля USART согласно Табл. 10.6. Таблица 10.6. Управление схемой контроля четности UPM1 UPM0 Режим работы 0 0 Выключена 0 1 Зарезервировано 1 0 Включена, проверка на четность (even parity) 1 1 Включена, проверка на нечетность (odd parity) Значение бита четности получается путем выполнения операции «Исключающее ИЛИ» над всеми битами передаваемого слова данных. Если используется проверка на нечетность (odd parity), то полученный результат инвертируется: i>EVEN = dn_ j е... е йъ е d2 е е d0 е о p0DD = dn_, е... е d3 е d2 е d{ е d0 © о. Если схема контроля четности включена, то бит четности, как уже было сказано, вставляется передатчиком между старшим битом передаваемых данных и первым стоп-битом. 10.2.3. Передача данных Работа передатчика разрешается установкой в 1 бита TXEN регистра UCSRB. При установке бита вывод TXD подключается к передатчику USART и начинает функционировать как выход, независимо от установок регистров управления портом. Если используется синхронный режим работы, то переопределяется также функционирование вывода ХСК. Передача инициируется записью передаваемых данных в буферный регистр передатчика — регистр данных UDR. После этого данные пересылаются из регистра UDR в сдвиговый регистр передатчика. Одновременно, если используются 9-битные данные, значение бита ТХВ8 регистра UCSRB копируется в 9-й бит сдвигового регистра. При этом возможны два варианта:
• запись в регистр UDR осуществляется в тот момент, когда передатчик находится в состоянии ожидания (предыдущие данные уже переданы). В этом случае данные пересылаются в сдвиговый регистр сразу же после записи в регистр UDR; • запись в регистр UDR осуществляется во время передачи. В этом случае данные пересылаются в сдвиговый регистр после передачи последнего стоп-бита текущего кадра. Очевидно, что 9-й бит данных должен быть загружен в бит ТХВ8 до записи младшего байта слова в регистр данных. После пересылки слова данных в сдвиговый регистр флаг UDRE регистра UCSRA устанавливается в 1, что означает готовность передатчика к получению нового слова данных. В этом состоянии флаг остается до следующей записи в буфер. Одновременно с пересылкой в регистре формируется служебная информация — старт-бит, возможный бит четности, а также один или два стоп-бита. После загрузки сдвигового регистра его содержимое начинает сдвигаться вправо и поступать на вывод TXD в порядке, рассмотренном в подразделе 10.2.2. Скорость сдвига определяется настройками контроллера тактовых сигналов. В синхронном режиме изменение состояния вывода TXD происходит по одному из фронтов сигнала ХСК. Если бит UCPOL регистра UCSRC сброшен в 0, изменение состояния вывода происходит по нарастающему фронту сигнала, если же установлен в 1 — по спадающему фронту, как показано на Рис. 10.6. Рис. 10.6. Временные диаграммы для синхронного режима работы USART Если во время передачи в регистр UDR было записано новое слово данных, то после передачи последнего стоп-бита оно автоматически пересылается в сдвиговый регистр. Если же к моменту окончания передачи кадра буфер передатчика будет пуст, устанавливается флаг прерывания «пере-
дача завершена» ТХС регистра UCSRA. Сброс флага осуществляется аппаратно при входе в подпрограмму обработки соответствующего прерывания или программно, записью 1 в этот бит. Выключение передатчика осуществляется сбросом бита TXEN регистра UCSRB. Если в момент выполнения этой команды осуществлялась передача, то сброс бита произойдет только после завершения текущей и отложенной передач, т.е. после очистки сдвигового и буферного регистров передатчика. При выключенном передатчике вывод TXD может использоваться как контакт ввода/вывода общего назначения. Ниже приведен простейший пример подпрограммы передачи по интерфейсу USART. Эта подпрограмма ждет очистки буфера передатчика, а затем загружает в него новое значение. Пример на ассемблере USART_Transmit: ; Ждать очистки буфера передатчика Sbis UCSRA,UDRE Rjmp USART_Transmit ; Скопировать 9-й бит данных из г17 в ТХВ8 cbi UCSRB,TXB8 sbrc rl7,0 sbi UCSRB, TXB8 ; Загрузить младший байт данных в буфер, начать передачу out UDR,rl6 ret Пример на Си void USART_Transmit(unsigned int data) { /* Ждать очистки буфера передатчика */ while ( !( UCSRA & (1«UDRE))) /* Скопировать 9-й бит данных из г17 в TXB8 */ UCSRB &= ~(1«ТХВ8) ; if (data & 0x100) UCSRB |= (1«TXB8); /* Загрузить младший байт данных в буфер, начать передачу */ UDR = data } 10.2.4. Прием данных Работа приемника разрешается установкой бита RXEN регистра UCSRB. При установке бита вывод RXD подключается к приемнику USART и начинает функционировать как вход, независимо от установок регистров управления портом. Если используется синхронный режим работы, то переопределяется также функционирование вывода ХСК.
Прием данных начинается сразу же после обнаружения приемником корректного старт-бита. Каждый бит содержимого кадра затем считыва- ется с частотой, определяемой установками контроллера скорости передачи или тактовым сигналом ХСК. Считанные биты данных последовательно помещаются в сдвиговый регистр приемника до обнаружения первого стоп-бита кадра. После этого содержимое сдвигового регистра пересылается в буфер приемника, из которого принятое значение может быть получено путем чтения регистра данных модуля. При использовании 9-битных слов данных значение старшего бита может быть определено по состоянию флага RX8 регистра UCSRB. Причем, содержимое старшего бита данных должно быть считано до обращения к регистру данных. Это связано с тем, что флаг RX8 отображает значение старшего бита слова данных кадра, находящегося на верхнем уровне буфера приемника, состояние которого при чтении регистра данных изменится. Если во время приема кадра схема контроля четности была включена, то она вычисляет бит четности для всех битов принятого слова данных и сравнивает его с принятым битом четности. Результат проверки запоминается в буфере приемника вместе с принятым словом данных и стоп-битами. Наличие или отсутствие ошибки контроля четности может быть затем определено по состоянию флага UPE. Этот флаг устанавливается в 1, если следующее слово, которое может быть прочитано из буфера, имеет ошибку контроля четности. При выключенном контроле четности флаг UРЕ всегда читается как 0. Блок приемника модулей USART имеет еще два флага, показывающих состояние обмена — флаг ошибки кадрирования FE и флаг переполнения DOR. Флаг FE устанавливается в 1, если значение первого стоп-бита принятого кадра не соответствует требуемому, т.е. равно 0. Флаг DOR индицирует потерю данных из-за переполнения буфера приемника. Этот флаг устанавливается в 1 в случае приема старт-бита нового кадра при заполненных буфере и сдвиговом регистре приемника. Установленный флаг DOR означает, что между прошлым байтом, считанным из регистра UDR, и байтом, считанным в данный момент, произошла потеря одного или нескольких кадров. Обратите внимание на то, что все флаги ошибок буферизуются вместе со словом данных, т.е. соответствующие биты регистра UCSRA относятся к кадру, слово данных которого будет прочитано при следующем обращении к регистру данных UDR. Поэтому состояние этих флагов должно быть считано перед обращением к регистру данных. Кроме того, для совместимости с будущими устройствами рекомендуется при записи в регистр
UCSRA сбрасывать соответствующие этим флагам биты записываемого значения в 0. Для индикации состояния приемника в модулях USART используется флаг прерывания «прием завершен» RXC регистра UCSRA. Этот флаг устанавливается в 1 при наличии в буфере приемника непрочитанных данных и сбрасывается при опустошении буфера (после считывания всех находящихся в нем данных). Выключение приемника осуществляется сбросом бита RXEN регистра UCSRB. В отличие от передатчика приемник выключается сразу же после сброса бита, т.е. кадр, принимаемый в этот момент, теряется. Кроме того, при выключении приемника очищается его буфер, т.е. теряются также все непрочитанные данные. При выключенном приемнике вывод RXD может использоваться как контакт ввода/вывода общего назначения. Пример подпрограммы приема по интерфейсу USART приведен ниже. Как и в предыдущем примере, здесь используется опрос флага прерывания. Пример на ассемблере USART_Receive: ; Ждать загрузки данных в буфер приемника Sbis UCSRA,RXC Rjmp USART_Receive ; Прочитать 9-й бит данных и флаги состояния in rl8,UCSRA in rl7,UCSRB ; Прочитать младший байт данных in rl6,UDR ; В случае ошибки вернуть -1 Andi rl8, (1«FE) I (l«DOR) I (1«UPE) breq no_error ldi rl7,HIGH(-l) ldi rl8,LOW(-l) no_error: ; Выделить 9-й бит данных lsr rl7 andi rl7,0x01 ret Пример на Си unsigned int USART_Receive(void) { unsigned char status, resh, resl /* Ждать заполнения буфера приемника */ while(!(UCSRA & (1<-RXC))) /* Прочитать 9-й бит данных и флаги состояния */ status = UCSRA; resh = UCSRB; /* Прочитать младший байт данных */
resl = UDR; /* В случае ошибки вернуть -1* / if (status & (1«FE) I (l«DOR) I (1«UPE) ) return -1; /* Выделить 9-й бит данных */ resh = (resh»l) & 0x01; return ((resh«8) I resl); } Собственно прием всех битов кадра осуществляется по-разному, в зависимости от режима работы модуля. При работе модуля USART в синхронном режиме состояние вывода RXD считывается по одному из фронтов сигнала ХСК. Если бит UCPOL регистра UCSRC сброшен в 0, считывание состояния вывода происходит по спадающему фронту сигнала ХСК, если же установлен в 1 — по нарастающему фронту сигнала. Другими словами, считывание данных с вывода RXD и их выдача на вывод TXD происходят по противоположным фронтам (см. Рис. 10.6). Для обеспечения приема в асинхронном режиме работы используются схемы восстановления тактового сигнала и данных. Схема восстановления тактового сигнала предназначена для синхронизации внутреннего тактового сигнала, формируемого контроллером скорости передачи, и кадров, поступающих на вывод RXD микроконтроллера. Схема восстановления данных осуществляет считывание и фильтрацию каждого бита принимаемого кадра. Схема восстановления тактового сигнала осуществляет опрос входа приемника с целью определения старт-бита кадра. Частота опроса зависит от состояния бита U2X регистра UCSRA. В обычном режиме (при U2X = = 0) частота опроса в 16 раз превышает скорость передачи данных, а в ускоренном режиме (при U2X = 1) — в 8 раз. Обнаружение изменения уровня сигнала на выводе RXD с 1 (режим ожидания) на 0 интерпретируется как возможное появление переднего фронта старт-бита. После этого в нормальном режиме проверяется значение 8-й, 9-й и 10-й выборок входного сигнала, а в ускоренном режиме — 4-й, 5-й и 6-й выборок (Рис. 10.7, а). Если значение хотя бы двух выборок из указанных равно лог. 1, старт-бит считается ложным (помеха), а приемник переходит к ожиданию следующего изменения входного сигнала с 1 на 0. В противном случае считается, что обнаружен старт-бит новой последовательности, с которым синхронизируется внутренний тактовый сигнал приемника. После этого начинает работать схема восстановления данных. Решение о значении принятого бита принимается также по результатам 8-й, 9-й и 10-й (4-й, 5-й и 6-й) выборок входного сигнала (Рис. 10.7, б). Состоянием бита считается логическое значение, которое было получено, по меньшей мере, в двух из трех выборок. Процесс распознавания повторяется для всех битов принимаемого кадра, включая первый стоп-бит.
Рис. 10.7. Распознавание битов кадра: а — старт-бит; б — остальные биты Из сказанного следует, что старт-бит нового кадра может передаваться сразу же после последней выборки, используемой для определения значения бита. В обычном режиме работы формирование старт-бита может начаться в момент А, а в ускоренном режиме — в момент В (Рис. 10.8). Момент С, обозначенный на рисунке, определяет максимальную длительность стоп-бита. Рис. 10.8. Распознавание стоп-бита и последующего старт-бита 10.3. Мультипроцессорный режим работы Режим мультипроцессорного обмена позволяет осуществлять связь между несколькими ведомыми микроконтроллерами и одним ведущим. В этом режиме каждый ведомый микроконтроллер имеет свой уникальный адрес. Если ведущий микроконтроллер хочет что-либо передать, он
посылает адресный байт, определяющий, к какому из микроконтроллеров он собирается обратиться. Если какой-либо из ведомых микроконтроллеров распознал свой адрес, он переходит в режим приема данных и соответственно принимает последующие байты как данные. Остальные ведомые микроконтроллеры игнорируют принимаемые байты до посылки ведущим нового адресного байта. Включение режима фильтрации принимаемых кадров, не содержащих адреса, осуществляется установкой бита МРСМ регистра UCSRA в 1. В микроконтроллере, выполняющем роль ведущего, должен быть установлен режим передачи 9-битных данных. При передаче адресного байта старший бит должен устанавливаться в 1, а при передаче байтов данных он должен сбрасываться в 0. В ведомых микроконтроллерах механизм приема зависит от режима работы приемника. Если приемник настроен на прием 5...8-битных данных, то идентификация содержимого кадра (адрес/данные) осуществляется по 1-му стоп-биту. При приеме 9-битных данных идентификация содержимого кадра осуществляется по старшему биту слова данных. Если указанные биты установлены в 1, значит, кадр содержит адрес, в противном случае — данные. Для осуществления обмена данными в мультипроцессорном режиме необходимо действовать следующим образом: 1. Все ведомые микроконтроллеры переключаются в режим мультипроцессорного обмена установкой бита МРСМ регистра UCSRA в 1. 2. Ведущий микроконтроллер посылает адресный кадр, а все ведомые микроконтроллеры его принимают. Соответственно, в каждом из ведомых микроконтроллеров устанавливается флаг RXC регистра UCSRA. 3. Каждый из ведомых микроконтроллеров считывает содержимое регистра данных. Микроконтроллер, адрес которого совпал с адресом, посланным ведущим, сбрасывает бит МРСМ в 0. 4. Адресованный микроконтроллер начинает принимать кадры, содержащие данные. Если приемник ведомого микроконтроллера настроен на прием 5...8-битных данных, то будет генерироваться ошибка кадрирования, поскольку первый стоп-бит будет равен 0 (этого можно избежать, используя два стоп-бита). В остальных ведомых микроконтроллерах бит МРСМ установлен в 1, поэтому кадры данных будут игнорироваться. 5. После приема последнего байта данных адресованный микроконтроллер устанавливает бит МРСМ в 1 и снова ожидает приход кадра с адресом. Процесс повторяется со 2-го пункта.
ГЛАВА Универсальный последовательный интерфейс USI 11.1. Общие сведения Модуль универсального последовательного интерфейса (Universal Serial Interface — USI) реализован в моделях ATtiny2313x, ATtiny24x/44x/84x, ATtiny25x/45x/85x и ATtiny26x. Этот модуль является своего рода «полуфабрикатом», предоставляющим базовые аппаратные ресурсы, необходимые для осуществления обмена по последовательному каналу. Используя данный модуль, можно достичь гораздо большей скорости передачи и получить более компактный код, нежели при чисто программной реализации различных протоколов обмена. Упрощенная структурная схема модуля USI приведена на Рис. 11.1. Рис. 11.1. Структурная схема модуля USI
В общей сложности модуль USI задействует три линии ввода/вывода микроконтроллера, указанные в Табл. 11.1. Как и в большинстве прочих периферийных устройств, эти выводы являются линиями портов ввода/вывода общего назначения. Таблица 11.1. Выводы, используемые модулем USI Вывод 2313х 24х/44х/84х 25х/45х/85х 26х Назначение DO PB6 РА5 РВ1 РВ1 Выход данных (трехпроводный режим) DI РВ5 РА6 РВО РВО Вход данных (трехпроводный режим) SDA Линия данных (двухпроводный режим) USCK РВ7 РА4 РВ2 РВ2 Вход/выход тактового сигнала (трехпроводный режим) SCL Линия тактового сигнала (двухпроводный режим) В 8-битном сдвиговом регистре содержатся входящие и исходящие данные. Старший бит сдвигового регистра подключается, в зависимости от режима работы, к одной из двух линий данных модуля. Входящие биты всегда считываются с вывода DI, независимо от конфигурации модуля. Четырехбитный счетчик, показанный на Рис. 11.1, доступен как для чтения, так и для записи. Кроме того, при его переполнении может генерироваться прерывание. Поскольку сдвиговый регистр и счетчик используют один и тот же тактовый сигнал, последний может считать число переданных или принятых битов и генерировать прерывание по окончании процесса обмена. Обратите внимание, что при использовании внешнего тактового сигнала изменение состояния счетчика происходит по каждому фронту сигнала, т.е. счетчик считает количество фронтов, а не битов. Тактовый сигнал может сниматься с входа USCK, с выхода блока сравнения таймера/счетчика ТО или формироваться программно. Блок управления тактовым сигналом используется в двухпроводном режиме и может генерировать прерывание при обнаружении на шине состояния СТАРТ. Кроме того, он может формировать на шине циклы ожидания, удерживая на линии SCL НИЗКИЙ уровень после обнаружения состояния СТАРТ или после переполнения счетчика. Прежде чем приступить к изучению собственно модуля USI, необходимо познакомиться с принципами обмена по трехпроводной (SPI) и двухпроводной (TWI) шинам, реализуемого с помощью данного модуля. 11.2. Основные сведения об интерфейсе SPI Основное назначение последовательного интерфейса SPI (Serial Peripheral Interface) — организация обмена данными между микроконтроллером и различными периферийными устройствами, такими как цифровые потенциометры, ЦАП/АЦП, FLASH-ПЗУ и др.
Обмен по шине SPI осуществляется по принципу «ведущий — ведомый», т.е. все транзакции на шине инициируются только одним устройством. Часто шину SPI называют также трехпроводной последовательной шиной, поскольку для обмена используются три линии: линия тактового сигнала, линия данных от ведущего к ведомому и линия данных от ведомого к ведущему. Соответственно, для подключения к шине любое SPI-совместимое устройство имеет три вывода: • SCK — выход (ведущий)/вход (ведомый) тактового сигнала; • MISO — вход (ведущий)/выход (ведомый) данных; • MOSI — выход (ведущий)/вход (ведомый) данных. В устройствах, которые могут работать только в качестве ведущих или только в качестве ведомых, выводы для подключения линий данных часто обозначаются как DI (вход данных) и DO (выход данных). Во всех SPI-совместимых периферийных устройствах, являющихся ведомыми, имеется также вывод SS, предназначенный для выбора данного ведомого устройства. При НИЗКОМ уровне на этом выводе внутренние узлы интерфейса подключены к соответствующим выводам устройства, а при ВЫСОКОМ — все выводы интерфейса находятся в третьем состоянии, т.е. устройство отключено от шины. Таким образом, ведущий может управлять несколькими ведомыми, подключенными к одной шине SPI, подавая на вход SS одного из них сигнал ВЫСОКОГО уровня, а на входы SS остальных — сигнал НИЗКОГО уровня. Соединение двух устройств (ведущий — ведомый) по интерфейсу SPI показано на Рис. 11.2. Вывод SCK ведущего устройства (микроконтроллера) является выходом тактового сигнала, а вывод ведомого — входом. Рис. 11.2. Соединение двух устройств по интерфейсу SPI Передача данных осуществляется следующим образом. Ведущий формирует на линии SCK тактовые импульсы и по каждому импульсу выдает на вывод MOSI очередной бит данных, который считывается ведомым. Одновременно с передачей данных от ведущего к ведомому происходит
передача и в обратном направлении — по каждому импульсу на линии SCK ведомый выставляет на вывод MISO очередной бит ответных данных, который считывается ведущим. После передачи заданного числа битов (обычно 8, но может быть и больше) ведущий прекращает генерацию тактового сигнала и цикл обмена завершается. Порядок передачи битов данных (от старшего бита к младшему, или наоборот) определяется спецификацией конкретного ведомого устройства. Спецификация интерфейса SPI предусматривает 4 режима передачи данных. Эти режимы различаются соответствием между фазой (момент выдачи и считывания сигнала) тактового сигнала SCK, его полярностью и передаваемыми данными. • Режим О Импульсы положительной полярности; считывание данных ведущим производится по переднему (нарастающему) фронту тактового сигнала. • Режим 1 Импульсы положительной полярности; считывание данных ведущим производится по заднему (спадающему) фронту тактового сигнала. • Режим 2 Импульсы отрицательной полярности; считывание данных ведущим производится по переднему (спадающему) фронту тактового сигнала. • Режим 3 Импульсы отрицательной полярности; считывание данных ведущим производится по заднему (нарастающему) фронту тактового сигнала. Соответствующие этим режимам форматы обмена данными через SPI приведены на Рис. 11.3 (передача ведется от старшего бита к младшему). Рис. 11.3. Режимы передачи данных по SPI
11.3. Основные сведения об интерфейсе TWI Интерфейс TWI (12С) позволяет объединить вместе до 128 различных устройств с помощью двунаправленной шины, состоящей всего из двух линий: линии тактового сигнала (SCL) и линии данных (SDA). Единственными дополнительными элементами для реализации шины являются два подтягивающих резистора, по одному на каждую линию (см. Рис. 11.4). Обмен по шине TWI осуществляется по принципу «ведущий — ведомый». Рис. 11.4. Соединение устройств с помощью шины TWI Шинные формирователи всех TWI-совместимых устройств выполняются по схеме с открытым коллектором (стоком), что позволяет реализовать функцию «монтажное И». Соответственно, НИЗКИЙ уровень на линии устанавливается тогда, когда одно или более устройств выставляют на линию 0, а ВЫСОКИЙ уровень — когда все устройства, подключенные к линии, устанавливают свои выходы в третье состояние. Поскольку шина TWI является последовательной, данные передаются по ней (по линии SDA) побитно. Каждый передаваемый бит сопровождается импульсом на линии тактового сигнала SCL. Причем, сигнал на линии SDA должен быть стабильным в течение всего времени, пока на шине SCL присутствует 1 (см. Рис. 11.5). Единственным исключением из этого правила являются два особых состояния шины TWI — СТАРТ и СТОП. Рис. 11.5. Корректная выдача данных на шину SDA
Состояния СТАРТ и СТОП формируются ведущим соответственно в начале и в конце передачи данных. Между этими состояниями шина считается занятой и другие ведущие не должны пытаться управлять ею. Если ведущий хочет начать передачу нового блока данных без потери/восстановления контроля над шиной, он может сформировать состояние СТАРТ до формирования состояния СТОП. Формируемое таким образом состояние называется «повторный СТАРТ» (ПОВСТАРТ), а шина считается занятой до последующего формирования состояния СТОП. Состояния СТАРТ (ПОВСТАРТ) и СТОП формируются путем изменения уровня сигнала на линии SDA при ВЫСОКОМ уровне на линии SCL. Состоянию СТАРТ (ПОВСТАРТ) соответствует смена уровня с 1 на 0, а состоянию СТОП — наоборот, с 0 на 1 (Рис. 11.6). Рис. 11.6. Состояния СТАРТ, СТОП и ПОВСТАРТ Протокол интерфейса TWI позволяет подключать к шине несколько ведущих устройств (режим Multi-Master). При этом могут возникать различные проблемы, одной из которых является несовпадение частот тактовых сигналов, генерируемых разными ведущими. Однако благодаря подсоединению всех устройств к линии SCL по схеме «монтажное И» длительность тактовых импульсов на этой линии определяется тактовым сигналом с наименьшей длительностью импульсов. А пауза между тактовыми импульсами, наоборот, определяется тактовым сигналом с наибольшей паузой между импульсами. Помимо этого, все ведущие должны контролировать уровень, присутствующий на линии SCL, и определять момент начала отсчета импульса или паузы тактового сигнала по соответствующему изменению сигнала (Рис. 11.7). Другой задачей, которую приходится решать при подключении к шине нескольких ведущих устройств, является задача распределения приоритетов в случае, если два и более ведущих одновременно пытаются начать передачу. При возникновении такой ситуации передачу может осуществить только один ведущий, остальные же должны переключиться в режим
Рис. 11.7. Синхронизация сигнала SCL нескольких ведущих ведомого. Причем, передаваемые данные во время распределения приоритетов не должны искажаться. Для решения описанной задачи все ведущие устройства после выдачи данных на линию SDA контролируют ее состояние. Если состояние линии отличается от того, в которое ее переводил ведущий, он теряет приоритет (Рис. 11.8). Следует напомнить, что такое возможно только в случае выдачи им сигнала ВЫСОКОГО уровня во время выдачи другими ведущими (получившими приоритет) сигнала НИЗКОГО уровня. Ведущий, потерявший приоритет, должен немедленно переключиться в режим ведомого и проверить, не был ли он адресован каким-либо из ведущих, получивших приоритет. При этом он должен продолжать удерживать на линии SDA сигнал ВЫСОКОГО уровня. Однако он может продолжать генерировать тактовый сигнал до окончания передачи текущего пакета. Процесс распределения приоритетов продолжается до тех пор, пока на шине не останется только один ведущий. В случае, если несколько ведущих пытаются адресовать одного и того же ведомого, процесс распределения приоритетов продолжается и во время передачи пакета данных. Отсюда следует, в частности, что все циклы обмена должны содержать одинаковое количество пакетов данных, в противном случае результат процесса распределения приоритетов будет неопределенным. При этом следует помнить, что процесс распределения приоритетов не должен выполняться между: • состоянием ПОВСТАРТ и передачей бита данных; • состоянием СТОП и передачей бита данных; • состоянием ПОВСТАРТ и СТОП.
Рис. 11.8. Распределение приоритетов между двумя ведущими Предотвращать возникновение перечисленных ситуаций должно программное обеспечение устройств, подключенных к шине. При передаче данных по шине TWI вместе с ними передается определенная служебная информация. Совокупность данных и соответствующей служебной информации называется пакетом. Соответственно, различают адресные пакеты и пакеты данных. Формат адресного пакета Все адресные пакеты, передаваемые по шине TWI, имеют длину 9 бит. Пакет содержит_7-битный адрес (первым передается старший бит), управляющий бит R/W и бит квитирования АСК (Рис. 11.9). Значение управляющего бита R/W определяет направление передачи данных по шине. Бит, сброшенный в 0, означает передачу данных, а установленный в 1 — запрос данных (чтение). Пакеты со сброшенным и установленным управляющим битом обозначаются соответственно SLA-Wh SLA-R. При распознавании ведомым своего адреса он должен сформировать подтверждение (АСК) путем выдачи на линию SDA сигнала НИЗКОГО уровня во время 9-го тактового импульса. Если ведомый по каким-либо причинам не может обслужить запрос ведущего, он должен во время 9-го тактового импульса удерживать на линии сигнал ВЫСОКОГО уровня (NACK).
Рис. 11.9. Формат адресного пакета Ведомым устройствам могут быть назначены любые адреса, за исключением нулевого адреса и адресов из диапазона 1111000... 1111111. Нулевой адрес зарезервирован для реализации так называемых общих вызовов, а адреса формата 111 lxxx должны быть зарезервированы для использования в дальнейшем. Общий вызов используется, когда ведущий хочет передать всем ведомым, подключенным к шине, одно и тоже сообщение. При приеме адресного пакета с нулевым адресом и сброшенным управляющим битом (запрос на передачу) все ведомые устройства, подключенные к шине, должны сформировать подтверждение. Исключение составляют лишь те устройства, в которых распознавание общего вызова по каким-либо причинам запрещено. Соответственно, последующие пакеты данных, посылаемые ведущим, будут получены всеми ведомыми устройствами, распознавшими адрес общего вызова. Очевидно, что общий вызов с установленным управляющим битом (запрос на чтение) не имеет смысла, поскольку различные устройства не могут одновременно осуществлять передачу данных по шине. Формат пакета данных Все пакеты данных, передаваемые по шине TWI, тоже имеют длину 9 бит. Пакет состоит из байта данных (первым передается старший бит) и бита квитирования АСК (Рис. 11.10). Генерация тактового сигнала и формирование состояний СТАРТ и СТОП осуществляется ведущим. Приемник, в свою очередь, должен после приема каждого байта формировать подтверждение (АСК) путем выдачи на линию SDA сигнала НИЗКОГО уровня во время 9-го тактового импульса. Если приемник получил послед-
ний байт или по каким-либо другим причинам не может продолжать прием данных, он должен во время 9-го тактового импульса удерживать на линии сигнал ВЫСОКОГО уровня (NACK). Не получив подтверждения от приемника, ведущий может прекратить передачу данных, сформировав состояние СТОП. Рис. 11.10. Формат пакета данных На практике каждый цикл обмена по шине TWI состоит из следующих этапов (Рис. 11.11): 1. Формирование состояния СТАРТ. 2. Передача адресного пакета SLA+R/W. 3. Передача одного или нескольких пакетов данных. 4. Формирование состояния СТОП. Рис. 11.11. Типичный цикл обмена
Скорость обмена по шине TWI задается ведущим, так как именно он генерирует тактовые импульсы. Однако, если ведомый не может принимать данные с такой скоростью или ему просто требуется время на обработку данных между приемом пакетов, он может увеличить паузу между тактовыми импульсами, удерживая на линии SCL сигнал НИЗКОГО уровня. 11.4. Использование модуля USI Взаимодействие с модулем USI осуществляется, в зависимости от модели, посредством трех или четырех регистров ввода/вывода: • буферный регистр USIBR, адрес $0F ($2F) (отсутствует в ATtiny2313x и ATtiny26x); • регистр данных USIDR, адрес $0F ($2F); • регистр состояния USISR, адрес $0Е ($2Е); • регистр управления USICR, адрес $0D ($2D). При чтении/записи регистра данных USIDR осуществляется доступ непосредственно к сдвиговому регистру модуля. В моделях ATtiny24x/44x/84x и ATtiny25x/45x/85x данные можно считывать не только из регистра USIDR, но и из буферного регистра USIBR (регистр только для чтения). Содержимое сдвигового регистра перегружается в регистр USIBR по окончании каждой транзакции. Тактовый сигнал, используемый для тактирования сдвигового регистра, определяется состоянием битов USICS1:0 регистра USICR. Старший бит регистра данных подключается к используемому выходному контакту модуля (DO или SDA) через триггер-защелку. При использовании внешнего тактового сигнала (USICS1 = 1) защелка открыта в первом полупериоде тактового сигнала, а при использовании внутреннего тактового сигнала (USICS1 = 0) защелка открыта постоянно. Применение триггера-защелки гарантирует, что считывание данных с входа и выдача их на выход будут осуществляться по противоположным фронтам тактового сигнала. Формат регистра управления USICR показан на Рис. 11.12, а описание его битов приведено в Табл. 11.2. Рис. 11.12. Формат регистра USICR
Таблица 11.2. Биты регистра USICR Бит Название Описание 7 USISIE Разрешение прерывания при обнаружении состояния СТАРТ. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то прерывание от детектора состояния СТАРТ разрешено 6 USIOIE Разрешение прерывания при переполнении счетчика. Если в этом бите записана 1 и флаг I регистра SREG также установлен в 1, то прерывание от счетчика разрешено 5 USIWM1 Режим работы модуля USI. Эти биты определяют функционирование выходных контактов модуля согласно Табл. 11.3. Эти биты не влияют на входы тактового сигнала и данных, поэтому прием данных, а также тактирование сдвигового регистра и счетчика внешним тактовым сигналом могут осуществляться, даже если выходы модуля отключены от контактов ввода/вывода микроконтроллера 4 USIWMO 3 USICS1 Выбор тактового сигнала. Эти биты определяют источник тактового сигнала для сдвигового регистра и счетчика модуля согласно Табл. 11.4 2 USICSO 1 USICLK Строб тактового сигнала. Назначение этого бита зависит от установок битов USICS1:0 (см. Табл. 11.4). Если выбран режим программного формирования тактового сигнала (USICS1:0 = 00), то установка данного бита в 1 вызывает сдвиг содержимого сдвигового регистра и инкрементирование счетчика. Сразу же после установки строба (в том же такте) изменяется состояние выхода модуля. В сдвиговый регистр вдвигается значение, считанное в предыдущем такте. При чтении бита возвращается 0. Если используется внешний тактовый сигнал (USICS1 = 1), то бит USICLK используется в качестве селектора — при установке его в 1 тактирование счетчика осуществляется при помощи бита USITC 0 USITC Переключение состояния вывода тактового сигнала. При записи 1 в этот бит состояние линии USCK/SCL меняется на противоположное. Если формируемый сигнал необходимо вывести наружу, бит DDB4 регистра DDRE должен быть установлен в 1. При чтении бита USITC возвращается 0. Если используется внешний тактовый сигнал (USICS1 = 1) и бит USICLK установлен в 1, то запись 1 вбит USITC вызывает инкрементирование счетчика. Благодаря этому обеспечивается раннее обнаружение завершения обмена при работе модуля в качестве ведущего
Таблица 11.3. Задание режима работы модуля USI USIWM1 USIWM0 Описание 0 0 Выходы модуля и детектор состояния СТАРТ отключены. Выводы РЕ4...РЕ6 работают как линии ввода/вывода общего назначения 0 1 Трехпроводный режим. Используются выводы DO, DI и USCK. Значение на выходе данных (DO) замещает значение соответствующего бита регистра порта. При этом направление передачи данных все равно определяется регистром DDRE. Если линия порта настроена на вход, управление подтяжкой осуществляется соответствующим битом регистра PORTE. Вход данных (DI) и линия тактового сигнала (USCK) не влияют на нормальное функционирование порта микроконтроллера. При работе в качестве ведущего генерация тактовых импульсов осуществляется переключением состояния бита регистра PORTE (для этого можно использовать бит USITC регистра USICR). При этом вывод микроконтроллера должен быть выходом (DDB4=1) 1 0 Двухлроводный режим. Используются выводы SDA и SCL. Оба вывода являются двунаправленными и подключены к выходным драйверам с открытым стоком. Эти драйверы включаются установкой в 1 соответственно битов DDB5 и DDB4 регистра DDRE. После включения драйвер линии SDA формирует на ней НИЗКИЙ уровень, если на выходе сдвигового регистра или в бите PORTE5 присутствует 0. В противном случае линия высвобождается. Аналогично, драйвер линии SCL формирует на ней НИЗКИЙ уровень либо по сигналу ох детектора состояния СТАРТ (для высвобождения линии следует сбросить флаг USISIF регистра USISR), либо если бит PORTE4 сброшен в 0. Таким образом, внутренние подтягивающие резисторы на линиях РЕ4 и РЕ5 в этом режиме отключены. Состояние контактов, соответствующих линиям SDA и SCL, может быть считано обычным образом 1 1 Двухлроводный режим. Используются выводы SDA и SCL. Этот режим аналогичен предыдущему, за исключением того, что НИЗКИЙ уровень на линию SCL также выдается при переполнении счетчика. В этом состоянии линия удерживается до сброса флага переполнения USIOIF регистра USISR
Таблица 11.4. Выбор тактовых сигналов модуля USI USICS1 USICS0 USICLK Источник тактовых импульсов сдвигового регистра Источник тактовых импульсов 4-битного счетчика 0 0 0 Тактовый сигнал отсутствует Тактовый сигнал отсутствует 0 0 1 Программный строб (USICLK) Программный строб (USICLK) 0 1 X Блок сравнения таймера/счетчика ТО Блок сравнения таймера/счетчика ТО 1 0 0 Внешний сигнал, нарастающий фронт Внешний сигнал, оба фронта 1 1 0 Внешний сигнал, спадающий фронт Внешний сигнал, оба фронта 1 0 1 Внешний сигнал, нарастающий фронт Программный строб (USITC) 1 1 1 Внешний сигнал, спадающий фронт Программный строб (USITC) Формат регистра состояния USISR показан на Рис. 11.13, а описание его битов приведено в Табл. 11.5. Рис. 11.13. Формат регистра USISR Таблица 11.5. Биты регистра USISR Бит Название Описание 7 USISIF Флаг прерывания по обнаружению состояния СТАРТ. В двухпроводном режиме этот флаг устанавливается в 1 при обнаружении на шине состояния СТАРТ. В остальных режимах флаг устанавливается при инкрементировании 4-битного счетчика. Если бит USISIE регистра USICR и флаг I регистра SREG установлены, то при установке данного флага генерируется прерывание (это прерывание выводит микроконтроллер из любого «спящего» режима). Флаг сбрасывается программно записью в него 1. Одновременно со сбросом флага высвобождается линия SCL USIOIF Флаг прерывания по переполнению счетчика. Этот флаг устанавливается в 1 при переполнении 4-битного счетчика (при переходе от 15 к 0). Если бит USIOIE регистра USICR и флаг I регистра SREG установлены, то при установке данного флага генерируется прерывание, которое может использоваться для вывода микроконтроллера из «спящего» режима Idle. Флаг сбрасывается программно записью в него 1. Одновременно со сбросом флага высвобождается линия SCL 5 USIPF Флаг обнаружения состояния СТОП. В двухпроводном режиме этот флаг устанавливается в 1 при обнаружении на шине состояния СТОП. Флаг сбрасывается программно записью в него 1 4 USIDC Флаг коллизии при выводе данных. Этот флаг устанавливается в 1, если значение 7-го бита сдвигового регистра отличается от состояния вывода микроконтроллера (действительно только в двухпроводном режиме). Данный флаг используется для реализации арбитража
(продолжение) Бит Название Описание 3 USICNT3 4-битный счетчик. Эти биты отображают текущее значение счетчика. Это значение можно считывать и изменять в любой момент времени. Инкрементирова- ние счетчика производится по каждому импульсу, формируемому либо аппаратно (детектором фронтов внешнего сигнала или выходом блока совпадения таймера/счетчика ТО), либо программно (с помощью битов USICLK или USITC регистра USISR). Источник тактового сигнала определяется состоянием битов USICS1:0 и USICLK регистра управления USICR (см. Табл. 11.4) 2 USICNT2 1 USICNT1 0 USICNTO 11.5. Режимы работы модуля USI Как говорилось выше, модуль USI имеет два основных режима работы: • трехпроводный режим; • двухпроводный режим. Кроме того, отдельные узлы модуля могут использоваться и для других целей, не обязательно связанных с передачей данных. 11.5.1. Трехпроводный режим В трехпроводном режиме модуль USI может использоваться для обмена по шине SPI (режимы 0 или 1). Вход SS для выбора ведомого устройства в модуле отсутствует, однако при необходимости поддержка этого сигнала может быть легко реализована программно. Структура модулей USI при работе в трехпроводном режиме показана на Рис. 11.14. Рис. 11.14. Модули USI в трехпроводном режиме
Сдвиговые регистры обоих модулей (ведущего и ведомого) соединяются между собой таким образом, чтобы после восьми импульсов на линии USCK содержимое сдвигового регистра ведущего оказалось в сдвиговом регистре ведомого, и наоборот. По этому же тактовому сигналу инк- рементируется 4-битный счетчик модуля USI. Соответственно для определения момента завершения обмена можно использовать флаг прерывания по переполнению счетчика (USIOF). Тактовый сигнал формируется ведущим устройством. Состояние вывода USCK изменяется переключением бита PORTE4 или же посредством записи 1 в бит USITC регистра USICR. Временные диаграммы обмена в трехпроводном режиме представлены на Рис. 11.15. Рис. 11.15. Временные диаграммы обмена в трехпроводном режиме Верхний график сигнала USCK соответствует 0-му режиму внешнего тактового сигнала (USICS0 = 0). В этом режиме данные, поступающие на вход DI, считываются по нарастающему фронту сигнала USCK, а изменение состояния выхода DO (сдвиг содержимого сдвигового регистра) производится по спадающему фронту (0-й режим SPI). Нижний график сигнала USCK соответствует 1-му режиму внешнего тактового сигнала (USICS0 = 1). В этом режиме назначения фронтов тактового сигнала меняются на противоположные — входные данные считываются по спадающему фронту, а выходные данные выводятся по нарастающему фронту (1-й режим SPI). Таким образом, обмен в режиме SPI выполняется в несколько этапов: 1. Оба устройства подготавливают выходные данные, включают выходные драйверы и сбрасывают содержимое своих 4-битных счетчиков (точки А и В на Рис. 11.15). Подготовка данных заключается в загрузке их в сдвиговый регистр, а выходные драйверы включаются установкой соответствующего бита регистра направления передачи данных. Порядок событий А и В может быть любым, важно только,
чтобы интервал между последним из событий и началом считывания данных был не меньше половины периода сигнала USCK. 2. Ведущий формирует импульсы тактового сигнала, программно изменяя состояние линии USCK (точки С и D на Рис. 11.15). Значение бита данных на входах (DI) ведущего и ведомого устройства считы- вается по первому фронту сигнала USCK (точка С), а состояние выхода (DO) изменяется по противоположному фронту (точка D). Ин- крементирование счетчика производится по каждому фронту. 3. Для передачи байта 2-й этап повторяется восемь раз. 4. После 8-го импульса тактового сигнала происходит переполнение счетчика, указывающее на завершение обмена, при этом принятый байт находится в регистре данных USIDR. В заключение приведем примеры трех подпрограмм, демонстрирующих использование модуля USI в трехпроводном режиме. Первая подпрограмма реализует передачу одного байта данных ведущим устройством. Передаваемый байт содержится в регистре R16, по окончании обмена в этом же регистре находится принятый байт. Предполагается, что выводы DO и USCK уже настроены на выход. SPITransfer: sts USIDR,rlб ; Загружаем сдвиговый регистр ldi г1б, (1«USI0IF) ; Сбрасываем флаг прерывания sts USISR,rl6 ; и счетчик SPITransfer_loop: ldi rl6, (1«USIWM0) I (1«USICS1) I (1«USICLK) I (1«USITC) sts USICR,rl6 ; Задаем режим и переключаем USCK Ids rl6,USISR sbrs rl6,USI0IF ; Проверяем флаг переполнения rjmp SPITransfer_loop Ids rl6,USIDR ; Запоминаем принятый байт ret Вторая подпрограмма выполняет те же самые функции, но при этом обеспечивается максимально возможная скорость передачи (fSCK =/ск/4). SPITransfer_Fast: sts USIDR,rl6 ldi rl6, (1«USIWM0) I (1«USICS0) I (1«USITC) ldi rl7, (1«USIWM0) I (1«USICS1) I (1«USITC) I (1«USICLK) sts USICR,rl6 ; MSB sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR,rl7
sts USICR,rl6 sts USICR,rl7 sts USICR, rl6 ; LSB sts USICR,rl7 Ids rl6,USIDR ret Третья подпрограмма демонстрирует работу модуля USI в качестве ведомого SPI-устройства: init: ldi rl6, (1«USIWM0) I (1«USICS1) sts USICR,rl6 ; Выполняется только один раз SlaveSPITransfer: sts USIDR,rl6 ldi rl6, (l«USIOIF) sts USISR,rl6 SlaveSPITransfer_loop: Ids rl6,USISR sbrs rl6,USIOIF rjmp SlaveSPITransfer_loop Ids rl6,USIDR ret Как и в первой подпрограмме, предполагается, что выводы DO и USCK уже настроены на выход. Передаваемый байт содержится в регистре R16, по окончании обмена в этом же регистре находится байт, посланный ведущим. 11.5.2. Двухпроводный режим В двухпроводном режиме модуль USI может использоваться для обмена по шине TWI (12С), принципы работы и протокол которой были подробно рассмотрены в начале главы. Обратите внимание, что поскольку модули USI не являются полноценными приемо-передатчиками, они реализуют обмен только на физическом уровне, а логический уровень (адресация, арбитраж и прочее) необходимо реализовывать программно. Структура модулей USI при работе в двухпроводном режиме показана на Рис. 11.16. Основное отличие между ведущим и ведомым устройствами заключается в том, что тактовый сигнал генерируется ведущим устройством, а блок управления тактовым сигналом задействован только в ведомом. Формирование импульсов тактового сигнала осуществляется программным изменением соответствующего бита регистра порта ввода/вывода, в то время как сдвиг содержимого сдвигового регистра осуществляется аппаратно в обоих устройствах (в двухпроводном режиме эта операция выполняется только по спадающему фронту тактового сигнала). Поскольку ведомое устройство может формировать циклы ожидания, удерживая на
Рис. 11.16. Модули USI в двухпроводном режиме линии SCL НИЗКИЙ уровень, ведущее устройство всегда должно контролировать состояние линии SCL после формирования нарастающего фронта. Завершение цикла обмена можно определить по переполнению 4-битного счетчика модуля. Временные диаграммы обмена в двухпроводном режиме представлены на Рис. 11.17. Рис. 11.17. Временные диаграммы обмена в двухпроводном режиме Обмен в режиме TWI выполняется в несколько этапов: 1. Ведущее устройство формирует на шине состояние СТАРТ, выдавая на линию SDA НИЗКИЙ уровень при ВЫСОКОМ уровне на линии SCL (точка А на Рис. 11.17). Выдача на линию SDA НИЗКОГО уровня может быть осуществлена либо записью в сдвиговый регистр зна-
чения со сброшенным 7-м битом, либо сбросом соответствующего бита регистра данных порта ввода/вывода. Разумеется, эта линия должна быть настроена на выход, т.е. бит регистра направления данных должен быть установлен в 1. Это состояние детектируется схемой обнаружения состояния СТАРТ ведомого модуля (Рис 11.18), в результате чего устанавливается флаг USISIF и, при необходимости, генерируется прерывание. 2. Помимо установки флага, схема обнаружения состояния СТАРТ удерживает на линии SCL НИЗКИЙ уровень после формирования на ней ведущим спадающего фронта (точка В). Это позволяет выполнить ведомому выход из «спящего» режима или завершить выполнение других операций перед инициализацией сдвигового регистра для приема адреса, которая заключается в сбросе флага USISIF и счетчика. 3. Ведущий выдает на линию SDA первый бит байта и высвобождает линию SCL, формируя на ней нарастающий фронт (точка С). По этому фронту ведомое устройство считывает значение бита и помещает его в сдвиговый регистр. 4. После передачи восьми битов (адрес ведомого устройства плюс бит направления передачи данных) происходит переполнение счетчика ведомого устройства, в результате чего последний выставляет на линию SCL НИЗКИЙ уровень (точка D). Если адрес, посланный ведущим, не совпадает с адресом ведомого, то ведомый высвобождает линию SCL и переходит к ожиданию появления на шине нового состояния СТАРТ. 5. Если же ведомый распознает свой адрес, то во время передачи бита квитирования он выставляет на линию SDA НИЗКИЙ уровень, после чего снова удерживает на линии SCL напряжение НИЗКОГО уровня (т.е. перед высвобождением линии SCL в момент D необходимо записать в счетчик значение 14). В зависимости от значения бита направления передачи данных либо ведущее, либо ведомое устройство включает выходные буферы. Если данный бит установлен, выполняется операция чтения (линией SDA управляет ведомое устройство). После выдачи подтверждения ведомое устройство снова может выставить на линии SCL НИЗКИЙ уровень (точка Е). 6. Далее выполняется пересылка в заданном направлении требуемого числа байтов данных до тех пор, пока ведущее устройство не сформирует на шине состояние СТОП или ПОВСТАРТ. Если по каким-либо причинам модуль не может продолжать прием данных, то после приема последнего байта он формирует неподтверждение (NACK), выдавая НИЗКИЙ уровень на линию SDA во время передачи бита квитирования.
На Рис. 11.18 приведена принципиальная схема узла обнаружения состояния СТАРТ модуля USI. Поскольку этот узел является асинхронным, он может использоваться для вывода микроконтроллера из «спящих» режимов, таких как Power Down. Единственное, на что нужно обратить внимание, — время запуска тактового генератора не должно превышать максимально возможную длительность сигнала НИЗКОГО уровня на линии SCL, если эта величина нормируется в используемом протоколе. Рис. 11.18. Схема обнаружения состояния СТАРТ 11.5.3. Альтернативное использование модуля USI Как уже упоминалось, модуль USI может использоваться не только для организации обмена по двух- или трехпроводной линии. Ниже перечислены варианты альтернативного использования узлов модуля USI. • Полудуплексный асинхронный премо-передатчик Используя сдвиговый регистр модуля в трехпроводном режиме, можно реализовать дополнительный модуль UART, более компактный и бюлее быстродействующий, нежели при чисто программной его реализации. • 4-битный счетчик Встроенный 4-битный счетчик модуля USI можно использовать как автономный счетчик с возможностью генерации прерывания по переполнению. • 12-битный таймер/счетчик Объединив 4-битный счетчик модуля USI с таймером/счетчиком ТО, получим 12-битный счетчик. • Формирование внешнего прерывания по фронту При записи в счетчик максимального значения ($0F) он может использоваться для генерации внешнего прерывания. Этот режим работы задается установкой бита USICS1 регистра USICR в 1. • Формирование программного прерывания Прерывание по переполнению 4-битного счетчика можно использовать в качестве программного прерывания, формируемого стробом тактового сигнала.
Программирование микроконтроллеров AVR семейства Tiny 12.1. Общие сведения В общей сложности микроконтроллеры семейства Tiny поддерживают следующие режимы программирования: • режим последовательного программирования при высоком напряжении; • режим последовательного программирования (по интерфейсу SPI); • режим параллельного программирования при высоком напряжении. Под «высоким» напряжением здесь понимается управляющее напряжение (+12 В), подаваемое на вывод RESET микроконтроллера для перевода последнего в режим программирования. Какие из режимов поддерживает конкретный микроконтроллер, можно узнать, обратившись к Табл. 12.1. Таблица 12Л. Режимы программирования микроконтроллеров семейства Tiny № Режим программирования Их 12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26х 28х 1 Последовательное, при высоком напряжении • • • • • • 2 Последовательное, по интерфейсу SPI 3 Параллельное, при высоком напряжении • • • Кроме того, некоторые микроконтроллеры семейства имеют возможность самопрограммирования. Под этим термином понимается изменение содержимого памяти программ, управляемое самим микроконтроллером.
В процессе программирования могут выполняться следующие операции: • стирание кристалла (chip erase); • чтение/запись FLASH-памяти программ; • чтение/запись EEPROM-памяти данных; • чтение/запись конфигурационных ячеек; • чтение/запись ячеек защиты; • чтение ячеек идентификатора; • чтение калибровочного байта. Все модели микроконтроллеров поставляются со стертой памятью программ и памятью данных (во всех ячейках находится число $FF) и пригодны к немедленному программированию. 12.1.1. Защита кода и данных Содержимое FLASH-памяти программ, а также содержимое EEPROM-памяти данных может быть защищено от записи и/или чтения посредством программирования ячеек защиты (Lock Bits) LB1 и LB2. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в Табл. 12.2. Таблица 12.2. Режимы защиты № режима Ячейки защиты Описание LB1 LB2 1 1 1 Защита кода и данных отключена 2 0 1 Запись FLASH и EEPROM запрещена 3 0 0 Запрещены запись и чтение FLASH и EEPROM В режимах 2 и 3 запрещается также изменение конфигурационных ячеек (см. далее). Поэтому включение защиты следует выполнять в самую последнюю очередь, после программирования остальных областей памяти микроконтроллера.
Все перечисленные ячейки защиты сгруппированы в одном байте. Расположение ячеек защиты для разных моделей приведено на Рис. 12.1. Рис. 12.1. Байт ячеек защиты В исходном (^запрограммированном) состоянии во всех ячейках защиты содержится 1, после программирования — 0. Стирание ячеек (запись в них 1) может быть произведено только при выполнении команды «Стирание кристалла», уничтожающей также содержимое FLASH- и EEPROM-памяти. 12.1.2. Конфигурационные ячейки Как следует из названия, конфигурационные ячейки (Fuse Bits) определяют различные параметры конфигурации микроконтроллера. Эти ячейки расположены в отдельном адресном пространстве, доступном только при программировании. Все конфигурационные ячейки сгруппированы в несколько байтов, а состав этих ячеек зависит от конкретной модели микроконтроллера. Наличие тех или иных ячеек в конкретном микроконтроллере можно определить по Табл. 12.3, где в столбцах, отмеченных «звездочкой», указаны состояния конфигурационных ячеек по умолчанию.
Таблица 12.3. Конфигурационные ячейки микроконтроллеров семейства Tiny Kin- Их 12х 13x 15L 2313x 24x/44x/84x 25x/45x/85x 26x 28x mil Название * Название Название * Название * Название * Название * Название * Название * Название * Младший конфигурационный байт 7 - 1 BODLEVEL 0 SPIEN 0 BODLEVEL 1 CKDIV8 0 CKDIV8 1 CKDIV8 0 PLLCK 1 - 1 1 °^ 1 - 1 BODEN 1 EESAVE 1 BODEN 1 CKOUT 1 CKOUT 1 CKOUT 1 CKOPT 1 - 1 5 - 1 SPIEN 0 WDTON 1 SPIEN 1 SUT1 1 SUT1 1 SUT1 1 SUT1 1 - 1 4 FSTRT 1 RSTDISBL 1 CKDIV8 0 RSTDISBL 0 SUTO 0 SUTO 0 SUTO 0 SUTO 0 INTCAP 1 3 RSTDISBL 1 CKSEL3 0 SUT1 1 - 0 CKSEL3 0 CKSEL3 0 CKSEL3 0 CKSEL3 0 CKSEL3 0 2 CKSEL2 1 CKSEL2 0 SUTO 0 - 0 CKSEL2 1 CKSEL2 0 CKSEL2 0 CKSEL2 0 CKSEL2 0 1 CKSEL1 0 CKSEL1 1 CKSEL1 1 CKSEL1 0 CKSEL1 0 CKSEL1 1 CKSEL1 1 CKSEL1 0 CKSEL1 1 0 CKSEL0 0 CKSELO 0 CKSELO 0 CKSELO 1 CKSELO 0 CKSELO 0 CKSELO 0 CKSELO 1 CKSELO 0 Старший конфигурационный байт 7 ** - 1 ** DWEN 1 RSTDISBL 1 RSTDISBL 1 - 1 ** 6 - 1 EESAVE 1 DWEN 1 DWEN 1 - 1 5 - 1 SPIEN 0 SPIEN 0 SPIEN 0 - 1 4 SELFPRGEN 1 WDTON 1 WDTON 1 WDTON 1 RSTDISBL 1
(продолжение) Бит Их 12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26x 28x Название * Название * Название * Название * Название * Название * Название * Название * Название * 3 ** DWEN 1 ** BODLEVEL2 1 EESAVE 1 EESAVE 1 SPIEN 0 ** 2 BODLEVEL1 1 BODLEVEL1 1 BODLEVEL2 1 BODLEVEL2 1 EESAVE 1 1 BODLEVEL0 1 BODLEVEL0 1 BODLEVEL1 1 BODLEVEL 1 1 BODLEVEL 1 0 RSTDISBL 1 RSTDISBL 1 BODLEVEL0 1 BODLEVELO 1 BODEN 1 Дополнительный конфигурационный байт 7 ** - 1 - 1 - 1 ** 6 - 1 - 1 - 1 5 - 1 - 1 - 1 4 - 1 - 1 - 1 3 - 1 - 1 - 1 2 - 1 - 1 - 1 1 - 1 - 1 - 1 0 SELFPRGEN 1 SELFPRGEN 1 SELFPRGEN 1 * Значение бита. ** В данных моделях соответствующие конфигурационные байты отсутствуют.
Краткое назначение всех конфигурационных ячеек приведено в Табл. 12.4. Подробное описание было приведено в соответствующих главах книги. Таблица 12.4. Назначение конфигурационных ячеек Название Illx 1 Ll2x Il3x 1 I15L 1 12313х 1 1 24х/44х/84х 1 |25х/45х/85х1 |26х 1 128х 1 Назначение FSTRT • Определяет длительность задержки сброса /ТОит RSTDISBL Определяет функционирование вывода микроконтроллера, совмещенного с выводом аппаратного сброса (0 — контакт порта ввода/вывода, 1 — вывод сброса) CKSEL Определяет режим работы тактового генератора, а также длительность задержки сброса /ТОит BODLEVEL Определяет порог срабатывания схемы BOR BODEN • • • Разрешает/запрещает функционирование схемы BOR (0 — разрешено, 1 — запрещено) SPIEN1* Разрешает/запрещает программирование по интерфейсу SPI (0 — разрешено, 1 — запрещено) SUT • • • • • Определяет длительность задержки сброса /ТОит INTCAP • Определяет состояние внутренних конденсаторов, подключаемых между выводами XTAL1/XTAL2 и общим проводом (0 — подключены, 1 — отключены) WDTON • • • • Определяет режим работы сторожевого таймера (0 — всегда включен, 1 — может быть выключен программно) CKOPT • Определяет функционирование тактового генератора, действие зависит от установок ячеек CKSEL EESAVE2) • • • • • Определяет влияние команды «Стирание кристалла» на EEPROM-память (0 — не стирает, 1 — стирает) DWEN • • • • Разрешает/запрещает работу отладочного интерфейса debugWire (0 — разрешена, 1 — запрещена) CKDIV8 • • • • Определяет начальное состояние делителя системного тактового сигнала CKOUT • • • Определяет состояние выходного буфера системного тактового сигнала (0 — подключен к выводу микроконтроллера, 1 — отключен) SELFPRGEN • • • • Разрешение самопрограммироввния (0 — разрешено) PLLCK • Использование выходного сигнала схемы ФАПЧ в качестве тактового 1) Недоступна при программировании по последовательному каналу. 2) Изменение состояния этой ячейки вступает в силу сразу же после ее программирования.
Для изменения содержимого конфигурационных ячеек используются специальные команды программирования. Команда «Стирание кристалла» на состояние этих ячеек не влияет. Напоминаю, что при запрограммированной ячейке защиты LB1 конфигурационные ячейки блокируются. Поэтому конфигурацию микроконтроллера необходимо задавать до программирования ячеек защиты. 12.1.3. Идентификатор Все микроконтроллеры фирмы Atmel имеют три 8-битные ячейки, содержимое которых позволяет идентифицировать устройство. В первой ячейке содержится код производителя, во второй — код объема FLASH-памяти, а в третьей — код устройства. Как и конфигурационные ячейки, ячейки идентификатора расположены в отдельном адресном пространстве, доступ к которому возможен только в режиме программирования. Однако в отличие от конфигурационных ячеек ячейки идентификатора, по понятным причинам, доступны только для чтения. Содержимое ячеек идентификатора для всех микроконтроллеров семейства приведено в Табл. 12.5. Таблица 12.5. Ячейки идентификатора Адрес X 12х 13х 15L 2313х 24х 44х 84х 25х 45х 85х 26х 28х Описание $00 $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е Код производителя (Atmel) $01 $90 $90 $90 $90 $91 $91 $92 $93 $91 $92 $93 $91 $91 Код объема FLASH-памяти0 $02 $04 $05 $07 $06 $0А $0В $07 $ос $08 $06 $0В $09 $07 Код устройства !) $90 - 1 Кбайт, $91-2 Кбайт, $93 - 8 Кбайт. Как видно из таблицы, значение кода устройства (ячейка $02) у разных моделей может совпадать. Поэтому устройство следует идентифицировать только по совокупности значений ячеек $01 и $02, так как именно эта пара чисел является уникальной для каждого микроконтроллера. 12.1.4. Калибровочные ячейки В калибровочные ячейки при изготовлении микроконтроллера заносятся калибровочные константы, предназначенные для подстройки на номинальную частоту внутреннего RC-генератора. Количество этих ячеек зависит от того, на скольких частотах может работать внутренний ЛС-гене-
ратор. Соответственно, в моделях ATtinyl2x, ATtinyl3x, ATtinyl5L, ATtiny24x/44x/84x, ATtiny25x/45x/85x и ATtiny28x имеется одна, в модели ATtiny2313x — две, а в модели ATtiny26x — четыре ячейки. Располагаются они в старших байтах адресного пространства ячеек идентификатора, начиная с адреса $000. Загрузка калибровочной константы из ячейки с адресом $000 в регистр OSCCAL осуществляется аппаратно при нахождении микроконтроллера в состоянии сброса. Соответственно, в моделях ATtiny2313x автоматическая калибровка производится для частоты 8 МГц, а в моделях ATtiny26x — для частоты 1 МГц. При использовании в этих моделях другой частоты ЯС-генератора его калибровку необходимо осуществлять вручную. Для этого программатор во время программирования должен прочитать содержимое калибровочной ячейки и занести его по какому-либо адресу FLASH-памяти программ. А программа должна после старта считать это значение из памяти программ и занести его в регистр OSCCAL. 12.1.5. Страничная организация памяти программ и данных В ряде моделей микроконтроллеров семейства, а именно в ATtinyl3x, ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x, используется страничная организация памяти программ. При программировании весь объем FLASH-памяти разбивается на 16-битные страницы, размер которых, а также их количество зависят от объема памяти программ микроконтроллера (Табл. 12.6). Таблица 12.6. Параметры страничной организации памяти программ Параметр Размер памяти программ [байт] 1К 2К 4К 8К Размер страницы, слов 16 16 32 32 Количество страниц 32 64 64 128 Соответственно, при программировании памяти программ этих моделей данные сначала загружаются в буфер страницы, и только затем заносятся непосредственно в память программ. Прошивка всех ячеек страницы при этом осуществляется одновременно. Аналогичным образом в указанных моделях организована и EEPROM-память. Размер 8-битных страниц EEPROM-памяти, а также их количество для разных моделей микроконтроллеров приведены в Табл. 12.7.
Таблица 12.7. Параметры страничной организации EEPROM-памяти Параметр Размер EEPROM-памяти [байт] 64 128 256 512 Размер страницы, байт 4 4 4 4 Количество страниц 16 32 64 128 12.2. Последовательное программирование при высоком напряжении Режим последовательного программирования при высоком напряжении поддерживается практически всеми моделями семейства, за исключением ATtiny2313x, ATtiny26x и ATtiny28x. Этот режим требует дополнительного источника повышенного напряжения (+12 В) и применяется, как правило, для программирования микроконтроллеров перед установкой их на плату. Схема включения микросхем в этом режиме приведена на Рис. 12.2. Рис. 12.2. Включение микроконтроллеров в режиме последовательного программирования при высоком напряжении Как видно из рисунка, для обмена данными между программатором и устройством используются четыре линии: SCI (тактовый сигнал), SDI (вход данных), SII (вход команд) и SDO (выход данных). Соответствие между линиями интерфейса и контактами портов ввода/вывода всех микроконтроллеров приведено в Табл. 12.8.
Таблица 12.8. Выводы, используемые при программировании по последовательному каналу /84х /85х Название линии интерфейса 44х, '45х Назначение выводов Их 12х 13х 15L /т 25х/ SCI РВЗ РВЗ РВЗ РВЗ РВО РВЗ Вход тактового сигнала SDO РВ2 РВ2 РВ2 РВ2 РА4 РВ2 Выход данных SII РВ1 РВ1 РВ1 РВ1 РА5 РВ1 Вход команд SDI РВО РВО РВО РВО РА6 РВО Вход данных Временные диаграммы сигналов микроконтроллера при программировании представлены на Рис. 12.3, а значения параметров сигналов приведены в Табл. 12.9 и Табл. 12.10. Рис. 12.3. Временные диаграммы сигналов в режиме последовательного программирования при высоком напряжении: а — ATtinyl5L, б — остальные модели
Таблица 12.9. Параметры сигналов в режиме последовательного программирования при высоком напряжении для ATtinyl lx/12x, ATtinyl3x, ATtiny24x/44x/84x и ATtiny25x/45x/85x Обозначение Параметр min typ max 'SHSL Длительность положительного импульса сигнала SCI, не 110 - - 'SLSH Длительность отрицательного импульса сигнала SCI, не 110 - - 'ivsh Задержка переднего фронта сигнала SCI относительно момента установления сигналов SDI и SII, не 50 - - 'shix Время удержания сигналов SDI и SII относительно переднего фронта сигнала SCI, не 50 - - 'shov Задержка момента установления сигнала SDO относительно переднего фронта сигнала SCI, не - 16 - 'WLWH_PFB Период ожидания после 3-й посылки в команде «Запись конфигурационных ячеек», мс - 2.5 - Таблица 12.10. Параметры сигналов в режиме последовательного программирования при высоком напряжении для ATtinyl5L Обозначение Параметр min typ max 'SHSL Длительность положительного импульса сигнала SCI, не 25 - - 'SLSH Длительность отрицательного импульса сигнала SCI, не 25 - - 'ivsh Задержка переднего фронта 8-го импульса сигнала SCI относительно момента установления сигналов SDI и SII, не 50 - - 'shix Время удержания сигналов SDI и SII относительно переднего фронта 8-го импульса сигнала SCI, не 50 - - 'shov Задержка момента установления сигнала SDO относительно переднего фронта 9-го импульса сигнала SCI, не 10 16 32 12.2.1. Управление процессом программирования Для перевода микроконтроллера в режим программирования необходимо выполнить следующие действия: 1. Подать напряжение питания (4.5...5.5 В) на микроконтроллер. 2. Подать напряжение НИЗКОГО уровня на вывод RESET, после чего подать на вывод SCI не менее 6 импульсов длительностью больше или равной 100 не. 3. Подать на выводы SDI, SII и SDO напряжение НИЗКОГО уровня и выждать не менее 100 не. 4. Подать напряжение +12 В на вывод RESET и выждать не менее 100 не. 5. Высвободить вывод SDO. Первую команду можно будет посылать не ранее чем через 300 мкс. Выключение микроконтроллера после его программирования выполняется в следующей последовательности: 1. Подать на вывод SCI напряжение НИЗКОГО уровня.
2. Подать на вывод RESET напряжение ВЫСОКОГО уровня. 3. Отключить напряжение питания от микроконтроллера. Всего в этом режиме используется от 16 до 21 команд, каждая из которых содержит от двух до семи 11-битных посылок (количество поддерживаемых команд зависит от модели). Передача команд, а также вывод результатов их выполнения осуществляется от старшего бита к младшему. В микроконтроллере ATtinyl5L и входные, и выходные данные «защелкиваются» по нарастающему фронту 8-го импульса посылки из 16 импульсов сигнала SCI. Эти 16 импульсов необходимы для генерации одного импульса внутреннего тактового сигнала микроконтроллера (Рис. 12.4, а). В остальных микроконтроллерах и входные, и выходные данные «защелкиваются» по нарастающему фронту сигнала SCI (Рис. 12.4, б). Рис. 12.4. Передача данных в режиме последовательного программирования при высоком напряжении: а — ATtinyl5L, б — остальные модели Формат команд для моделей ATtinyl 1х/12х и ATtinyl5L приведен в Табл. 12.11. Формат команд для остальных моделей приведен в Табл. 12.12. В этих же таблицах помещены пояснения по применению той или иной команды.
Таблица 12.11. Команды режима последовательного программирования при высоком напряжении для моделей ATtinyllx/12x и ATtinyl5L Название команды Вывод Формат команды Примечания 1-я посылка 2-я посылка 3-я посылка 4-я посылка Стирание кристалла SDI 0_1000_0000_00 0_0000_0000_00 0_0000_0000_00 0_0000_0000_00 После 4-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0110_0100_00 0_0110_1100_00 0_0100_1100_00 SDO ххххххххххх х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх Загрузка адреса ячейки FLASH-памяти при записи SDI 0_0001_0000_00 0_0000_000а_00 0_bbbb_bbbb_00 - Повторить 2-ю посылку при переходе к новому 256-байтному блоку памяти. Повторить 3-ю посылку для каждого нового адреса SII 0_0100_1100_00 0_0001_1100_00 0_0000_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх Запись младшего байта ячейки FLASH-памяти SDI 0_iiii_iiii_00 0_0000_0000_00 0_0000_0000_00 - После 3-й посылки ждать появления 1 на выводе SDO. Полностью (все три посылки) повторить команду для каждой ячейки SII 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх 0_0000_0000_00 Запись старшего байта ячейки FLASH-памяти SDI 0_iiii_iiii_00 0_0000_0000_00 0_0000_0000_00 - После 3-й посылки ждать появления 1 на выводе SDO. Полностью (все три посылки) повторить команду для каждой ячейки SII 0_0011_1100_00 0_0111_0100_00 0_0111_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх 0_0000_0000_00 Загрузка адреса ячейки FLASH-памяти при чтении SDI 0_0001_0010_00 0_0000_000а_00 0_bbbb_bbbb_00 - Повторить 2-ю и 3-ю посылки для каждого нового адреса SII 0_0100_1100_00 0_0001_1100_00 0_0000_1100_00 SDO х_хххх_хххх_хх ххххххххххх ххххххххххх Чтение младшего байта ячейки FLASH-памяти SDI 0_0000_0000_00 0_0000_0000_00 - - Полностью (обе посылки) повторить команду для каждой ячейки SII 0_0110_1000_00 0_0110_1100_00 SDO ххххххххххх ооооооооххх Чтение старшего байта ячейки FLASH-памяти SDI 0_0000_0000_00 0_0000_0000_00 - - Полностью (обе посылки) повторить команду для каждой ячейки SII 0_0111_1000_00 0_0111_1100_00 SDO х_хххх_хххх_хх ооооооооххх
(продолжение) Название команды Вывод Формат команды Примечания 1-я посылка 2-я посылка 3-я посылка 4-я посылка Загрузка адреса ячейки EEPROM-памяти при записи (ATtinyl2xHATtinyl5L) SDI 0_0001_0001_00 0_00bb_bbbb_00 - - Повторить 2-ю посылку для каждого нового адреса SII 0_0100_1100_00 0_0000_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх Запись ячейки EEPROM-памяти (ATtinyl2xHATtinyl5L) SDI 0_iiii_iiii_00 0_0000_0000_00 0_0000_0000_00 - После 3-й посылки ждать появления 1 на выводе SDO SII 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх 0_0000_0000_00 Загрузка адреса ячейки EEPROM-памяти при чтении (ATtinyl2xHATtinyl5L) SDI 0_0000_0011_00 0_00bb_bbbb_00 - - Повторить 2-ю посылку для каждого нового адреса SII 0_0100_1100_00 0_0000_1100_00 SDO х_хххх_хххх_хх ххххххххххх Чтение содержимого ячейки EEPROM-памяти (ATtinyl2xHATtinyl5L) SDI 0_0000_0000_00 0_0000_0000_00 - - Повторить 2-ю посылку для каждого нового адреса SII 0_0110_1000_00 0_0110_1100_00 SDO х_хххх_хххх_хх ооооооооххх Запись конфигурационных ячеек SDI 0_0100_0000_00 0_FFFF_FFFF_00 0_0000_0000_00 0_0000_0000_00 ATtinyl 1х — между 3-й и 4-й посылками требуется вьщержать паузу длительностью/WLWH PFB ATtinyl2х и ATtinyl5L — после 4-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх ххххххххххх Запись ячеек защиты SDI 0_0010_0000_00 0_LLLL_LLLL_00 0_0000_0000_00 0_0000_0000_00 После 4-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO ххххххххххх х_хххх_хххх_хх х_хххх_хххх_хх 0_0000_0000_00
(продолжение) Название команды Вывод Формат команды Примечания 1-я посылка 2-я посылка 3-я посылка 4-я посылка Чтение конфигурационных ячеек SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 - - SII 0_0100_1100_00 0_0110_1000_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх F_FFFF_FFFx_xx Чтение ячеек защиты SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 - - SII 0_0100_1100_00 0_0111_1000_00 0_0111_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх LLLLL LLLxxx Чтение ячеек идентификатора SDI 0_0000_1000_00 0_0000_00bb_00 0_0000_0000_00 0_0000_0000_00 Повторить посылки 2...4 для каждой ячейки идентификатора SII 0_0100_1100_00 0_0000_1100_00 0_0110_1000_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх ооооооооххх Чтение калибровочной ячейки (АТипу12хи ATtinyl5L) SDI 0_0000_1000_00 0_0000_0000_00 0_0000_0000_00 0_0000_0000_00 - SII 0_0100_1100_00 0_0000_1100_00 0_0111_1000_00 0_0111_1100_00 SDO ххххххххххх х_хххх_хххх_хх х_хххх_хххх_хх о_оооо_ооох_хх Условные обозначения, используемые в таблице: а — биты старшего байта адреса; b — биты младшего байта адреса; i — посылаемые в микроконтроллер данные; о — считываемые из микроконтроллера данные; х — состояние бита безразлично; L — биты байта ячеек защиты (см. Рис. 12.1); F — биты конфигурационного байта (см. Табл. 12.3).
Таблица 12.12. Команды режима последовательного программирования при высоком напряжении для моделей ATtinyl3x, ATtiny24x/44x/84x и ATtiny25x/45x/85x Название команды Вывод Формат команды Примечания 1-я посылка/ 5-я посылка 2-я посылка/ 6-я посылка 3-я посылка/ 7-я посылка 4-я посылка Стирание кристалла SDI 0_1000_0000_00 0_0000_0000_00 0_0000_0000_00 - После 3-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0110_0100_00 0_0110_1100_00 SDO ххххххххххх ххххххххххх х_хххх_хххх_хх Загрузка команды «Запись FLASH-памяти» SDI 0_0001_0000_00 - - - Вход в режим программирования FLASH-памяти SII 0_0100_1100_00 SDO х_хххх_хххх_хх Загрузка буфера страницы FLASH-памяти (ATtinyl3x,ATtiny25x/ 45х/85х) SDI 0_bbbb_bbbb_00 0_ееее_ееее_00 0_dddd_dddd_00 0_0000_0000_00 Повторять посылки 1...5 до заполнения буфера страницы или до окончания данных SII 0_0000_1100_00 0_0010_1100_00 0_0011_1100_00 0_0111_1101_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх SDI 0_0000_0000_00 - - - Посылка 5 SII 0_0111_1100_00 SDO х_хххх_хххх_хх Загрузка буфера страницы FLASH-памяти (ATtiny24x/44x/84x) SDI 0_bbbb_bbbb_00 0_ееее_ееее_00 0_0000_0000_00 0_0000_0000_00 Повторять посылки 1 ...7 до заполнения буфера страницы или до окончания данных. Старшие биты адреса используются для адресации страницы (Рис. 12.5) SII 0_0000_1100_00 0_0010_1Ю0_00 0_0110_1101_00 0_0110_И00_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх SDI 0_dddd_dddd_00 0_0000_0000_00 0_0000_0000_00 - Посылки 5...7 SII 0_0011_1100_00 0_0111_1101_00 0_0111_1100_00 SDO ххххххххххх х_хххх_хххх_хх х_хххх_хххх_хх
(продолжение) Название команды Вывод Формат команды Примечания 1-я посылка/ 5-я посылка 2-я посылка/ 6-я посылка 3-я посылка/ 7-я посылка 4-я посылка Загрузка старшего байта адреса и программирование страницы FLASH- памяти SDI 0_0000_аааа_00 0_0000_0000_00 0_0000_0000_00 - После 3-й посылки ждать появления 1 на выводе SDO. Повторять посылки 2...3 для каждой загружаемой страницы. Повторять 1-ю посылку для каждого 256-го слова (Рис. 12.5) SII 0_0001_1100_00 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх 0_0000_0000_00 Загрузка команды «Чтение FLASH-памяти» SDI 0_0000_0010_00 - - - Вход в режим чтения FLASH-памяти SII 0_0100_1100_00 SDO ххххххххххх Чтение ячейки FLASH-памяти SDI 0_bbbb_bbbb_00 0_0000_аааа_00 0_0000_0000_00 0_0000_0000_00 Повторять посылки 1,3...6 для каждого нового адреса. Повторять посылку 2 для каждой новой 256-байтной страницы SII 0_0000_1100_00 0_0001_1100_00 0_0110_1000_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх q_qqqq_qqqx_xx SDI 0_0000_0000_00 0_0000_0000_00 - - Посылки 5...6 SII 0_0111_1000_00 0_0111_1100_00 SDO х_хххх_хххх_хх р_рррр_рррх_хх Загрузка команды «Запись EEPROM- памяти» SDI 0_0001_0001_00 - - - Вход в режим программирования EEPROM-памяти SII 0_0100_1100_00 SDO х_хххх_хххх_хх
(продолжение) Название команды Вывод Формат команды Примечания 1-я посылка/ 5-я посылка 2-я посылка/ 6-я посылка 3-я посылка/ 7-я посылка 4-я посылка Загрузка буфера страницы EEPROM-памяти SDI 0_bbbb_bbbb_00 0_аааа_аааа_00 0_ееее_ееее_00 0_0000_0000_00 Повторять посылки 1 ...4 до заполнения буфера страницы или до окончания данных. Старшие биты адреса используются для адресации страницы (Рис. 12.5) SII 0_0000_1100_00 0_0001_1100_00 0_0010_1100_00 0_0110_1101_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх ххххххххххх х_хххх_хххх_хх SDI 0_0000_0000_00 - - - Посылка 5 SII 0_0110_1100_00 SDO х_хххх_хххх_хх Запись страницы EEPROM-памяти SDI 0_0000_0000_00 0_0000_0000_00 - - После 2-й посылки ждать появления на выводе SDO 1. Повторять посылки 1...2 для каждой загружаемой страницы EEPROM-памяти (Рис. 12.5) SII 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх Запись ячейки EEPROM-памяти SDI 0_bbbb_bbbb_00 0_аааа_аааа_00 0_ееее_ееее_00 0_0000_0000_00 Повторять посылки 1...6 для каждого нового адреса; после 6-й посылки ждать появления 1 на выводе SDO SII 0_0000_1100_00 0_0001_1100_00 0_0010_1100_00 0_0110_1101_00 SDO ххххххххххх х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх SDI 0_0000_0000_00 0_0000_0000_00 - - Посылки 5...6 SII 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх Загрузка команды «Чтение EEPROM- памяти» SDI 0_0000_0011_00 - - - Вход в режим чтения EEPROM- памяти SII 0_0100_1100_00 SDO х_хххх_хххх_хх
(продолжение) Название команды Вывод Формат команды Примечания 1-я посылка/ 5-я посылка 2-я посылка/ 6-я посылка 3-я посылка/ 7-я посылка 4-я посылка Чтение ячейки EEPROM-памяти SDI 0_bbbb_bbbb_00 0_аааа_аааа_00 0_0000_0000_00 0_0000_0000_00 Повторять посылки 1,3...6 для каждого нового адреса. Повторять посылку 2 для каждой новой 256-байтной страницы SII 0_0000_1100_00 0_0001_1100_00 0_0110_1000_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх ххххххххххх q_qqqq_qqqO_oo Запись младшего конфигурационного байта SDI 0_0100_0100_00 0_FFFF_FFFF_00 0_0000_0000_00 0_0000_0000_00 После 4-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх Запись старшего конфигурационного байта SDI 0_0100_0000_00 0_FFFF_FFFF_00 0_0000_0000_00 0_0000_0000_00 После 4-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0010_1100_00 0_0111_0100_00 0_0111_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх ххххххххххх ххххххххххх Записьдополнительного конфигурационного байта SDI 0_0100_0000_00 0_FFFF_FFFF_00 0_0000_0000_00 0_0000_0000_00 После 4-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0010_1100_00 0_0110_0110_00 0_0110_1110_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх Запись ячеек защиты SDI 0_0010_0000_00 0_LLLL_LLLL_00 0_0000_0000_00 0_0000_0000_00 После 4-й посылки ждать появления 1 на выводе SDO SII 0_0100_1100_00 0_0010_1100_00 0_0110_0100_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх ххххххххххх 0_0000_0000_00 Чтение младшего конфигурационного байта SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 - - SH 0_0100_1100_00 0_0110_1000_00 0_0110_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх F_FFFF_FFFx_xx Чтение старшего конфигурационного байта SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 - - SII 0_0100_1100_00 0_0111_1010_00 0_0111_1110_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх F_FFFF_FFFx хх
(продолжение) Название команды Вывод Формат команды Примечания 1-я посылка/ 5-я посылка 2-я посылка/ 6-я посылка 3-я посылка/ 7-я посылка 4-я посылка Чтение дополнительного конфигурационного байта SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 - - SII 0_0100_1100_00 0_0110_1010_00 0_0110_1110_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх F_FFFF_FFFx хх Чтение ячеек защиты SDI 0_0000_0100_00 0_0000_0000_00 0_0000_0000_00 - - SII 0_0100_1100_00 0_0111_1000_00 0_0111_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх LLLLLLLLxxx Чтение ячеек идентификатора SDI 0_0000_1000_00 0_0000_00bb_00 0_0000_0000_00 0_0000_0000_00 Повторить посылки 2...4 для каждой ячейки идентификатора SII 0_0100_1100_00 0_0000_1100_00 0_0110_1000_00 0_0110_1100_00 SDO ххххххххххх х_хххх_хххх_хх ххххххххххх Q_qqqq_qqqx_xx Чтение калибровочной ячейки SDI 0_0000_1000_00 0_0000_0000_00 0_0000_0000_00 0_0000_0000_00 - SII 0_0100_1100_00 0_0000_1100_00 0_0111_1000_00 0_0111_1100_00 SDO х_хххх_хххх_хх х_хххх_хххх_хх х_хххх_хххх_хх р_рррр_рррх_хх Загрузка команды «Нет операции» SDI 0_0000_0000_00 - - - Выполняется после завершения программирования FLASH- и EEPROM-памяти SII 0_0100_1100_00 SDO х_хххх_хххх_хх Условные обозначения, используемые в таблице: а — биты старшего байта адреса; b — биты младшего байта адреса; d — биты младшего байта посылаемых в микроконтроллер данных; е — биты старшего байта посылаемых в микроконтроллер данных; р — считываемые из микроконтроллера данные (старший байт); q — считываемые из микроконтроллера данные (младший байт); х — состояние бита безразлично; L — биты байта ячеек защиты (см. Рис. 12.1); F — биты конфигурационного байта (см. Табл. 12.3).
Загрузка страницы FLASH-памяти Загрузка страницы EEPROM (страничный доступ) Запись страницы FLASH-памяти Загрузка страницы EEPROM (страничный доступ) Рис. 12.5. Адресация FLASH- и EEPROM-памяти при страничном доступе
12.3. Программирование по последовательному каналу Режим программирования по последовательному каналу поддерживается всеми микроконтроллерами семейства, за исключением ATtinyl 1х и ATtiny28x. В этом режиме программирование памяти программ и данных осуществляется по последовательному интерфейсу SPI. Как правило, данный режим используется для программирования (перепрограммирования) микроконтроллера непосредственно в устройстве. Схема включения микросхем в режиме программирования по последовательному каналу приведена на Рис. 12.6. На этом же рисунке показано два варианта разводки колодки для подключения программатора, рекомендуемые фирмой Atmel. В частности, первый вариант разводки используется в программаторе AVRISP и отладочных платах STK200/300 фирмы Atmel. Второй вариант разводки используется в более новых изделиях компании — программаторе AVRISP mkll и плате STK500. Однако вполне можно использовать и другую разводку. Примечание. Если в качестве тактового используется внутренний ЯС-генератор, вывод XTAL1 оставляют неподключенным Рис. 12.6. Включение микроконтроллеров в режиме программирования по последовательному каналу Как видно из рисунка, для обмена данными между программатором и устройством используются три линии: SCK (тактовый сигнал), MOSI (вход данных) и MISO (выход данных). Соответствие между линиями интерфейса и контактами портов ввода/вывода всех микроконтроллеров приведено в Табл. 12.13.
Таблица 12.13. Выводы, используемые при программировании по последовательному каналу Название линии интерфейса 12х 13х 15L 2313х 24х/44х/84х 25х/45х/85х 26х Назначение выводов SCK РВ2 РВ2 РВ2 РВ7 РА4 РВ2 РВ2 Вход тактового сигнала MISO (PDO) РВ1 РВ1 РВ1 РВ6 РА5 РВ1 РВ1 Выход данных MOSI (PDI) РВО РВО РВО РВ5 РА6 РВО РВО Вход данных Временные диаграммы сигналов при программировании микроконтроллеров в рассматриваемом режиме представлены на Рис. 12.7, а значения параметров сигналов приведены в Табл. 12.14. Рис. 12.7. Временные диаграммы сигналов при программировании по последовательному каналу Таблица 12.14. Параметры сигналов при программировании по последовательному каналу Обозначение Параметр min typ max ATtinyl2V,ATtinyl3V 0 - 1 Ксс= 1.8...5.5В ATtiny24V/44V/84V, ATtiny25V/45V/85V 0 - 4 ATtinylSL 0.8 1.6 - l/'CLCL Частота тактового сигнала, МГц ATtinyl 2x 0 - 4 ^сс = 2.7...5.5В ATtiny26L 0 8 ATtiny2313L, ATtinyl 3x, ATtiny24x/44x/84x, ATtiny25x/45x/85x 0 - 10
(продолжение) Обозначение Параметр min typ max l/'clcl Частота тактового сигнала, МГц ГСС = 4.5...5.5В ATtinyl 2 0 - oo ATtinyl 3, ATtiny26 0 - 16 ATtiny2313, ATtiny24x/44x/84x, ATtiny25x/45x/85x 0 - 20 'shsl Длительность положительного импульса сигнала SCK 2/clcl0 - - 'slsh Длительность отрицательного импульса сигнала SCK 2/clcl0 - - tovsh Задержка нарастающего фронта сигнала SCK относительно установления сигнала MOSI 'clcl - - tshox Время удержания сигнала MOSI относительно нарастающего фронта сигнала SCK 2'clcl0 - - 'sliv Задержка установления сигнала MISO относительно спадающего фронта сигнала SCK, не 10 16 32 AvD_erase Период ожидания после загрузки команды «Стирание кристалла», мс 9 - - 'wd_flash Период ожидания после записи FLASH- памяти, мс 4.5 - - 'wd_eepr0m Период ожидания после записи EEPROM-памяти, мс 9 - - '\vd_fuse Период ожидания после записи конфигурационных ячеек или ячеек защиты, мс 4.5 - - ]) 2/clcl при/ск < 12 МГц и 3/clcl при/ск ^ 12 МГц. Как и в рабочем режиме, при программировании по последовательному каналу микроконтроллеру требуется источник тактового сигнала. В качестве такового может использоваться любой из допустимых для микроконтроллера источников. При этом должно выполняться следующее условие: длительность импульсов как НИЗКОГО, так и ВЫСОКОГО уровня сигнала SCK должна быть больше двух (при/ск < 12 МГц) или трех (при/ск > 12 МГц) периодов тактового сигнала микроконтроллера. Программирование осуществляется путем посылки 4-байтных команд на вывод MOSI микроконтроллера. Результат выполнения команд чтения снимается с вывода MISO микроконтроллера. Передача команд и выдача результатов их выполнения осуществляется от старшего бита к младшему. При этом «защелкивание» входных данных выполняется по нарастающему фронту сигнала SCK, а «защелкивание» выходных данных — по спадающему (см. Рис. 12.7 и 12.8).
Таблица 12.15. Команды режима программирования по последовательному каналу Команда Формат команды Описание команды 1-й байт 2-й байт 3-й байт 4-й байт Разрешение программирования $АС $53 $00 $00 Разрешает программирование микроконтроллера, пока на выводе RESET присутствует напряжение НИЗКОГО уровня Стирание кристалла $АС $80 $00 $00 Очистка содержимого FLASH- и EEPROM-памяти Чтение флага готовности RDY/BSY0 $F0 $00 $00 данные Если 0-й бит принятого байта сброшен в 0, то предыдущая операция программирования не завершена. Перед посылкой новой команды программирования необходимо дождаться установки этого бита в 1 Команды загрузки Загрузка страницы FLASH-памяти, старший байт2) $48 $00 адрес старший байт Запись младшего/старшего байта в буфер страницы памяти программ. Адрес является адресом слова в пределах страницы. Младший байт должен загружаться первым Загрузка страницы FLASH-памяти, младший байт2) $40 $00 адрес младший байт Загрузка страницы EEPROM-памяти (страничный доступ)1} $С1 $00 адрес данные Запись байта в буфер страницы EEPROM-памяти. Адрес является адресом байта в пределах страницы
(продолжение) Команда Формат команды Описание команды 1-й байт 2-й байт 3-й байт 4-й байт Команды чтения Чтение FLASH-памяти, старший байт $28 адрес (старший байт) адрес (младший байт) данные Чтение старшего/младшего байта памяти программ. Адрес является адресом слова в пределах адресного пространства памяти программ Чтение FLASH-памяти, младший байт $20 адрес (старший байт) адрес (младший байт) данные Чтение EEPROM-памяти $А0 адрес (старший байт) адрес (младший байт) данные Чтение содержимого ячейки EEPROM-памяти. Адрес является адресом байта в пределах адресного пространства EEPROM Чтение ячеек защиты $58 $00 $00 данные Чтение байта, содержащего значение ячеек защиты Чтение идентификатора $30 $00 адрес данные Чтение байта идентификатора с заданным адресом (только в режимах защиты №1 и №2, см. Табл. 12.2) Чтение младшего конфигурационного байта $50 $00 $00 данные Чтение конфигурационных ячеек. Сброшенный бит означает, что соответствующая конфигурационная ячейка запрограммирована Чтение старшего конфигурационного байта $58 $08 $00 данные Чтение дополнительного конфигурационного байта $50 $08 $00 данные Чтение калибровочной ячейки $38 $00 адрес данные Чтение калибровочной константы по заданному адресу Команды записи Запись страницы FLASH-памяти2* $4С адрес (старший байт) адрес (младший байт) $00 Запись страницы памяти программ по заданному адресу. Адрес представляет собой значение старших битов слов загруженной страницы (Рис. 12.9)
(продолжение) Команда Формат команды Описание команды 1-й байт 2-й байт 3-й байт 4-й байт Запись FLASH-памяти, старший байт (только ATtinyl 2х, ATtinylSL) 48 адрес (старший байт) адрес (младший байт) данные Запись значения в ячейку FLASH-памяти по заданному адресу Запись FLASH-памяти, младший байт (только ATtinyl 2х, ATtinyl5L) 40 адрес (старший байт) адрес (младший байт) данные Запись EEPROM-памяти $С0 адрес (старший байт) адрес (младший байт) данные Запись значения в ячейку EEPROM-памяти по заданному адресу. Запись страницы EEPROM-памяти (страничный доступ)1* $С2 адрес (старший байт) адрес (младший байт) $00 Запись страницы EEPROM-памяти по заданному адресу. Адрес представляет собой номер страницы, сдвинутый влево (Рис. 12.9) Запись ячеек защиты $АС $Е0 $00 данные Запись ячеек защиты. Для программирования ячейки соответствующий бит байта данных должен быть сброшен Запись младшего конфигурационного байта $АС $А0 $00 данные Запись конфигурационных ячеек. Для программирования ячейки соответствующий бит байта данных должен быть сброшен Запись старшего конфигурационного байта $АС $А8 $00 данные Записьдополнительного конфигурационного байта $АС $А4 $00 данные 1} В моделях ATtinyBx, ATtiny2313x, ATtiny24x/44x/84x и ATtiny25x/45x/85x. 2) Отсутствует в моделях ATtinyl 2х и ATtinyl5L.
Загрузить страницу FLASH-памяти (старший/младший байт)/ Загрузить страницу EEPROM (страничный доступ) Записать страницу памяти программ/ Записать станицу EEPROM Рис. 12.9. Использование команд страничного доступа
12.3.1. Переключение в режим программирования Для перевода микроконтроллера в режим программирования по последовательному каналу необходимо выполнить следующие действия: 1. Подать на микроконтроллер напряжение питания, при этом на выводах SCK и RESET должно присутствовать напряжение НИЗКОГО уровня. В некоторых случаях (если программатор не гарантирует установку сигнала SCK в 0 при подаче питания), после установки сигнала SCK в 0 необходимо подать на вывод RESET положительный импульс длительностью не менее двух периодов тактового сигнала микроконтроллера. 2. Выждать не менее 20 мс. 3. Послать на вывод MOSI команду «Разрешение программирования». Для контроля прохождения команды при посылке 3-го байта возвращается значение 2-го байта ($53). Если возвращаемое значение отлично от указанного, необходимо подать на вывод RESET положительный импульс и снова послать команду «Разрешение программирования». Причем, независимо от возвращаемого значения необходимо передавать все 4 байта команды. Отсутствие возврата числа $53 после нескольких попыток указывает на отсутствие связи между программатором и микросхемой либо на неисправность микросхемы. После завершения программирования на вывод RESET можно подать напряжение ВЫСОКОГО уровня для перевода микроконтроллера в рабочий режим либо выключить его. В последнем случае необходимо выполнить следующую последовательность действий: 1. Подать на вывод XTAL1 напряжение НИЗКОГО уровня, если тактирование микроконтроллера осуществляется от внешней схемы. 2. Подать на вывод RESET напряжение ВЫСОКОГО уровня. 3. Отключить напряжение питания от микроконтроллера. 12.3.2. Управление процессом программирования FLASH-памяти В моделях ATtinyl2x и ATtinyl5L программирование памяти программ осуществляется побайтно путем посылки команд «Запись FLASH-памяти». В каждой команде передается адрес изменяемой ячейки и записываемое значение. Программирование памяти программ остальных моделей семейства осуществляется постранично. Сначала содержимое страницы побайтно заносится в буфер по командам «Загрузка страницы FLASH-памяти». В каждой команде передаются младшие биты адреса изменяемой ячейки (положение ячейки внутри страницы) и записываемое значение. Содержимое каждой ячейки должно загружаться в следующей последовательности: сначала младший байт, потом старший.
Фактическое программирование страницы FLASH-памяти осуществляется после загрузки буфера страницы по команде «Запись страницы FLASH-памяти». В команде передаются старшие биты адреса ячеек (номер страницы), как показано на Рис. 12.9. Следует помнить, что дальнейшее программирование памяти можно будет выполнять только после завершения записи страницы (в моделях ATtinyl2x и ATtinyl5L — текущей ячейки). Определить момент окончания записи можно тремя способами. Первый и наиболее простой способ — выдерживать между посылкой команд паузу длительностью не менее tWDFLASH (Табл. 12.14). Второй способ заключается в контролировании содержимого любой из записываемых ячеек после посылки команды записи: до завершения записи ячейки при ее чтении возвращается значение $FF, а после завершения — записанное значение. Ну, а третий способ — опрос флага готовности RDY/BSY с помощью соответствующей команды и возобновление процесса программирования после установки флага в 1. 12.3.3. Управлением процессом программирования EEPROM-памяти Прежде всего, программирование EEPROM-памяти во всех моделях семейства может быть осуществлено побайтно, посылкой команд «Запись EEPROM-памяти». В каждой команде передается адрес ячейки и записываемое значение. А в новых моделях появился альтернативный способ записи EEPROM-памяти — постраничный. Содержимое страницы побайтно заносится в буфер по командам «Загрузка страницы EEPROM-памяти», а затем осуществляется фактическое программирование страницы EEPROM-памяти по команде «Запись страницы EEPROM-памяти». Значения адресов, передаваемые в этих командах, определяются так же, как и при программировании FLASH-памяти (Рис. 12.9). Как и при программировании FLASH-памяти, дальнейшее программирование EEPROM-памяти можно выполнять только после завершения записи страницы (в моделях ATtinyl2x, ATtinyl5L и ATtiny26x — текущей ячейки). Определить момент окончания записи можно тремя способами. Первый и наиболее простой способ — выдерживать между посылкой команд паузу длительностью не менее /\vd_eeprom (Табл. 12.14). Второй способ заключается в контролировании содержимого любой из записываемых ячеек после посылки команды записи: до завершения записи ячейки при ее чтении возвращается значение $FF, а после завершения — записанное значение. Третий способ — опрос флага готовности RDY/BSY с помощью соответствующей команды и возобновление процесса программирования после установки флага в 1.
12.4. Параллельное программирование В режиме параллельного программирования, как следует из его названия, от программатора к микроконтроллеру передаются одновременно все биты кода команды или байта данных. Этот режим задействует большое число выводов микроконтроллера и, кроме того, требует использования дополнительного источника повышенного напряжения (+12 В). Поэтому он реализован только в моделях с большим количеством выводов: ATtiny2313x, ATtiny26xnATtiny28x. Схема включения микросхем в режиме параллельного программирования приведена на Рис. 12.10. Назначение сигналов, присутствующих на выводах микроконтроллера в этом режиме, приведено в Табл. 12.16...12.18. Рис. 12.10. Включение микроконтроллеров в режиме параллельного программирования
Таблица 12.16. Обозначение и функции выводов, используемых при программировании в параллельном режиме Сигнал Вывод Вход/ Выход Назначение ATtiny2313x, 28х ATtiny26x RDY/ BSY PD1 РВ6 Выход Состояние устройства: 0 — занято (выполняется предыдущая команда); 1 — готово к приему следующей команды ОЁ PD2 РВ5 Вход Управление режимом работы шины данных РВ7...РВ0: 0 — выход, 1 — вход WR PD3 РВО Вход Сигнал записи (активный уровень — 0) BS1 PD4 РВЗ Вход Выбор байта (Табл. 12.17) PAGEL1* Сигнал загрузки страницы памяти ХАО PD5 РВ1 Вход Определяют действие, выполняемое по положительному импульсу на выводе XTAL1 (Табл. 12.18) ХА1 PD6 РВ2 Вход BS2'> Выбор байта (Табл. 12.17) DATA РВ7...0 РА7...0 Вход/ Выход Двунаправленная шина данных 1) Только в ATtiny2313x и ATtiny26x. Таблица 12.17. Функции сигналов BS1 и BS2 BS2 BS1 Адрес FLASH/EEPROM Загрузка/чтение FLASH Программирование конфигурационных ячеек Чтение конфигурационных ячеек и ячеек защиты 0 0 Младший байт Младший байт Младший байт Младший байт 0 1 Старший байт Старший байт Старший байт Байт ячеек защиты 1 0 Зарезервировано Зарезервировано Дополнительный байт Дополнительный байт 1 1 Зарезервировано Зарезервировано Зарезервировано Старший байт Таблица 12.18. Функции сигналов ХАО и ХА1 ХА1 ХАО Действие, выполняемое по тактовому импульсу 0 0 Загрузка адреса ячейки памяти (младшего или старшего байта, в зависимости от уровня сигнала BS1) 0 1 Загрузка данных (младшего или старшего байта, в зависимости от уровня сигнала BS1) 1 0 Загрузка команды 1 1 Нет действия, режим ожидания
Временные диаграммы сигналов при программировании микроконтроллера в параллельном режиме представлены на Рис. 12.11, а значения параметров сигналов приведены в Табл. 12.19.
Рис. 12.11. Временные диаграммы сигналов при программировании в параллельном режиме: а — загрузка данных; б — чтение данных; в— общие требования Таблица 12.19. Параметры сигналов при программировании в параллельном режиме Обозначение Параметр min max КрР Напряжение разрешения программирования, В 11.5 12.5 /рр Ток, потребляемый от источника +12 В (КРР), мкА - 250 'dvxh Задержка сигнала XTAL1 относительно момента установления сигналов управления и данных, не 67 - 'XLXH Интервал между импульсами сигнала XTAL1, не 200 - 6(HXL Длительность импульсов сигнала XTAL1, не 150 - 'XLDX Время удержания сигналов управления и данных относительно заднего фронта сигнала XTAL1, не 67 - 'XLWL Задержка сигнала WR относительно заднего фронта сигнала XTAL1, не 0 - 'XLPH Задержка сигнала PAGEL относительно заднего фронта сигнала ХТАЫ,нс 0 - 'PLXH Задержка сигнала XTAL1 относительно заднего фронта сигнала PAGEL, не 150 - *BVPH Задержка сигнала PAGEL относительно сигнала BS1, не 67 -
(продолжение) Обозначение Параметр min max 'PHPL Длительность импульса сигнала PAG EL, не 150 - 'PLBX Время удержания сигнала BS1 относительно заднего фронта сигнала PAGEL, не 67 - 'WHBX Время удержания сигналов BS1/BS2 относительно заднего фронта сигнала WR, не 67 - >PLWL Задержка сигнала WR относительно заднего фронта сигнала PAGEL, не 67 - *BVWL Задержка сигнала WR относительно момента установления сигнала BS1, не 67 - 'RHBX Время удержания сигнала BS1 относительно заднего фронта сигнала RDY/BSY, не 67 - AvLWH Длительность импульса сигнала WR, не 150 - AvLRL Задержка появления сигнала RDY/BSY относительно переднего фронта сигнала WR, мкс 0 1 'wlrh Задержка снятия сигнала RDY/BSY относительно переднего фронта сигнала WR, мс 3.7 4.5 'WLRH_CE Задержка снятия сигнала RDY/BSY относительно переднего фронта сигнала WR для команды «Стирание кристалла», мс 7.5 9 6<LOL Задержка сигнала ОЕ относительно заднего фронта сигнала XTAL1, не 0 - 'bhdv Время установления сигналов данных относительно нарастающего фронта сигнала BS1, не 0 250 'OLDV Время установления сигналов данных относительно переднего фронта сигнала ОЕ, не - 250 'OHDZ Задержка переключения шины данных в третье состояние относительно заднего фронта сигнала ОЕ, не - 250 В общих чертах, процесс программирования в этом режиме состоит из многократного выполнения следующих операций: • загрузка команды; • загрузка адреса; • загрузка данных; • выполнение команды. Последовательность подачи сигналов на выводы микроконтроллера при выполнении различных базовых операций приведена в Табл. 12.20.
Таблица 12.20. Базовые операции программирования в параллельном режиме Название операции Действия 1 Загрузка команды 1. Установить выводы ХА1, ХАО в состояние 10 (загрузка команды). 2. Подать на вывод BS1 напряжение лог. 0. 3. Выставить на шину DATA код команды (Табл. 12.21). 4. Подать на вывод XTAL1 положительный импульс. 2 Загрузка адреса 1. Установить выводы ХА1, ХАО в состояние 00 (загрузка адреса). 2. Подать на вывод BS1 напряжение лог. 0 (загрузка младшего байта) или лог. 1 (загрузка старшего байта). 3. Выставить на шину DATA байт адреса. 4. Подать на вывод XTAL1 положительный импульс. 3 Загрузка данных 1. Установить выводы ХА1, ХАО в состояние 01 (загрузка данных). 2. Подать на вывод BS1 напряжение лог. 0 (загрузка младшего байта) или лог. 1 (загрузка старшего байта). 3. Выставить на шину DATA содержимое байта данных. 4. Подать на вывод XTAL1 положительный импульс. 4 Запись данных в буфер страницы 1. Подать на вывод BS1 напряжение лог. 1. 2. Подать на вывод PAGEL положительный импульс. 5 Запись байта конфигурации 1. Установить выводы BS2:BS1 в состояние 00 (запись младшего байта), 01 (запись старшего байта) или 10 (запись дополнительного байта). 2. Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня. 3. Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня. Запись страницы 1. Подать на вывод BS1 напряжение лог. 0. 2. Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня. 3. Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня. В рассматриваемом режиме используется 10 команд, коды которых приведены в Табл. 12.21. Таблица 12.21. Команды программирования в параллельном режиме Код команды Описание 10000000 Стирание кристалла 01000000 Запись конфигурационных ячеек 00100000 Запись ячеек защиты 00010000 Запись FLASH-памяти 00010001 Запись EEPROM-памяти 0000 1000 Чтение идентификатора 00000100 Чтение конфигурационных ячеек и ячеек защиты 0000 0010 Чтение FLASH-памяти 00000011 Чтение EEPROM-памяти 00000000 Нет операции
12.4.1. Переключение в режим параллельного программирования Первой операцией при программировании микроконтроллера является его перевод в режим программирования. Для перевода микроконтроллера в режим программирования необходимо выполнить следующие действия: 1. Подать на микроконтроллер напряжение питания. 2. Подать на вывод RESET напряжение НИЗКОГО уровня и (для ATtiny26x) сформировать не менее шести импульсов на выводе XTAL1. 3. Подать на выводы PAGEL, ХА1, ХАО, BS1 напряжение НИЗКОГО уровня на время не менее 100 не. 4. Подать напряжение 11.5... 12.5 В на вывод RESET и удерживать напряжение НИЗКОГО уровня на выводах PAGEL, ХА1, ХАО, BS1 в течение, как минимум, 10 мкс. Любая активность на указанных выводах в течение этого времени приведет к тому, что микроконтроллер не перейдет в режим программирования. 5. Выждать не менее 300 мкс перед посылкой следующей команды. Если вывод сброса микроконтроллера (ATtiny2313x и ATtiny26x) задействован под линию ввода/вывода (RSTDISBL = 0), то перед выполнением действий, описанных выше, необходимо сделать следующее: 1. Подать на выводы PAGEL, ХА1, ХАО, BS1 напряжение НИЗКОГО уровня. 2. Подать на микроконтроллер напряжение питания (Ксс), а на вывод RESET — напряжение 11.5... 12.5 В (КРР). 3. Выждать не менее 100 не. 4. Перепрограммировать ячейку RSTDISBL (если установлена защита, то сначала необходимо выполнить стирание кристалла). Иногда может потребоваться перепрограммирование ячеек CKSEL для включения режима работы от внешнего генератора. 5. Выйти из режима программирования (отключить питание или подать на вывод RESET напряжение ВЫСОКОГО уровня). 6. Перевести микроконтроллер в режим программирования, как было описано ранее. 12.4.2. Стирание кристалла Команда «Стирание кристалла» должна выполняться перед каждым перепрограммированием микроконтроллера. Данная команда полностью уничтожает содержимое FLASH- и EEPROM-памяти, а затем сбрасывает ячейки защиты (записывает в них 1). Однако на состояние конфигураци-
онных ячеек данная команда не влияет. Кроме того, в ряде моделей семейства можно предотвратить стирание EEPROM-памяти путем программирования конфигурационной ячейки EESAVE. Для выполнения команды «Стирание кристалла» необходимо выполнить следующие действия: 1. Загрузить команду «Стирание кристалла» (код 1000 0000). 2. Подать на вывод WR о