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


УДК 621.316.544.1@35.5) ББК 32.844.1-04я2 Е26 Евстифеев А.В. Е26 Микроконтроллеры AVR семейства Mega. Руководство пользователя. — М.: Издательский дом «Додэка-XXI», 2007. — 592 с: ил. (Серия «Программируемые системы»). ISBN 978-5-94120-090-0 Книга представляет собой справочное руководство по однокристальным микроконтроллерам AVR семейства Mega фирмы ATMEL. Рассмотрена архитектура микроконтроллеров AVR, ее особенности, приведены основные электрические параметры. Подробно описано внутреннее устройство микроконтроллеров, система команд, периферия, а также способы программирования. Основой данного издания послужила популярная книга «Микроконтроллеры AVR семейств Tiny и Mega», материал которой был существенно переработан и дополнен описаниями новых моделей. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов. УДК 621.316.544.1 @35.5) ББК 32.844.1-04я2 Ответственный редактор Т. Е. Брод Верстка В. И. Матвеева Графике. Н. Клочков Корректор Г. Б. Абудеева Подписано в печать 11.12.2006. Формат 60x90/16. Бумага типографская № 2. Гарнитура «NewtonC». Печать офсетная. Объем 37,0 п. л. Усл. печ. л. 37,0. Тираж 3000 экз. Изд. N> 142. Заказ № 3371. Издательский дом «Додэка-XXI». ОКП 95 3000 105318 Москва, а/я 70. Тел./факс: @95) 366-24-29, 366-81-45 E-mail: books@dodeca.ru; red@dodeca.ru Отпечатано с готовых диапозитивов в ОАО «Типография Новости». 105005 Москва, ул. Ф. Энгельса, 46 © Издательский дом «Додэка-XXI», 2007 ISBN 978-5-94120-090-0 ® Серия «Программируемые системы»
ОГЛАВЛЕНИЕ Предисловие 8 Глава 1. Знакомство с семейством Mega 10 1.1. Общие сведения 10 1.2. Отличительные особенности 10 1.3. Характеристики процессора 11 1.4. Характеристики подсистемы ввода/вывода 11 1.5. Периферийные устройства 12 1.6. Архитектура ядра 12 1.7. Цоколевка и описание выводов 13 Глава 2. Архитектура микроконтроллеров семейства Mega 87 2.1. Общие сведения 87 2.2. Организация памяти 101 2.2.1. Память программ 103 2.2.2. Память данных 105 2.2.3. Энергонезависимая память данных (EEPROM) 160 2.3. Счетчик команд и выполнение программы 165 2.3.1. Счетчик команд 165 2.3.2. Функционирование конвейера 166 2.3.3. Команды типа «проверка/пропуск» (Test & Skip) 167 2.3.4. Команды условного перехода 167 2.3.5. Команды безусловного перехода 167 2.3.6. Команды вызова подпрограмм 169 2.3.7. Команды возврата из подпрограмм 171 2.4. Стек 171 Глава 3. Система команд 172 3.1. Общие сведения 172 3.2. Операнды 172 3.3. Типы команд 174 3.3.1. Команды логических операций 175 3.3.2. Команды арифметических операций и команды сдвига 175
4 ¦ Оглавление 3.3.3. Команды битовых операций 175 3.3.4. Команды пересылки данных 176 3.3.5. Команды передачи управления 176 3.3.6. Команды управления системой 178 3.4. Сводные таблицы команд 179 3.5. Описание команд 185 Глава 4. Тактирование, режимы пониженного энергопотребления и сброс 251 4.1. Общие сведения 251 4.2. Тактовый генератор 251 4.2.1. Генератор с внешним резонатором 254 4.2.2. Низкочастотный кварцевый генератор 256 4.2.3. Внешний сигнал синхронизации 256 4.2.4. Генератор с внешней RC-цепочкой 256 4.2.5. Внутренний калиброванный RC-генератор 257 4.2.6. Внутренний RC-генератор на 128 кГц 259 4.2.7. Управление тактовой частотой 259 4.3. Управление электропитанием 262 4.3.1. Режимы пониженного энергопотребления 262 4.3.2. Управление тактовыми сигналами модулей 268 4.3.3. Общие рекомендации по уменьшению энергопотребления 271 4.4. Сброс 273 4.4.1. Сброс по включению питания 277 4.4.2. Аппаратный сброс 278 4.4.3. Сброс от сторожевого таймера 279 4.4.4. Сброс при снижении напряжения питания 279 4.4.5. Управление схемой сброса 281 Глава 5. Прерывания 291 5.1. Общие сведения 291 5.2. Таблица векторов прерываний 291 5.3. Обработка прерываний 306 5.4. Внешние прерывания 308 Глава 6. Порты ввода/вывода 320 6.1. Общие сведения 320 6.2. Регистры портов ввода/вывода 321 6.3. Конфигурирование портов ввода/вывода 323 Глава 7. Таймеры 329 7.1. Общие сведения 329 7.2. Назначение выводов таймеров/счетчиков 330 7.3. Прерывания от таймеров/счетчиков 333 7.4. Предделители таймеров/счетчиков 338 7.4.1. Управление предделителями 339 7.4.2. Использование внешнего тактового сигнала 341
Оглавление ¦ 5 7.5. Восьмибитные таймеры/счетчики 342 7.5.1. Управление тактовым сигналом 352 7.5.2. Режимы работы 353 7.5.3. Асинхронный режим 360 7.6.16-битные таймеры/счетчики 363 7.6.1. Обращение к 16-битным регистрам 372 7.6.2. Управление тактовым сигналом 373 7.6.3. Режимы работы 373 7.7. Модулятор 385 7.8. Сторожевой таймер 386 Глава 8. Аналоговый компаратор 395 8.1. Общие сведения 395 8.2. Функционирование компаратора 396 Глава 9. Аналого-цифровой преобразователь 401 9.1. Общие сведения 401 9.2. Функционирование модуля АЦП 402 9.3. Результат преобразования 415 9.4. Повышение точности преобразования 416 9.5. Параметры АЦП 417 Глава 10. Последовательный периферийный интерфейс SPI 419 10.1. Общие сведения 419 10.2. Функционирование модуля SPI 419 10.3. Режимы передачи данных 424 10.4. Использование вывода SS 426 Глава 11. Двухпроводный последовательный интерфейс TWI 427 11.1. Общие сведения 427 11.2. Принципы обмена данными по шине TWI 428 11.3. Обзор модуля TWI 433 11.4. Взаимодействие прикладной программы с модулем TWI 440 11.5. Режимы работы модуля TWI 443 11.5.1. Режим «Ведущий-передатчик» 443 11.5.2. Режим «Ведущий-приемник» 448 11.5.3. Режим «Ведомый-приемник» 452 11.5.4. Режим «Ведомый-передатчик» 457 11.5.5. Комбинирование различных режимов 461 11.5.6. Арбитраж 461 11.6. Параметры интерфейса TWI 463 Глава 12. Универсальный последовательный интерфейс USI 465 12.1. Общие сведения 465 12.2. Использование модуля USI 466 12.3. Режимы работы модуля USI 470
6 ¦ Оглавление 12.3.1. Трехпроводный режим 470 12.3.2. Двухпроводным режим 473 12.3.3. Альтернативное использование модуля USI 476 Глава 13. Универсальный синхронный/асинхронный приемо-передатчик 477 13.1. Общие сведения 477 13.2. Использование модулей USART 479 13.2.1. Скорость приема/передачи 486 13.2.2. Формат кадра 492 13.2.3. Передача данных 493 13.2.4. Прием данных 495 13.3. Мультипроцессорный режим работы 500 13.4. Модуль USART в режиме MSPI 501 13.4.1. Управление модулем USART в режиме MSPI 501 13.4.2. Инициализация режима MSPI 505 13.4.3. Передача данных в режиме MSPI 506 Глава 14. Программирование микроконтроллеров AVR семейства Mega 508 14.1. Общие сведения 508 14.1.1. Защита кода и данных 509 14.1.2. Конфигурационные ячейки 511 14.1.3. Идентификатор 516 14.1.4. Калибровочные ячейки 517 14.1.5. Организация памяти программ и данных 517 14.2. Программирование по последовательному каналу 518 14.2.1. Переключение в режим программирования 525 14.2.2. Управление процессом программирования FLASH-памяти 525 14.2.3. Управление процессом программирования EEPROM-памяти 526 14.3. Параллельное программирование 526 14.3.1. Переключение в режим параллельного программирования 532 14.3.2. Стирание кристалла 533 14.3.3. Программирование FLASH-памяти 533 14.3.4. Программирование EEPROM-памяти 535 14.3.5. Программирование конфигурационных ячеек 537 14.3.6. Программирование ячеек защиты 538 14.3.7. Чтение конфигурационных ячеек и ячеек защиты 538 14.3.8. Чтение ячеек идентификатора и калибровочных ячеек 539 14.4. Программирование по интерфейсу JTAG 539 14.4.1. Общие сведения об интерфейсе JTAG 539 14.4.2. Использование интерфейса JTAG для программирования кристалла ... 542 14.4.3. Команды JTAG, используемые при программировании 543 14.4.4. Алгоритм программирования 545 14.5. Самопрограммирование микроконтроллеров семейства Mega 554 14.5.1. Общие сведения 554 14.5.2. Области RWWh NRWW 555 14.5.3. Функционирование загрузчика 557
Оглавление ¦ 7 Приложения 564 Приложение 1. Сводная таблица микроконтроллеров AVR семейства Mega 564 Приложение 2. Чертежи корпусов микроконтроллеров AVR семейства Mega 574 Приложение 3. Параметры микроконтроллеров AVR семейства Mega 577 Предметный указатель 582
Предисловие Книга, которую вы держите в руках, посвящена одному из семейств микроконтроллеров AVR фирмы Atmel. Эти 8-битные RISC-микроконтроллеры для встраиваемых приложений являются, пожалуй, наиболее интересным направлением, развиваемым фирмой. Они представляют собой мощный инструмент, прекрасную основу для создания современных высокопроизводительных и экономичных встраиваемых контроллеров многоцелевого назначения. Несмотря на то что микроконтроллеры AVR появились на рынке около 10 лет назад, их популярность до сих пор очень высока. С каждым годом они захватывают все новые и новые ниши на рынке. Не последнюю роль в этом играет соотношение показателей цена/быстродействие/энергопотребление, до сих пор являющееся едва ли не лучшим на рынке 8-битных микроконтроллеров. Кроме того, постоянно растет число выпускаемых сторонними производителями разнообразных программных и аппаратных средств поддержки разработок устройств на их основе. Все это позволяет говорить о микроконтроллерах AVR как об индустриальном стандарте среди 8-битных микроконтроллеров. В настоящее время в рамках единой базовой архитектуры микроконтроллеры AVR подразделяются на несколько семейств: • TinyAVR; • Mega AVR; • Mega AVR для специальных применений; • ASIC/FPGAAVR. Данная книга посвящена семейству Mega. Микроконтроллеры этого семейства имеют наиболее развитую периферию, наибольшие среди всех микроконтроллеров AVR объемы памяти программ и данных. Они предназначены для использования в мобильных телефонах, в контроллерах различного периферийного оборудования (такого как принтеры, сканеры, современные дисковые накопители, приводы CD-ROM/DVD-ROM и т. п.), в сложной офисной технике и т. д. Микроконтроллеры семейства Mega поддерживают несколько режимов пониженного энергопотребления, имеют блок прерываний, стороже-
Предисловие ¦ 9 вой таймер и допускают программирование непосредственно в готовом устройстве. В предлагаемой вашему вниманию книге представлена вся информация, необходимая для изучения микроконтроллеров AVR семейства Mega. Вместе с тем следует заметить, что всеобъемлющим справочником данная книга не является, хотя и написана на основе документации, предоставляемой фирмой Atmel. Поэтому, прежде чем приступить к практическому использованию рассматриваемых микроконтроллеров, рекомендуется обратиться к официальной информации, размещенной на Web-сайтах фирмы (www.atmel.com, www.atmel.ru).
Знакомство с семейством Меда 1.1. Общие сведения Как и все микроконтроллеры AVR фирмы Atmel, микроконтроллеры семейства Mega являются 8-битными микроконтроллерами, предназначенными для использования во встраиваемых приложениях. Они изготавливаются по малопотребляющей КМОП-технологии, которая в сочетании с усовершенствованной RISC-архитектурой позволяет достичь наилучшего соотношения стоимость/быстродействие/энергопотребление. Микроконтроллеры описываемого семейства являются наиболее развитыми представителями микроконтроллеров AVR общего применения. 1.2. Отличительные особенности К особенностям микроконтроллеров AVR семейства Mega можно отнести: • FLASH-память программ объемом от 8 до 256 Кбайт (число циклов стирания/записи не менее 10 000); • оперативная память (статическое ОЗУ) объемом от 512 байт до 8 Кбайт; • память данных на основе ЭСППЗУ (EEPROM) объемом от 256 байт до 4 Кбайт (число циклов стирания/записи не менее 100 000); • возможность защиты от чтения и модификации памяти программ и данных; • возможность программирования непосредственно в системе через последовательные интерфейсы SPI и JTAG; • возможность самопрограммирования; • возможность внутрисхемной отладки в соответствии со стандартом IEEE 1149.1 (JTAG), а также наличие собственного однопроводного интерфейса внутрисхемной отладки debugWire1); • разнообразные способы синхронизации: встроенный 7?С-генератор с внутренней или внешней времязадающей /?С-цепочкой, встроенный Не во всех моделях. глава 1
1.3. Характеристики процессора ¦ 11 генератор с внешним кварцевым или пьезокерамическим резонатором, внешний сигнал синхронизации; • наличие нескольких режимов пониженного энергопотребления; • наличие детектора пониженного напряжения питания (Brown-Out Detector-BOD); • возможность программного снижения частоты тактового генератора1*. 1.3. Характеристики процессора Основными характеристиками процессора микроконтроллеров AVR семейства Mega являются: • полностью статическая архитектура, минимальная тактовая частота равна нулю; • арифметико-логическое устройство (АЛУ) подключено непосредственно к регистрам общего назначения C2 регистра); • большинство команд выполняются за один период тактового сигнала; • векторная система прерываний, поддержка очереди прерываний; • большое число источников прерываний (до 45 внутренних и до 32 внешних); • наличие аппаратного умножителя. 1.4. Характеристики подсистемы ввода/вывода Подсистема ввода/вывода микроконтроллеров AVR семейства Mega имеет следующие особенности: • программное конфигурирование и выбор портов ввода/вывода; • выводы могут быть запрограммированы как входные или как выходные независимо друг от друга; • входные буферы с триггером Шмитта на всех выводах; • имеется возможность полного отключения цифрового порта ввода/вывода от физического вывода микросхемы2); • на всех входах имеются индивидуально отключаемые внутренние подтягивающие резисторы сопротивлением 20...50 кОм. Не во всех моделях. В новых моделях.
12 ¦ Глава 1. Знакомство с семейством Mega 1.5. Периферийные устройства Микроконтроллеры семейства Mega имеют богатый набор периферийных устройств (ПУ): • один или два 8-битных таймера/счетчика. Во всех моделях с двумя 8-битными таймерами/счетчиками один из них может работать в качестве часов реального времени (в асинхронном режиме); • от одного до четырех 16-битных таймеров/счетчиков; • сторожевой таймер; • одно- и двухканальные генераторы 8-битного ШИМ-сигнала (один из режимов работы 8-битных таймеров/счетчиков); • двух- и трехканальные генераторы ШИМ-сигнала регулируемой разрядности (один из режимов работы 16-битных таймеров/счетчиков). Разрешение формируемого сигнала может составлять от 1 до 16 бит; • аналоговый компаратор; • многоканальный 10-битный АЦП последовательного приближения, имеющий как несимметричные, так и дифференциальные входы; • последовательный синхронный интерфейс SPI; • последовательный двухпроводный интерфейс TWI (полный аналог интерфейса 12С); • от одного до четырех полнодуплексных универсальных синхронных/асинхронных приемо-передатчиков (USART). В ряде моделей эти приемо-передатчики могут использоваться в качестве ведущего устройства шины SPI; • универсальный последовательный интерфейс USI, который может использоваться в качестве интерфейса SPI или 12С. Кроме того, USI может использоваться в качестве полудуплексного UART или 4/12-битного счетчика. 1.6. Архитектура ядра Ядро микроконтроллеров AVR семейства Mega выполнено по усовершенствованной RISC-архитектуре (enhanced RISC) (Рис. 1.1), в которой используется ряд решений, направленных на повышение быстродействия микроконтроллеров. Арифметико-логическое устройство (АЛУ), выполняющее все вычисления, подключено непосредственно к 32 рабочим регистрам, объединенным в регистровый файл. Благодаря этому, АЛУ может выполнять одну операцию (чтение содержимого регистров, выполнение операции и запись результата обратно в регистровый файл) за такт. Кроме того, практически
7.7. Цоколевка и описание выводов ¦ 13 ПЗУ (FLASH) Последовательный синхронный интерфейс SPI ПЗУ (EEPROM) Регистр команд Счетчик Дешифратор команд 32 регистра общего назначения Сторожевой таймер (WDT) Регистры управления Таймеры АЦП Аналоговый компаратор Порты ввода/вывода Модуль прерываний Рис. 1.1. Архитектура ядра микроконтроллеров AVR каждая из команд (за исключением команд, у которых одним из операндов является 16-битный адрес) занимает одну ячейку памяти программ. В микроконтроллерах AVR реализована Гарвардская архитектура, характеризующаяся раздельной памятью программ и данных, каждая из которых имеет собственные шины доступа. Такая организация позволяет одновременно работать как с памятью программ, так и с памятью данных. Разделение информационных шин позволяет использовать для каждого типа памяти шины различной разрядности, причем способы адресации и доступа к каждому типу памяти также различаются. В сочетании с двухуровневым конвейером команд такая архитектура позволяет достичь производительности в 1 MIPS на каждый МГц тактовой частоты. 1.7. Цоколевка и описание выводов В семейство Mega на сегодняшний день входит в общей сложности 24 модели микроконтроллеров, которые делятся на 4 группы. 1. Микроконтроллеры в 32-выводных корпусах типа TQFP и MLF (также выпускаются в 28-выводных корпусах типа DIP) с максимальным числом контактов ввода/вывода, равным 23: • ATmega8, ATmega8L (Рис. 1.2) — имеют FLASH-память программ объемом 8 Кбайт, ОЗУ объемом 1 Кбайт и EEPROM-память данных объемом 512 байт. Эти модели полностью (по цоколевке и функцио- АЛУ
14 ¦ Глава 1. Знакомство с семейством Mega нально) обратно совместимы со снятыми с производства микроконтроллерами семейства Classic AT90S4433 и могут использоваться для их замены в новых разработках; • ATmega48, ATmega48V (Рис. 1.3) — имеют FLASH-память программ объемом 4 Кбайт, ОЗУ объемом 512 байт и EEPROM-память данных объемом 256 байт; • ATmega88, ATmega88V (Рис. 1.3) — имеют FLASH-память программ объемом 8 Кбайт, ОЗУ объемом 1 Кбайт и EEPROM-память данных объемом 512 байт; • ATmegal68, ATmegal68V (Рис. 1.3) — имеют FLASH-память программ объемом 16 Кбайт, ОЗУ объемом 1 Кбайт и EEPROM-память данных объемом 512 байт. 2. Микроконтроллеры в 44-выводных корпусах типа TQFP и М LF (также выпускаются в 40-выводных корпусах типа DIP) с максимальным числом контактов ввода/вывода, равным 35 (модели с возможностью подключения внешнего ОЗУ) или 32 (остальные модели): • ATmega8515, ATmega8515L (Рис. 1.4) — имеют FLASH-память программ объемом 8 Кбайт, ОЗУ объемом 512 байт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-память данных объемом 512 байт. Выпускаются также в 44-выводном корпусе типа PLCC. Эти модели по цоколевке полностью совместимы со снятыми с производства микроконтроллерами семейства Classic AT90S4414/8515. Кроме того, в них предусмотрен режим совместимости с моделями AT90S4414/8515 (в этом режиме обеспечивается их полная функциональная совместимость); • ATmega8535, ATmega8535L (Рис. 1.5) — имеют FLASH-память программ объемом 8 Кбайт, ОЗУ объемом 512 байт и EEPROM-память данных объемом 512 байт. Выпускаются также в 44-выводном корпусе типа PLCC. Эти модели по цоколевке полностью совместимы со снятыми с производства микроконтроллерами семейства Classic AT90S8535. Кроме того, в них предусмотрен режим совместимости с моделями AT90S8535 (в этом режиме обеспечивается их полная функциональная совместимость); • ATmegal6, ATmegal6L (Рис. 1.6) — имеют FLASH-память программ объемом 16 Кбайт, ОЗУ объемом 1 Кбайт и EEPROM-память данных объемом 512 байт. Максимальное число контактов ввода/вывода равно 32. Эти модели полностью (по цоколевке и функционально) обратно совместимы со снятыми с производства микроконтроллерами семейства ATMegal63(L) и могут использоваться для их замены в новых разработках;
7.7. Цоколевка и описание выводов ¦ 15 • ATmegal62, ATmegal62V (Рис. 1.7) — имеют FLASH-память программ объемом 16 Кбайт, ОЗУ объемом 1 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-па- мять данных объемом 512 байт. Максимальное число контактов ввода/вывода равно 32. Эти модели по цоколевке полностью совместимы со снятыми с производства микроконтроллерами ATmegal61(L). Кроме того, в них предусмотрен режим совместимости с моделями ATmegal61x (в этом режиме обеспечивается их полная функциональная совместимость); • ATmegal64, ATmegal64V (Рис. 1.8) — имеют FLASH-память программ объемом 16 Кбайт, ОЗУ объемом 1 Кбайт и EEPROM-память данных объемом 512 байт; • ATmega32, ATmega32L (Рис. 1.6) — имеют FLASH-память программ объемом 32 Кбайт, ОЗУ объемом 2 Кбайт и EEPROM-память данных объемом 1 Кбайт. Эти модели полностью (функционально и по цоколевке) обратно совместимы с микроконтроллерами ATmega323(L) и могут использоваться для их замены в новых разработках; • ATmega324, ATmega324V (Рис. 1.8) — имеют FLASH-память программ объемом 32 Кбайт, ОЗУ объемом 2 Кбайт и EEPROM-память данных объемом 1 Кбайт; • ATmega644, ATmega644V (Рис. 1.9) — имеют FLASH-память программ объемом 32 Кбайт, ОЗУ объемом 4 Кбайт и EEPROM-память данных объемом 2 Кбайт. Микроконтроллеры в 64-выводных корпусах типа TQFP и MLF: • ATmegal65, ATmegal65V (Рис. 1.10) — имеют FLASH-память программ объемом 16 Кбайт, ОЗУ объемом 1 Кбайт и EEPROM-память данных объемом 512 байт. Максимальное число контактов ввода/вывода равно 53; • ATmega325, ATmega325V (Рис. 1.11) — имеют FLASH-память программ объемом 32 Кбайт, ОЗУ объемом 2 Кбайт и EEPROM-память данных объемом 1 Кбайт. Максимальное число контактов ввода/вывода равно 53; • ATmega645, ATmega645V (Рис. 1.11) — имеют FLASH-память программ объемом 16 Кбайт, ОЗУ объемом 4 Кбайт и EEPROM-память данных объемом 2 Кбайт. Максимальное число контактов ввода/вывода равно 53; • ATmega64, ATmega64L (Рис. 1.12) — имеют FLASH-память программ объемом 64 Кбайт, ОЗУ объемом 4 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-память данных объемом 2 Кбайт. Максимальное число контактов ввода/вывода равно 53;
16 ¦ Глава L Знакомство с семейством Mega • ATmegal28, ATmegal28L (Рис. 1.12) — имеют FLASH-память программ объемом 128 Кбайт, ОЗУ объемом 4 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-na- мять данных объемом 4 Кбайт. Максимальное число контактов ввода/вывода равно 53; • ATmegal281, ATmegal281V(PHC. 1.13) — имеют FLASH-память программ объемом 128 Кбайт, ОЗУ объемом 8 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-na- мять данных объемом 4 Кбайт. Максимальное число контактов ввода/вывода равно 54; • ATmega2561, ATmega2561V (Рис. 1.13) — имеют FLASH-память программ объемом 256 Кбайт, ОЗУ объемом 8 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-na- мять данных объемом 4 Кбайт. Максимальное число контактов ввода/вывода равно 54. 4. Микроконтроллеры в 100-выводных корпусах типа TQFP: • ATmega3250, ATmega3250V (Рис. 1.14) — имеют FLASH-память программ объемом 32 Кбайт, ОЗУ объемом 2 Кбайт и EEPROM-память данных объемом 1 Кбайт. Максимальное число контактов ввода/вывода равно 68; • ATmega6450, ATmega6450V (Рис. 1.14) — имеют FLASH-память программ объемом 64 Кбайт, ОЗУ объемом 4 Кбайт и EEPROM-память данных объемом 2 Кбайт. Максимальное число контактов ввода/вывода равно 68; • ATmega640, ATmega640V (Рис. 1.15) — имеют FLASH-память программ объемом 64 Кбайт, ОЗУ объемом 8 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-память данных объемом 4 Кбайт. Максимальное число контактов ввода/вывода равно 86; • ATmegal280, ATmegal280V (Рис. 1.15) — имеют FLASH-память программ объемом 128 Кбайт, ОЗУ объемом 8 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-память данных объемом 4 Кбайт. Максимальное число контактов ввода/вывода равно 86; • ATmega2560, ATmega2560V (Рис. 1.15) — имеют FLASH-память программ объемом 128 Кбайт, ОЗУ объемом 8 Кбайт (с возможностью подключения внешнего ОЗУ объемом до 64 Кбайт) и EEPROM-память данных объемом 4 Кбайт. Максимальное число контактов ввода/вывода равно 86. Основные параметры всех микроконтроллеров семейства, такие как объем памяти (программ и данных), число контактов ввода/вывода, тип
7.7. Цоколевка и описание выводов ¦ 17 корпуса, диапазон рабочих частот и напряжения питания, приведены в Табл. 1.1. Полная информация по каждой модели приведена в Приложении 1. Дополнительно следует отметить, что одни модели микроконтроллеров семейства выпускаются как в коммерческом (диапазон рабочих температур 0. +70°С), так и в промышленном (диапазон рабочих температур —40 . +85°С) исполнениях, а другие — только в промышленном. Таблица 1.1. Основные параметры микроконтроллеров AVR семейства Mega Обозначение ATmega48 ATmega48V ATmega8515 ATmega8515L ATmega8535 ATmega8535L ATmega8 ATmega8L ATmega88 ATmega88V ATmegal6 ATmegal6L ATmegal62 ATmegal62V ATmegal64 ATmegal64V Память программ (FLASH) [Кбайт] 4 8 8 8 8 16 16 16 Память данных (ОЗУ) [байт] 512 512 512 1К 1К 1К 1К 1К Память данных (EEPROM) [байт] 256 512 512 512 512 512 512 512 Количество контактов ввода/вывода 23 35 32 23 23 32 35 32 Напряжение питания [В] 27 55 45 55 18 55 27 55 45 55 27 55 45 55 27 55 45 55 27 55 27 55 45 55 18 55 27 55 45 55 27 55 27 55 45 55 18 55 27 55 27 55 45 55 18 55 27 55 Тактовая частота [МШ] 0 10 0 20 0 4 0 10 0 16 0 8 0 16 0 8 0 16 0 8 0 10 0 20 0 4 0 10 0 16 0 8 0 8 0 16 0 1 0 8 0 10 0 20 0 4 0 10 Тип корпуса DIP-28 TQFP-32 MLF-32 DIP-40 TQFP-44 PLCC-44 MLF-44 DIP-40 TQFP-44 PLCC-44 MLF-44 DIP-28 TQFP-32 MLF-32 DIP-28 TQFP-32 MLF-32 DIP-40 TQFP-44 MLF-44 DIP-40 TQFP-44 MLF-44 DIP-40 TQFP-44 MLF-44
18 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.1. Основные параметры микроконтроллеров AVR семейства Mega (продолжение) Обозначение ATmegal65 ATmegal65V ATmegal68 ATmegal68V ATmega32 ATmega32L ATmega324 ATmega324V ATmega325 ATmega325V ATmega3250 ATmega3250V ATmega64 ATmega64L ATmega640 ATmega640V ATmega644 ATmega644V ATmega645 ATmega645V Память программ (FLASH) [Кбайт] 16 16 32 32 32 32 64 64 64 64 Память данных (ОЗУ) [байт] 1К 1К 2К 2К 2К 2К 4К 8К 4К 4К Память данных (EEPROM) [байт] 512 512 1К 1К 1К 1К 2К 4К 2К 2К Количество контактов ввода/вывода 53 23 32 32 53 68 53 86 32 53 Напряжение питания [В] 2.7...5.5 4.5...5.5 1.8...5.5 2J...5.5 2J...5.5 4.S...5.5 1.8...5.5 2.7...5.5 4.0...5.5 2J...5.5 2J...5.5 4.5...5.5 1.8...5.5 2.7...5.5 2.7...5.5 4.5...5.5 1.8...5.5 2J...5.5 2J...5.5 4.5...5.5 1.8...5.5 2.7...5.5 4.5...5.5 2J...5.5 2J...5.5 4.5...5.5 1.8...5.5 2.7...5.5 2.7...5.5 4.5...5.5 1.8...5.5 2.7...5.5 2J...5.5 4.5...5.5 1.8...5.5 2J...5.5 Тактовая частота [М1Ц 0...8 0...16 0...4 0...8 0...10 0...20 0...4 0...10 0...16 0...8 0...10 0...20 0...4 0...10 0...8 0...16 0...4 0...8 0...8 0...16 0...4 0...8 0...16 0...8 0...8 0...16 0...4 0...8 0...10 0...20 0...4 0...10 0...8 0...16 0...4 0...8 Тип корпуса TQFP-64 MLF-64 DIP-28 TQFP-32 MLF-32 DIP-40 TQFP-44 MLF-44 | DIP-40 TQFP-44 MLF-44 TQFP-64 MLF-64 TQFP-100 TQFP-64 MLF-64 TQFP-100 DIP-40 TQFP-44 MLF-44 TQFP-64 MLF-64
/. 7. Цоколевка и описание выводов ¦ 19 Таблица 1.1. Основные параметры микроконтроллеров AVR семейства Mega (продолжение) Обозначение ATmega6450 ATmega6450V 1 ATmegal28 ATmegal28L ATmegal280 ATmega 1280V ATmegal281 ATmegal281V ATmega2560 ATmega2560V ATmega2561 ATmega2561V Память программ (FLASH) [Кбайт] 64 128 128 128 256 256 Память данных (ОЗУ) [байт] 4К 4К 8К 8К 8К 8К Память данных (EEPROM) [байт] 2К 4К 4К 4К 4К 4К Количество контактов ввода/вывода 68 53 86 54 86 54 Напряжение питания [В] 17...5.5 4.5...5.5 1.8...5.5 2J...5.5 4.5...5.5 2.7...5.5 17...5.5 4.5...5.5 1.8...5.5 2.7...5.5 2.7...5.5 4.5...5.5 1.8...5.5 17...5.5 2.7...5.5 4.5...5.5 1.8...5.5 17...5.5 2J...5.5 4.5...5.5 1.8...5.5 2J...5.5 Тактовая частота [МГц] 0...8 0...16 0...4 0...8 0...16 0...8 0...8 0...16 0...4 0...8 0...8 0...16 0...4 0...8 0...8 0...16 0...4 0...8 0...8 0...16 0...4 0...8 Тип корпуса TQFP-100 TQFP-64 MLF-64 TQFP-100 TQFP-64 MLF-64 TQFP-100 TQFP-64 MLF-64 В Табл. 1.2...1.15 для каждой линейки микроконтроллеров приведены обозначения выводов и указаны их функции (как основные, так и дополнительные). Kpометого, для каждого вывода в таблицах указан его тип (вход, выход, вход/выход, вывод питания). В таблицах использованы следующие обозначения: I — вход; О — выход; I/O — вход/выход; Р — вывод питания; ША — шина адреса; ШД — шина данных.
20 ¦ Глава 1. Знакомство с семейством Mega Рис. 1.2. Расположение выводов (вид сверху) моделей ATmega8x DIP TQFP MLF
7.7. Цоколевка и описание выводов «21 Таблица 1.2. Описание выводов моделей ATmega8x Обозначение Номер вывода DIP TQFP MLF вывода Описание Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (ICP) РВ1 (ОС1А) PB2(SS/0C1B) ' РВЗ (MOSI/OC2) PB4(MISO) РВ5 (SCK) PB6(XTAL1/T0SC1) РВ7 (XTAL2AOSC2) 14 15 16 17 18 19 9 10 12 13 14 15 16 17 7 8 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Вход захвата таймера/счетчика Т1 1-й бит порта В Выход А таймера/счетчика Т1 2-й бит порта В Выбор Slave-устройства на шине SPI Выход В таймера/счетчика Т1 3-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI Выход таймера/счетчика Т2 4-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI 5-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI 6-й бит порта В Вход тактового генератора Вывод для подключения резонатора к таймеру/счетчику Т2 7-й бит порта В Выход тактового генератора Вывод для подключения резонатора к таймеру/счетчику Т2 Порт С. 7-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PCO(ADCO) PCI (ADC1) РС2 (ADC2) РСЗ (ADC3) 23 24 25 26 23 24 25 26 I/O I/O I/O I/O 0-й бит порта В Вход АЦП 1-й бит порта В Вход АЦП 2-й бит порта В Вход АЦП 3-й бит порта В Вход АЦП
22 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.2. Описание выводов моделей AThiega8x (продолжение) Обозначение PC4(ADC4/SDA) РС5 (ADC5/SCL) РС6 (RESET) ADC6 ADC7 Номер вывода DIP 27 28 1 - - TQFP MLF 27 28 29 19 22 Тип вывода I/O I/O I/O I I Описание 4-й бит порта В Вход АЦП Вход/выход данных модуля TWI 5-й бит порта В Вход АЦП Вход/выход тактового сигнала модуля TWI 6-й бит порта В Вход сброса Вход АЦП Вход АЦП Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO(RXD) PD1 (TXD) PD2 (INTO) PD3 (INT1) PD4(T0/XCK) PD5(T1) PD6 (AINO) PD7(AIN1) AREF AVCC VCC GND 2 3 4 5 6 11 12 13 21 20 7 8,22 30 31 32 1 2 9 10 11 20 18 4,6 3,5,21 I/O I/O I/O I/O I/O I/O I/O I/O p p p p 0-й бит порта D Вход USART 1-й бит порта D Выход USART 2-й бит порта D Вход внешнего прерывания 3-й бит порта D Вход внешнего прерывания 4-й бит порта D Вход внешнего тактового сигнала таймера/счетчика ТО Вход/выход внешнего тактового сигнала USART 5-й бит порта D Вход внешнего тактового сигнала таймера/счетчика Т1 6-й бит порта D Неинвертирующий вход компаратора 7-й бит порта D Инвертирующий вход компаратора Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод
7.7. Цоколевка и описание выводов ¦ 23 DIP Рис, 1J. Расположение выводов (вид сверху) моделей ATmega48x/88x/168x MLF/TQFP
24 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.3. Описание выводов моделей ATmega48x/88x/168x Обозначение Номер вывода DIP TQFP MLF Тип вывода Описание Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (ICP1/CLKO/PCINT0) РВ1 (OC1A/PCINT1) PB2(SS/0C1B/PCINT2) РВЗ (MOSI/OC2A/PCINT3) PB4(MISO/PCINT4) РВ5 (SCK/PCINT5) PB6(XTAL1/T0SC1/PCINT6) 14 15 16 17 18 19 9 12 13 14 15 16 17 7 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Вход захвата таймера/счетчика Т1 Выход предделителя тактового сигнала Вход внешнего прерывания по изменению состояния вывода 1 -й бит порта В Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода 2-й бит порта В Выбор Slave-устройства на шине SPI Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода 3-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI Выход А таймера/счетчика Т2 Вход внешнего прерывания по изменению состояния вывода 4-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению состояния вывода 5-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению состояния вывода 6-й бит порта В Вход тактового генератора Вывод для подключения резонатора к таймеру/счетчику Т2 Вход внешнего прерывания по изменению состояния вывода
7.7. Цоколевка и описание выводов ¦ 25 Таблица 1.3. Описание выводов моделей AThiega48x/88x/168x (продолжение) Обозначение РВ7 (XTAL2AOSC2/PCINT7) Номер вывода DIP 10 TQFP MLF 8 Тип вывода I/O Описание 7-й бит порта В Выход тактового генератора Вывод для подключения резонатора к таймеру/счетчику Т2 Вход внешнего прерывания по изменению состояния вывода Порт С. 7-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РСО (ADC0/PCINT8) PCI (ADC1/PCINT9) PC2(ADC2/PCINT10) PC3(ADC3/PCINT11) PC4(ADC4/SDA/PCINT12) PC5(ADC5/SCL/PCINT13) PC6 (RESET/PCINT14) ADC6 ADC7 23 24 25 26 27 28 1 - - 23 24 25 26 27 28 29 19 22 I/O I/O I/O I/O I/O I/O I/O I I 0-й бит порта С Вход АЦП Вход внешнего прерывания по изменению состояния вывода 1-й бит порта С Вход АЦП Вход внешнего прерывания по изменению состояния вывода 2-й бит порта С Вход АЦП Вход внешнего прерывания по изменению состояния вывода 3-й бит порта С Вход АЦП Вход внешнего прерывания по изменению состояния вывода 4-й бит порта С Вход АЦП Вход/выход данных модуля TWI Вход внешнего прерывания по изменению состояния вывода 5-й бит порта С Вход АЦП Вход/выход тактового сигнала модуля TWI Вход внешнего прерывания по изменению состояния вывода 6-й бит порта С Вход сброса Вход внешнего прерывания по изменению состояния вывода Вход АЦП Вход АЦП
26 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.3. Описание выводов моделей ATmega48x/88x/168x (продолжение) Обозначение Номер вывода DIP TQFP MLF Тип вывода Описание Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PD0(RXD/PCINT16) PD1 (TXD/PCINT17) PD2(INT0/PCINT18) PD3(INT1/0C2B/PCINT19) PD4(T0/XCK/PCINT20) PD5(T1/OCOB/PCINT21) PD6 (AIN0/OC0A/PCINT22) PD7(AIN1/PCINT23) 2 3 4 5 6 11 12 13 30 31 32 1 2 9 10 11 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта D Вход USART Вход внешнего прерывания по изменению состояния вывода 1-й бит порта D Выход USART Вход внешнего прерывания по изменению состояния вывода 2-й бит порта D Вход внешнего прерывания Вход внешнего прерывания по изменению состояния вывода 3-й бит порта D Вход внешнего прерывания Выход В таймера/счетчика Т2 Вход внешнего прерывания по изменению состояния вывода 4-й бит порта D Вход внешнего тактового сигнала таймера/счетчика ТО Вход/выход внешнего тактового сигнала USART Вход внешнего прерывания по изменению состояния вывода 5-й бит порта D Вход внешнего тактового сигнала таймера/счетчика Т1 Выход В таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода 6-й бит порта D Неинвертирующий вход компаратора Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода 7-й бит порта D Инвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода
7.7. Цоколевка и описание выводов ¦ 27 Таблица 1.3. Описание выводов моделей Alhiega48x/88x/168x (продолжение) Обозначение AREF AVCC VCC GND Номер вывода DIP 21 20 7 8,22 TQFP MLF 20 18 4,6 3,5,21 Тип вывода Р Р Р Р Описание Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод 2SS2 DIP TQFP/MLF PLCC Рис. 1.4. Расположение выводов (вид сверху) моделей ATmega8515x
28 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.4. Описание выводов моделей ATniega8515x Обозначение XTAL1 XTAL2 RESET Номер вывода DIP 19 18 9 TQFP MLF 15 14 4 PLCC 21 20 10 вывода I О I Описание Вход тактового генератора Выход тактового генератора Вход сброса Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADO) РА1 (AD1) РА2 (AD2) РАЗ (AD3) РА4 (AD4) РА5 (AD5) РА6 (AD6) РА7 (AD7) 39 38 37 36 35 34 33 32 37 36 35 34 33 32 31 30 43 42 41 40 39 38 37 36 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта А 0-й бит мультиплексированной ША/ШД для внешнего ОЗУ 1-й бит порта А 1 -й бит мультиплексированной ША/ШД для внешнего ОЗУ 2-й бит порта А 2-й бит мультиплексированной ША/ШД для внешнего ОЗУ 3-й бит порта А 3-й бит мультиплексированной ША/ШД для внешнего ОЗУ 4-й бит порта А 4-й бит мультиплексированной ША/ШД для внешнего ОЗУ 5-й бит порта А 5-й бит мультиплексированной ША/ШД для внешнего ОЗУ 6-й бит порта А 6-й бит мультиплексированной ША/ШД для внешнего ОЗУ 7-й бит порта А 7-й бит мультиплексированной ША/ШД для внешнего ОЗУ Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (Т0/ОС0) 1 40 2 I/O 0-й бит порта В Вход внешнего тактового сигнала таймера/счетчика ТО Выход таймера/счетчика ТО
/. 7. Цоколевка и описание выводов ¦ 29 Таблица 1.4. Описание выводов моделей A1inega8515x (продолжение) Обозначение РВ1 (Т1) РВ2 (AIN0) PB3(AIN1) РВ4 (SS) РВ5 (MOSI) PB6(MISO) РВ7 (SCK) Номер вывода DIP 2 3 4 5 6 7 8 TQFP MLF 41 42 43 44 1 2 3 PLCC 3 4 5 6 7 8 9 Тип вывода I/O I/O I/O I/O I/O I/O I/O Описание 1-й бит порта В Вход внешнего тактового сигнала таймера/счетчика Т1 2-й бит порта В Неинвертирующий вход компаратора 3-й бит порта В Инвертирующий вход компаратора 4-й бит порта В Выбор Slave-устройства на шине SPI 5-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI 6-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI 7-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РСО (А8) РС1(А9) РС2 (А10) РСЗ(АП) РС4(А12) РС5(А13) РС6 (А14) РС7(А15) 21 22 23 24 25 26 27 28 18 19 20 21 22 23 24 25 24 25 26 27 28 29 30 31 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С 8-й бит ША для внешнего ОЗУ 1-й бит порта С 9-й бит ША для внешнего ОЗУ 2-й бит порта С 10-й бит ША для внешнего ОЗУ 3-й бит порта С 11 -й бит ША для внешнего ОЗУ 4-й бит порта С 12-й бит ША для внешнего ОЗУ 5-й бит порта С 13-й бит ША для внешнего ОЗУ 6-й бит порта С 14-й бит Ш А для внешнего ОЗУ 7-й бит порта С 15-й бит ША для внешнего ОЗУ
30 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.4. Описание выводов моделей Alhiega8515x (продолжение) Обозначение Номер вывода DIP TQFP MLF PLCC Тип вывода Описание Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO (RXD) PD1 (TXD) PD2 (INTO) PD3(INT1) PD4(XCK) PD5@C1A) PD6 (WR) PD7 (RD) 10 11 12 13 14 15 16 17 5 7 8 9 10 11 12 13 11 13 14 15 16 17 18 19 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта D Вход USART 1-й бит порта D Выход USART 2-й бит порта D Вход внешнего прерывания 3-й бит порта D Вход внешнего прерывания 4-й бит порта D Вход/выход внешнего тактового сигнала USART 5-й бит порта D Выход А таймера/счетчика Т1 6-й бит порта D Строб записи во внешнее ОЗУ 7-й бит порта D Строб чтения внешнего ОЗУ Порт Е. 3-битный порт ввода/вывода с внутренними подтягивающими резисторами РЕО (ICP/INT2) РЕ1 (ALE) РЕ2(ОС1В) VCC GND NC 31 30 29 40 20 - 29 27 26 38 16 6,17, 28,39 35 33 32 44 22 1,12, 23,34 I/O I/O I/O P p - 0-й бит порта Е Вход захвата таймера/счетчика Т1 Вход внешнего прерывания 1 -й бит порта Е Строб адреса внешнего ОЗУ 2-й бит порта Е Выход В таймера/счетчика Т1 Вывод источника питания Общий вывод Не используются
7.7. Цоколевка и описание выводов ¦ 31 TQFP/MLF DIP PLCC Рис, 7.5. Расположение выводов (вид сверху) моделей ATmega8535x
32 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.5. Описание выводов моделей ATmega8535x Обозначение XTAL1 XTAL2 RESET Номер вывода DIP 13 12 9 TQFP MLF 8 7 4 PLCC 14 13 10 Тип вывода I О I Описание Вход тактового генератора Выход тактового генератора Вход сброса Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADC0) РА1 (ADC1) РА2 (ADC2) РАЗ (ADC3) РА4 (ADC4) РА5 (ADC5) РА6 (ADC6) РА7 (ADC7) 40 39 38 37 36 35 34 33 37 36 35 34 33 32 31 30 43 42 41 40 39 38 37 36 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта А Вход АЦП 1-й бит порта А Вход АЦП 2-й бит порта А Вход АЦП 3-й бит порта А Вход АЦП 4-й бит порта А Вход АЦП 5-й бит порта А Вход АЦП 6-й бит порта А Вход АЦП 7-й бит порта А Вход АЦП Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВ0(Т0/ХСК) РВ1 (Т1) РВ2 (AIN0/INT2) PB3(AIN1/OCO) 1 2 3 4 40 41 42 43 2 3 4 5 I/O I/O I/O I/O 0-й бит порта В Вход внешнего тактового сигнала таймера/счетчика ТО Вход/выход внешнего тактового сигнала USART 1-й бит порта В Вход внешнего тактового сигнала таймера/счетчика Т1 2-й бит порта В Неинвертирующий вход компаратора Вход внешнего прерывания 3-й бит порта В Инвертирующий вход компаратора Выход таймера/счетчика ТО
7.7. Цоколевка и описание выводов ¦ 33 Таблица 1.5. Описание выводов моделей ATtaega8535x (продолжение) Обозначение РВ4 (SS) РВ5 (MOSI) PB6(MISO) РВ7 (SCK) Номер вывода DIP 5 6 7 8 TQFP MLF 44 1 2 3 PLCC 6 7 8 9 Тип вывода I/O I/O I/O I/O Описание 4-й бит порта В Выбор Slave-устройства на шине SPI 5-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI 6-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI 7-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PCO(SCL) PCI (SDA) РС2 РСЗ РС4 РС5 PC6(TOSCl) PC7(TOSC2) 22 23 24 25 26 27 28 29 19 20 21 22 23 24 25 26 25 26 27 28 29 30 31 32 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С Вход/выход тактового сигнала модуля TWI 1-й бит порта С Вход/выход данных модуля TWI 2-й бит порта С 3-й бит порта С 4-й бит порта С 5-й бит порта С 6-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2 7-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2 Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO(RXD) PD1 (TXD) PD2 (INTO) 14 15 16 9 10 И 15 16 17 I/O I/O I/O 0-й бит порта D Вход USART 1-й бит порта D Выход USART 2-й бит порта D Вход внешнего прерывания
34 ¦ Глава 1. Знакомство с семейством Mega Таблица 1,5, Описание выводов моделей AThiega8535x (продолжение) Обозначение PD3(INT1) PD4@C1B) PD5@C1A) PD6(ICP1) PD7 (OC2) AREF AVCC VCC GND Номер вывода DIP 17 18 19 20 21 32 30 10 11,31 TQFP MLF 12 13 14 15 16 29 27 5,17,38 6,18,28, 39 PLCC 18 19 20 21 22 35 33 11,23, 44 12,24, 34,1 Тип вывода I/O I/O I/O I/O I/O p p p p Описание 3-й бит порта D Вход внешнего прерывания 4-й бит порта D Выход В таймера/счетчика Т1 5-й бит порта D Выход А таймера/счетчика Т1 6-й бит порта D Вход захвата таймера/счетчика Т1 7-й бит порта D Выход таймера/счетчика Т2 Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод DIP TQFP Рис, 1,6, Расположение выводов (вид сверху) моделей ATmegal6x/32x
/. 7. Цоколевка и описание выводов ¦ 35 Таблица 1.6. Описание выводов моделей Altaegal6x/32x Обозначение XTAL1 XTAL2 RESET Номер вывода DIP 13 12 9 TQFP MLF 8 7 4 Тип вывода I О I Описание Вход тактового генератора Выход тактового генератора Вход сброса Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADC0) РА1 (ADC1) РА2 (ADC2) РАЗ (ADC3) PA4(ADC4) РА5 (ADC5) РА6 (ADC6) РА7 (ADC7) 40 39 38 37 36 35 34 33 37 36 35 34 33 32 31 30 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта А Вход АЦП 1-й бит порта А Вход АЦП 2-й бит порта А Вход АЦП 3-й бит порта А Вход АЦП 4-й бит порта А Вход АЦП 5-й бит порта А Вход АЦП 6-й бит порта А Вход АЦП 7-й бит порта А Вход АЦП Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (ТО/ХСК) РВ1 (Т1) РВ2 (AIN0/INT2) 1 2 3 40 41 42 I/O I/O I/O 0-й бит порта В Вход внешнего тактового сигнала таймера/счетчика ТО Вход/выход внешнего тактового сигнала USART 1 -й бит порта В Вход внешнего тактового сигнала таймера/счетчика Т1 2-й бит порта В Неинвертирующий вход компаратора Вход внешнего прерывания
36 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.6. Описание выводов моделей ATmegal6x/32x (продолжение) Обозначение PB3(AIN1/OCO) PB4(SS) РВ5 (MOSI) PB6(MISO) PB7 (SCK) Номер вывода DIP 4 5 6 7 8 TQFP MLF 43 44 1 2 3 Тип вывода I/O I/O I/O I/O I/O Описание 3-й бит порта В Инвертирующий вход компаратора Выход таймера/счетчика ТО 4-й бит порта В Выбор Slave-устройства на шине SPI 5-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI 6-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI 7-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РСО (SCL) PCI (SDA) РС2 (ТСК) РСЗ (TMS) PC4(TDO) РС5 (TDI) PC6(TOSCl) РС7 (TOSC2) 22 23 24 25 26 27 28 29 19 20 21 22 23 24 25 26 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С Вход/выход тактового сигнала модуля TWI 1-й бит порта С Вход/выход данных модуля TWI 2-й бит порта С Тактовый сигнал JTAG 3-й бит порта С Выбор режима JTAG 4-й бит порта С Выход данных JTAG 5-й бит порта С Вход данных JTAG 6-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2 7-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2
7.7. Цоколевка и описание выводов ¦ 37 Таблица 1.6. Описание выводов моделей AThiegal6x/32x (продолжение) Обозначение Номер вывода DIP TQFP MLF Тип вывода Описание Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO (RXD) PD1 (TXD) PD2 (INTO) PD3(INT1) PD4@C1B) PD5@C1A) PD6(ICP1) PD7 (OC2) AREF AVCC VCC GND 14 15 16 17 18 19 20 21 32 30 10 11,31 9 10 11 12 13 14 15 16 29 27 5,17,38 6,18,28, 39 I/O I/O I/O I/O I/O I/O I/O I/O p p p p 0-й бит порта D Вход USART 1-й бит порта D Выход USART 2-й бит порта D Вход внешнего прерывания 3-й бит порта D Вход внешнего прерывания 4-й бит порта D Выход В таймера/счетчика Т1 5-й бит порта D Выход А таймера/счетчика Т1 6-й бит порта D Вход захвата таймера/счетчика Т1 7-й бит порта D Выход таймера/счетчика Т2 Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод
38 ¦ Глава 1. Знакомство с семейством Mega DIP TQFP/MLF Рис. 1.7. Расположение выводов (вид сверху) моделей ATmegal62x
7.7. Цоколевка и описание выводов ¦ 39 Таблица 1.7. Описание выводов моделей ATmegal62x Обозначение XTAL1 XTAL2 RESET Номер вывода DIP 19 18 9 TQFP MLF 15 14 4 Тип вывода I О I Описание Вход тактового генератора Выход тактового генератора Вход сброса Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (AD0/PCINT0) PA1(AD1/PCINT1) РА2 (AD2/PCINT2) РАЗ (AD3/PCINT3) PA4(AD4/PCINT4) РА5 (AD5/PCINT5) РА6 (AD6/PCINT6) 39 38 37 36 35 34 33 37 36 35 34 33 32 31 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта А 0-й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 1-й бит порта А 1 -й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 2-й бит порта А 2-й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 3-й бит порта А 3-й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 4-й бит порта А 4-й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 5-й бит порта А 5-й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 6-й бит порта А 6-й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала
40 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.7. Описание выводов моделей AIhiegal62x (продолжение) Обозначение РА7 (AD7/PCINT7) Номер вывода DIP 32 TQFP MLF 30 Тип вывода I/O Описание 7-й бит порта А 7-й бит мультиплексированной ША/ШД для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (Т0/ОС0) РВ1 (Т1/ОС2) PB2(AIN0/RXD1) PB3(AIN1/TXD1) PB4(SS/OC3B) РВ5 (MOSI) PB6(MISO) PB7 (SCK) 1 2 3 4 5 6 7 8 40 41 42 43 44 1 2 3 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Вход внешнего тактового сигнала таймера/счетчика ТО Выход таймера/счетчика ТО 1-й бит порта В Вход внешнего тактового сигнала таймера/счетчика Т1 Выход таймера/счетчика Т2 2-й бит порта В Неинвертирующий вход компаратора BxoflUSARTl 3-й бит порта В Инвертирующий вход компаратора Выход USART1 4-й бит порта В Выбор Slave-устройства на шине SPI Выход В таймера/счетчика ТЗ 5-й бит порта В 1 Выход (Master) или вход (Slave) данных I модуля SPI 6-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI 7-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PC0(A8/PCINT8) 21 18 I/O 0-й бит порта С 8-й бит ША для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала
1.7. Цоколевка и описание выводов ¦ 41 Таблица 1.7. Описание выводов моделей ATrnegal62x (продолжение) Обозначение PCI (A9/PCINT9) PC2(A10/PCINT10) РСЗ (Al 1/PCINT11) PC4(A12/TCK/PCINT12) PC5(A13/TMS/PCINT13) РС6 (A14/TDO/PCINT14) РС7(А15Д01/РСШТ15) Номер вывода DIP 22 23 24 25 26 27 28 TQFP MLF 19 20 21 22 23 24 25 Тип вывода I/O I/O I/O I/O I/O I/O I/O Описание 1-й бит порта С 9-й бит ША для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 2-й бит порта С 10-й бит ША для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 3-й бит порта С 11 -й бит ША для внешнего ОЗУ Вход внешнего прерывания по изменению сигнала 4-й бит порта С 12-й бит ША для внешнего ОЗУ Тактовый сигнал JTAG Вход внешнего прерывания по изменению сигнала 5-й бит порта С 13-й бит ША для внешнего ОЗУ Выбор режима JTAG Вход внешнего прерывания по изменению сигнала 6-й бит порта С 14-й бит ША для внешнего ОЗУ Выход данных JTAG Вход внешнего прерывания по изменению сигнала 7-й бит порта С 15-й бит ША для внешнего ОЗУ Вход данных JTAG Вход внешнего прерывания по изменению сигнала Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO (RXD0) PD1 (TXD0) 10 11 5 7 I/O I/O 0-й бит порта D Вход USART0 1-й бит порта D Выход USART0
42 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.7. Описание выводов моделей ATmegal62x (продолжение) Обозначение PD2 (XCK1/INT0) PD3(ICP3/INT1) PD4(XCKO/OC3A/TOSC1) PD5 (OC1A/TOSC2) PD6(WR) PD7 (RD) Номер вывода DIP 12 13 14 15 16 17 TQFP MLF 8 9 10 11 12 13 Тип вывода I/O I/O I/O I/O I/O I/O Описание 2-й бит порта D Вход/выход внешнего тактового сигнала USART1 Вход внешнего прерывания 3-й бит порта D Вход захвата таймера/счетчика ТЗ Вход внешнего прерывания 4-й бит порта D Вход/выход внешнего тактового сигнала USART0 Выход А таймера/счетчика ТЗ Вывод для подключения резонатора к таймеру/счетчику Т2 5-й бит порта D Выход А таймера/счетчика Т1 Вывод для подключения резонатора к таймеру/счетчику Т2 6-й бит порта D Строб записи во внешнее ОЗУ 7-й бит порта D Строб чтения из внешнего ОЗУ Порт Е. 3-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PE0(ICP1/INT2) РЕ1 (ALE) РЕ2(ОС1В) VCC GND 31 30 29 40 20 29 27 26 6,17,38 16,28, 39 I/O I/O I/O р р 0-й бит порта Е Вход захвата таймера/счетчика Т1 Вход внешнего прерывания 1-й бит порта Е Строб адреса внешнего ОЗУ 2-й бит порта Е Выход В таймера/счетчика Т1 Вывод источника питания Общий вывод
7.7. Цоколевка и описание выводов ¦ 43 DIP TQFP/MLF Рис. 1.8. Расположение выводов (вид сверху) моделей ATmegal64x/324x
44 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.8. Описание выводов моделей ATmegal64x/324x Обозначение XTAL1 XTAL2 RESET Номер вывода DIP 13 12 9 TQFP MLF 8 7 4 Тип вывода I О I Описание I Вход тактового генератора Выход тактового генератора Вход сброса Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADC0/PCINT0) PA1(ADC1/PCINT1) РА2 (ADC2/PCINT2) РАЗ (ADC3/PCINT3) РА4 (ADC4/PCINT4) РА5 (ADC5/PCINT5) РА6 (ADC6/PCINT6) РА7 (ADC7/PCINT7) 40 39 38 37 36 35 34 33 37 36 35 34 33 32 31 30 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта А 1 Вход АЦП Вход внешнего прерывания по изменению сигнала 1-й бит порта А 1 Вход АЦП Вход внешнего прерывания по изменению сигнала 2-й бит порта А 1 Вход АЦП Вход внешнего прерывания по изменению сигнала 3-й бит порта А 1 Вход АЦП Вход внешнего прерывания по изменению сигнала 4-й бит порта А 1 Вход АЦП Вход внешнего прерывания по изменению сигнала 5-й бит порта А 1 Вход АЦП Вход внешнего прерывания по изменению сигнала 6-й бит порта А 1 Вход АЦП Вход внешнего прерывания по изменению сигнала 7-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала
/. 7. Цоколевка и описание выводов ¦ 45 Таблица 1.8. Описание выводов моделей Alhiegal64x/324x (продолжение) Обозначение Номер вывода DIP TQFP MLF Тип вывода Описание Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PB0(T0/XCK0/PCINT8) РВ1 (T1/CLKO/PCINT9) РВ2 (AIN0/INT2/PCINT10) РВЗ (AIN1/OC0A/PCINT11) РВ4 (SS/OC0B/PCINT12) PB5(MOSI/PCINT13) РВ6 (MISO/PCINT14) PB7(SCK/PCINT15) 1 2 3 4 5 6 7 8 40 41 42 43 44 1 2 3 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В 1 Вход внешнего тактового сигнала таймера/счетчика ТО Вход/выход внешнего тактового сигнала USART0 Вход внешнего прерывания по изменению состояния вывода 1-й бит порта В 1 Вход внешнего тактового сигнала таймера/счетчика Т1 Выход предделителя тактового сигнала Вход внешнего прерывания по изменению состояния вывода 2-й бит порта В 1 Неинвертирующий вход компаратора Вход внешнего прерывания Вход внешнего прерывания по изменению состояния вывода 3-й бит порта В 1 Инвертирующий вход компаратора Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода 4-й бит порта В 1 Выбор Slave-устройства на шине SPI Выход В таймера/счетчика ТО Вход внешнего прерывания по изменению сигнала 5-й бит порта В 1 Выход (Master) или вход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 6-й бит порта В 1 Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 7-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению сигнала
46 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.8. Описание выводов моделей AlVnegal64x/324x (продолжение) Обозначение Номер вывода DIP TQFP MLF Тип вывода Описание Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PC0(SCL/PCINT16) PCI (SDA/PCINT17) PC2(TCK/PCINT18) PC3(TMS/PCINT19) PC4(TDOPCINT20) PC5(TDI/PCINT21) PC6(TOSC1/PCINT22) PC7 (TOSC2/PCINT23) 22 23 24 25 26 27 28 29 19 20 21 22 23 24 25 26 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С Вход/выход тактового сигнала модуля TWI Вход внешнего прерывания по изменению состояния вывода 1-й бит порта С Вход/выход данных модуля TWI Вход внешнего прерывания по изменению состояния вывода 2-й бит порта С 1 Тактовый сигнал JTAG Вход внешнего прерывания по изменению состояния вывода 3-й бит порта С 1 Выбор режима JTAG Вход внешнего прерывания по изменению состояния вывода 4-й бит порта С Выход данных JTAG Вход внешнего прерывания по изменению состояния вывода 5-й бит порта С Вход данных JTAG Вход внешнего прерывания по изменению состояния вывода 6-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2 Вход внешнего прерывания по изменению состояния вывода 7-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2 Вход внешнего прерывания по изменению состояния вывода Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO (RXD0/PCINT24) 14 9 I/O 0-й бит порта D Вход USART0 Вход внешнего прерывания по изменению состояния вывода
7.7. Цоколевка и описание выводов ¦ 47 Таблица 1.8. Описание выводов моделей ATniegal64x/324x (продолжение) Обозначение PD1 (TXD0/PCINT25) PD2 (INT0/RXD1/PCINT26) PD3 (INT1/TXD1/PCINT27) PD4 (XCK1/OC1B/PCINT28) PD5@C1A/PCINT29) PD6 (ICP1/OC2B/PCINT30) PD7(OC2A/PCINT31) AREF AVCC VCC GND Номер вывода DIP 15 16 17 18 19 20 21 32 30 10 31 TQFP MLF 10 11 12 13 14 15 16 29 27 5,17, 38 6,18, 28,39 Тип вывода I/O I/O I/O I/O I/O I/O I/O P P P P Описание 1-й бит порта D 1 Выход USARTO Вход внешнего прерывания по изменению состояния вывода 2-й бит порта D 1 Вход внешнего прерывания BxoдUSARTl Вход внешнего прерывания по изменению состояния вывода 3-й бит порта D 1 Вход внешнего прерывания Выход USART1 Вход внешнего прерывания по изменению состояния вывода 4-й бит порта D 1 Вход/выход внешнего тактового сигнала USART1 Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода 5-й бит порта D 1 Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода 6-й бит порта D 1 Вход захвата таймера/счетчика Т1 Выход В таймера/счетчика Т2 Вход внешнего прерывания по изменению состояния вывода 7-й бит порта D | Выход А таймера/счетчика Т2 Вход внешнего прерывания по изменению состояния вывода Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод
48 ¦ Глава 1. Знакомство с семейством Mega DIP TQFP/MLF Рис. 1.9. Расположение выводов (вид сверху) моделей ATmega644x
7.7. Цоколевка и описание выводов ¦ 49 Таблица 1,9. Описание выводов модели ATmega644x Обозначение XTAL1 XTAL2 RESET Номер вывода DIP 13 12 9 TQFP MLF 8 7 4 Тип вывода I О I Описание Вход тактового генератора Выход тактового генератора Вход сброса Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PA0(ADC0/PCINT0) РА1 (ADC1/PCINT1) РА2 (ADC2/PCINT2) РАЗ (ADC3/PCINT3) РА4 (ADC4/PCINT4) РА5 (ADC5/PCINT5) PA6(ADC6/PCINT6) РА7 (ADC7/PCINT7) 40 39 38 37 36 35 34 33 37 36 35 34 33 32 31 30 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала 1-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала 2-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала 3-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала 4-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала 5-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала 6-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала 7-й бит порта А Вход АЦП Вход внешнего прерывания по изменению сигнала
50 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.9. Описание выводов модели ATtaega644x (продолжение) Обозначение Номер вывода DIP TQFP MLF Тип вывода Описание Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (T0/XCK0/PCINT8) РВ1 (T1/CLKO/PCINT9) РВ2 (AIN0/INT2/PCINT10) РВЗ (AIN1/OC0A/PCINT11) РВ4 (SS/OC0B/PCINT12) PB5(MOSI/PCINT13) РВ6 (MISO/PCINT14) 1 2 3 4 5 6 7 40 41 42 43 44 1 2 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Вход внешнего тактового сигнала таймера/счетчика ТО Вход/выход внешнего тактового сигнала USART0 Вход внешнего прерывания по изменению состояния вывода 1-й бит порта В Вход внешнего тактового сигнала таймера/счетчика Т1 Выход предделителя тактового сигнала Вход внешнего прерывания по изменению состояния вывода 2-й бит порта В Неинвертирующий вход компаратора Вход внешнего прерывания Вход внешнего прерывания по изменению состояния вывода 3-й бит порта В Инвертирующий вход компаратора | Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению состояния вывода 4-й бит порта В Выбор Slave-устройства на шине SPI Выход В таймера/счетчика ТО Вход внешнего прерывания по изменению сигнала 5-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 6-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала
7.7. Цоколевка и описание выводов ¦ 51 Таблица 1.9. Описание выводов модели ATmega644x (продолжение) Обозначение PB7(SCK/PCINT15) Номер вывода DIP 8 TQFP MLF 3 Тип вывода I/O Описание 7-й бит порта В 1 Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению сигнала Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PC0(SCL/PCINT16) PCI (SDA/PCINT17) PC2(TCK/PCINT18) PC3(TMS/PCINT19) PC4(TDOPCINT20) PC5(TDI/PCINT21) PC6(T0SC1/PCINT22) PC7 (TOSC2/PCINT23) 22 23 24 25 26 27 28 29 19 20 21 22 23 24 25 26 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С Вход/выход тактового сигнала модуля TWI Вход внешнего прерывания по изменению состояния вывода 1 -й бит порта С Вход/выход данных модуля TWI Вход внешнего прерывания по изменению состояния вывода 2-й бит порта С Тактовый сигнал JTAG Вход внешнего прерывания по изменению состояния вывода 3-й бит порта С Выбор режима JTAG Вход внешнего прерывания по изменению состояния вывода 4-й бит порта С Выход данных JTAG Вход внешнего прерывания по изменению состояния вывода 5-й бит порта С Вход данных JTAG Вход внешнего прерывания по изменению состояния вывода 6-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2 Вход внешнего прерывания по изменению состояния вывода 7-й бит порта С Вывод для подключения резонатора к таймеру/счетчику Т2 Вход внешнего прерывания по изменению состояния вывода
52 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.9. Описание выводов модели ATmega644x (продолжение) Обозначение Номер вывода DIP TQFP MLF Ъш вывода Описание Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO (RXD0/PCINT24) PD1 (TXD0/PCINT25) PD2 (INT0/PCINT26) PD3 (INT1/PCINT27) PD4@C1B/PCINT28) PD5@C1A/PCINT29) PD6 (ICP1/OC2B/PCINT30) PD7(OC2A/PCINT31) |aref |avcc |vcc GND 14 15 16 17 18 19 20 21 32 30 10 31 9 10 11 12 13 14 15 16 29 27 5,17,38 6,18, 28,39 I/O I/O I/O I/O I/O I/O I/O I/O p p p p 0-й бит порта D Вход USARTO Вход внешнего прерывания по изменению состояния вывода 1-й бит порта D Выход USARTO Вход внешнего прерывания по изменению состояния вывода 2-й бит порта D Вход внешнего прерывания Вход внешнего прерывания по изменению состояния вывода 3-й бит порта D Вход внешнего прерывания Вход внешнего прерывания по изменению состояния вывода 4-й бит порта D Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода 5-й бит порта D Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению состояния вывода 6-й бит порта D Вход захвата таймера/счетчика Т1 | Выход В таймера/счетчика Т2 Вход внешнего прерывания по изменению состояния вывода 7-й бит порта D Выход А таймера/счетчика Т2 Вход внешнего прерывания по изменению состояния вывода Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод
7.7. Цоколевка и описание выводов ¦ 53 TQFP/MLF Рис. 1.10. Расположение выводов (вид сверху) моделей ATmegal65x Таблица 1.10. Описание выводов модели ATmegal65x | Обозначение XTALl(TOSCl) XTAL2 (TOSC2) RESET Порт А. 8-битный двунаправл РАО РА1 РА2 Номер вывода 24 23 20 енный порт вв 51 50 49 Тип вывода I О I ода/вывода I/O I/O I/O Описание Вход тактового генератора Выход тактового генератора Вход сброса с внутренними подтягивающими резисторами 0-й бит порта А 1 -й бит порта А 2-й бит порта А
54 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.10. Описание выводов модели ATYnegal65x (продолжение) Обозначение РАЗ РА4 РА5 РА6 |РА7 Номер вывода 48 47 46 45 44 Тип вывода I/O I/O I/O I/O I/O Описание 3-й бит порта А 4-й бит порта А 5-й бит порта А 6-й бит порта А 7-й бит порта А Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PB0(SS/PCINT8) РВ1 (SCK/PCINT9) PB2(MOSI/PCINT10) PB3(MISO/PCINTll) PB4(OC0A/PCINT12) PB5@C1A/PCINT13) PB6@C1B/PCINT14) 10 11 12 13 14 15 16 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Выбор Slave-устройства на шине SP1 Вход внешнего прерывания по изменению сигнала 1-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению сигнала 2-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 3-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 4-й бит порта В Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению сигнала 5-й бит порта В Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 6-й бит порта В Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала
7.7. Цоколевка и описание выводов ¦ 55 Таблица 1.10. Описание выводов модели ATftiegal65x (продолжение) Обозначение PB7(OC2A/PCINT15) Номер вывода 17 Тип вывода I/O Описание 7-й бит порта В Выход А таймера/счетчика Т2 Вход внешнего прерывания по изменению сигнала Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РСО РС1 РС2 РСЗ РС4 РС5 РС6 РС7 35 36 37 38 39 40 41 42 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С 1-й бит порта С 2-й бит порта С 3-й бит порта С 4-й бит порта С 5-й бит порта С 6-й бит порта С 7-й бит порта С Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO(ICPl) PD1 (INTO) PD2 PD3 PD4 jPD5 PD6 PD7 25 26 27 28 29 30 31 32 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта D Вход захвата таймера/счетчика Т1 1-й бит порта D Вход внешнего прерывания 2-й бит порта D 3-й бит порта D 4-й бит порта D 5-й бит порта D 6-й бит порта D 7-й бит порта D Порт Е. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PE0(RXD/PCINT0) 2 I/O Вход USART Вход внешнего прерывания по изменению состояния вывода
56 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.10. Описание выводов модели ATmegal65x (продолжение) Обозначение РЕ1 (TXD/PCINT1) РЕ2 (AIN0/XCK/PCINT2) PE3(AIN1/PCINT3) РЕ4 (USCK/SCL/PCINT4) РЕ5 (DI/SDA/PCINT5) РЕ6 (DO/PCINT6) РЕ7 (CLKO/PCINT7) Номер вывода 3 4 5 6 7 8 9 Тип вывода I/O I/O I/O I/O I/O I/O I/O Описание Выход USART Вход внешнего прерывания по изменению состояния вывода Неинвертирующий вход компаратора Вход/выход внешнего тактового сигнала USART Вход внешнего прерывания по изменению состояния вывода Инвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода Вход/выход тактового сигнала модуля USI в режиме USART Вход/выход тактового сигнала модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода Вход данных модуля USI в режиме USART Вход/выход данных модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода Выход данных модуля USI в режиме USART Вход внешнего прерывания по изменению состояния вывода Выход предделителя тактового сигнала Вход внешнего прерывания по изменению состояния вывода Порт F. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PFO (ADC0) PF1 (ADC1) PF2 (ADC2) 61 60 59 I/O I/O I/O 0-й бит порта F Вход АЦП 1 -й бит порта F Вход АЦП 2-й бит порта F Вход АЦП
/. 7. Цоколевка и описание выводов ¦ 57 Таблица 1.10. Описание выводов модели ATrnegal65x (продолжение) Обозначение PF3 (ADC3) PF4 (ADC4/TCK) PF5 (АОС5ДМБ) PF6 (ADC6/TDO) PF7 (ADC7/TDI) Номер вывода 58 57 56 55 54 Тип вывода I/O I/O I/O I/O I/O Описание 3-й бит порта F Вход АЦП 4-й бит порта F Вход АЦП Тактовый сигнал JTAG 5-й бит порта F Вход АЦП Выбор режима JTAG 6-й бит порта F Вход АЦП Выход данных JTAG 7-й бит порта F Вход АЦП Вход данных JTAG Порт G. 5-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PG0 PG1 PG2 PG3(T1) PG4(T0) AREF AVCC VCC GND NC 33 34 43 18 19 62 64 21,52 22,53,63 1 I/O I/O I/O I/O I/O P p p p - 0-й бит порта G 1-й бит порта G 2-й бит порта G 3-й бит порта G Вход внешнего тактового сигнала таймера/счетчика Т1 4-й бит порта G Вход внешнего тактового сигнала таймера/счетчика ТО Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод Не используется
58 ¦ Глава 1. Знакомство с семейством Mega TQFP/MLF Рис. 1.11. Расположение выводов (вид сверху) моделей ATmega325x/645x Таблица 1.11. Описание выводов моделей Alhiega325x/645x Обозначение XTALl(TOSCl) XTAL2 (TOSC2) Номер вывода 24 23 Тип вывода I О Описание Вход тактового генератора Выход тактового генератора Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО РА1 РА2 РАЗ 51 50 49 48 I/O I/O I/O I/O 0-й бит порта А 1 -й бит порта А 2-й бит порта А 3-й бит порта А
7.7. Цоколевка и описание выводов ¦ 59 Таблица 1.11. Описание выводов моделей ATmega325x/645x (продолжение) Обозначение РА4 РА5 РА6 РА7 Номер вывода 47 46 45 44 вывода I/O I/O I/O I/O Описание 4-й бит порта А 5-й бит порта А 6-й бит порта А 7-й бит порта А Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PB0(SS/PCINT8) РВ1 (SCK/PCINT9) PB2(MOSI/PCINT10) PB3(MISO/PCINTll) PB4(OC0A/PCINT12) PB5@C1A/PCINT13) PB6@C1B/PCINT14) 10 И 12 13 14 15 16 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Выбор Slave-устройства на шине SPI Вход внешнего прерывания по изменению сигнала 1-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению сигнала 2-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 3-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 4-й бит порта В Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению сигнала 5-й бит порта В Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 6-й бит порта В Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала
60 ¦ Глава h Знакомство с семейством Mega Таблица 1.11. Описание выводов моделей ATmega325x/645x (продолжение) Обозначение PB7(OC2A/PCINT15) Номер вывода 17 Тип вывода I/O Описание 7-й бит порта В Выход А таймера/счетчика Т2 Вход внешнего прерывания по изменению сигнала Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РСО РС1 РС2 РСЗ РС4 РС5 РС6 РС7 35 36 37 38 39 40 41 42 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С 1-й бит порта С 2-й бит порта С 3-й бит порта С 4-й бит порта С 5-й бит порта С 6-й бит порта С 7-й бит порта С Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO(ICPl) PD1 (INTO) PD2 PD3 PD4 PD5 PD6 PD7 25 26 27 28 29 30 31 32 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта D Вход захвата таймера/счетчика Т1 1-й бит порта D Вход внешнего прерывания 2-й бит порта D 3-й бит порта D 4-й бит порта D 5-й бит порта D 6-й бит порта D 7-й бит порта D Порт Е. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РЕО (RXD/PCINT0) 2 I/O Вход USART Вход внешнего прерывания по изменению состояния вывода
7.7. Цоколевка и описание выводов ¦ 61 Таблица 1.11. Описание выводов моделей ATmega325x/645x (продолжение) Обозначение РЕ1 (TXD/PCINT1) РЕ2 (AIN0/XCK/PCINT2) PE3(AIN1/PCINT3) PE4(USCK/SCL/PCINT4) РЕ5 (DI/SDA/PCINT5) PE6(DO/PCINT6) РЕ7 (CLKO/PCINT7) Номер вывода 3 4 5 6 7 8 9 Тип вывода I/O I/O I/O I/O I/O I/O I/O Описание Выход USART Вход внешнего прерывания по изменению состояния вывода Неинвертирующий вход компаратора Вход/выход внешнего тактового сигнала USART Вход внешнего прерывания по изменению состояния вывода Инвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода Вход/выход тактового сигнала модуля USI в режиме USART Вход/выход тактового сигнала модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода Вход данных модуля USI в режиме USART Вход/выход данных модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода Выход данных модуля USI в режиме USART Вход внешнего прерывания по изменению состояния вывода Выход предделителя тактового сигнала Вход внешнего прерывания по изменению состояния вывода 1 Порт F. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PFO(ADCO) PF1 (ADC1) PF2 (ADC2) PF3 (ADC3) 61 60 59 58 I/O I/O I/O I/O 0-й бит порта F Вход АЦП 1-й бит порта F Вход АЦП 2-й бит порта F Вход АЦП 3-й бит порта F Вход АЦП
62 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.11. Описание выводов моделей AThiega325x/645x (продолжение) Обозначение РР4(АОС4ДСК) PF5 (АОС5ДМ8) PF6(ADC6/TDO) PF7 (ADC7/TDI) Номер вывода 57 56 55 54 вывода I/O I/O I/O I/O Описание 4-й бит порта F Вход АЦП Тактовый сигнал JTAG 5-й бит порта F Вход АЦП Выбор режима JTAG 6-й бит порта F Вход АЦП Выход данных JTAG 7-й бит порта F Вход АЦП Вход данных JTAG Порт G. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PG0 PG1 PG2 PG3(T1) PG4 (ТО) PG5 (RESET) AREF AVCC VCC GND NC 33 34 43 18 19 20 62 64 21,52 22, 53,63 1 I/O I/O I/O I/O I/O I р р р р - 0-й бит порта G 1-й бит порта G 2-й бит порта G 3-й бит порта G Вход внешнего тактового сигнала таймера/счетчика Т1 4-й бит порта G Вход внешнего тактового сигнала таймера/счетчика ТО 5-й бит порта G (постоянно подтянут к питанию) Вход сброса Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод Не используется
1.7. Цоколевка и описание выводов ¦ 63 TQFP/MLF Рис. 1.12, Расположение выводов (вид сверху) моделей ATmega64x/128x Таблица 1.12. Описание выводов моделей ATmega64x/128x Обозначение XTAL1 XTAL2 RESET Номер вывода 24 23 20 вывода I О I Описание Вход тактового генератора Выход тактового генератора Вход сброса Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADO) PAl(ADl) 51 50 I/O I/O 0-й бит порта А 0-й бит мультиплексированной ША/ШД для внешнего ОЗУ 1-й бит порта А 1-й бит мультиплексированной ША/ШД для внешнего ОЗУ
64 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.12. Описание выводов моделей ATrnega64x/128x (продолжение) Обозначение РА2 (AD2) РАЗ (AD3) PA4(AD4) РА5 (AD5) РА6 (AD6) РА7 (AD7) Номер вывода 49 48 47 46 45 44 Тип вывода I/O I/O I/O I/O I/O I/O Описание 2-й бит порта А 2-й бит мультиплексированной ША/ШД для внешнего ОЗУ 3-й бит порта А 3-й бит мультиплексированной ША/ШД для внешнего ОЗУ 4-й бит порта А 4-й бит мультиплексированной ША/ШД для внешнего ОЗУ 5-й бит порта А 5-й бит мультиплексированной ША/ШД для внешнего ОЗУ 6-й бит порта А 6-й бит мультиплексированной ША/ШД для внешнего ОЗУ 7-й бит порта А 7-й бит мультиплексированной ША/ШД для внешнего ОЗУ Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (SS) РВ1 (SCK) РВ2 (MOSI) РВЗ (MISO) РВ4(ОС0) РВ5 (ОС1А) РВ6(ОС1В) РВ7(ОС2/ОС1С) 10 11 12 13 14 15 16 17 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Выбор Slave-устройства на шине SPI 1-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI 2-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI 3-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI 4-й бит порта В Выход таймера/счетчика ТО 5-й бит порта В Выход А таймера/счетчика Т1 6-й бит порта В Выход В таймера/счетчика Т1 7-й бит порта В Выход таймера/счетчика Т2 Выход С таймера/счетчика Т1
1.7. Цоколевка и описание выводов ¦ 65 Таблица 1,12. Описание выводов моделей ATrnega64x/128x (продолжение) Обозначение Номер вывода Тип вывода Описание Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РС0(А8) PCI (A9) РС2(А10) РСЗ(АП) РС4(А12) РС5(А13) РС6(А14) РС7(А15) 35 36 37 38 39 40 41 42 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С 8-й бит ША для внешнего ОЗУ 1-й бит порта С 9-й бит ША для внешнего ОЗУ 2-й бит порта С 10-й бит ША для внешнего ОЗУ 3-й бит порта С 11 -й бит ША для внешнего ОЗУ 4-й бит порта С 12-й бит ША для внешнего ОЗУ 5-й бит порта С 13-й бит ША для внешнего ОЗУ 6-й бит порта С 14-й бит ША для внешнего ОЗУ 7-й бит порта С 15-й бит ША для внешнего ОЗУ Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PD0(SCL/INT0) PD1 (SDA/INT1) PD2(RXD1/INT2) PD3(TXD1/INT3) PD4(ICP1) PD5(XCK1) PD6(T1) 25 26 27 28 29 30 31 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта D Вход/выход тактового сигнала модуля TWI Вход внешнего прерывания 1-й бит порта D Вход/выход данных модуля TWI Вход внешнего прерывания 2-й бит порта D Вход USART1 Вход внешнего прерывания 3-й бит порта D Выход USART1 Вход внешнего прерывания 4-й бит порта D Вход захвата таймера/счетчика Т1 5-й бит порта D Вход/выход внешнего тактового сигнала USART1 6-й бит порта D Вход внешнего тактового сигнала таймера/счетчика Т1
66 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.12. Описание выводов моделей ATmega64x/128x (продолжение) Обозначение PD7 (Т2) Номер вывода 32 Тип вывода I/O Описание 7-й бит порта D Вход внешнего тактового сигнала таймера/счетчика Т2 Порт Е. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РЕО (PDI/RXD0) РЕ1 (PDO/TXD0) РЕ2 (AIN0/XCK0) PE3(AIN1/0C3A) РЕ4 (OC3B/INT4) РЕ5 (OC3C/INT5) РЕ6 (T3/INT6) РЕ7 (ICP3/INT7) 2 3 4 5 6 7 8 9 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта Е Вход данных для программирования по последовательному каналу Вход USART0 1-й бит порта Е Выход данных для программирования по последовательному каналу Выход USART0 2-й бит порта Е Неинвертируюший вход компаратора Вход/выход внешнего тактового сигнала USART0 3-й бит порта Е Инвертирующий вход компаратора Выход А таймера/счетчика ТЗ 4-й бит порта Е Выход В таймера/счетчика ТЗ Вход внешнего прерывания 5-й бит порта Е Выход С таймера/счетчика ТЗ Вход внешнего прерывания 6-й бит порта Е Вход внешнего тактового сигнала таймера/счетчика ТЗ Вход внешнего прерывания 7-й бит порта Е Вход захвата таймера/счетчика ТЗ Вход внешнего прерывания Порт F. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PFO (ADC0) PF1 (ADC1) PF2(ADC2) 61 60 59 I/O I/O I/O 0-й бит порта F Вход АЦП 1-й бит порта F Вход АЦП 2-й бит порта F Вход АЦП ]
7.7. Цоколевка и описание выводов ¦ 67 Таблица 1.12. Описание выводов моделей ATmega64x/128x (продолжение) Обозначение PF3 (ADC3) PF4(ADC4/TCK) PF5 (ADC5/TMS) PF6 (ADC6/TDO) PF7 (ADC7/TDI) Номер вывода 58 57 56 55 54 Тип вывода I/O I/O I/O I/O I/O Описание 3-й бит порта F Вход АЦП 4-й бит порта F Вход АЦП Тактовый сигнал JTAG 5-й бит порта F Вход АЦП Выбор режима JTAG 6-й бит порта F Вход АЦП Выход данных JTAG 7-й бит порта F Вход АЦП Вход данных JTAG Порт G. 5-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PGO(WR) PGl(RD) PG2 (ALE) PG3 (TOSC2) PG4(TOSCl) PEN AREF AVCC VCC GND 33 34 43 18 19 1 62 64 21,52 22, 53,63 I/O I/O I/O I/O I/O I p p p p 0-й бит порта G Строб записи во внешнее ОЗУ 1-й бит порта G Строб чтения из внешнего ОЗУ 2-й бит порта G Строб адреса внешнего ОЗУ 3-й бит порта G Вывод для подключения резонатора к таймеру/счетчику Т2 4-й бит порта G Вывод для подключения резонатора к таймеру/счетчику Т2 Разрешение программирования Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод
68 ¦ Глава 1. Знакомство с семейством Mega TQFP/MLF Рис, 1.13. Расположение выводов (вид сверху) моделей ATmegal281x/2561x Таблица 1.13. Описание выводов моделей ATmegal281x/2561x Обозначение XTAL1 XTAL2 RESET Номер вывода 24 23 20 Тип вывода I О I Описание Вход тактового генератора 1 Выход тактового генератора 1 Вход сброса 1 Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADO) PAl(ADl) 51 50 I/O I/O 0-й бит порта А 1 0-й бит мультиплексированной ША/ШД для внешнего ОЗУ 1-й бит порта А 1 1-й бит мультиплексированной ША/ШД для внешнего ОЗУ
7.7. Цоколевка и описание выводов ¦ 69 Таблица 1.13. Описание выводов моделей ATmegal281x/2561x (продолжение) Обозначение РА2 (AD2) РАЗ (AD3) PA4(AD4) РА5 (AD5) РА6 (AD6) PA7(AD7) Номер вывода 49 48 47 46 45 44 Тип вывода I/O I/O I/O I/O I/O I/O Описание 2-й бит порта А 2-й бит мультиплексированной ША/ШД для внешнего ОЗУ 3-й бит порта А 1 3-й бит мультиплексированной ША/ШД для внешнего ОЗУ 4-й бит порта А 1 4-й бит мультиплексированной ША/ШД для внешнего ОЗУ 5-й бит порта А 1 5-й бит мультиплексированной ША/ШД для внешнего ОЗУ 6-й бит порта А 1 6-й бит мультиплексированной ША/ШД для внешнего ОЗУ 7-й бит порта А 1 7-й бит мультиплексированной ША/ШД для внешнего ОЗУ Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РВО (SS/PCINT0) PB1(SCK/PCINT1) РВ2 (MOSI/PCINT2) РВЗ (MISO/PCINT3) PB4(OC2A/PCINT4) 10 11 1 -» 13 14 I/O I/O I/O I/O I/O 0-й бит порта В 1 Выбор Slave-устройства на шине SPI Вход внешнего прерывания по изменению сигнала 1 -й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению сигнала 2-й бит порта В 1 Выход (Master) или вход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 3-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 4-й бит порта В Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению сигнала
70 ¦ Глава 1. Знакомство с семейством Mega Таблица 1,13. Описание выводов моделей Altaegal281x/2561x (продолжение) Обозначение PB5@C1A/PCINT5) PB6@C1B/PCINT6) PB7(OCOA/OC1C/PCINT7) Номер вывода 15 16 17 Тип вывода I/O I/O I/O Описание 5-й бит порта В Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 6-й бит порта В Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 7-й бит порта В Выход А таймера/счетчика ТО Выход С таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами ГРСО (А8) PCI (A9) РС2 (А10) РСЗ(АП) РС4 (А12) РС5(А13) РС6 (А14) РС7 (А15) 35 36 37 38 39 40 41 42 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С 8-й бит ША для внешнего ОЗУ 1-й бит порта С 9-й бит ША для внешнего ОЗУ 2-й бит порта С 10-й бит ША для внешнего ОЗУ 3-й бит порта С 11 -й бит ША для внешнего ОЗУ 4-й бит порта С 12-й бит ША для внешнего ОЗУ 5-й бит порта С 13-й бит ША для внешнего ОЗУ 6-й бит порта С 14-й бит ША для внешнего ОЗУ 7-й бит порта С 15-й бит ША для внешнего ОЗУ 1 Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO (SCL/INT0) PD1 (SDA/INT1) PD2 (RXD1/INT2) PD3(TXD1/INT3) 25 26 27 28 I/O I/O I/O I/O 0-й бит порта D Вход/выход тактового сигнала модуля TWI Вход внешнего прерывания 1-й бит порта D Вход/выход данных модуля TWI Вход внешнего прерывания 2-й бит порта D Вход USART1 Вход внешнего прерывания 3-й бит порта D Выход USART1 Вход внешнего прерывания
7.7. Цоколевка и описание выводов ¦ 71 Таблица 1.13. Описание выводов моделей AThiegal281x/2561x (продолжение) Обозначение PD4(ICP1) PD5(XCK1) PD6(T1) PD7 (ТО) Номер вывода 29 30 31 32 Тип вывода I/O I/O I/O I/O Описание 4-й бит порта D Вход захвата таймера/счетчика Т1 5-й бит порта D Вход/выход внешнего тактового сигнала USART1 6-й бит порта D Вход внешнего тактового сигнала таймера/счетчика Т1 7-й бит порта D 1 Вход внешнего тактового сигнала таймера/счетчика ТО Порт Е. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РЕО (PDI/RXD0/PCINT8) РЕ1 (PDO/TXD0) РЕ2 (AIN0/XCK0) PE3(AIN1/0C3A) РЕ4 (OC3B/INT4) РЕ5 (OC3C/INT5) РЕ6 (T3/INT6) РЕ7 (ICP3/CLKO/INT7) 2 3 4 5 7 8 9 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта Е 1 Вход данных для программирования по последовательному каналу Вход USART0 Вход внешнего прерывания по изменению состояния вывода 1-й бит порта Е 1 Выход данных для программирования по последовательному каналу Выход USART0 | 2-й бит порта Е 1 Неинвертирующий вход компаратора Вход/выход внешнего тактового сигнала USART0 | 3-й бит порта Е 1 Инвертирующий вход компаратора Выход А таймера/счетчика ТЗ 4-й бит порта Е 1 Выход В таймера/счетчика ТЗ Вход внешнего прерывания 5-й бит порта Е 1 Выход С таймера/счетчика ТЗ Вход внешнего прерывания 6-й бит порта Е 1 Вход внешнего тактового сигнала таймера/счетчика ТЗ Вход внешнего прерывания 7-й бит порта Е 1 Вход захвата таймера/счетчика ТЗ Выход предделителя тактового сигнала Вход внешнего прерывания
72 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.13. Описание выводов моделей AThiega 1281 х/2561х (продолжение) Обозначение Номер вывода Тип вывода Описание Порт F. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PFO (ADC0) PF1 (ADC1) PF2 (ADC2) PF3 (ADC3) PF4(ADC4ACK) PF5 (ADC5/TMS) PF6 (ADC6/TDO) PF7 (ADC7/TDI) 61 60 59 58 57 56 55 54 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта F Вход АЦП 1 -й бит порта F Вход АЦП 2-й бит порта F Вход АЦП 3-й бит порта F Вход АЦП 4-й бит порта F Вход АЦП Тактовый сигнал JTAG 5-й бит порта F Вход АЦП Выбор режима JTAG 6-й бит порта F Вход АЦП Выход данных JTAG 7-й бит порта F Вход АЦП Вход данных JTAG Порт G. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PGO (WR) PGl(RD) PG2 (ALE) PG3 (TOSC2) PG4(TOSCl) PG5 (ОСОБ) AREF AVCC VCC GND 33 34 43 18 19 1 62 64 21,52 22, 53,63 I/O I/O I/O I/O I/O I/O p p p p 0-й бит порта G Строб записи во внешнее ОЗУ 1-й бит порта G Строб чтения из внешнего ОЗУ 2-й бит порта G Строб адреса внешнего ОЗУ 3-й бит порта G Вывод для подключения резонатора к таймеру/счетчику Т2 4-й бит порта G Вывод для подключения резонатора к таймеру/счетчику Т2 5-й бит порта G Выход В таймера/счетчика ТО Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод
7.7. Цоколевка и описание выводов ¦ 73 TQFP Рис. 1.14, Расположение выводов (вид сверху) моделей ATmega3250x/6450x Таблица 1.14. Описание выводов моделей ATmega3250x/6450x Обозначение XTALl(TOSCl) XTAL2 (TOSC2) Номер вывода 13 12 Тип вывода I О Описание Вход тактового генератора Выход тактового генератора Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО РА1 78 77 I/O I/O 0-й бит порта А 1-й бит порта А
74 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.14. Описание выводов моделей ATtoiega3250x/6450x (продолжение) Обозначение РА2 РАЗ РА4 РА5 РА6 РА7 Номер вывода 76 75 74 73 72 71 Тип вывода I/O I/O I/O I/O I/O I/O Описание 2-й бит порта А 3-й бит порта А 4-й бит порта А 5-й бит порта А 6-й бит порта А 7-й бит порта А Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PB0(SS/PCINT8) РВ1 (SCK/PCINT9) РВ2 (MOSI/PCINT10) PB3(MIS0/PCINT11) PB4(OC0A/PCINT12) PB5@C1A/PCINT13) PB6@C1B/PCINT14) PB7(OC2A/PCINT15) 19 20 21 22 23 24 25 26 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта В Выбор Slave-устройства на шине SPI Вход внешнего прерывания по изменению сигнала 1-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению сигнала 2-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 3-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 4-й бит порта В Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению сигнала 5-й бит порта В Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 6-й бит порта В Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 7-й бит порта В Выход А таймера/счетчика Т2 Вход внешнего прерывания по изменению сигнала
/. 7. Цоколевка и описание выводов ¦ 75 Таблица 1,14. Описание выводов моделей AThiega3250x/6450x (продолжение) Обозначение Номер вывода Тип вывода Описание Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РСО РС1 РС2 РСЗ РС4 РС5 РС6 РС7 53 54 55 56 57 58 68 69 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С 1-й бит порта С 2-й бит порта С 3-й бит порта С 4-й бит порта С 5-й бит порта С 6-й бит порта С 7-й бит порта С Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PDO(ICPl) PD1 (INTO) PD2 PD3 PD4 PD5 PD6 PD7 43 44 45 46 47 48 49 50 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта D Вход захвата таймера/счетчика Т1 1-й бит порта D Вход внешнего прерывания 2-й бит порта D 3-й бит порта D 4-й бит порта D 5-й бит порта D 6-й бит порта D 7-й бит порта D Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PE0(RXD/PCINT0) РЕ1 (TXD/PCINT1) РЕ2 (AIN0/XCK/PCINT2) 2 3 4 I/O I/O I/O 0-й бит порта Е Вход USART Вход внешнего прерывания по изменению состояния вывода 1-й бит порта Е Выход USART Вход внешнего прерывания по изменению состояния вывода 2-й бит порта Е Неинвертирующий вход компаратора Вход/выход внешнего тактового сигнала USART Вход внешнего прерывания по изменению состояния вывода
76 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.14, Описание выводов моделей Arnnega3250x/6450x (продолжение) Обозначение РЕЗ (AIN1/PCINT3) PE4(USCK/SCL/PCINT4) РЕ5 (DI/SDA/PCINT5) РЕ6 (DO/PCINT6) РЕ7 (CLKO/PCINT7) Номер вывода 5 6 7 8 9 Тип вывода I/O I/O I/O I/O I/O Описание 3-й бит порта Е Инвертирующий вход компаратора Вход внешнего прерывания по изменению состояния вывода 4-й бит порта Е Вход/выход тактового сигнала модуля USI в режиме USART Вход/выход тактового сигнала модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода 5-й бит порта Е Вход данных модуля USI в режиме USART Вход/выход данных модуля USI в режиме TWI Вход внешнего прерывания по изменению состояния вывода 6-й бит порта Е Выход данных модуля USI в режиме USART Вход внешнего прерывания по изменению состояния вывода 7-й бит порта Е Выход предделителя тактового сигнала Вход внешнего прерывания по изменению состояния вывода Порт F. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PFO(ADCO) PF1 (ADC1) PF2 (ADC2) PF3 (ADC3) PF4 (ADC4/TCK) PF5 (ADC5/TMS) PF6 (ADC6/TDO) 97 96 95 94 93 92 91 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта F Вход АЦП | 1-й бит порта F Вход АЦП 1 2-й бит порта F Вход АЦП 1 3-й бит порта F Вход АЦП | 4-й бит порта F Вход АЦП Тактовый сигнал JTAG 5-й бит порта F Вход АЦП Выбор режима JTAG 6-й бит порта F Вход АЦП Выход данных JTAG
/. 7. Цоколевка и описание выводов ¦ 77 Таблица 1.14. Описание выводов моделей ATVnega3250x/6450x (продолжение) Обозначение PF7 (ADC7/TDI) Номер вывода 90 Тип вывода I/O Описание 7-й бит порта F Вход АЦП Вход данных JTAG Порт G. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PG0 PG1 PG2 PG3(T1) PG4(T0) PG5(RESET) 51 52 70 28 29 30 I/O I/O I/O I/O I/O I 0-й бит порта G 1-й бит порта G 2-й бит порта G 3-й бит порта G Вход внешнего тактового сигнала таймера/счетчика Т1 4-й бит порта G Вход внешнего тактового сигнала таймера/счетчика ТО 5-й бит порта G (постоянно подтянут к питанию) Вход сброса Порт Н. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PH0(PCINT16) PH1(PCINT17) PH2(PCINT18) PH3(PCINT19) PH4(PCINT20) PH5(PCINT21) PH6 (PCINT22) 63 64 65 66 84 85 86 I/O I/O I/O I/O I/O I/0_ I/O 0-й бит порта Н Вход внешнего прерывания по изменению состояния вывода 1-й бит порта Н Вход внешнего прерывания по изменению состояния вывода 2-й бит порта Н Вход внешнего прерывания по изменению состояния вывода 3-й бит порта Н Вход внешнего прерывания по изменению состояния вывода 4-й бит порта Н Вход внешнего прерывания по изменению состояния вывода 5-й бит порта Н Вход внешнего прерывания по изменению состояния вывода 6-й бит порта Н Вход внешнего прерывания по изменению состояния вывода
78 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.14. Описание выводов моделей ATmega3250x/6450x (продолжение) Обозначение РН7 (PCINT23) Номер вывода 87 Тип вывода I/O Описание 7-й бит порта Н Вход внешнего прерывания по изменению состояния вывода Порт J. 7-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PJO (PCINT24) РЛ (PCINT25) PJ2 (PCINT26) PJ3 (PCINT27) PJ4 (PCINT28) PJ5 (PCINT29) PJ6 (PCINT30) AREF AVCC VCC GND NC 13 14 37 38 39 40 41 98 100 10,31,80 11,32, 81,99 1,12,15, 16,17, 18,27, 35,36, 42,59, 60,61, 62,67, 79,82, 83,88, 89 I/O I/O I/O I/O I/O I/O I/O р р р р - 0-й бит порта J Вход внешнего прерывания по изменению состояния вывода 1-й бит порта J Вход внешнего прерывания по изменению состояния вывода 2-й бит порта J Вход внешнего прерывания по изменению состояния вывода 3-й бит порта J Вход внешнего прерывания по изменению состояния вывода 4-й бит порта J Вход внешнего прерывания по изменению состояния вывода 5-й бит порта J Вход внешнего прерывания по изменению состояния вывода 6-й бит порта J Вход внешнего прерывания по изменению состояния вывода Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод Не используются
7.7. Цоколевка и описание выводов ¦ 79 TQFP Рис. 1.15. Расположение выводов (вид сверху) моделей ATmega640x/1280x/2560x Таблица 1.15. Описание выводов моделей AThiega640x/1280x/2560x Обозначение XTAL1 XTAL2 RESET Номер вывода 34 33 30 Тип вывода I О I Описание Вход тактового генератора Выход тактового генератора Вход сброса
80 ¦ Глава 1. Знакомство с семейством Mega Таблица 1,15. Описание выводов моделей ATrnega640x/1280x/2560x (продолжение) Обозначение Номер вывода Ът вывода Описание Порт А. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РАО (ADO) РА1 (AD1) РА2 (AD2) РАЗ (AD3) РА4 (AD4) РА5 (AD5) РА6 (AD6) 1 РА7 (AD7) 78 77 76 75 74 73 72 71 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта А 0-й бит мультиплексированной ША/ШД для внешнего ОЗУ 1-й бит порта А 1 -й бит мультиплексированной ША/ШД для внешнего ОЗУ 2-й бит порта А 2-й бит мультиплексированной ША/ШД для внешнего ОЗУ 3-й бит порта А 3-й бит мультиплексированной ША/ШД для внешнего ОЗУ 4-й бит порта А 4-й бит мультиплексированной ША/ШД для внешнего ОЗУ 5-й бит порта А 5-й бит мультиплексированной ША/ШД для внешнего ОЗУ 6-й бит порта А 6-й бит мультиплексированной ША/ШД для внешнего ОЗУ 7-й бит порта А 7-й бит мультиплексированной ША/ШД для внешнего ОЗУ Порт В. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PB0(SS/PCINT0) РВ1 (SCK/PCINT1) РВ2 (MOSI/PCINT2) РВЗ (MISO/PCINT3) 19 20 21 22 I/O I/O I/O I/O 0-й бит порта В Выбор Slave-устройства на шине SPI Вход внешнего прерывания по изменению сигнала 1-й бит порта В Выход (Master) или вход (Slave) тактового сигнала модуля SPI Вход внешнего прерывания по изменению сигнала 2-й бит порта В Выход (Master) или вход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала 3-й бит порта В Вход (Master) или выход (Slave) данных модуля SPI Вход внешнего прерывания по изменению сигнала
/. 7. Цоколевка и описание выводов ¦ 81 Таблица 1.15. Описание выводов моделей Alhiega640x/1280x/2560x (продолжение) Обозначение РВ4 (OC2A/PCINT4) PB5@C1A/PCINT5) PB6@C1B/PCINT6) РВ7 (OC0A/OC1C/PCINT7) Номер вывода 23 24 25 26 Тип вывода I/O I/O I/O I/O Описание 4-й бит порта В Выход А таймера/счетчика ТО Вход внешнего прерывания по изменению сигнала 5-й бит порта В Выход А таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 6-й бит порта В Выход В таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала 7-й бит порта В Выход А таймера/счетчика ТО Выход С таймера/счетчика Т1 Вход внешнего прерывания по изменению сигнала Порт С. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РСО (А8) PCI (A9) РС2(А10) РСЗ(АИ) РС4(А12) РС5(А13) РС6 (А14) РС7(А15) 53 54 55 56 57 58 59 60 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта С 8-й бит ША для внешнего ОЗУ 1-й бит порта С 9-й бит ША для внешнего ОЗУ 2-й бит порта С 10-й бит ША для внешнего ОЗУ 3-й бит порта С 11 -й бит ША для внешнего ОЗУ 4-й бит порта С 12-й бит ША для внешнего ОЗУ 5-й бит порта С 13-й бит ША для внешнего ОЗУ 6-й бит порта С 14-й бит ША для внешнего ОЗУ 7-й бит порта С 15-й бит tilA для внешнего ОЗУ Порт D. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PD0(SCL/INT0) PD1 (SDA/INT1) 43 44 I/O I/O 0-й бит порта D Вход/выход тактового сигнала модуля TWI Вход внешнего прерывания 1 -й бит порта D Вход/выход данных модуля TWI Вход внешнего прерывания
82 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.15. Описание выводов моделей ATmega640x/1280x/2560x (продолжение) Обозначение PD2(RXD1/INT2) PD3(TXD1/INT3) PD4(ICP1) PD5 (ХСК1) PD6(T1) PD7 (TO) Номер вывода 45 46 47 48 49 50 Тип вывода I/O I/O I/O I/O I/O I/O Описание 2-й бит порта D ВходША1Ш Вход внешнего прерывания 3-й бит порта D Выход USART1 Вход внешнего прерывания 4-й бит порта D Вход захвата таймера/счетчика Т1 5-й бит порта D Вход/выход внешнего тактового сигнала USART1 6-й бит порта D Вход внешнего тактового сигнала таймера/счетчика TI 7-й бит порта D Вход внешнего тактового сигнала таймера/счетчика ТО Порт Е. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РЕО (RXD0/PCINT8) РЕ1 (TXD0) РЕ2 (AIN0/XCK0) PE3(A1N1/0C3A) РЕ4 (OC3B/INT4) РЕ5 (OC3C/INT5) РЕ6 (T3/INT6) 2 3 4 5 6 7 8 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта Е Вход USART0 Вход внешнего прерывания по изменению состояния вывода 1-й бит порта Е Выход USART0 2-й бит порта Е Неинвертирующий вход компаратора Вход/выход внешнего тактового сигнала USART0 3-й бит порта Е Инвертирующий вход компаратора Выход А таймера/счетчика ТЗ 4-й бит порта Е Выход В таймера/счетчика ТЗ Вход внешнего прерывания 5-й бит порта Е Выход С таймера/счетчика ТЗ Вход внешнего прерывания 6-й бит порта Е Вход внешнего тактового сигнала таймера/счетчика ТЗ Вход внешнего прерывания
7.7. Цоколевка и описание выводов ¦ 83 Таблица 1.15. Описание выводов моделей ArIhiega640x/1280x/2560x (продолжение) Обозначение РЕ7 (ICP3/CLKO/INT7) Номер вывода 9 Тип вывода I/O Описание 7-й бит порта Е Вход захвата таймера/счетч и ка ТЗ Выход предделителя тактового сигнала Вход внешнего прерывания Порт F. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PFO(ADCO) PFl(ADCl) PF2 (ADC2) PF3 (ADC3) PF4 (ADC4/TCK) PF5 (ADC5/TMS) PF6 (ADC6/TDO) PF7 (ADC7/TDI) 97 96 95 94 93 92 91 90 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта F Вход АЦП 1-й бит порта F Вход АЦП 2-й бит порта F Вход АЦП 3-й бит порта F Вход АЦП 4-й бит порта F Вход АЦП Тактовый сигнал JTAG 5-й бит порта F Вход АЦП Выбор режима JTAG 6-й бит порта F Вход АЦП Выход данных JTAG 7-й бит порта F Вход АЦП Вход данных JTAG Порт G. 6-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PGO (WR) PGl(RD) PG2 (ALE) PG3 (TOSC2) PG4(TOSCl) 51 52 70 28 29 I/O I/O I/O I/O I/O 0-й бит порта G Строб записи во внешнее ОЗУ 1-й бит порта G Строб чтения из внешнего ОЗУ 2-й бит порта G Строб адреса внешнего ОЗУ 3-й бит порта G Вывод для подключения резонатора к таймеру/счетчику Т2 4-й бит порта G Вывод для подключения резонатора к таймеру/счетчику Т2
84 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.15. Описание выводов моделей A1hiega640x/1280x/2560x (продолжение) Обозначение PG5 (ОСОБ) Номер вывода 1 Тип вывода I/O Описание 5-й бит порта G Выход В таймера/счетчика ТО Порт Н. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами РНО (RXD2) PHKTXD2) РН2 (ХСК2) РНЗ (ОС4А) РН4 (ОС4В) РН5 (ОС4С) РН6 (ОС2В) РН7 (Т4) 12 13 14 15 16 17 18 27 I/O I/O I/O I/O I/O I/O I/O I/O 0-й бит порта Н Вход USART2 1-й бит порта Н Выход USART2 2-й бит порта Н Вход/выход внешнего тактового сигнала USART2 3-й бит порта Н Выход А таймера/счетчика Т4 4-й бит порта Н Выход В таймера/счетчика Т4 5-й бит порта Н Выход С таймера/счетчика Т4 6-й бит порта Н Выход В таймера/счетчика Т2 7-й бит порта Н Вход внешнего тактового сигнала таймера/счетчика Т4 Порт J. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PJO (RXD3/PCINT9) РЛ (TXD3/PCINT10) PJ2(XCK3/PCINT11) PJ3 (PCINT12) 63 64 65 66 I/O I/O I/O I/O 0-й бит порта J Вход USART3 Вход внешнего прерывания по изменению состояния вывода 1-й бит порта J Выход USART3 Вход внешнего прерывания по изменению состояния вывода 2-й бит порта J Вход/выход внешнего тактового сигнала USART3 Вход внешнего прерывания по изменению состояния вывода 3-й бит порта J Вход внешнего прерывания по изменению состояния вывода
1.7. Цоколевка и описание выводов ¦ 85 Таблица 1.15. Описание выводов моделей ATmega640x/1280x/2560x (продолжение) Обозначение PJ4(PCINT13) PJ5(PCINT14) PJ6(PCINT15) PJ7 Номер вывода 67 68 69 79 Тип вывода I/O I/O I/O I/O Описание 4-й бит порта J Вход внешнего прерывания по изменению состояния вывода 5-й бит порта J Вход внешнего прерывания по изменению состояния вывода 6-й бит порта J Вход внешнего прерывания по изменению состояния вывода 7-й бит порта J Порт К. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PK0(ADC8/PCINT16) РК1 (ADC9/PCINT17) PK2(ADC10/PCINT18) PK3(ADC11/PCINT19) PK4(ADC12/PCINT20) PK5(ADC13/PCINT21) PK6(ADC14/PCINT22) 89 88 87 86 85 84 83 I/O I/O I/O I/O I/O I/O I/O 0-й бит порта К Вход АЦП Вход внешнего прерывания по изменению состояния вывода 1-й бит порта К Вход АЦП Вход внешнего прерывания по изменению состояния вывода 2-й бит порта К Вход АЦП Вход внешнего прерывания по изменению состояния вывода 3-й бит порта К Вход АЦП Вход внешнего прерывания по изменению состояния вывода 4-й бит порта К Вход АЦП Вход внешнего прерывания по изменению состояния вывода 5-й бит порта К Вход АЦП Вход внешнего прерывания по изменению состояния вывода 6-й бит порта К Вход АЦП Вход внешнего прерывания по изменению состояния вывода
86 ¦ Глава 1. Знакомство с семейством Mega Таблица 1.15. Описание выводов моделей AThiega640x/1280x/2560x (продолжение) Обозначение PK7(ADC15/PCINT23) Номер вывода 82 Тип вывода I/O Описание 7-й бит порта К | Вход АЦП Вход внешнего прерывания по изменению состояния вывода Порт L. 8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами PL0(ICP4) PL1 (ICP5) PL2 (Т5) PL3 (ОС5А) PL4 (ОС5В) PL5 (ОС5С) PL6 PL7 AREF AVCC VCC GND 35 36 37 38 39 40 41 42 98 100 10,31, 61,80 11,32, 62,81, 99 I/O I/O I/O I/O I/O I/O I/O I/O р р р р 0-й бит порта L Вход захвата таймера/счетчика Т4 1-й бит порта L Вход захвата таймера/счетчика Т5 2-й бит порта L Вход внешнего тактового сигнала таймера/счетчика Т5 3-й бит порта L Выход А таймера/счетчика Т5 4-й бит порта L Выход В таймера/счетчика Т5 5-й бит порта L Выход С таймера/счетчика Т5 6-й бит порта L 7-й бит порта L Вход опорного напряжения для АЦП Вывод источника питания АЦП Вывод источника питания Общий вывод
Архитектура микроконтроллеров семейства Меда 2.1. Общие сведения Микроконтроллеры AVR семейства Mega являются 8-битными микроконтроллерами с RISC-архитектурой. Они имеют в своем составе электрически стираемую память программ (FLASH) и данных (EEPROM), а также разнообразные периферийные устройства. Следует отметить, что набор периферийных устройств в микроконтроллерах семейства Mega гораздо богаче, чем в микроконтроллерах семейства Tiny. Более того, состав этих устройств от модели к модели практически не меняется (меняется только количество однотипных модулей и их функциональные возможности). В любой модели имеется хотя бы по одному 8- и 16-битному таймеру/счетчику, хотя бы по одному интерфейсному модулю USART и SPI, аналоговый компаратор, сторожевой таймер и, конечно, порты ввода/вывода. К устройствам, присутствующим не во всех моделях семейства, относятся АЦП, модуль двухпроводного интерфейса TWI (Two Wire Interface, аналог шины 12С), а также модули интерфейсов JTAG и debugWire. Чтобы облегчить изучение микроконтроллеров семейства, далее на Рис. 2.1...2.11 приведены их структурные схемы, начиная с «классических» представителей семейства и заканчивая самыми совершенными на момент написания книги моделями. На Рис. 2.1 приведена структурная схема микроконтроллера ATmega8x. Особенностями данной модели являются: • 3 порта ввода/вывода (порты В, D — 8-битные, порт С — 7-битный); • вход аппаратного сброса и выводы для подключения резонатора совмещены с линиями ввода/вывода; • два 8-битных (ТО, Т2) и один 16-битный (Т1) таймер/счетчик; • 3 канала ШИМ; • по одному интерфейсному модулю USART, SPI и TWI; • 6- или 8-канальный (в зависимости от корпуса) 10-битный АЦП. Структурная схема микроконтроллеров ATmegal6x/32x приведена на Рис. 2.2. Особенностями этих моделей являются: • четыре 8-битных порта ввода/вывода (порты A...D); • два 8-битных (ТО, Т2) и один 16-битный (Т1) таймер/счетчик; • 4 канала ШИМ; ГЛАВА 2
88 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega • по одному интерфейсному модулю USART, SPI и TWI; • 8-канальный 10-битный АЦП; • интерфейс JTAG. Структурная схема микроконтроллеров ATmega64x/128x приведена на Рис. 2.3. Их особенности: • 7 портов ввода/вывода (порты A...F — 8-битные, порт G — 5-битный); • возможность подключения внешнего ОЗУ; • два 8-битных (ТО, Т2) и два 16-битных (Tl, T3) таймера/счетчика; • 8 каналов Ш ИМ; • два модуля USART и по одному модулю SPI и TWI; • 8-канальный 10-битный АЦП; • интерфейс JTAG. Структурная схема микроконтроллеров ATmega48x/88x/168x приведена на Рис. 2.4. Особенностями моделей этой линейки являются: • 3 порта ввода/вывода (порты В, D — 8-битные, порт С — 7-битный); • вход аппаратного сброса и выводы для подключения резонатора совмещены с линиями ввода/вывода; • два 8-битных (ТО, Т2) и два 16-битных (Т1, ТЗ) таймера/счетчика; • 6 каналов ШИМ; • по одному интерфейсному модулю USART, SPI и TWI, причем модуль USART может работать в режиме SPI; • 6/8-канальный (в зависимости от корпуса) 10-битный АЦП; • отладочный интерфейс debugWIRE. Структурная схема микроконтроллера ATmega8515x приведена на Рис. 2.5. Его особенностями являются: • 5 портов ввода/вывода (порты A...D — 8-битные, порт Е — 3-битный); • возможность подключения внешнего ОЗУ; • один 8-битный (ТО) и один 16-битный (Т1) таймер/счетчик; • 3 канала ШИМ; • по одному интерфейсному модулю USART и SPI. Структурная схема микроконтроллера ATmega8535x приведена на Рис. 2.6. Особенностями этой модели являются: • четыре 8-битных порта ввода/вывода (порты A...D); • два 8-битных (ТО, Т2) и один 16-битный (Т1) таймер/счетчик; • 4 канала ШИМ; • по одному интерфейсному модулю USART, SPI и TWI.
2.1. Общие сведения ¦ 89 Структурная схема микроконтроллера ATmegal62x приведена на Рис. 2.7. Его особенности: • 5 портов ввода/вывода (порты A...D — 8-битные, порт Е — 3-битный); • возможность подключения внешнего ОЗУ; • два 8-битных (ТО, Т2) и два 16-битных (Т1, ТЗ) таймера/счетчика; • 6 каналов ШИМ; • два интерфейсных модуля USART и один модуль SPI; • интерфейс JTAG. Структурная схема микроконтроллера ATmegal65x приведена на Рис. 2.8. Особенностями данной модели являются: • 7 портов ввода/вывода (порты A...F — 8-битные, порт G — 5-битный); • два 8-битных (ТО, Т2) и один 16-битный (Т1) таймер/счетчик; • 4 канала ШИМ; • 8-канальный 10-битный АЦП; • по одному интерфейсному модулю USART, SPI и USI; • интерфейс JTAG. Структурная схема микроконтроллеров ATmegal64x/324x/644x приведена на Рис. 2.9. Особенности моделей этой линейки: • четыре 8-битных порта ввода/вывода (порты A...D); • два 8-битных (ТО, Т2) и один 16-битный (Т1) таймер/счетчик; • 6 каналов ШИМ; • 8-канальный 10-битный АЦП; • один (ATmega644x) и два (ATmegal64x/324x) интерфейсных модуля USART, которые могут работать в режиме SPI; • модуль интерфейса SPI; • модуль универсального последовательного интерфейса USI; • интерфейс JTAG. Структурная схема микроконтроллеров ATmega325x/3250x/645x/6450x приведена на Рис. 2.10. Их особенности: • 7 портов ввода/вывода в моделях ATmega325x/645x (порты A...F — 8-битные, порт G — 5-битный); • 9 портов ввода/вывода в моделях ATmega3250x/6450x (порты A...F, Н — 8-битные, порт G — 5-битный, порт J — 7-битный); • два 8-битных (ТО, Т2) и один 16-битный (Т1) таймер/счетчик; • 4 канала ШИМ; • 8-канальный 10-битный АЦП; • по одному интерфейсному модулю USART, SPI и USI; • интерфейс JTAG.
90 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Рис. 2.1. Структурная схема микроконтроллеров ATmega8x
Рис, 2.2. Структурная схема микроконтроллеров ATmegal6x/32x 2.1. Общие сведения ¦ 91
Рис. 2.3. Структурная схема микроконтроллеров ATmega64x/128x 92 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega
2.1. Общие сведения ¦ 93 Рис, 2,4. Структурная схема микроконтроллеров ATmega48x/88x/168x
Рис. 2.5. Структурная схема микроконтроллеров ATmega8515x 94 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega
2 1. Общие сведения ¦ 95 Рис. 2.6. Структурная схема микроконтроллеров ATmega8535x
96 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Рис. 2.7. Структурная схема микроконтроллеров ATmegal62x
2.1. Общие сведения ¦ 97 Рис. 2.8. Структурная схема микроконтроллеров ATmegal65x
98 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Рис. 2.9. Структурная схема микроконтроллеров ATmegal64x/324x/644x
2.7. Общие сведения ¦ 99 Рис. 2.10. Структурная схема микроконтроллеров ATmega325x/3250x/645x/6450x
Рис. 2.11. Структурная схема микроконтроллеров ATmega640x/l280x/1281 х/2560х/2561х 100 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega
2.2. Организация памяти ¦ 101 Структурная схема микроконтроллеров ATmega640x/1280x/1281x/2560x/2561x приведена на Рис. 2.11. Особенностями моделей ATmegal281x/2561x являются: • 7 портов ввода/вывода (порты A...F — 8-битные, порт G — 6-битный); • два 8-битных (ТО, Т2) и четыре 16-битных (Т1, ТЗ, Т4, Т5) таймера/счетчика; • 6 каналов ШИМ; • 8-канальный 10-битный АЦП; • два интерфейсных модуля USART, которые могут работать в режиме SPI; • по одному интерфейсному модулю SPI и TWI; • интерфейс JTAG. Особенности моделей ATmegal280x/2560x: • 11 портов ввода/вывода (порты A...F, Н, J...L — 8-битные, порт G — 6-битный); • два 8-битных (ТО, Т2) и четыре 16-битных (Т1, ТЗ, Т4, Т5) таймера/счетчика; • 12 каналов ШИМ; • 16-канальный 10-битный АЦП; • четыре интерфейсных модуля USART, которые могут работать в режиме SPI; • по одному интерфейсному модулю SP1 и TW1; • интерфейс JTAG. 2.2. Организация памяти В микроконтроллерах AVR семейства Mega реализована Гарвардская архитектура, в соответствии с которой разделены не только адресные пространства памяти программ и памяти данных, но также и шины доступа к ним. Способы адресации и доступа к этим областям памяти также различны. Такая структура позволяет центральному процессору работать одновременно как с памятью программ, так и с памятью данных, что существенно увеличивает производительность. Каждая из областей памяти данных (ОЗУ и EEPROM) также расположена в своем адресном пространстве. Обобщенная карта памяти микроконтроллеров AVR семейства Mega приведена на Рис. 2.12. Обратите внимание на следующее. Поскольку микроконтроллеры AVR имеют 16-битную систему команд, объем памяти программ на рисунке указан не в байтах, а в 16-битных словах. Символ «$» перед числом означает, что это число записано в шестнадцатеричной системе счисления.
102 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Модель ATmega48x ATmega8515x ATmega8535x ATmega8x ATmega88x ATmega16x ATmega162x ATmega164x ATmega165x ATmega168x ATmega32x ATmega324x ATmega325x ATmega3250x ATmega64x ATmega640x ATmega644x ATmega645x ATmega6450x ATmega128x ATmega1280x ATmega1281x ATmega2560x ATmega2561x Память программ (FLASH) Верхняя граница [F_END] $007FF $00FFF $00FFF $00FFF $00FFF S01FFF $01FFF $01FFF $01FFF $01FFF S03FFF S03FFF $03FFF $03FFF $07FFF S07FFF $07FFF $07FFF $07FFF $0FFFF $0FFFF $0FFFF $1FFFF $1FFFF Объем [слов] 2K 4K 4К 4К 4К 8К 8К 8К 8К 8К 16К 16К 16К 16К 32 К 32 К 32 К 32 К 32 К 64 К 64 К 64 К 128 К 128 К Память данных (ОЗУ) 1! $02FF $025F $025F $045F $04FF $045F $04FF/$045F $04FF $04FF $04FF $085F $08PF $08FF $08FF $10FF $21FF $10FF $10FF $10FF $10FF $21 FF $21 FF $21 FF $21 FF Объем [байт] 512 512 512 1 К 1 К 1 К 1 К 1 К 1 К 1 К 2К 2К 2К 2К 4К 8К 4К 4К 4К 4К 8К 8К 8К 8К Кол-во доп регистров ввода/ вывода 160 0 0 0 160 0 160/0 160 160 160 0 160 160 160 160 416 160 160 160 160 416 416 416 416 Внешнее ОЗУ • • • • Память данных I (EEPROM) | Верхняя граница [E_END] $0FF $1FF $1FF $1FF $1FF $1FF $1FF $1FF $1FF $1FF $3FF $3FF $3FF $3FF $7FF $FFF $7FF $7FF $7FF $FFF $FFF $FFF $FFF $FFF Объем [байт] 256 512 512 512 512 512 512 512 512 512 1 К 1 К 1 К 1 К 2К 4К 2К 2К 2К 4К 4К 4К 4К 4К Рис. 2.12. Карта памяти микроконтроллеров семейства Mega
2.2. Организация памяти ¦ 103 2.2.1. Память программ Память программ предназначена для хранения команд, управляющих работой микроконтроллера. Память программ также часто используется для хранения таблиц констант, не меняющихся во время работы программы. Как было сказано выше, память программ представляет собой электрически стираемое ППЗУ (FLASH-ПЗУ). В связи с тем, что длина всех команд кратна одному слову A6 бит), память программ имеет 16-битную организацию. Соответственно, объем памяти микроконтроллеров семейства составляет от 4К Dx1024) до 64К F4x1024) 16-битных слов. В подавляющем большинстве моделей микроконтроллеров семейства Mega память программ логически разделена на две неравные части: область прикладной программы и область загрузчика. В последней может располагаться специальная программа (загрузчик), позволяющая микроконтроллеру самостоятельно управлять загрузкой и выгрузкой прикладных программ. Подробно использование этой области и реализация программы-загрузчика будут рассмотрены в главе 14. Если же возможность самопрограммирования микроконтроллера не используется, прикладная программа может располагаться и в области загрузчика. Для адресации памяти программ используется счетчик команд (Program Counter — PC). Размер счетчика команд составляет от И до 17 бит, в зависимости от объема адресуемой памяти. По адресу $0000 памяти программ находится вектор сброса. После инициализации (сброса) микроконтроллера выполнение программы начинается с этого адреса (по этому адресу должна размещаться команда перехода к инициализационной части программы). Начиная с адреса $001 (модели с памятью программ 8 Кбайт и меньше) или $0002 (остальные модели) памяти программ располагается таблица векторов прерываний. Размер этой области зависит от модели микроконтроллера (подробнее о распределении области векторов прерывания см. раздел 5.2). При возникновении прерывания после сохранения в стеке текущего значения счетчика команд происходит выполнение команды, расположенной по адресу соответствующего вектора. Поэтому по данным адресам располагаются команды перехода к подпрограммам обработки прерываний. В моделях с памятью программ небольшого объема (8 Кбайт и менее) в таблицах векторов прерываний используются команды относительного перехода (RJMP), а в остальных моделях — команды абсолютного перехода (JMP). В большинстве микроконтроллеров семейства Mega положение вектора сброса и/или таблицы векторов прерываний может быть изменено. Они могут располагаться не только в начале памяти программ, как описано выше, но и в начале области загрузчика. Подробнее об этом будет сказано в
104 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega главе 15, в разделе, посвященном самопрограммированию микроконтроллеров семейства. Если в программе прерывания не используются либо таблица векторов прерываний располагается в области загрузчика, то основная программа может начинаться непосредственно с адреса $0001. Как известно, память программ может использоваться не только для хранения кода программы, но также и для хранения различных констант. Для пересылки байта из памяти программ в память данных существуют две специальных команды — LPM и ¦ ELPM (последняя есть только i в моделях, имеющих память программ 128 Кбайт и более). При использовании команды LPM адрес, по которому производится чтение, определяется содержимым индексного регистра Z (см. далее). При этом старшие 15 битов содержимого регистра будут определять адрес слова @...32К), младший бит будет определять, какой из байтов будет прочитан: 0 — младший байт, 1 — старший байт (см. Рис. 2.13, а). Команда ELPM, в отличие от команды LPM, способна адресовать до 16 Мбайт памяти. При использовании этой команды адрес слова будет определяться содержимым регистра ввода/вывода RAMPZ совместно со старшими 15 битами содержимого регистра Z. Младший бит регистра Z будет по-прежнему определять, какой из байтов слова будет прочитан (см. Рис. 2.13, б). Понятно, что количество задействованных битов регистра RAMPZ зависит от объема памяти программ — в моделях с объемом памяти программ 128 Кбайт используется только младший бит RAMPZ0, а в моделях с 256 Кбайт памяти используются уже два младших бита — RAMPZ1 и RAMPZ0. Для обеспечения совместимости с будущими моделями микроконтроллеров при записи значений в регистр RAMPZ незадействованные биты должны быть сброшены в 0. Регистр RAMPZ расположен по адресу $ЗВ ($5В) в основном пространстве регистров ввода/вывода микроконтроллеров ATmegal28x и ATmegal28xx/256xx, а его формат показан на Рис. 2.14. Рис. 2.13. Косвенная адресация памяти программ при использовании команды LPM (а) и команды ELPM (б)
2.2. Организация памяти ¦ 105 Рис. 2.14. Формат регистра RAMPZ В заключение следует отметить, что FLASH-ПЗУ, используемое в микроконтроллерах AVR, рассчитано, как минимум, на 10 000 циклов стирания/записи (типовое значение — 100 000 циклов). 2.2.2. Память данных Память данных микроконтроллеров семейства Mega разделена на три части: регистровая память, оперативная память (статическое ОЗУ) и энергонезависимое ЭСППЗУ (EEPROM). Регистровая память включает 32 регистра общего назначения (РОН), объединенных в файл, и служебные регистры ввода/вывода (РВВ). В сложных моделях с развитой периферией имеется также область дополнительных (extended) регистров ввода/вывода (ДРВВ). Под РВВ в памяти микроконтроллера отводится 64 байта, а под ДРВВ — 160 или 416 байт (в зависимости от модели). В обеих областях регистров ввода/вывода располагаются различные служебные регистры (регистр управления микроконтроллера, регистр состояния и т. п.), а также регистры управления периферийными устройствами, входящими в состав микроконтроллера. Общее количество РВВ и ДРВВ зависит от конкретной модели микроконтроллера. Для хранения переменных помимо регистров общего назначения также используется статическое ОЗУ объемом от 512 байт до 8 Кбайт. Ряд микроконтроллеров семейства, кроме того, имеют возможность подключения внешнего статического ОЗУ объемом до 64 Кбайт. Для долговременного хранения различной информации, которая может изменяться в процессе функционирования готовой системы (калибровочные константы, серийные номера, ключи и т. п.), в микроконтроллерах семейства может использоваться встроенная EEPROM-память. Ее объем составляет для различных моделей от 256 байт до 4 Кбайт. Эта память расположена в отдельном адресном пространстве, а доступ к ней осуществляется с помощью определенных РВВ.
106 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Статическое ОЗУ Прежде всего, следует сказать, что в микроконтроллерах AVR семейства Mega используется линейная организация памяти. Объем статического ОЗУ для различных моделей семейства составляет от 512 байт до 8 Кбайт (см. Табл. 1.1). В адресном пространстве ОЗУ также расположены все регистры микроконтроллеров, под них отведены младшие 96 B56) адресов (см. Рис. 2.15). Остальные адреса отведены под 512/1К/2К/4К...64К ячеек статического ОЗУ Рис. 2.15. Организация статического ОЗУ
2.2. Организация памяти ¦ 107 Регистры общего назначения Все регистры общего назначения объединены в регистровый файл быстрого доступа, структура которого показана на Рис. 2.16. Как было сказано выше, в микроконтроллерах AVR все 32 РОН непосредственно доступны АЛУ, в отличие от 8-битных микроконтроллеров других фирм, в которых имеется только один такой регистр — рабочий регистр W (аккумулятор). Благодаря этому любой РОН может использоваться практически во всех командах и как операнд-источник, и как операнд-приемник. Такое решение (в сочетании с конвейерной обработкой) позволяет АЛУ выполнять одну операцию (извлечение операндов из регистрового файла, выполнение команды и запись результата обратно в регистровый файл) за один такт. Рис. 2.16. Структура регистрового файла Последние 6 регистров файла (R26...R31) могут также объединяться в три 16-битных регистра X, Y и Z (см. Рис. 2.17), используемых в качестве указателей при косвенной адресации памяти данных. Подробно использо-
108 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Рис. 2.17. Регистры-указатели X, Y и Z вание регистров-указателей, или индексных регистров, описано ниже (см. подраздел «Способы адресации памяти данных»). Как показано на Рис. 2.15, каждый регистр файла имеет свой собственный адрес в пространстве памяти данных. Поэтому к ним можно обращаться двумя способами — как к регистрам и как к памяти, несмотря на то, что физически эти регистры не являются ячейками ОЗУ. Такое решение является еще одной отличительной особенностью архитектуры AVR, повышающей эффективность работы микроконтроллера и его производительность. Регистры ввода/вывода Все регистры ввода/вывода условно можно разделить на две группы: служебные регистры микроконтроллера и регистры, относящиеся к конкретным периферийным устройствам (в том числе регистры портов ввода/вывода). Во всех микроконтроллерах AVR регистры ввода/вывода располагаются в так называемом пространстве ввода/вывода размером 64 байта. В большинстве моделей семейства Mega имеется также пространство дополнительных регистров ввода/вывода размером 160 или 416 байт. Введение дополнительных РВВ связано с тем, что для поддержки всех периферийных устройств, имеющихся в этих моделях, обычных 64-х РВВ недостаточно. Распределение адресов пространства ввода/вывода (как основного, так и дополнительного) зависит от конкретной модели микроконтроллера или, если точнее, от состава и возможностей периферийных устройств данной модели. Размещение РВВ в пространстве ввода/вывода для всех моделей семейства приведено в Табл. 2.1...2.11. В таблицах и далее в книге при указании адресов РВВ в скобках указываются соответствующие им адреса ячеек ОЗУ. Соответственно, если адрес регистра указывается только в скобках, этот регистр расположен в пространстве дополнительных РВВ. Если адрес в таблице не указан, это озна-
2.2. Организация памяти ¦ 109 чает, что для данной модели он зарезервирован, и запись по этому адресу запрещена (для совместимости с будущими моделями). Таблица 2.1. Регистры ввода/вывода моделей ATmega8x Название SREG SPH SPL GICR GIFR TIMSK TIFR SPMCR TWCR MCUCR MCUCSR TCCR0 TCNT0 OSCCAL SFIOR TCCR1A TCCR1B TCNT1H TCNT1L OCR1AH OCR1AL OCR1BH OCR1BL ICR1H ICR1L TCCR2 TCNT2 OCR2 ASSR Адрес $3F($5F) $ЗЕ($5Е) $3D($5D) $ЗВ($5В) $ЗА($5А) $39 ($59) $38 ($58) $37 ($57) $36 ($56) $35 ($55) $34($54) $33 ($53) $32 ($52) $31 ($51) $30 ($50) $2F($4F) $2Е ($4Е) $2D($4D) $2С ($4С) $2В ($4В) $2А($4А) $29 ($49) $28 ($48) $27($47) $26 ($46) $25 ($45) $24($44) $23 ($43) $22 ($42) Функция Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Общий регистр управления прерываниями Общий регистр флагов прерываний Регистр маски прерываний от таймеров/счетчиков Регистр флагов прерываний от таймеров/счетчиков Регистр управления и состояния операций записи в память программ Регистр управления TWI Регистр управления микроконтроллера Регистр управления и состояния микроконтроллера Регистр управления таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр калибровки тактового генератора Регистр специальных функций Регистр А управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Регистр управления таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 Регистр совпадения таймера/счетчика Т2 Регистр состояния асинхронного режима
110 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.1. Регистры ввода/вывода моделей ATmega8x (продолжение) Название | WDTCR |UBRRH | UCSRC EEARH EEARL EEDR EECR PORTB DDRB PINB PORTC DDRC PINC PORTD DDRD PIND SPDR SPSR SPCR UDR UCSRA UCSRB UBRRL ACSR ADMUX ADCSRA ADCH ADCL TWDR TWAR TWSR TWBR Адрес $21 ($41) $20($40) $1F($3F) $1Е($ЗЕ) $1D($3D) $1С($ЗС) $18($38) $17($37) $16 ($36) $15 ($35) $14($34) $13 ($33) $12($32) $11 ($31) $10 ($30) $0F($2F) $0Е($2Е) $0D ($2D) $0С ($2С) $0В ($2В) $0А($2А) $09($29) $08($28) $07($27) $06 ($26) $05 ($25) $04 ($24) $03 ($23) $02($22) $01 ($21) $00($20) Функция Регистр управления сторожевого таймера Регистр скорости передачи USART, старший байт Регистр управления и состояния USART Регистр адреса EEPROM, старший байт ] Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных SPI Регистр состояния SPI Регистр управления SPI Регистр данных USART Регистр А управления и состояния USART Регистр В управления и состояния USART Регистр скорости передачи USART, младший байт Регистр управления и состояния аналогового компаратора Регистр управления мультиплексором АЦП Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт Регистр данных TWI Регистр адреса TWI Регистр состояния TWI Регистр скорости передачи TWI J
2.2. Организация памяти ¦ 111 Таблица 2.2. Регистры ввода/вывода моделей ATtaega48x/88x/168x Название UDR0 UBRR0H UBRR0L UCSR0C UCSR0B UCSR0A |TWAMR TWCR TWDR TWAR TWSR TWBR ASSR OCR2B OCR2A TCNT2 TCCR2B TCCR2A OCR1BH OCR1BL OCR1AH OCR1AL ICR1H ICR1L TCNT1H TCNT1L TCCR1C TCCR1B TCCR1A DIDR1 Адрес ($С6) ($С5) ($С4) ($С2) ($С1) ($С0) ($BD) ($ВС) ($ВВ) ($ВА) ($В9) ($В8) ($В6) ($В4) ($ВЗ) ($В2) ($В1) ($В0) ($8В) ($8А) ($89) ($88) ($87) ($86) ($85) ($84) ($82) ($81) ($80) ($7F) Функция Регистр данных USART0 Регистр скорости передачи USART0, старший байт Регистр скорости передачи USART0, младший байт Регистр С управления и состояния USART0 Регистр В управления и состояния USART0 Регистр А управления и состояния USART0 Регистр маски адреса TWI Регистр управления TWI Регистр данных TWI Регистр адреса TWI Регистр состояния TWI Регистр скорости передачи TWI Регистр состояния асинхронного режима Регистр В совпадения таймера/счетчика Т2 Регистр А совпадения таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 Регистр В управления таймера/счетчика Т2 Регистр А управления таймера/счетчика Т2 Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр С управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Регистр А управления таймера/счетчика Т1 Регистр 1 отключения цифровых входов
112 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.2. Регистры ввода/вывода моделей ATmega48x/88x/168x (продолжение) Название DIDR0 ADMUX ADCSRB ADCSRA ADCH ADCL TIMSK2 TIMSK1 TIMSK0 PCMSK2 PCMSK1 PCMSK0 EICRA PCICR OSCCAL PRR CLKPR WDTCSR SREG SPH SPL SPMCSR MCUCR MCUSR SMCR ACSR SPDR Адрес ($7Е) ($7С) ($7В) ($7А) ($79) ($78) ($70) ($6F) ($6Е) ($6D) ($6С) ($6В) ($69) ($68) ($66) ($64) ($61) ($60) $3F($5F) $ЗЕ($5Е) $3D($5D) $37($57) $35 ($55) $34($54) $33 ($53) $30($50) $2Е($4Е) Функция Регистр 0 отключения цифровых входов Регистр управления мультиплексором АЦП Регистр В управления и состояния АЦП Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт Регистр маски прерываний от таймера/счетчика Т2 Регистр маски прерываний от таймера/счетчика Т1 Регистр маски прерываний от таймера/счетчика ТО Регистр маски 2-го прерывания по изменению состояний выводов Регистр маски 1 -го прерывания по изменению состояний выводов Регистр маски 0-го прерывания по изменению состояний выводов Регистр А управления внешними прерываниями Регистр управления прерываниями по изменению состояний выводов Регистр калибровки тактового генератора Регистр снижения потребляемой мощности Регистр предделителя тактового сигнала Регистр управления и состояния сторожевого таймера Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр управления и состояния операций записи в память программ Регистр управления микроконтроллера Регистр состояния микроконтроллера Регистр управления спящим режимом Регистр управления и состояния аналогового компаратора Регистр данных SPI
2.2. Организация памяти ¦ 113 Таблица 2.2. Регистры ввода/вывода моделей AlVnega48x/88x/168x (продолжение) Название SPSR SPCR GPIOR2 GPIOR1 OCR0B OCR0A TCNT0 TCCR0B TCCR0A |GTCCR 1EEARH EEARL EEDR EECR GPIOR0 EIMSK EIFR PCIFR TIFR2 TIFR1 TIFR0 PORTD DDRD PIND PORTC DDRC PINC PORTB DDRB [PINB Адрес $2D ($4D) $2С ($4С) $2В ($4В) $2А($4А) $28($48) $27($47) $26($46) $25($45) $24 ($44) $23 ($43) $22 ($42) $21($41) $20($40) $1F($3F) $1Е($ЗЕ) $1D($3D) $1С($ЗС) $1В($ЗВ) $17 ($37) $16 ($36) $15 ($35) $0В ($2В) $0А ($2А) $09 ($29) $08 ($28) $07 ($27) $06 ($26) $05 ($25) $04 ($24) $03 ($23) Функция Регистр состояния SPI Регистр управления SPI 2-й регистр ввода/вывода общего назначения 1 -й регистр ввода/вывода общего назначения Регистр В совпадения таймера/счетчика ТО Регистр А совпадения таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр В управления таймера/счетчика ТО Регистр А управления таймера/счетчика ТО Общий регистр управления таймеров/счетчиков Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM 0-й регистр ввода/вывода общего назначения Регистр маски внешних прерываний Регистр флагов внешних прерываний Регистр флагов прерываний по изменению состояний выводов Регистр флагов прерываний от таймера/счетчика Т2 Регистр флагов прерываний от таймера/счетчика Т1 Регистр флагов прерываний от таймера/счетчика ТО Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта В Регистр направления данных порта В Выводы порта В
114 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 23. Регистры ввода/вывода моделей ATtnega8515x Название SREG SPH SPL GICR GIFR TIMSK TIFR SPMCR EMCUCR MCUCR MCUCSR TCCR0 TCNT0 OCR0 SFIOR TCCR1A TCCR1B TCNT1H TCNT1L OCR1AH OCR1AL OCR1BH OCR1BL ICR1H ICR1L WDTCR UBRRH UCSRC Адрес $3F($5F) $ЗЕ ($5Е) $3D ($5D) $ЗВ ($5В) $ЗА($5А) $39 ($59) $38 ($58) $37 ($57) $36($56) $35 ($55) $34 ($54) $33($53) $32 ($52) $31 ($51) $30 ($50) $2F($4F) $2Е ($4Е) $2D ($4D) $2С ($4С) $2В ($4В) $2А($4А) $29($49) $28($48) $25($45) $24($44) $21($41) $20($40) Функция Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Общий регистр управления прерываниями Общий регистр флагов прерываний Регистр маски прерываний от таймеров/счетчиков Регистр флагов прерываний от таймеров/счетчиков Регистр управления и состояния операций записи в память программ Дополнительный регистр управления микроконтроллера Регистр управления микроконтроллера Регистр управления и состояния микроконтроллера Регистр управления таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр совпадения таймера/счетчика ТО Регистр специальных функций Регистр А управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Регистр управления сторожевого таймера Регистр скорости передачи USART, старший байт Регистр управления и состояния USART
2.2. Организация памяти ¦ 115 Таблица 2.3. Регистры ввода/вывода моделей ATmega8515x (продолжение) Название EEARH EEARL EEDR EECR PORTA DDRA PINA PORTB DDRB PINB PORTC DDRC PINC PORTD DDRD PIND SPDR SPSR SPCR UDR UCSRA UCSRB UBRRL ACSR PORTE DDRE PINE OSCCAL Адрес $1F($3F) $1E($3E) $1D($3D) $1C($3C) $1B($3B) $1A($3A) $19($39) $18 ($38) $17($37) $16($36) $15($35) $14($34) $13 ($33) $12($32) $11 ($31) $10($30) $0F($2F) $0E ($2E) $0D ($2D) $0C ($2C) $0B($2B) $0A($2A) $09($29) $08($28) $07 ($27) $06 ($26) $05($25) $04($24) Функция Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM Регистр данных порта А Регистр направления данных порта А Выводы порта А Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных SPI Регистр состояния SPI Регистр управления SPI Регистр данных USART Регистр А управления и состояния LSART Регистр В управления и состояния USART Регистр скорости передачи USART, младший байт Регистр управления и состояния аналогового компаратора Регистр данных порта Е Регистр направления данных порта Е Выводы порта Е Регистр калибровки тактового генератора
116 ¦ Глава 2 Архитектура микроконтроллеров семейства Mega Таблица 2.4, Регистры ввода/вывода моделей AIVnega8535x Название SREG SPH SPL OCR0 GICR GIFR TIMSK TIFR SPMCR TWCR MCUCR MCUCSR TCCR0 TCNT0 OSCCAL SFIOR TCCR1A TCCR1B TCNT1H TCNT1L OCR1AH OCR1AL OCR1BH OCR1BL ICR1H | ICR1L | TCCR2 |TCNT2 |OCR2 | ASSR |\VDTCR J UBRRH J UCSRC Адрес $3F($5F) $3E($5E) $3D($5D) $3C ($5C) $3B ($5B) $3A($5A) $39 ($59) $38 ($58) $37 ($57) $36($56) $35($55) $34($54) $33 ($53) $32($52) $31 ($51) $30($50) $2F($4F) $2E ($4E) $2D ($4D) $2C ($4C) $2B ($4B) $2A($4A) $29($49) $28 ($48) $27 ($47) $26($46) $25($45) $24($44) $23 ($43) $22($42) $21($41) $20 ($40) Функция Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр совпадения таймера/счетчика ТО Общий регистр управления прерываниями Общий регистр флагов прерываний Регистр маски прерываний от таймеров/счетчиков Регистр флагов прерываний от таймеров/счетчиков Регистр управления и состояния операций записи в память программ Регистр управления TWI Регистр управления микроконтроллера Регистр управления и состояния микроконтроллера Регистр управления таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр калибровки тактового генератора Регистр специальных функций Регистр А управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Регистр управления таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 Регистр совпадения таймера/счетчика Т2 Регистр состояния асинхронного режима Регистр управления сторожевого таймера Регистр скорости передачи USART, старший байт Регистр управления и состояния USART
2.2. Организация памяти ¦ 117 Таблица 2.4. Регистры ввода/вывода моделей ATtaega8535x (продолжение) Название 1EEARH 1 EEARL |eedr | EECR |PORTA DDRA PINA PORTB DDRB PINB PORTC DDRC PINC PORTD DDRD PIND SPDR SPSR SPCR UDR UCSRA UCSRB UBRRL ACSR ADMUX ADCSRA ADCH ADCL TWDR TWAR TWSR TWBR Адрес $1F($3F) $1E($3E) $1D($3D) $1C($3C) $1B($3B) $1A($3A) $19($39) $18 ($38) $17($37) $16($36) $15($35) $14($34) $13($33) $12 ($32) $11($31) $10($30) $0F ($2F) $0E ($2E) $0D ($2D) $0C ($2C) $0B ($2B) $0A($2A) $09($29) $08 ($28) $07($27) $06($26) $05 ($25) $04($24) $03($23) $02($22) $01($21) $00($20) Функция Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM Регистр данных порта А Регистр направления данных порта А Выводы порта А Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных SPI Регистр состояния SPI Регистр управления SPI Регистр данных USART Регистр А управления и состояния USART Регистр В управления и состояния USART Регистр скорости передачи USART, младший байт Регистр управления и состояния аналогового компаратора Регистр управления мультиплексором АЦП Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт Регистр данных TWI Регистр адреса TWI Регистр состояния TWI Регистр скорости передачи TWI
118 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.5. Регистры ввода/вывода моделей ATmegal6x/32x Название SREG SPH SPL OCR0 GICR GIFR TIMSK TIFR S >MCSR TWCR MCUCR MCUCSR TCCR0 TCNT0 OSCCAL OCDR SFIOR TCCR1A TCCR1B TCNT1H TCNT1L | OCR1AH 1 OCR1AL |0CR1BH |0CR1BL JICR1H 1ICR1L | TCCR2 J TCNT2 |()CR2 |ASSR |WDTCR Адрес $3F($5F) $3E($5E) $3D($5D) $3C ($5C) $3B($5B) $3A($5A) $39($59) $38 ($58) $37 ($57) $36 ($56) $35($55) $34($54) $33 ($53) $32($52) $31 ($51) $30($50) $2F($4F) $2E ($4E) $2D ($4D) $2C ($4C) $2B ($4B) $2A($4A) $29($49) $28($48) $27($47) $26($46) $25($45) $24($44) $23($43) $22($42) $21($41) Функция | Регистр состояния | Указатель стека, старший байт Указатель стека, младший байт Регистр совпадения таймера/счетчика ТО Общий регистр управления прерываниями Общий регистр флагов прерываний Регистр маски прерываний от таймеров/счетчиков Регистр флагов прерываний от таймеров/счетчиков Регистр управления и состояния операций записи в память программ Регистр управления TWI Регистр управления микроконтроллера Регистр управления и состояния микроконтроллера Регистр управления таймера/счетчика ТО Счетный регистр таймера/счетчика ТО 1 Регистр калибровки тактового генератора Регистр внутрисхемной отладки Регистр специальных функций Регистр А управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 1 Счетный регистр таймера/счетчика Т1, старший байт 1 Счетный регистр таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Регистр управления таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 Регистр совпадения таймера/счетчика Т2 Регистр состояния асинхронного режима Регистр управления сторожевого таймера
2.2. Организация памяти ¦ 119 Таблица 2.5. Регистры ввода/вывода моделей ATmegal6x/32x (продолжение) 1 Название |UBRRH | UCSRC 1EEARH |EEARL 1 EEDR | EECR 1 PORTA DDRA PINA PORTB DDRB PINB PORTC DDRC PINC PORTD DDRD PIND SPDR SPSR SPCR UDR UCSRA UCSRB UBRRL ACSR ADMUX ADCSRA ADCH ADCL TWDR TWAR TWSR TWBR Адрес $20 ($40) $1F($3F) $1Е($ЗЕ) $1D($3D) $1С($ЗС) $1В($ЗВ) $1А($ЗА) $19($39) $18 ($38) $17($37) $16($36) $15($35) $14($34) $13($33) $12($32) $11($31) $10($30) $0F($2F) $0Е ($2Е) $0D ($2D) $0С ($2С) $0В ($2В) $0А($2А) $09($29) $08 ($28) $07 ($27) $06($26) $05 ($25) $04 ($24) $03($23) $02 ($22) $01 ($21) $00($20) Функция Регистр скорости передачи USART, старший байт Регистр управления и состояния USART Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM Регистр данных порта А Регистр направления данных порта А Выводы порта А Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных SPI Регистр состояния SPI Регистр управления SPI Регистр данных USART Регистр А управления и состояния USART Регистр В управления и состояния USART Регистр скорости передачи USART, младший байт Регистр управления и состояния аналогового компаратора Регистр управления мультиплексором АЦП Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт 1 Регистр данных АЦП, младший байт Регистр данных TWI Регистр адреса TWI Регистр состояния TWI Регистр скорости передачи TWI
120 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.6. Регистры ввода/вывода моделей ATmegal62x Название TCCR3A TCCR3B TCNT3H TCNT3L ОСЯЗАН OCR3AL OCR3BH OCR3BL ICR3H ICR3L ETIMSK ETIFR PCMSK1 PCMSK0 CLKPR SREG SPH SPL UBRR1H UCSR1C GICR GIFR TIMSK TIFR SPMCR EMCUCR MCUCR MCUCSR TCCR0 TCNT0 Адрес ($8В) ($8А) ($89) ($88) ($87) ($86) ($85) ($84) ($81) ($80) ($7D) ($7С) ($6С) ($6В) ($61) $3F($5F) $ЗЕ($5Е) $3D ($5D) $ЗС ($5С) $ЗВ($5В) $ЗА($5А) $39($59) $38($58) $37 ($57) $36($56) $35 ($55) $34 ($54) $33 ($53) $32 ($52) Функция Регистр А управления таймера/счетчика ТЗ Регистр В управления таймера/счетчика ТЗ Счетный регистр таймера/счетчика ТЗ, старший байт Счетный регистр таймера/счетчика ТЗ, младший байт Регистр А совпадения таймера/счетчика ТЗ, старший байт Регистр А совпадения таймера/счетчика ТЗ, младший байт Регистр В совпадения таймера/счетчика ТЗ, старший байт Регистр В совпадения таймера/счетчика ТЗ, младший байт Регистр захвата таймера/счетчика ТЗ, старший байт Регистр захвата таймера/счетчика ТЗ, младший байт Доп. регистр маски прерываний от таймеров/счетчиков Доп. регистр флагов прерываний от таймеров/счетчиков Регистр маски 1 -го прерывания по изменению сигнала Регистр маски 0-го прерывания по изменению сигнала Регистр предделителя тактового сигнала Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр скорости передачи USART1, старший байт Регистр С управления и состояния USART1 Общий регистр управления прерываниями Общий регистр флагов прерываний Регистр маски прерываний от таймеров/счетчиков Регистр флагов прерываний от таймеров/счетчиков Регистр управления и состояния операций записи в память программ Дополнительный регистр управления микроконтроллера Регистр управления микроконтроллера Регистр управления и состояния микроконтроллера Регистр управления таймера/счетчика ТО Счетный регистр таймера/счетчика ТО
2.2. Организация памяти ¦ 121 Таблица 2.6, Регистры ввода/вывода моделей ATmegal62x (продолжение) Название OCR0 SFIOR TCCR1A TCCR1B TCNT1H TCNT1L OCR1AH OCR1AL OCR1BH OCR1BL TCCR2 ASSR ICR1H ICR1L TCNT2 OCR2 WDTCR UBRR0H UCSR0C EEARH EEARL EEDR EECR PORTA DDRA PINA PORTB DDRB PINB PORTC DDRC Адрес $31 ($51) $30($50) $2F ($4F) $2Е ($4Е) $2D ($4D) $2С ($4С) $2В ($4В) $2А($4А) $29($49) $28($48) $27($47) $26($46) $25 ($45) $24 ($44) $23($43) $22 ($42) $21($41) $20($40) $1F($3F) $1Е($ЗЕ) $1D($3D) $1С($ЗС) $1В($ЗВ) $1А($ЗА) $19($39) $18 ($38) $17($37) $16($36) $15($35) $14 ($34) Функция Регистр совпадения таймера/счетчика ТО Регистр специальных функций Регистр А управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр управления таймера/счетчика Т2 Регистр состояния асинхронного режима Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Счетный регистр таймера/счетчика Т2 Регистр совпадения таймера/счетчика Т2 Регистр управления сторожевого таймера Регистр скорости передачи USART0, старший байт Регистр С управления и состояния USART0 Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM Регистр данных порта А Регистр направления данных порта А Выводы порта А Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта С Регистр направления данных порта С
122 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.6. Регистры ввода/вывода моделей ATmegal62x (продолжение) Название PINC PORTD DDRD PIND iSPDR SPSR SPCR UDR0 UCSR0A UCSR0B UBRR0L ACSR PORTE DDRE PINE OSCCAL OCDR UDR1 UCSR1A UCSR1B UBRR1L Адрес $13 ($33) $12($32) $11($31) $10($30) $0F ($2F) $0E ($2E) $0D ($2D) $0C ($2C) $0B ($2B) $0A($2A) $09($29) $08 ($28) $07($27) $06 ($26) $05 ($25) $04 ($24) $03 ($23) $02($22) $01 ($21) $00 ($20) Функция Выводы порта С Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных SPI Регистр состояния SPI Регистр управления SPI Регистр данных USART0 Регистр А управления и состояния USART0 Регистр В управления и состояния USART0 Регистр скорости передачи USART0, младший байт Регистр управления и состояния аналогового компаратора Регистр данных порта Е Регистр направления данных порта Е Выводы порта Е Регистр калибровки тактового генератора Регистр внутрисхемной отладки Регистр данных USART1 Регистр А управления и состояния USART1 Регистр В управления и состояния USART 1 Регистр скорости передачи USART 1, младший байт Таблица 2.7. Регистры ввода/вывода моделей ATmegal64x/324x/644x Название UDR1 UBRR1H UBRR1L UCSR1C UCSR1B UCSR1A UDR0 Адрес ($СЕ) ($CD) ($СС) ($СА) ($С9) ($С8) ($С6) Функция Регистр данных USART 1 Регистр скорости передачи USART 1, старший байт Регистр скорости передачи USART 1, младший байт Регистр С управления и состояния USART 1 Регистр В управления и состояния USART 1 Регистр А управления и состояния USART 1 Регистр данных USART0
2.2. Организация памяти ¦ 123 Таблица 2.7. Регистры ввода/вывода моделей Altoegal64x/324x/644x (продолжение) Название UBRR0H UBRR0L UCSR0C UCSR0B UCSR0A TWAMR TWCR TWDR TWAR TWSR TWBR ASSR OCR2B OCR2A TCNT2 TCCR2B TCCR2A OCR1BH OCR1BL OCR1AH OCR1AL ICR1H ICR1L TCNT1H TCNT1L TCCR1C TCCR1B TCCR1A DIDR1 DIDR0 ADMUX ADCSRB Адрес ($С5) ($С4) ($С2) ($С1) ($С0) ($BD) ($ВС) ($ВВ) ($ВА) ($В9) ($В8) ($В6) ($В4) ($ВЗ) ($В2) ($В1) ($В0) ($8В) ($8А) ($89) ($88) ($87) ($86) ($85) ($84) ($82) ($81) ($80) ($7F) ($7Е) ($7С) ($7В) Функция Регистр скорости передачи USART0, старший байт Регистр скорости передачи USART0, младший байт Регистр С управления и состояния USART0 Регистр В управления и состояния USART0 Регистр А управления и состояния USART0 Регистр маски адреса TWI Регистр управления TWI Регистр данных TWI Регистр адреса TWI Регистр состояния TWI Регистр скорости передачи TWI Регистр состояния асинхронного режима Регистр В совпадения таймера/счетчика Т2 Регистр А совпадения таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 Регистр В управления таймера/счетчика Т2 Регистр А управления таймера/счетчика Т2 Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр С управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Регистр А управления таймера/счетчика Т1 Регистр 1 отключения цифровых входов Регистр 0 отключения цифровых входов Регистр управления мультиплексором АЦП Регистр В управления и состояния АЦП
124 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2,7. Регистры ввода/вывода моделей Altoegal64x/324x/644x (продолжение) Название ADCSRA ADCH ADCL PCMSK3 TIMSK2 TIMSK1 TIMSK0 PCMSK2 PCMSK1 PCMSK0 EICRA PCICR OSCCAL PRR0 CLKPR WDTCSR SREG SPH SPL RAMPZ SPMCSR 1 MCUCR | MCUSR |SMCR |0CDR |acsr |SPDR |SPSR Адрес ($7A) ($79) ($78) ($73) ($70) ($6F) ($6E) ($6D) ($6C) ($6B) ($69) ($68) ($66) ($64) ($61) ($60) $3F($5F) $3E ($5E) $3D ($5D) $3B ($5B) $37($57) $35 ($55) $34($54) $33 ($53) $31($51) $30($50) $2E ($4E) $2D ($4D) Функция Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт Регистр маски 3-го прерывания по изменению состояний выводов Регистр маски прерываний от таймера/счетчика Т2 Регистр маски прерываний от таймера/счетчика Т1 Регистр маски прерываний от таймера/счетчика ТО Регистр маски 2-го прерывания по изменению состояний выводов Регистр маски 1 -го прерывания по изменению состояний выводов Регистр маски 0-го прерывания по изменению состояний выводов Регистр А управления внешними прерываниями Регистр управления прерываниями по изменению состояний выводов Регистр калибровки тактового генератора 0-й регистр снижения потребляемой мощности Регистр предделителя тактового сигнала Регистр управления и состояния сторожевого таймера Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр выбора страницы Регистр управления и состояния операций записи в память программ Регистр управления микроконтроллера Регистр состояния микроконтроллера Регистр управления спящим режимом Регистр внутрисхемной отладки Регистр управления и состояния аналогового компаратора Регистр данных SPI Регистр состояния SPI
2.2. Организация памяти ¦ 125 Таблица 2.7. Регистры ввода/вывода моделей AThiegal64x/324x/644x (продолжение) Название SPCR GPIOR2 GPIOR1 OCR0B OCR0A TCNT0 TCCR0B TCCR0A GTCCR EEARH EEARL EEDR EECR GPIOR0 EIMSK EIFR PCIFR TIFR2 TIFR1 TIFR0 PORTD DDRD PIND PORTC DDRC PINC PORTB DDRB PINB PORTA DDRA PINA Адрес $2С ($4С) $2В ($4В) $2А($4А) $28($48) $27($47) $26($46) $25($45) $24 ($44) $23($43) $22($42) $21($41) $20($40) $1F($3F) $1Е($ЗЕ) $1D($3D) $1С($ЗС) $1В($ЗВ) $17($37) $16($36) $15($35) $0В ($2В) $0А ($2А) $09($29) $08($28) $07($27) $06 ($26) $05($25) $04 ($24) $03($23) $02 ($22) $01($21) $00($20) Функция Регистр управления SPI 2-й регистр ввода/вывода общего назначения 1 -й регистр ввода/вывода общего назначения Регистр В совпадения таймера/счетчика ТО Регистр А совпадения таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр В управления таймера/счетчика ТО Регистр А управления таймера/счетчика ТО Общий регистр управления таймеров/счетчиков Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM 0-й регистр ввода/вывода общего назначения Регистр маски внешних прерываний Регистр флагов внешних прерываний Регистр флагов прерываний по изменению состояний выводов Регистр флагов прерываний от таймера/счетчика Т2 Регистр флагов прерываний от таймера/счетчика Т1 Регистр флагов прерываний от таймера/счетчика ТО Регистр данных порта D Регистр направления данных порта D Выводы порта D | Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта А Регистр направления данных порта А Выводы порта А
126 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.8. Регистры ввода/вывода моделей ATmegal65x Название UDR UBRRH UBRRL UCSRC UCSRB UCSRA USIDR USISR USICR ASSR OCR2A TCNT2 TCCR2A OCR1BH OCR1BL OCR1AH OCR1AL ICR1H ICR1L TCNT1H TCNT1L TCCR1C TCCR1B TCCR1A DIDR1 DIDR0 ADMUX ADCSRB ADCSRA ADCH ADCL Адрес ($С6) ($С5) ($С4) ($С2) ($С1) ($С0) ($ВА) ($В9) ($В8) ($В6) ($ВЗ) ($В2) ($В0) ($8В) ($8А) ($89) ($88) ($87) ($86) ($85) ($84) ($82) ($81) ($80) ($7F) ($7Е) ($7С) ($7В) ($7А) ($79) ($78) Функция Регистр данных USART0 Регистр скорости передачи USART0, старший байт Регистр скорости передачи USART0, младший байт Регистр С управления и состояния USART0 Регистр В управления и состояния USART0 Регистр А управления и состояния USART0 Регистр данных USI Регистр состояния USI Регистр управления USI Регистр состояния асинхронного режима Регистр А совпадения таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 Регистр А управления таймера/счетчика Т2 Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр С управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Регистр А управления таймера/счетчика Т1 Регистр 1 отключения цифровых входов Регистр 0 отключения цифровых входов Регистр управления мультиплексором АЦП Регистр В управления и состояния АЦП Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт
2.2. Организация памяти ¦ 127 Таблица 2.8. Регистры ввода/вывода моделей ATmegal65x (продолжение) Название TIMSK2 TIMSK1 TIMSK0 PCMSK1 PCMSK0 EICRA OSCCAL PRR CLKPR WDTCR SREG SPH SPL SPMCSR MCUCR MCUSR SMCR OCDR ACSR SPDR SPSR SPCR GPIOR2 GPIOR1 OCR0A TCNT0 TCCR0A GTCCR EEARH Адрес ($70) ($6F) ($6Е) ($6С) ($6В) ($69) ($66) ($64) ($61) ($60) $3F($5F) $ЗЕ ($5Е) $3D ($5D) $37($57) $35($55) $34 ($54) $33($53) $31($51) $30($50) $2Е ($4Е) $2D($4D) $2С ($4С) $2В ($4В) $2А($4А) $27($47) $26($46) $24($44) $23($43) $22($42) Функция Регистр маски прерываний от таймера/счетчика Т2 Регистр маски прерываний от таймера/счетчика Т1 Регистр маски прерываний от таймера/счетчика ТО Регистр маски 1 -го прерывания по изменению состояний выводов Регистр маски 0-го прерывания по изменению состояний выводов Регистр А управления внешними прерываниями Регистр калибровки тактового генератора Регистр снижения потребляемой мощности Регистр предделителя тактового сигнала Регистр управления сторожевого таймера Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр управления и состояния операций записи в память программ Регистр управления микроконтроллера Регистр состояния микроконтроллера Регистр управления спящим режимом Регистр внутрисхемной отладки Регистр управления и состояния аналогового компаратора Регистр данных SPI Регистр состояния SPI Регистр управления SPI 2-й регистр ввода/вывода общего назначения 1 -й регистр ввода/вывода общего назначения Регистр А совпадения таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр А управления таймера/счетчика ТО Общий регистр управления таймеров/счетчиков Регистр адреса EEPROM, старший байт
128 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.8. Регистры ввода/вывода моделей AThiegal65x (продолжение) Название EEARL EEDR EECR GPIOR0 EIMSK EIFR TIFR2 TIFR1 TIFR0 PORTG DDRG PING PORTF DDRF PINF PORTE DDRE PINE PORTD |ddrd PIND PORTC DDRC PINC PORTB [DDRB PINB |PORTA DDRA PINA Адрес $21($41) $20($40) $1F($3F) $1E($3E) $1D($3D) $1C($3C) $17($37) $16 ($36) $15 ($35) $14($34) $13 ($33) $12 ($32) $11 ($31) $10 ($30) $0F($2F) $0E ($2E) $0D ($2D) $0C ($2C) $0B ($2B) $0A ($2A) $09 ($29) $08($28) $07 ($27) $06 ($26) $05 ($25) $04 ($24) $03 ($23) $02($22) $01 ($21) $00 ($20) Функция Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM 0-й регистр ввода/вывода общего назначения Регистр маски внешних прерываний Регистр флагов внешних прерываний Регистр флагов прерываний от таймера/счетчика Т2 Регистр флагов прерываний от таймера/счетчика Т1 Регистр флагов прерываний от таймера/счетчика ТО Регистр данных порта G Регистр направления данных порта G Выводы порта G Регистр данных порта F Регистр направления данных порта F Выводы порта F Регистр данных порта Е Регистр направления данных порта Е Выводы порта Е Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта А Регистр направления данных порта А Выводы порта А
2.2. Организация памяти ¦ 129 Таблица 2.9. Регистры ввода/вывода моделей Altaega325x/645x/3250x/6450x Название | PORTJ | DDRJ 1 PINJ PORTH |ddrh J PINH | UDR0 |UBRR0H | UBRR0L UCSR0C UCSR0B UCSR0A USIDR USISR USICR ASSR OCR2A TCNT2 TCCR2A OCR1BH OCR1BL OCR1AH OCR1AL ICR1H ICR1L TCNT1H TCNT1L TCCR1C TCCR1B TCCR1A DIDR1 DIDR0 ADMUX [ADCSRB Адрес ($DD) ДОС) ($DB) ($DA) ($D9) ($D8) ($C6) ($C5) ($C4) ($C2) ($C1) ($C0) ($BA) ($B9) ($B8) ($B6) ($B3) ($B2) ($B0) ($8B) ($8A) ($89) ($88) ($87) ($86) ($85) ($84) ($82) ($81) ($80) ($7F) ($7E) ($7C) ($7B) Функция Регистр данных порта J Регистр направления данных порта J Выводы порта J Регистр данных порта Н Регистр направления данных порта Н Выводы порта Н Регистр данных USART0 Регистр скорости передачи USART0, старший байт Регистр скорости передачи USART0, младший байт Регистр С управления и состояния USART0 Регистр В управления и состояния USART0 Регистр А управления и состояния USART0 Регистр данных USI Регистр состояния USI I Регистр управления USI Регистр состояния асинхронного режима Регистр А совпадения таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 1 Регистр А управления таймера/счетчика Т2 Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт 1 Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр С управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Регистр А управления таймера/счетчика Т1 1 Регистр 1 отключения цифровых входов 1 Регистр 0 отключения цифровых входов 1 Регистр управления мультиплексором АЦП 1 Регистр В управления и состояния АЦП J
130 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.9. Регистры ввода/вывода моделей ArHiiega325x/645x/3250x/6450x (продолжение) 1 Название |ADCSRA |adch ADCL PCMSK30 TIMSK2 TIMSK1 TIMSK0 PCMSK2» PCMSK1 PCMSK0 EICRA OSCCAL PRR CLKPR WDTCR SREG SPH SPL SPMCSR MCUCR MCUSR SMCR jOCDR ACSR SPDR SPSR SPCR GPIOR2 GPIOR1 OCROA TCNTO Адрес ($7A) ($79) ($78) ($73) ($70) ($6F) ($6E) ($6D) ($6C) ($6B) ($69) ($66) ($64) ($61) ($60) $3F($5F) $3E($5E) $3D($5D) $37 ($57) $35 ($55) $34 ($54) $33 ($53) $31 ($51) $30($50) $2E($4E) $2D ($4D) $2C ($4C) $2B ($4B) $2A ($4A) $27 ($47) $26 ($46) Функция Регистр А управления и состояния АЦП 1 Регистр данных АЦП, старший байт ] Регистр данных АЦП, младший байт | Регистр маски 3-го прерывания по изменению состояний ] выводов Регистр маски прерываний от таймера/счетчика Т2 1 Регистр маски прерываний от таймера/счетчика Т1 ] Регистр маски прерываний от таймера/счетчика ТО j Регистр маски 2-го прерывания по изменению состояний 1 выводов 1 1 Регистр маски 1 -го прерывания по изменению состояний 1 выводов 1 Регистр маски 0-го прерывания по изменению состояний j выводов Регистр А управления внешними прерываниями j Регистр калибровки тактового генератора j Регистр снижения потребляемой мощности j Регистр предделителя тактового сигнала ] Регистр управления сторожевого таймера Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр управления и состояния операций записи в память программ Регистр управления микроконтроллера Регистр состояния микроконтроллера Регистр управления спящим режимом Регистр внутрисхемной отладки Регистр управления и состояния аналогового компаратора Регистр данных SPI Регистр состояния SPI Регистр управления SPI 2-й регистр ввода/вывода общего назначения 1-й регистр ввода/вывода общего назначения Регистр А совпадения таймера/счетчика ТО Счетный регистр таймера/счетчика ТО
2.2. Организация памяти ¦ 131 Таблица 2.9. Регистры ввода/вывода моделей ATmega325x/645x/3250x/6450x (продолжение) Г Название | TCCR0A |GTCCR 1EEARH EEARL EEDR EECR GPIOR0 EIMSK EIFR T1FR2 TIFR1 ТIFR0 PORTG DDRG PING PORTF DDRF PINF PORTE DDRE PINE PORTD DDRD PIND PORTC DDRC PINC PORTB DDRB PINB PORTA DDRA PINA Адрес $24($44) $23($43) $22($42) $21($41) $20($40) $1F($3F) $1E($3E) $1D($3D) $1C($3C) $17 ($37) $16($36) $15($35) $14 ($34) $13($33) $12($32) $11 ($31) $10($30) $0F($2F) $0E ($2E) $0D ($2D) $0C ($2C) $0B ($2B) $0A($2A) $09($29) $08 ($28) $07 ($27) $06 ($26) $05($25) $04($24) $03 ($23) $02($22) $01($21) $00($20) Функция Регистр А управления таймера/счетчика ТО Общий регистр управления таймеров/счетчиков Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM 0-й регистр ввода/вывода общего назначения Регистр маски внешних прерываний Регистр флагов внешних прерываний Регистр флагов прерываний от таймера/счетчика Т2 Регистр флагов прерываний от таймера/счетчика Т1 Регистр флагов прерываний от таймера/счетчика ТО 1 Регистр данных порта G Регистр направления данных порта G 1 Выводы порта G Регистр данных порта F Регистр направления данных порта F Выводы порта F Регистр данных порта Е Регистр направления данных порта Е Выводы порта Е Регистр данных порта D Регистр направления данных порта D 1 Выводы порта D Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта А 1 Регистр направления данных порта А Выводы порта А 1 0 Модели ATmega3250x/6450x. J
132 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.10. Регистры ввода/вывода моделей ATmega64x/128x Название UCSR1C UDR1 UCSR1A UCSR1B jUBRRIL UBRR1H UCSR0C UBRR0H ADCSRB TCCR3C TCCR3A TCCR3B TCNT3H TCNT3L OCR3AH OCR3AL OCR3BH OCR3BL OCR3CH OCR3CL ICR3H ICR3L ETIMSK ETIFR | TCCR1C J OCR1CH | OCR1CL TWCR TWDR |twar Адрес ($9D) ДОС) ($9В) ($9А) ($99) ($98) ($95) ($90) ($8Е) ($8С) ($8В) ($8А) ($89) ($88) ($87) ($86) ($85) ($84) ($83) ($82) ($81) ($80) ($7D) ($7С) ($7А) ($79) ($78) ($74) ($73) ($72) Функция Регистр С управления и состояния USART1 Регистр данных USART1 Регистр А управления и состояния USART1 I Регистр В управления и состояния USART1 I Регистр скорости передачи USART1, младший байт 1 Регистр скорости передачи USART 1, старший байт 1 Регистр С управления и состояния USART0 1 Регистр скорости передачи USART0, старший байт Регистр В управления и состояния АЦП (ATmega64x) Регистр С управления таймера/счетчика ТЗ Регистр А управления таймера/счетчика ТЗ Регистр В управления таймера/счетчика ТЗ 1 Счетный регистр таймера/счетчика ТЗ, старший байт Счетный регистр таймера/счетчика ТЗ, младший байт Регистр А совпадения таймера/счетчика ТЗ, старший байт Регистр А совпадения таймера/счетчика ТЗ, младший байт Регистр В совпадения таймера/счетчика ТЗ, старший байт Регистр В совпадения таймера/счетчика ТЗ 1, младший байт Регистр С совпадения таймера/счетчика ТЗ, старший байт Регистр С совпадения таймера/счетчика ТЗ, младший байт Регистр захвата таймера/счетчика ТЗ, старший байт Регистр захвата таймера/счетчика ТЗ, младший байт Дополнительный регистр маски прерываний от таймеров/счетчиков Дополнительный регистр флагов прерываний от таймеров/счетчиков Регистр С управления таймера/счетчика Т1 Регистр С совпадения таймера/счетчика Т1, старший байт Регистр С совпадения таймера/счетчика Т1, младший байт Регистр управления TWI Регистр данных TWI Регистр адреса TWI
2.2. Организация памяти ¦ 133 Таблица 2.10, Регистры ввода/вывода моделей ATtaega64x/128x (продолжение) 1 Название TWSR TWBR OSCCAL XMCRA XMCRB EICRA SPMCSR PORTG DDRG PING PORTF DDRF SREG SPH SPL XDIV RAMPZ EICRB EIMSK EIFR TIMSK TIFR MCUCR MCUCSR TCCR0 TCNT0 OCR0 ASSR TCCR1A TCCR1B TCNT1H Адрес ($71) ($70) ($6F) ($6D) ($6С) ($6А) ($68) ($65) ($64) ($63) ($62) ($61) $3F($5F) $ЗЕ ($5Е) $3D($5D) $ЗС ($5С) $ЗВ($5ВI) $ЗА($5А) $39($59) $38($58) $37($57) $36($56) $35 ($55) $34($54) $33 ($53) $32 ($52) $31($51) $30($50) $2F($4F) $2Е($4Е) $2D($4D) Функция Регистр состояния TWI Регистр скорости передачи TWI Регистр калибровки тактового генератора Регистр А управления внешней памятью Регистр В управления внешней памятью Регистр А управления внешними прерываниями Регистр управления и состояния операций записи в память программ Регистр данных порта G Регистр направления данных порта G Выводы порта G Регистр данных порта F Регистр направления данных порта F Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр управления делителем тактовой частоты Регистр выбора страницы Регистр В управления внешними прерываниями Регистр маски внешних прерываний Регистр флагов внешних прерываний Регистр маски прерываний от таймеров/счетчиков Регистр флагов прерываний от таймеров/счетчиков Регистр управления микроконтроллера Регистр управления и состояния микроконтроллера Регистр управления таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр совпадения таймера/счетчика ТО Регистр состояния асинхронного режима Регистр А управления таймера/счетчика Т1 Регистр В управления таймера/счетчика Т1 Счетный регистр таймера/счетчика Т1, старший байт
134 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.10. Регистры ввода/вывода моделей ATmega64x/128x (продолжение) Название TCNT1L OCR1AH | OCR1AL OCR1BH OCR1BL ICR1H ICR1L TCCR2 TCNT2 OCR2 OCDR WDTCR SFIOR EEARH EEARL EEDR EECR PORTA DDRA PINA PORTB DDRB [P1NB PORTC DDRC PINC PORTD DDRD PIND SPDR SPSR Адрес $2С ($4С) $2В ($4В) $2А($4А) $29 ($49) $28 ($48) $27 ($47) $26 ($46) $25 ($45) $24 ($44) $23 ($43) $22 ($42) $21 ($41) $20 ($40) $1F($3F) $1Е($ЗЕ) $1D($3D) $1С($ЗС) $1В($ЗВ) $1А($ЗА) $19($39) $18 ($38) $17 ($37) $16 ($36) $15($35) $14 ($34) $13($33) $12($32) $11($31) $10 ($30) $0F($2F) $0Е ($2Е) Функция 1 Счетный регистр таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт J Регистр А совпадения таймера/счетчика Т1, младший байт 1 Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Регистр управления таймера/счетчика Т2 Счетный регистр таймера/счетчика Т2 Регистр совпадения таймера/счетчика Т2 J Регистр внутрисхемной отладки 1 Регистр управления сторожевого таймера Регистр специальных функций Регистр адреса EEPROM, старший байт Регистр адреса EEPROM, младший байт Регистр данных EEPROM Регистр управления EEPROM Регистр данных порта А Регистр направления данных порта А Выводы порта А Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта С Регистр направления данных порта С Выводы порта С Регистр данных порта D Регистр направления данных порта D Выводы порта D Регистр данных SPI Регистр состояния SPI
2.2. Организация памяти ¦ 135 Таблица 2,10. Регистры ввода/вывода моделей ATtoega64x/128x (продолжение) Название SPCR UDR0 UCSR0A UCSR0B UBRR0L ACSR ADMUX ADCSRA ADCH ADCL PORTE DDRE PINE PINF Адрес $0D ($2D) $0С ($2С) $0В ($2В) $0А($2А) $09($29) $08 ($28) $07($27) $06($26) $05($25) $04($24) $03($23) $02 ($22) $01 ($21) $00($20) Функция Регистр управления SPI Регистр данных USART0 Регистр А управления и состояния USART0 Регистр В управления и состояния USART0 Регистр скорости передачи USART0, младший байт Регистр управления и состояния аналогового компаратора Регистр управления мультиплексором АЦП Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт Регистр данных порта Е Регистр направления данных порта Е Выводы порта Е Выводы порта F 1) Только для ATmega 128. Таблица 2.11. Регистры ввода/вывода моделей ATmega640x/1280x/1281x/2560x/2561x Название UDR3 UBRR3H UBRR3L UCSR3C UCSR3B UCSR3A OCR5CH OCR5CL OCR5BH OCR5BL OCR5AH OCR5AL ICR5H ICR5L TCNT5H Адрес ($136) ($135) ($134) ($132) ($i3i) ($130) ($12D) ($12С) ($12В) ($12А) ($129) ($128) ($127) ($126) ($125) Функция Регистр данных USART3 1 Регистр скорости передачи USART3, старший байт Регистр скорости передачи USART3, младший байт Регистр С управления и состояния USART3 Регистр В управления и состояния USART3 Регистр А управления и состояния USART3 Регистр С совпадения таймера/счетчика Т5, старший байт Регистр С совпадения таймера/счетчика Т5, младший байт Регистр В совпадения таймера/счетчика Т5, старший байт Регистр В совпадения таймера/счетчика Т5, младший байт Регистр А совпадения таймера/счетчика Т5, старший байт Регистр А совпадения таймера/счетчика Т5, младший байт Регистр захвата таймера/счетчика Т5, старший байт Регистр захвата таймера/счетчика Т5, младший байт Счетный регистр таймера/счетчика Т5, старший байт J
136 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.11. Регистры ввода/вывода моделей /^е&640х/12Ш/12*1х/2560х/2561х(продалжение) [ Название TCNT5L TCCR5C TCCR5B TCCR5A PORTL DDRL P1NL PORTK DDRK PINK PORTJ DDRJ PINJ PORTH DDRH PINH UDR2 UBRR2H UBRR2L UCSR2C UCSR2B UCSR2A UDR1 UBRR1H UBRR1L UCSR1C UCSR1B UCSR1A UDR0 UBRR0H UBRR0L UCSR0C UCSR0B UCSR0A TWAMR Адрес ($124) ($122) ($121) ($120) ($10В) ($10А) ($109) ($108) ($107) ($106) ($105) ($104) ($103) ($102) ($101) ($100) ($D6) ($D5) ($D4) ($D2) ($D1) ($D0) ($CE) ($CD) ($CC) ($CA) ($C9) ($C8) ($C6) ($C5) ($C4) ($C2) ($C1) ($C0) ($BD) Функция Счетный регистр таймера/счетчика Т5, младший байт Регистр С управления таймера/счетчика Т5 Регистр В управления таймера/счетчика Т5 1 Регистр А управления таймера/счетчика Т5 1 Регистр данных порта L Регистр направления данных порта L 1 Выводы порта L Регистр данных порта К Регистр направления данных порта К 1 Выводы порта К Регистр данных порта J Регистр направления данных порта J Выводы порта J 1 Регистр данных порта Н Регистр направления данных порта Н 1 Выводы порта Н Регистр данных USART2 Регистр скорости передачи USART2, старший байт Регистр скорости передачи USART2, младший байт Регистр С управления и состояния USART2 Регистр В управления и состояния USART2 Регистр А управления и состояния USART2 Регистр данных USART1 Регистр скорости передачи USART1, старший байт 1 Регистр скорости передачи USART1, младший байт Регистр С управления и состояния USART1 J Регистр В управления и состояния USART1 I Регистр А управления и состояния USART1 1 Регистр данных USART0 J Регистр скорости передачи USART0, старший байт 1 Регистр скорости передачи USART0, младший байт J Регистр С управления и состояния USART0 J Регистр В управления и состояния USART0 I Регистр А управления и состояния USART0 J Регистр маски адреса TWI 1
2.2. Организация памяти ¦ 137 Таблица 2.11. Регистры ввода/вывода моделей ATmega640x/m0x/mix/2560x/256lx (продолжение) Название |twcr |twdr TWAR |twsr TWBR ASSR OCR2B OCR2A TCNT2 TCCR2B TCCR2A OCR4CH OCR4CL OCR4BH OCR4BL OCR4AH OCR4AL ICR4H ICR4L TCNT4H TCNT4L TCCR4C TCCR4B TCCR4A OCR3CH OCR3CL OCR3BH OCR3BL OCR3AH OCR3AL ICR3H ICR3L TCNT3H TCNT3L TCCR3C Адрес (SBC) ($BB) ($BA) ($B9) ($B8) ($B6) ($B4) ($B3) ($B2) ($B1) ($B0) (SAD) (SAC) (SAB) (SAA) (SA9) (SA8) (SA7) (SA6) (SA5) (SA4) (SA2) (SA1) (SAO) (S9D) (S9C) (S9B) (S9A) ($99) ($98) ($97) ($96) ($95) ($94) ($92) Функция Регистр управления TWI Регистр данных TWI Регистр адреса TWI Регистр состояния TWI I Регистр скорости передачи TWI Регистр состояния асинхронного режима 1 Регистр В совпадения таймера/счетчика Т2 1 Регистр А совпадения таймера/счетчика Т2 1 Счетный регистр таймера/счетчика Т2 Регистр В управления таймера/счетчика Т2 1 Регистр А управления таймера/счетчика Т2 1 Регистр С совпадения таймера/счетчика Т4, старший байт 1 Регистр С совпадения таймера/счетчика Т4, младший байт 1 Регистр В совпадения таймера/счетчика Т4, старший байт 1 Регистр В совпадения таймера/счетчика Т4, младший байт 1 Регистр А совпадения таймера/счетчика Т4, старший байт 1 Регистр А совпадения таймера/счетчика Т4, младший байт 1 Регистр захвата таймера/счетчика Т4, старший байт Регистр захвата таймера/счетчика Т4, младший байт 1 Счетный регистр таймера/счетчика Т4, старший байт 1 Счетный регистр таймера/счетчика Т4, младший байт Регистр С управления таймера/счетчика Т4 1 Регистр В управления таймера/счетчика Т4 Регистр А управления таймера/счетчика Т4 1 Регистр С совпадения таймера/счетчика ТЗ, старший байт Регистр С совпадения таймера/счетчика ТЗ, младший байт Регистр В совпадения таймера/счетчика ТЗ, старший байт Регистр В совпадения таймера/счетчика ТЗ, младший байт 1 Регистр А совпадения таймера/счетчика ТЗ, старший байт 1 Регистр А совпадения таймера/счетчика ТЗ, младший байт Регистр захвата таймера/счетчика ТЗ, старший байт Регистр захвата таймера/счетчика ТЗ, младший байт Счетный регистр таймера/счетчика ТЗ, старший байт 1 Счетный регистр таймера/счетчика ТЗ, младший байт Регистр С управления таймера/счетчика ТЗ J
138 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.11. Регистры ввода/вывода моделей АТ^е&6Ш/12Ш/т1х/2560х/2561х(продалжение) Название TCCR3B TCCR3A OCR1CH OCR1CL OCR1BH OCR1BL OCR1AH OCR1AL ICR1H ICR1L TCNT1H TCNT1L TCCR1C TCCR1B TCCR1A DIDR1 | DIDR0 DIDR2 ADMUX ADCSRB ADCSRA ADCH ADCL XMCRB (XMCRA TIMSK5 TIMSK4 TIMSK3 TIMSK2 TIMSK1 TIMSK0 PCMSK2 PCMSK1 Адрес ($91) ($90) ($8D) ($8С) ($8В) ($8А) ($89) ($88) ($87) ($86) ($85) ($84) ($82) ($81) ($80) ($7F) ($7Е) ($7D) ($7С) ($7В) ($7А) ($79) ($78) ($75) ($74) ($73) ($72) ($71) ($70) ($6F) ($6Е) ($6D) ($6С) Функция 1 Регистр В управления таймера/счетчика ТЗ 1 Регистр А управления таймера/счетчика ТЗ Регистр С совпадения таймера/счетчика Т1, старший байт Регистр С совпадения таймера/счетчика Т1, младший байт Регистр В совпадения таймера/счетчика Т1, старший байт Регистр В совпадения таймера/счетчика Т1, младший байт Регистр А совпадения таймера/счетчика Т1, старший байт Регистр А совпадения таймера/счетчика Т1, младший байт Регистр захвата таймера/счетчика Т1, старший байт Регистр захвата таймера/счетчика Т1, младший байт Счетный регистр таймера/счетчика Т1, старший байт Счетный регистр таймера/счетчика Т1, младший байт Регистр С управления таймера/счетчика Т1 1 Регистр В управления таймера/счетчика Т1 1 Регистр А управления таймера/счетчика Т1 1 Регистр 1 отключения цифровых входов Регистр 0 отключения цифровых входов Регистр 2 отключения цифровых входов Регистр управления мультиплексором АЦП Регистр В управления и состояния АЦП Регистр А управления и состояния АЦП Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт Регистр В управления внешней памятью 1 Регистр А управления внешней памятью Регистр маски прерываний от таймера/счетчика Т5 Регистр маски прерываний от таймера/счетчика Т4 Регистр маски прерываний от таймера/счетчика ТЗ Регистр маски прерываний от таймера/счетчика Т2 Регистр маски прерываний от таймера/счетчика Т1 Регистр маски прерываний от таймера/счетчика ТО Регистр маски 2-го прерывания по изменению состояний выводов Регистр маски 1 -го прерывания по изменению состояний выводов
2.2. Организация памяти ¦ 139 Таблица 2.11. Регистры ввода/вывода моделей Р^щъШх/ПШ/\Шх/1$Ш/156\х(продолжение) 1 Название PCMSK0 [E1CRB E1CRA PCICR OSCCAL PRR1 PRR0 CLKPR WDTCSR SREG SPH SPL EIND RAMPZ SPMCSR MCUCR MCUSR SMCR OCDR ACSR SPDR SPSR SPCR GPIOR2 GPIOR1 OCR0B OCR0A TCNT0 TCCR0B TCCR0A GTCCR EEARH Адрес ($6В) ($6А) ($69) ($68) ($66) ($65) ($64) ($61) ($60) $3F($5F) $ЗЕ($5Е) $3D ($5D) $ЗС ($5С) $ЗВ($5В) $37($57) $35 ($55) $34($54) $33 ($53) $31($51) $30($50) $2Е ($4Е) $2D ($4D) $2С ($4С) $2В ($4В) $2А($4А) $28($48) $27($47) $26($46) $25($45) $24($44) $23($43) $22($42) Функция Регистр маски 0-го прерывания по изменению состояний выводов Регистр В управления внешними прерываниями Регистр А управления внешними прерываниями Регистр управления прерываниями по изменению состояний выводов Регистр калибровки тактового генератора 1 -й регистр снижения потребляемой мощности 0-й регистр снижения потребляемой мощности Регистр предделителя тактового сигнала Регистр управления и состояния сторожевого таймера Регистр состояния Указатель стека, старший байт Указатель стека, младший байт Регистр расширенной косвенной адресации Регистр выбора страницы Регистр управления и состояния операций записи в память программ Регистр управления микроконтроллера Регистр состояния микроконтроллера 1 Регистр управления спящим режимом Регистр внутрисхемной отладки Регистр управления и состояния аналогового компаратора Регистр данных SPI Регистр состояния SPI Регистр управления SPI 2-й регистр ввода/вывода общего назначения 1 -й регистр ввода/вывода общего назначения Регистр В совпадения таймера/счетчика ТО Регистр А совпадения таймера/счетчика ТО Счетный регистр таймера/счетчика ТО Регистр В управления таймера/счетчика ТО Регистр А управления таймера/счетчика ТО Общий регистр управления таймеров/счетчиков Регистр адреса EEPROM, старший байт I
140 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.11. Регистры ввода/вывода моделей АТте%ь6Ш/12Ш/т1х/2560х/2561х(продолжение) Название EEARL EEDR EECR GPIOR0 EIMSK EIFR PCIFR TIFR5 TIFR4 TIFR3 TIFR2 TIFR1 TIFR0 PORTG DDRG PING PORTF DDRF PINF PORTE DDRE PINE PORTD |ddrd |piND |PORTC |ddrc PINC PORTB |ddrb PINB |PORTA |ddra JPINA Адрес $21($41) $20($40) $1F($3F) $1E($3E) $1D($3D) $1C($3C) $1B($3B) $1A($3A) $19 ($39) $18($38) $17($37) $16($36) $15($35) $14($34) $13 ($33) $12 ($32) $11 ($31) $10 ($30) $0F($2F) $0E ($2E) $0D ($2D) $0C ($2C) $0B ($2B) $0A($2A) $09 ($29) $08 ($28) $07 ($27) $06 ($26) $05($25) $04 ($24) $03 ($23) $02 ($22) $01 ($21) $00 ($20) Функция 1 Регистр адреса EEPROM, младший байт 1 Регистр данных EEPROM 1 Регистр управления EEPROM 0-й регистр ввода/вывода общего назначения 1 Регистр маски внешних прерываний 1 Регистр флагов внешних прерываний Регистр флагов прерываний по изменению состояний 1 выводов Регистр флагов прерываний от таймера/счетчика Т5 Регистр флагов прерываний от таймера/счетчика Т4 1 Регистр флагов прерываний от таймера/счетчика ТЗ 1 Регистр флагов прерываний от таймера/счетчика Т2 Регистр флагов прерываний от таймера/счетчика Т1 Регистр флагов прерываний от таймера/счетчика ТО 1 Регистр данных порта G 1 Регистр направления данных порта G 1 Выводы порта G Регистр данных порта F Регистр направления данных порта F Выводы порта F Регистр данных порта Е 1 Регистр направления данных порта Е 1 Выводы порта Е 1 Регистр данных порта D 1 Регистр направления данных порта D 1 Выводы порта D 1 Регистр данных порта С 1 Регистр направления данных порта С Выводы порта С Регистр данных порта В Регистр направления данных порта В Выводы порта В Регистр данных порта А Регистр направления данных порта А Выводы порта А 1
2.2. Организация памяти ¦ 141 К регистрам ввода/вывода, расположенным в основном пространстве ввода/вывода, можно напрямую обратиться с помощью команд IN и OUT, выполняющих пересылку данных между одним из 32-х РОН и пространством ввода/вывода. В системе команд имеется также четыре команды побитового доступа, использующие в качестве операндов регистры ввода/вывода: команды установки/сброса отдельного бита (SBI и CBI) и команды проверки состояния отдельного бита (SBIS и SBIC). К сожалению, эти команды могут обращаться только к 1-й половине основного пространства ввода/вывода (адреса $00...$IF). Помимо непосредственной адресации (с помощью команд IN и OUT), к РВВ можно обращаться и как к ячейкам ОЗУ с помощью соответствующих команд ST/SD/SDD и LD/LDS/LDD (для дополнительных РВВ этот способ является единственно возможным). В первом случае используются адреса РВВ, принадлежащие основному пространству ввода/вывода ($00...$3F). Во втором случае адрес РВВ необходимо увеличить на $20. Среди РВВ есть один регистр, используемый наиболее часто в процессе выполнения программ. Это регистр состояния SREG. Он располагается по адресу $3F ($5F) и содержит набор флагов, показывающих текущее состояние микроконтроллера. Большинство флагов автоматически устанавливаются в 1 или сбрасываются в 0 при наступлении определенных событий (в соответствии с результатом выполнения команд). Все биты этого регистра доступны как для чтения, так и для записи; после сброса микроконтроллера все биты регистра сбрасываются в 0. Формат этого регистра показан на Рис. 2.18, а его описание приведено в Табл. 2.12. Рис. 2.18. Формат регистра состояния SREG Кроме того, в последних моделях микроконтроллеров семейства появились 3 регистра ввода/вывода общего назначения — GPIOR0, GPIOR1 и GPIOR2. В этих регистрах можно хранить любую информацию, однако основное их назначение — сохранение глобальных переменных и регистра SREG. Регистры GPIOR0...2 располагаются в младшей половине основного пространства ввода/вывода и соответственно могут использоваться в командах побитового доступа SBI/CBI и SBIS/SBIC. Остальные РВВ будут подробно описаны в соответствующих разделах книги.
142 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Таблица 2.12. Биты регистра состояния SREG Бит 7 6 5 4 3 2 1 0 Название I Т Н S V N Z с Описание Общее разрешение прерываний. Для разрешения прерываний этот флаг должен быть установлен в 1. Разрешение/запрещение отдельных прерываний производится установкой или сбросом соответствующих битов регистров масок прерываний (регистров управления прерываниями). Если флаг сброшен, то прерывания запрещены независимо от состояния битов этих регистров. Флаг сбрасывается аппаратно после входа в прерывание и восстанавливается командой RETI для разрешения обработки следующих прерываний Хранение копируемого бита. Этот бит регистра используется в качест ве источника или приемника командами копирования битов BLD (Bit LoaD) и BST (Bit STore). Заданный бит любого РОН может быть скопирован в этот бит командой BST или установлен в соответствии с содержимым данного бита командой BLD Флаг половинного переноса. Этот флаг устанавливается в 1, если произошел перенос из младшей половины байта (из 3-го бита в 4-й) или заем из старшей половины байта при выполнении некоторых арифметических операций Флаг знака. Этот флаг равен результату операции «Исключающее ИЛИ» (XOR) между флагами N (отрицательный результат) и V (переполнение числа в дополнительном коде). Соответственно, этот флаг устанавливается в 1, если результат выполнения арифметической операции меньше нуля Флаг переполнения дополнительного кода. Этот флаг устанавливается в 1 при переполнении разрядной сетки знакового результата. Используется при работе со знаковыми числами (представленными в дополнительном коде). Подробнее — см. описание системы команд Флаг отрицательного значения. Этот флаг устанавливается в 1, если старший бит G-й) результата операции равен 1. В противном случае флаг равен 0 Флаг нуля. Этот флаг устанавливается в 1, если результат выполнения операции равен нулю Флаг переноса. Этот флаг устанавливается в 1, если в результате выполнения операции произошел выход за границы байта Использование внешнего ОЗУ Микроконтроллеры ATmega8515x, ATmegal62x, ATmega64x/128x и ATmega640x/1280x/1281x/2560x/2561x имеют возможность подключения внешнего статического ОЗУ объемом до 64 Кбайт.
2.2. Организация памяти ¦ 143 Выводы микроконтроллеров, используемые для подключения внешнего ОЗУ, сведены в Табл. 2.13. Во всех моделях эти выводы являются линиями портов ввода/вывода общего назначения. При включенном интерфейсе внешнего ОЗУ режим работы этих выводов определяется не содержимым регистров направления передачи данных, а самим микроконтроллером. Таблица 2.13. Выводы, используемые для подключения внешнего ОЗУ Название AD0...AD7 А8...А15 ALE RD WR Altaega8515x, ATmegal62x AItaega64x/128x, ATtaega640x, AItaegal280x/1281x, ATmega2560x/2561x РАО...РА7 (PORTA) PC0...PC7 (PORTC) PE1 PD7 PD6 PG2 PG1 PGO Описание Мультиплексированная ША/ШД Старший байт ША Строб адреса Строб записи Строб чтения Если работа с внешним ОЗУ разрешена, то при обращении по адресу, находящемуся вне границы внутреннего ОЗУ, автоматически происходит обращение к внешнему ОЗУ. После формирования на выводах порта А младшего байта адреса вывод ALE меняет свое состояние с лог. 1 на лог. О и остается в этом состоянии в течение всего цикла чтения/записи. Обращение к внутреннему ОЗУ при разрешенной работе с внешним ОЗУ также может привести к некоторой активности на выводах портов А и С, однако это не влияет на работу схемы, поскольку сигналы стробов чтения (RD) и записи (WR) при этом находятся в неактивном состоянии. При отсутствии обращения к внешней памяти выводы порта А переводятся микроконтроллером в третье состояние. Этого можно избежать, если подключить к выходам порта внутренние подтягивающие резисторы либо установить в 1 бит ХМВК регистра SFIOR (модели ATmega8515x и ATmegal62x) или XMCRB (остальные модели). При установленном бите на выводах порта А всегда сохраняется последнее выведенное значение. Подключение внешнего ОЗУ к микроконтроллеру показано на Рис. 2.19. Как видно из рисунка, для этого дополнительно потребуется регистр-защелка. В качестве такой защелки, как правило, используют микросхему типа 74x573 или аналогичную, в которой защелкивание данных происходит по НИЗКОМУ уровню управляющего сигнала. При высокой
144 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega тактовой частоте (более 8 МГц при Vcc = 4 В и более 4 МГц при Vcc = 2.7 В) рекомендуется использовать быстродействующие микросхемы, такие как SN74AHC573. Рис. 2.19. Подключение внешнего ОЗУ к микроконтроллеру Все микроконтроллеры семейства, допускающие подключение внешнего ОЗУ, имеют следующие возможности по работе с внешней памятью: • управление длительностью цикла обращения к внешней памяти; • разбиение внешней памяти на два сектора с возможностью задания различной длительности цикла обращения для каждого сектора; • управление разрядностью шины адреса; • удержание значений на шине данных для уменьшения потребляемого тока. Для управления описанными возможностями используются два или три регистра (в зависимости от модели), которые перечислены в Табл. 2.14. Таблица 2.14. Регистры для управления внешней памятью Название MCUCR EMCUCR SFIOR MCUCR XMCRA XMCRB XMCRA XMCRB Описание Регистр управления микроконтроллера Дополнительный регистр управления микроконтроллера Регистр специальных функций Регистр управления микроконтроллера Регистр А управления внешней памятью Регистр В управления внешней памятью Регистр А управления внешней памятью Регистр В управления внешней памятью Адрес $35 ($55) $36($56) $30 ($50) $35 ($55) ($6D) ($6С) ($74) ($75) Модель ATmega8515x, ATmegal62x ATmega64x/128x ATmega650, ATmegal280x/1281x, ATmega2560x/2561x
2.2. Организация памяти ¦ 145 Формат регистра MCUCR приведен на Рис. 2.20. Для работы с внешней памятью в нем используются только два бита (см. Табл. 2.15). Рис. 2.20. Формат регистра MCUCR Таблица 2.15. Биты регистра MCUCR при управлении внешней памятью Бит 7 6 Название SRE SRW10 Описание Разрешение работы с внешней памятью. Установка этого бита в 1 разрешает работу с внешней памятью. Установки регистров направления передачи данных для соответствующих выводов (см. Табл. 2.13) при этом игнорируются. При сброшенном бите SRE обращение к внешней памяти запрещено, а выводы используются как линии ввода/вывода общего назначения Выбор числа тактов ожидания (верхний сектор). Этот бит является младшим битом селектора длительности обращения ко второму (верхнему) сектору памяти Рис. 2.21. Формат регистров XMCRA и EMCUCR Формат регистров XMCRA и EMCUCR приведен на Рис. 2.21. В этих регистрах для работы с внешней памятью используются только 6 битов. Однако в регистре EMCUCR два оставшихся бита используются для других целей, а в регистре XMCRA они не используются вообще. Описание
146 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega используемых для управления внешней памятью битов этих регистров приведено в Табл. 2.16 и Табл. 2.17. Обратите внимание на то, что в моделях ATmega640x/128xx/256xx биты SRWxx регистра XMCRA сгруппированы совершенно иначе, нежели в остальных моделях. Таблица 2.16. Биты регистров XMCRA (модели AThiega64x/128x) и EMCUCR Бит 7 6 5 4 3 2 1 0 Название - SRL2 SRL1 SRL0 SRW01 SRW00 SRW11 - Описание Зарезервирован, читается как 0 Задание границ секторов. Значение этих битов определяет положение границы между двумя секторами внешней памяти Выбор числа тактов ожидания (нижний сектор). Эти биты являются селектором длительности обращения к первому (нижнему) сектору внешней памяти Выбор числа тактов ожидания (верхний сектор). Этот бит является старшим битом селектора длительности обращения ко второму (верхнему) сектору памяти (младший бит — в регистре MCUCR) Зарезервирован, читается как 0 Таблица 2.17. Биты регистров XMCRA (модели AIftiega640x/128xx/256xx) Бит 7 6 5 4 3 2 1 0 Название SRE SRL2 SRL1 SRL0 SRW11 SRW10 SRW01 SRW00 Описание Разрешение работы с внешней памятью. Установка этого бита в 1 разрешает работу с внешней памятью. Установки регистров направления передачи данных для соответствующих выводов (см. Табл. 2.13) при этом игнорируются. При сброшенном бите SRE обращение к внешней памяти запрещено, а выводы используются как линии ввода/вывода общего назначения Задание границ секторов. Значение этих битов определяет положение границы между двумя секторами внешней памяти Выбор числа тактов ожидания (верхний сектор). Эти биты являются селектором длительности обращения ко второму (верхнему) сектору внешней памяти Выбор числа тактов ожидания (нижний сектор). Этот бит является старшим битом селектора длительности обращения к первому (нижнему) сектору памяти
2.2. Организация памяти ¦ 147 Формат регистров XMCRB и SFIOR приведен на Рис. 2.22. В этих регистрах для работы с внешней памятью используются только 4 бита. Как и в регистре EMCUCR, в регистре SFIOR остальные биты используются для других целей. Описание используемых для управления внешней памятью битов регистров XMCRB и SFIOR приведено в Табл. 2.18. Рис. 2.22. Формат регистров XMCRB и SFIOR Таблица 2.18. Биты регистров XMCRB и SFIOR Бит XMCRB 7 2 1 0 SFIOR 6 5 4 3 Название хмвк ХММ2 ХММ1 хммо Описание Разрешение удержания значений на шине данных. Если этот бит установлен в 1, то на выводах AD7...AD0 всегда удерживается последнее выведенное значение (даже если микроконтроллер должен перевести их в третье состояние). При сброшенном бите эта функция отключена. Установка бита ХМВК действует, даже если работа с внешней памятью запрещена! Маска старшего байта шины адреса. Содержимое этих битов определяет количество выводов порта С, задействованных под шину адреса. Незадействованные выводы могут использоваться как линии ввода/вывода общего назначения Микроконтроллеры семейства Mega позволяют использовать микросхемы внешнего ОЗУ с различным временем доступа. Подстройка под различные микросхемы осуществляется изменением длительности цикла обращения к внешней памяти. Более того, имеется возможность разбить все адресное пространство внешнего ОЗУ на два сектора, для каждого из которых может быть задана своя длительность цикла обращения. В общем виде конфигурация внешнего ОЗУ, подключенного к микроконтроллеру, показана на Рис. 2.23.
148 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Рис. 2.23. Конфигурация внешнего ОЗУ Положение границы между секторами определяется содержимым битов SRL2...SRL0 согласно Табл. 2.19. По умолчанию эти биты сброшены в О, т. е. вся область памяти состоит из одного сектора. Таблица 2.19. Определение секторов внешней памяти SRL2 0 0 0 0 1 1 1 1 SRL1 0 0 1 1 0 0 1 1 SRL0 0 1 0 1 0 1 0 1 Нижняя граница 1-го сектора ATmega8515x, ATmegal62\, ATmega64x/128x - $1FFF $3FFF $5FFF $7FFF $9FFF $BFFF $DFFF ATmega640x, ATtaegal280x/1281x, ATtaega2560x/2561x - - $3FFF $5FFF $7FFF $9FFF $BFFF $DFFF Изменение длительности цикла обращения к внешней памяти осуществляется заданием дополнительных тактов ожидания с помощью битов
2.2. Организация памяти ¦ 149 SRW01:SRW00 - для первого сектора и SRW11:SRW10 - для второго (Табл. 2.20). Таблица 2.20. Определение числа тактов ожидания SRW/il1* 0 0 1 1 SRWnO1* 0 1 0 1 Такты ожидания Нет тактов ожидания Один такт ожидания во время действия строба чтения/записи Два такта ожидания во время действия строба чтения/записи Два такта ожидания во время действия строба чтения/записи и один такт перед выставлением на шину нового адреса !) п = 0 (нижний) или 1 (верхний) сектор. Временные диаграммы обращения к внешнему ОЗУ при различных установках битов SRWfll:SRWflO приведены на Рис. 2.24. Как уже было сказано, при работе с внешним ОЗУ используется 16-разрядная шина адреса, позволяющая адресовать 64К адресов. Однако для многих приложений не требуется такого большого объема внешней памяти. Специально для таких случаев все микроконтроллеры (за исключением модели ATmegal62x в режиме совместимости с ATmegal61x) позволяют уменьшить разрядность шины адреса. Число выводов порта С, задействованных под шину адреса, определяется содержимым битов ХММ2...ХММ0 в соответствии с Табл. 2.21. Незадействованные выводы могут использоваться как линии ввода/вывода общего назначения. Таблица 2.21. Задание разрядности старшего байта шины адреса ХММ2 0 0 0 0 1 1 1 1 ХММ1 0 0 1 1 0 0 1 1 хммо 0 1 0 1 0 1 0 1 Количество битов, задействованных под шину адреса 8 7 6 5 4 3 2 Старший байт адреса не используется Высвобожденные контакты ввода/вывода Нет РС7 РС7, РС6 РС7...РС5 РС7...РС4 РС7...РСЗ РС7...РС2 Весь порт С
150 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Рис. 2.24. Временные диаграммы обращения к внешнему ОЗУ: SRWaj1:SRWM) = 00 (а); = 01 (б); = 10 (в); = П (г)
2.2. Организация памяти ¦ 151 Как было показано на Рис. 2.23, младшие адреса внешней памяти отображаются на адресное пространство внутреннего ОЗУ, в результате чего часть емкости внешнего ОЗУ остается незадействованной. Тем не менее, имеется возможность полного использования емкости микросхем внешнего ОЗУ. Если объем внешнего ОЗУ меньше 64 Кбайт, то для доступа к младшим адресам внешнего ОЗУ достаточно просто использовать адреса, лежащие вне области физических адресов внешнего ОЗУ. Поскольку старшие биты шины адреса не используются, то при обращении по этим адресам будут адресоваться ячейки внешнего ОЗУ с младшими адресами, начиная с 0x0000. Возьмем, к примеру, микроконтроллер ATmegal28x с внешним ОЗУ объемом 32 Кбайт (см. Рис. 2.25). В этом случае при обращении по адресам 0x8000...0x90FF мы будем в действительности обращаться к ячейкам внешнего ОЗУ с адресами 0x0000...0x1 OFF. Таким образом, в распоряжении прикладной программы окажется линейная область памяти размером 32 Кбайт с адресами 0xll00...0x90FF. Значения этих адресов для других микроконтроллеров можно определить с помощью Рис. 2.12 и Рис. 2.15. Рис. 2.25. Полное использование емкости микросхемы ОЗУ C2 Кбайт) на примере микроконтроллера ATmegal28x Второй способ полного использования емкости микросхем внешнего ОЗУ основан на программном управлении старшими битами адреса. Для выполнения этого «трюка» порт С должен быть настроен на вывод, а в защелке порта должно быть записано $00. При маскировании старших битов
152 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega адреса (с помощью битов ХММ2...ХММ0 регистра XMCRB) на соответствующие выводы порта С будут выставлены нули и произойдет обращение к младшим адресам внешнего ОЗУ, начиная с адреса $0000. Ниже приведены два примера программной реализации описанных действий (для микроконтроллера ATmegal28x). Пример на ассемблере ; Константа OFFSET определена как 0x2000 для гарантированного ; обращения к внешней памяти ldi rl6, OxFF out DDRC, rl6 ; Все выводы порта С - выходы ldi rl6, 0x00 out P0RTC, г1б ; Записали в защелку порта 0x00 ldi rl6, A«ХММ1) I A«ХММ0) out XMCRB, rl6 ; Высвободили биты РС7...5 ldi rl6, OxAA sts OxOOOl+OFFSET, rl6 ; Записали ОхАА по адресу 0x0001 внешней памяти ldi rl6, @«XMM1) I @«XMM0) out XMCRB, rl6 ; Переназначили биты РС7...5 ldi rl6, 0x55 sts OxOOOl+OFFSET, rl6 ; Записали 0x55 по адресу (OFFSET+1) ; внешней памяти Пример на Си #defme OFFSET 0x2000 void XRAM_example(void) { unsigned char *p = (unsigned char *) (OFFSET + 1); DDRC = OxFF; PORTC = 0x00; XMCRB = A«XMM1) I A«XMM0); *p = Oxaa; XMCRB = 0x00; *p = 0x55; } Необходимо помнить, что по сравнению с обращением к внутреннему ОЗУ обращение к внешнему ОЗУ требует, в зависимости от режима, на 1, 2, 3 или 4 такта больше для каждого байта, обрабатываемого командой. Таким образом, время выполнения команд передачи данных (LD, ST, LDS, STS, PUSH и POP) увеличивается на 1, 2, 3 или 4 такта. Если стек расположен во внешнем ОЗУ, то время перехода к обработке прерываний, вызова и возврата из подпрограмм увеличивается на 2, 4, 6, 8, а для моделей ATmega2560x/2561x — на 3, 6, 9 и 12 тактов. Это связано с тем, что во время выполнения указанных операций происходит сохранение или восстановление 16/17-битного счетчика команд и, кроме того, при работе с внешней памятью не используется конвейеризация.
2.2. Организация памяти ¦ 153 Полные временные диаграммы обращения к внешнему ОЗУ с указанием всех параметров сигналов приведены на Рис. 2.26. Значения этих параметров приведены в Табл. 2.22. Примечание. Такты Т5...Т7 присутствуют только при использовании дополнительных тактов ожидания Рис. 2.26. Временные диаграммы обращения к внешнему ОЗУ Таблица 2.22. Динамические параметры сигналов при обращении к внешнему ОЗУ № 0 1 2 За ЗЬ 4 5 Обозначение V'CLCL 'lhll 'avll 'llax_st 'llax_ld 'avllc 'avrl Параметр Тактовая частота Длительность сигнала ALE Время установления сигнала ALE относительно сигналов адреса А[7...0] Время сохранения сигналов адреса А[7...0] после сигнала ALE (команды ST/STD/STS) Время сохранения сигналов адреса А[7...0] после сигнала ALE (команды LD/LDD/LDS) Время установления сигнала ALE относительно сигналов адреса А[ 15...8] Время установления сигнала RD относительно адреса ГСС = 4.5...5.5В min 0 l.OfcLCL-Ю 0.5/clcl-5 5 5 0.5/clcl-5 1.0/cLCL-lO max 16 - - - - - - ГСС = 2.7...5.5В min 0 I.O/clcl-15 0.5/clcl-IO 5 5 0.5fCLcL-10 I.O/clcl-15 max 8 - - - - - - Ед. ИЗМ. МГц НС НС НС НС НС НС
154 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega (продолжение) № 6 7 8 9 10 11 12 13 14 15 16 Обозначение 'avwl 'LLWL 'LLRL 'dvrh 'RLDV 'RHDX 'RLRH /dVWL >WHDX 'DVWH /\VLWH Время установления сигнала WR относительно адреса Время установления сигнала WR относительно сигнала ALE Время установления сигнала RD относительно сигнала ALE Время удержания сигнала RD относительно выходных данных Время выборки данных SRWai = 00 SRW« = 01 SRWa?=10 SRW/7 = 11 Время сохранения выходных данных после сигнала RD Длительность сигнала RD SRW/i = 00 SRW/i = 01 SRWw=10 SRWw=ll Время установления сигнала WR относительно входных данных Время сохранения входных данных после сигнала WR Время удержания сигнала WR относительно входных данных Длительность сигнала WR SRWaj = 00 SRWw = 01 SRW/i = 10 SRW/i=ll SRWw = 00 SRWw = 01 SRWw=10 SRW«=11 SRWw = 00 SRWw = 01 SRW/7 =10 SRW/i=ll ГСС = 4.5...5.5В min 1.0/cLCL-lO 0.5/clcl-15 0.5/cLcl-15 40 - - - - 0 1.0/cLCL-lO 2.0/clcl-IO 3.0/clcl-IO 3.0/clcl-IO 0.5/CLCL-20 1.0/cLCL-lO 1.0/cLCL-lO 1.0/cLCL-lO 2.0/CLcl-10 I.O/CLCL 2.0/clcl 3.0/clcl 3.0/CLCL 1.0/cLCL-lO 2.0/clcl-IO 3.0rCLCL- 10 3.0/clcl-IO max - 0.5/clcl + 5 0.5/cLcl + 5 - I.O/clcl-50 2.0/clcl-50 3.0/CLCL-50 3.0/clcl-50 - - - - - - - - - - - - - - - - - - rCc=s2.7...5.5B min I.O/clcl-15 0.5/clcl-IO 0.5/clcl-IO 45 - - - - 0 I.O/clcl-15 2 0/clcl-15 3-0/CLCL-15 3-0/CLCL-15 0.5/clcl-20 I.O/clcl-15 I.O/clcl-15 l.O/tLLL-15 2.0/CLCL-15 I.O/CLCL 2.0/clcl 3.0/CLCL 3.0/clcl 1.0/cLcl-15 2.0/CLCL-15 3.0/clcl-15 3.0/clcl-15 max - 0.5/clcl + 5 0.5/clcl + 5 - 1.0/CLCL-60 2.0/clcl-60 3.0/CLCL-60 3.0/clcl -60 - - - - - - - - - - - - - - - - - - 1ЁдГ| ИЗМ.1 не НС не I не НС НС НС НС НС НС НС
2.2. Организация памяти ¦ 155 Способы адресации памяти данных Микроконтроллеры AVR семейства Mega поддерживают 8 способов адресации для доступа к различным областям памяти данных (РОН, РВВ, ОЗУ). Вообще говоря, в действительности способов адресации всего два: прямая адресация и косвенная. Однако каждый способ адресации имеет несколько разновидностей в зависимости от того, к какой области памяти производится обращение (при прямой адресации) или какие дополнительные действия выполняются над индексным регистром (при косвенной адресации). На рисунках этого подраздела, а также далее в книге встречается аббревиатура «КОП». Эта аббревиатура обозначает часть (или части) слова команды, содержащую значение кода операции. Прямая адресация При прямой адресации адреса операндов содержатся непосредственно в слове команды. В соответствии со структурой памяти данных существуют следующие разновидности прямой адресации: прямая адресация одного РОН, прямая адресация двух РОН, прямая адресация РВВ, прямая адресация ОЗУ. Прямая адресация одного регистра общего назначения Этот способ адресации используется в командах, оперирующих с одним из регистров общего назначения. При этом адрес регистра-операнда (его номер) содержится в пяти битах слова команды (Рис. 2.27). Положение разрядов d на рисунке показано условно. Рис, 2,27, Прямая адресация одного регистра общего назначения Примером команд, использующих этот способ адресации, являются команды работы со стеком (PUSH, POP), команды инкрементирования (INC), декрементирования (DEC), а также некоторые команды арифметических операций.
156 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Прямая адресация двух регистров общего назначения Этот способ адресации используется в командах, оперирующих одновременно с двумя регистрами общего назначения. При этом адрес регистра-источника содержится в битах 9, 3...0 E битов), а адрес регистра-приемника — в битах 8...4 E битов) слова команды (Рис. 2.28). Положение битов г и d на рисунке показано условно. Рис. 2.28. Прямая адресация двух регистров общего назначения К командам, использующим этот способ адресации, относятся команда пересылки данных из регистра в регистр (MOV), а также большинство команд арифметических операций. Здесь необходимо сделать одно замечание. Дело в том, что некоторые команды, имеющие только один регистр-операнд, тем не менее используют рассматриваемый способ адресации. Просто в этом случае источником и приемником является один и тот же регистр. В качестве примера можно привести команду очистки регистра (CLR Rd), которая в действительности выполняет операцию «Исключающее ИЛИ» регистра с самим собой (EOR Rd, Rd). Прямая адресация регистра ввода/вывода Данный способ адресации используется командами пересылки данных между регистром ввода/вывода, расположенным в основном пространстве ввода/вывода, и регистровым файлом — IN и OUT. В этом случае адрес регистра ввода/вывода содержится в битах 10, 9, 3...0 F битов), а адрес РОН — в битах 8...4 E битов) слова команды (Рис. 2.29). Положение битов r/d и Р на рисунке показано условно.
2.2. Организация памяти ¦ 157 Рис, 2,29. Прямая адресация регистра ввода/вывода Прямая адресация ОЗУ Данный способ используется для обращения ко всему адресному пространству памяти данных. В системе команд микроконтроллеров семейства имеется только две команды, использующие этот способ адресации. Это команды пересылки байта между одним из РОН и ячейкой ОЗУ — LDS и STS. Каждая из этих команд занимает в памяти программ два слова C2 бита). В первом слове содержится код операции и адрес регистра общего назначения (в битах с 8-го по 4-й). Во втором слове находится адрес ячейки памяти, к которой происходит обращение (Рис. 2.30). Рис, 2,30, Прямая адресация ОЗУ Косвенная адресация При косвенной адресации адрес ячейки памяти находится в одном из индексных регистров X, Y, и Z. В зависимости от дополнительных манипуляций, которые производятся над содержимым индексного регистра, различают следующие разновидности косвенной адресации: простая косвенная адресация, относительная косвенная адресация, косвенная адресация с преддекрементом и косвенная адресация с постинкрементом.
158 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Простая косвенная адресация При использовании команд простой косвенной адресации обращение производится к ячейке памяти, адрес которой находится в индексном регистре (Рис. 2.31). Никаких действий с содержимым индексного регистра при этом не производится. Рис. 2.31. Простая косвенная адресация Микроконтроллеры поддерживают 6 команд (по 2 для каждого индексного регистра) простой косвенной адресации: LD Rd,X/Y/z (пересылка байта из ОЗУ в РОН) и ST X/ Y/ z, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды. Относительная косвенная адресация При использовании команд относительной косвенной адресации адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра (Y или Z) и константой, задаваемой в команде. Другими словами, производится обращение по адресу, указанному в команде, относительно адреса, находящегося в индексном регистре. Иллюстрация данного способа адресации приведена на Рис. 2.32. Положение битов п и q на рисунке показано условно. Рис. 2.32. Относительная косвенная адресация
2.2. Организация памяти ¦ 159 Микроконтроллеры семейства Mega поддерживают 4 команды относительной косвенной адресации (две — для регистра Y и две — для регистра Z): LDD Rd, Y+q/Z+q (пересылка байта из ОЗУ в РОН) и ST Y+q/Z+q, Rr (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды, а величина смещения — в битах 13,11,10, 2...0. Поскольку под значение смещения отводится только 6 битов, оно не может превышать 64. Косвенная адресация с предцекрементом При использовании команд косвенной адресации с преддекрементом содержимое индексного регистра сначала уменьшается на 1, а затем производится обращение по полученному адресу (Рис. 2.33). Рис. 2.33. Косвенная адресация с предцекрементом Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с преддекрементом: LD Rd, -X/-Y/-Z (пересылка байта из ОЗУ в РОН) и ST -X/-Y/-Z, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды. Косвенная адресация с постинкрементом При использовании команд косвенной адресации с постинкрементом после обращения по адресу, который находится в индексном регистре, содержимое индексного регистра увеличивается на 1 (Рис. 2.34). Рис. 2.34. Косвенная адресация с постинкрементом
160 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с постинкрементом: LD Rd, X+/Y+/Z+(пересылка байта из ОЗУ в РОН) и ST X+/Y+/Z+, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в битах 8...4 слова команды. 2.2.3. Энергонезависимая память данных (EEPROM) Все микроконтроллеры семейства Mega имеют в своем составе энергонезависимую память (EEPROM-память). Объем этой памяти колеблется от 256 байт в моделях ATmega48x до 4 Кбайт в старших моделях. EEPROM-память расположена в своем адресном пространстве и так же, как и ОЗУ, организована линейно. Доступ к EEPROM Для работы с EEPROM-памятью используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления, адреса которых для разных моделей микроконтроллеров приведены в Табл. 2.23. Таблица 2.23. Регистры EEPROM Название EEARH EEARL EEDR EECR ATmega8515x/8535x, ATmega8x, ATmegal6x/32x, ATmega64x/128x, ATmegal62x $1F($3F) $1E($3E) $1D($3D) $1C($3C) ATmega48x/88x/168x, ATmega164x/324x/644x, ATmegal65x, ATmega325x/645x/3250x/6450x, ATmega640x, ATmegal280x/1281x/2560x/2561x $22($42) $21($41) $20($40) $1F($3F) Назначение Регистр адреса (старший байт) Регистр адреса (младший байт) Регистр данных Регистр управления Регистр адреса EEAR (EEPROM Address Register) физически размещается в двух РВВ — EEARH:EEARL. В этот регистр загружается адрес ячейки, к которой будет производиться обращение. Регистр адреса доступен
2.2. Организация памяти ¦ 161 как для записи, так и для чтения. Причем в регистре EEARH используются только младшие биты (количество задействованных битов зависит от объема EEPROM-памяти). Незадействованные биты регистра EEARH доступны только для чтения и содержат нули. Во время записи в регистр данных EEDR (EEPROM Data Register) заносятся значения, которые будут сохранены в EEPROM по адресу, определяемому регистром EEAR, а во время чтения в этот регистр помещаются данные, считанные из EEPROM. Регистр управления EECR (EEPROM Control Register) используется для управления доступом к EEPROM-памяти. Формат этого регистра показан на Рис. 2.35, а описание его битов для различных моделей приведено в Табл. 2.24. Чтение (R)/3anncb (W) Начальное значение Чтение (R)/3anncb (W) Начальное значение R/W О R/W R/W О О - R 0 7 - - R 0 6 - ЕЕРМ1 R/W 0 5 - ЕЕРМО EERIE ЕЕМРЕ ЕЕРЕ R/W R/W R/W R/W 0 0 0 0 4 3 2 1 - EERIE EEMWE EEWE EERE R/W 0 0 EERE R/W 0 АТтеда48х/88х/168х АТтеда164х/324х/644х АТтеда640х/1280х/2560х Остальные модели Рис. 2.35. Формат регистра EECR Таблица 2.24. Биты регистра EECR Бит 7...6 5,4 Название - ЕЕРМ1, ЕЕРМО - Описание Зарезервированы, читаются как 0 Выбор режима программирования. Эти биты определяют операцию, которая будет выполнена после записи 1 вби! ЕЕРЕ. При установленном бите ЕЕРЕ запись в биты ЕЕРМ1:0 игнорируется. ЕЕРМ1 0 0 1 1 ЕЕРМО 0 1 0 1 1 Длительность 3.4 мс 1.8 мс 1.8 мс - Операция Стирание + запись (атомарная операция) Только стирание Только запись Зарезервировано Зарезервированы, читаются как 0 Модель Все модели ATmega48x/88x/168x, ATmega 164x/324x/644x, ATmega640x/1280x/1281x, ATmega 2560x/2561x Остальные модели
162 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega (продолжение) Бит 3 2 1 0 Название EERIE ЕЕМРЕ EEMWE ЕЕРЕ EEWE EERE Описание Разрешение прерывания от EEPROM. Этот бит управляет генерацией прерывания, возникающего при завершении цикла программирования EEPROM. Если бит установлен в 1, прерывания разрешены (если флаг I регистра SREG также установлен в 1). При сброшенном бите ЕЕРЕ (см. далее в таблице) прерывание генерируется постоянно Управление разрешением записи в EEPROM. Состояние этого бита определяет функционирование флага разрешения записи ЕЕРЕ (EEWE). Если данный бит установлен в 1, то при записи 1 в бит ЕЕРЕ (EEWE) происходит запись данных в EEPROM. В противном случае установка ЕЕРЕ (EEWE) в 1 не производит никакого эффекта. После установки бит ЕЕМРЕ (EEMWE) сбрасывается аппаратно через 4 такта Разрешение записи в EEPROM. При установке этого бита в 1 происходит запись данных в EEPROM (если ЕЕМРЕ (EEMWE) равен 1) Разрешение чтения из EEPROM. После установки этого бита в 1 выполняется чтение данных из EEPROM. По окончании чтения этот бит сбрасывается аппаратно Модель Все модели ATmega48x/88x/168x, ATmega 164x/324x/644x, ATmega640x/1280x/1281x, ATmega2560x/2561x Остальные модели ATmega48x/88x/168x, ATmega 164х/324х/644х, ATmega640x/1280x/1281x, ATmega2560x/2561x Остальные модели Все модели Итак, процедура записи одного байта в EEPROM-память состоит из следующих этапов: 1. Дождаться готовности EEPROM к записи данных (ждать, пока не сбросится флаг EEWE (ЕЕРЕ) регистра EECR). 2. Дождаться завершения записи в FLASH-память программ. 3. Загрузить байт данных в регистр EEDR, а требуемый адрес — в регистр EEAR (при необходимости). 4. Установить в 1 флаг EEMWE (ЕЕМРЕ) регистра EECR. 5. В течение 4 тактов после установки флага EEMWE (ЕЕМРЕ) записать в бит EEWE (ЕЕРЕ) регистра EECR лог. 1. После установки этого бита процессор пропускает 2 такта перед выполнением следующей инструкции. Второй пункт введен из-за того, что запись в EEPROM не может выполняться одновременно с записью в FLASH-память. Поэтому перед выполнением записи в EEPROM следует убедиться, что программирование FLASH-памяти завершено. Если загрузчик в программе отсутствует,
2.2. Организация памяти ¦ 163 т. е. микроконтроллер никогда не изменяет содержимое памяти программ, второй шаг может быть пропущен. Процесс обращения к EEPROM-памяти контролируется внутренним калиброванным RC-генератором. Соответственно длительность цикла записи зависит от частоты этого генератора, величины напряжения питания и температуры. Типовое значение длительности этого цикла составляет 3.4 мс для моделей ATmega48x/88x/168x, ATmegal64x/324x/644x, ATmega640x/1280x/1281x/2560x/2561x и 8.5 мс — для остальных моделей. По окончании цикла записи бит EEWE (ЕЕРЕ) аппаратно сбрасывается, после чего программа может начать запись следующего байта. При записи в EEPROM могут возникнуть некоторые проблемы, вызванные прерываниями: 1. При возникновении прерывания между 4-м и 5-м этапом описанной последовательности запись в EEPROM будет сорвана, так как за время обработки прерывания флаг EEMWE сбросится в 0. 2. Если в подпрограмме обработки прерывания, возникшего во время записи в EEPROM-память, также происходит обращение к ней, то будет изменено содержимое регистров адреса и данных EEPROM. В результате первая запись (прерванная) будет сорвана. Во избежание описанных проблем настоятельно рекомендуется запрещать все прерывания (сбрасывать бит I регистра SREG) на время выполнения пунктов 2...5 описанной выше последовательности. Ниже приведены два примера реализации функции записи в EEPROM-память (управление прерываниями не производится). Пример на ассемблере EEPROM_write: sbic EECR,EEWE ; Ждать завершения предыдущей записи rjmp EEPROM_write out EEARH,rl8 out EEARL,rl7 ; Занести адрес (rl8:rl7) в регистр адреса out EEDP,rl6 ; Записать данные (г16) в регистр данных sbi EECR,EEMWE ; Установить флаг EEMWE sbi EECR,EEWE ; Начать запись в EEPROM ret Пример на Си void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { while(EECR & A<<EEWE)); /* Ждать завершения предыдущей записи */ EEAR = uiAddress; /* Проинициализировать регистры */ EEDR = ucData; EECR 1= A«EEMWE); /* Установить флаг EEMWE */ EECR 1= A«EEWE); /* Начать запись в EEPROM */ }
164 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Перед выполнением операции чтения также необходимо проконтролировать состояние флага EEWE. Дело в том, что, пока выполняется операция записи в EEPROM (флаг EEWE установлен), нельзя ни выполнять чтение EEPROM-памяти, ни изменять регистр адреса. После загрузки требуемого адреса в регистр EEAR необходимо установить в 1 бит EERE регистра EECR. Когда запрошенные данные будут помещены в регистр данных EEDR, произойдет аппаратный сброс этого бита. Однако следить за состоянием бита EERE для определения момента завершения операции чтения не требуется, так как операция чтения из EEPROM всегда выполняется за один такт. Кроме того, после установки бита EERE в 1 процессор пропускает 4 такта перед началом выполнения следующей инструкции. С учетом сказанного функция чтения из EEPROM может быть реализована следующим образом: Пример на ассемблере EEPROM_read: sbic EECR,EEWE ; Ждать завершения предыдущей записи rjmp EEPROM_read out EEARH,rl8 out EEARL,rl7 ; Занести адрес (rl8:rl7) в регистр адреса sbi EECR,EERE ; Начать чтение in г16,EEDR ; Сохранить данные ret Пример на Си unsigned char EEPROM_write(unsigned int uiAddress) { while(EECR & A«EEWE)); /* Ждать завершения предыдущей записи */ EEAR = uiAddress; /* Проинициализировать регистр адреса */ EECR 1= A«EERE); /* Выполнить чтение */ return EEDR; } Меры предосторожности К сожалению, у EEPROM-памяти есть один недостаток: при снижении напряжения питания хранящиеся в ней данные могут быть повреждены. Это может произойти по двум причинам: 1. Если напряжение питания ниже некоторой величины, запись в EEPROM будет произведена некорректно. 2. Микроконтроллер сам может выполнять команды некорректно, если напряжение питания будет ниже нормы.
2.3. Счетчик команд и выполнение программы ¦ 165 Чтобы избежать повреждения данных, хранящихся в EEPROM, достаточно воспользоваться одним из трех следующих решений: 1. Удерживать микроконтроллер в состоянии сброса все время, пока напряжение питания находится ниже нормы. Для этого следует использовать встроенный детектор пониженного напряжения питания (Brown-Out Detector — BOD). Более подробно о нем будет рассказано в подразделе 4.4.4. 2. Удерживать микроконтроллер в «спящем» режиме (Power Down), пока напряжение питания находится ниже нормы. Поскольку в этом режиме микроконтроллер не может выполнять никаких команд, такое решение эффективно защищает служебные регистры EEPROM от непреднамеренной записи. 3. Хранить константы в FLASH-памяти программ, если они не должны меняться во время работы программы. Микроконтроллер не может самостоятельно производить запись в FLASH-память, соответственно при понижении напряжения питания ее содержимое не будет повреждено. 2.3. Счетчик команд и выполнение программы 2.3.1. Счетчик команд Счетчик команд представляет собой регистр, в котором содержится адрес следующей исполняемой команды. Напрямую из программы он не доступен. Размер счетчика команд зависит от объема имеющейся памяти программ и составляет от 11 (ATmega48x) до 17 (ATmega2560x/2561x) битов. При нормальном выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или на 2 (в зависимости от выполняемой команды) в каждом такте. Этот порядок нарушается при выполнении команд перехода, вызова и возврата из подпрограмм, а также при возникновении прерываний. После включения питания, а также после сброса микроконтроллера в счетчик программ автоматически загружается стартовый адрес ($0000 или начальный адрес сектора загрузчика). Как правило, по этому адресу располагается команда безусловного перехода к инициализационной части программы. При возникновении прерывания в счетчик команд загружается адрес соответствующего вектора прерывания. Если прерывания используются в программе, то по адресам векторов прерываний должны размещаться команды перехода к подпрограммам обработки прерываний.
166 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega 2.3.2. Функционирование конвейера Как и во всех микроконтроллерах AVR, в микроконтроллерах семейства Mega используется конвейерная обработка команд. Функционирование конвейера показано на Рис. 2.36. Рис, 2.36. Последовательность выполнения команд в конвейере Во время первого такта происходит выборка команды из памяти программ и ее декодирование. Во время второго такта эта команда выполняется, а параллельно происходит выборка и декодирование второй команды и т. д. В результате фактическое время выполнения каждой команды получается равным одному периоду тактового сигнала микроконтроллера. Однако в действительности при отработке ряда команд происходит нарушение нормального функционирования конвейера. Наиболее ярким примером команд, вызывающих подобное нарушение, являются команды условного перехода, а также команды типа Test & Skip (проверка и пропуск следующей команды, если результат проверки положительный). В случае истинности условия, проверяемого командой условного перехода, выполнение программы должно будет продолжиться с некоторого адреса. А поскольку в конвейере уже произошла выборка команды, расположенной за командой перехода, время выполнения команды перехода увеличивается на один такт, во время которого происходит выборка команды, расположенной по требуемому адресу. Во втором случае, при выполнении команд типа Test & Skip следующая команда не выполняется в случае истинности проверяемого условия. Однако выборка пропускаемой команды уже произошла. Вследствие того, что команда не выполняется, в конвейере образуется «дырка», которая заключается в пропуске одного (или двух, в зависимости от пропускаемой команды) тактов. Соответственно, команды типа Test & Skip выполняются за один такт, если результат проверки условия отрицателен, и за два или три такта, если он положителен.
2.3. Счетчик команд и выполнение программы ¦ 167 Очевидно, что в результате выполнения любой команды, изменяющей содержимое счетчика команд (команды перехода, вызова и возврата из подпрограмм), также возникает «разрыв» в работе конвейера, вследствие чего происходит задержка выполнения программы на несколько тактов. Длительность задержки составляет от двух до четырех тактов в зависимости от команды. Для получения более подробной информации обратитесь к описанию команд, приведенному в главе 3. 2.3.3. Команды типа «проверка/пропуск» (Test & Skip) В командах этого типа производится проверка условия, результат которой влияет на выполнение следующей команды. Если условие истинно, следующая команда игнорируется. Например, команда SBRS Rd, b проверяет бит b регистра Rd и игнорирует следующую команду, если этот бит равен 1. При истинности проверяемого условия в конвейере возникает задержка, связанная с необходимостью загрузки и декодирования новой команды. Длительность задержки зависит от размера пропускаемой команды и составляет от одного до трех тактов. 2.3.4. Команды условного перехода В этих командах производится проверка условия, результат которой влияет на состояние счетчика команд. Если условие истинно, происходит переход по заданному адресу. Если же условие ложно, выполняется следующая команда. Команды условного перехода имеют ограничение по области действия. В действительности новое значение счетчика команд получается прибавлением к нему или вычитанием из него некоторого смещения. А поскольку под значение смещения в слове команды отводится всего 7 битов, максимальная величина перехода составляет от -63 до +64 слов. Так как переход по заданному адресу осуществляется загрузкой нового значения в счетчик команд, то в случае истинности проверяемого условия в конвейере возникает задержка длительностью в один такт. 2.3.5. Команды безусловного перехода Все рассматриваемые в книге микроконтроллеры семейства Mega имеют три команды безусловного перехода: команду относительного перехода RJMP, команду абсолютного перехода JMP, а также команду косвенного перехода UMP. В моделях ATmega2560x/2561x, ко всему прочему, есть еще одна команда — команда расширенного косвенного перехода El JMP.
168 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega Относительный переход — команда rjmp При выполнении команды относительного перехода содержимое счетчика команд изменяется прибавлением к нему или вычитанием из него некоторого значения, являющегося операндом команды, как показано на Рис. 2.37. Поскольку под значение операнда в слове команды отводится всего 11 битов, с помощью этой команды можно переходить только в пределах -2047...+2048 слов. Рис. 2.37. Относительная адресация памяти программ В программах в качестве операндов этой команды вместо констант используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды. Поскольку команда относительного перехода изменяет содержимое счетчика команд, она выполняется за 2 такта. Абсолютный переход — команда jmp При выполнении команды абсолютного перехода в счетчик команд просто загружается значение нового адреса, являющееся операндом команды (Рис. 2.38). Поскольку максимальное значение адреса равны S3FFFFF, то с помощью этой команды можно осуществлять переход в пределах всего адресного пространства имеющихся на сегодняшний день микроконтроллеров AYR. Рис. 2.38. Абсолютная адресация памяти программ Команда абсолютного перехода выполняется за 3 такта. Дополнительный (по сравнению с командой относительного перехода) такт связан с большей длиной кода команды B слова).
2.3. Счетчик команд и выполнение программы ¦ 169 Косвенный переход — команды ijmp и ei jmp При выполнении первой команды осуществляется переход по адресу, который находится в индексном регистре Z. Соответственно, процесс выполнения команды сводится к загрузке содержимого индексного регистра в счетчик команд (Рис. 2.39, а). Так как индексный регистр — 16-битный, то максимально возможная величина перехода составляет 128 Кбайт (в моделях с объемом памяти программ более 128 Кбайт старшие биты счетчика команд обнуляются). В микроконтроллерах ATmega2560x/2561x появилась команда расширенного косвенного перехода — El JMP. Эта команда осуществляет переход по адресу, младшие 16 битов которого находятся в индексном регистре Z, а старшие биты — в специальном РВВ EIND, расположенном по адресу $ЗС ($5С). Соответственно, при выполнении команды происходит копирование содержимого регистра Z и регистра ввода/вывода EIND в счетчик команд (Рис. 2.39, б). Рис. 2.39. Косвенная адресация памяти программ: а — команда ымр, б — команда EIJMP Как и команда относительного перехода, команды косвенного перехода выполняются за 2 такта. 2.3.6. Команды вызова подпрограмм Как и для реализации безусловных переходов, для вызова подпрограмм в микроконтроллерах семейства Mega имеются три команды: команда относительного вызова RCALL, команда абсолютного вызова CALL и команда косвенного вызова ICALL. А в моделях ATmega2560x/2561x есть еще одна
170 ¦ Глава 2. Архитектура микроконтроллеров семейства Mega команда — команда расширенного косвенного вызова EICALL. Если не принимать во внимание некоторые отличия, описанные ниже, эти команды работают так же, как и соответствующие команды безусловного перехода. Относительный вызов подпрограммы — команда rcall Сначала команда RCALL сохраняет в стеке адрес возврата — текущее значение счетчика команд, увеличенное на 1. Затем содержимое счетчика команд увеличивается или уменьшается на некоторое значение, являющееся операндом команды (см. Рис. 2.37). Поскольку операнд представляет собой 12-битное число, максимальная величина перехода составляет от -2047 до +2048 слов (±4 Кбайт). В программах в качестве операндов этой команды, как и в случае команды RJMP, используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды. Во всех моделях, кроме ATmega2560x/2561x, команда относительного вызова подпрограмм выполняется за 3 такта, два из которых затрачиваются на сохранение в стеке двухбайтного счетчика команд. В моделях же ATmega2560x/2561x эта команда выполняется за 4 такта, поскольку счетчик команд — трехбайтный. Абсолютный вызов подпрограммы — команда call При выполнении команды после сохранения в стеке адреса возврата в счетчик команд загружается число, являющееся операндом команды (см. Рис. 2.38). С помощью этой команды можно осуществлять вызов в пределах всего адресного пространства имеющихся на сегодняшний день микроконтроллеров AVR. Команда абсолютного вызова подпрограмм выполняется за 4 такта (в моделях ATmega2560x/2561x — за 5). Косвенный вызов подпрограммы — команды icall и eicall Команда ICALL сначала сохраняет в стеке адрес возврата. Затем в счетчик команд загружается содержимое индексного регистра (Рис. 2.39, а). Так как индексный регистр — 16-битный, то максимально возможная величина перехода составляет 128 Кбайт (в моделях с объемом памяти программ более 128 Кбайт старшие биты счетчика команд обнуляются). В микроконтроллерах ATmega2560x/2561x появилась команда расширенного косвенного вызова подпрограмм — EICALL. Эта команда после сохранения в стеке адреса возврата копирует в счетчик команд содержимое регистра Z и регистра ввода/вывода EIND (Рис. 2.39, б) Во всех моделях, кроме ATmega2560x/2561x, команда ICALL выполняется за 3 такта. В моделях ATmega2560x/2561x обе команды — ICALL и EICALL - выполняются за 4 такта.
2.4. Стек ш 171 2.3.7. Команды возврата из подпрограмм В конце каждой подпрограммы обязательно должна находиться команда возврата из нее. В системе команд микроконтроллеров семейства имеется две таких команды. Для возврата из обычной подпрограммы, вызываемой командами вызова подпрограмм, используется команда RET. Для возврата из подпрограммы обработки прерывания используется команда RETI. Обе команды восстанавливают из стека содержимое счетчика команд, сохраненное там перед переходом к подпрограмме. Команда возврата из подпрограммы RETI дополнительно устанавливает в 1 флаг общего разрешения прерываний I регистра SREG, сбрасываемый аппаратно при возникновении прерывания. На выполнение каждой из команд возврата из подпрограммы требуется 4 или 5 (в моделях ATmega2560x/2561x) тактов. 2.4. Стек Во всех микроконтроллерах семейства Mega стек реализован программно. Он размещается в памяти данных, и его глубина определяется только размером свободной области памяти данных. В качестве указателя стека во всех моделях используется пара регистров ввода/вывода SPH:SPL, расположенных по адресам $ЗЕ ($5Е) и $3D ($5D) соответственно. Так как после подачи напряжения питания (или после сброса) в регистрах содержится нулевое значение, в самом начале программы указатель стека необходимо проинициализировать, записав в него значение верхнего адреса памяти данных. Обычно это делается следующим образом: ldi rl6,low(RAMEND) ; Загрузим в рабочий регистр младший байт ; значения out SPL,rl6 ; Инициализируем указатель стека ldi rl6,high(RAMEND) ; Загрузим в рабочий регистр старший байт ; значения out SPH,rI6 ; Инициализируем указатель стека При вызове подпрограмм адрес команды, расположенной за командой вызова, сохраняется в стеке. Значение указателя стека при этом уменьшается на 2 или 3, в зависимости от размера счетчика команд. При возврате из подпрограммы этот адрес извлекается из стека и загружается в счетчик команд. Значение указателя стека соответственно увеличивается на 2 C). То же происходит и во время прерывания. При генерации прерывания адрес следующей команды сохраняется в стеке, а при возврате из подпрограммы обработки прерывания он восстанавливается из стека. Во всех моделях микроконтроллеров семейства Mega стек доступен программно. Для работы со стеком имеются две команды: команда занесения в стек (PUSH) и команда извлечения из стека (POP).
ГЛАВА 3 Система команд 3.1. Общие сведения Система команд микроконтроллеров AVR семейства Mega весьма развита и насчитывает в различных моделях от 130 до 135 различных инструкций. Несмотря на то что микроконтроллеры AVR являются микроконтроллерами с RISC-архитектурой (процессор с сокращенным набором команд), по количеству реализованных инструкций и их разнообразию они больше похожи на микроконтроллеры с CISC-архитектурой (процессор с полным набором команд). Практически каждая из команд (за исключением команд, у которых одним из операндов является 16-битный адрес) занимает одну ячейку памяти программ. Причем это достигнуто не за счет сокращения числа команд процессора, а за счет увеличения разрядности памяти программ. 3.2. Операнды Программа для любого микроконтроллера представляет собой последовательность команд, записанных в памяти программ. Большинство команд при выполнении изменяют содержимое одного или нескольких регистров общего назначения, регистров ввода/вывода или ячеек ОЗУ. Для обращения к различным областям адресного пространства памяти данных используются различные команды, реализующие, в свою очередь, различные способы адресации. Подробно способы адресации памяти данных были рассмотрены в главе 2. Доступ к регистрам ввода/вывода осуществляется по их адресам, являющихся операндами команды. Однако при написании программ гораздо удобнее обращаться к регистрам, используя вместо числовых значений адресов их стандартные, принятые в документации символические имена. Чтобы задать соответствие этих имен реальным адресам, необходимо подключить в начале программы (при помощи директивы ассемблера . INCLUDE) файл определения адресов регистров ввода/вывода. Помимо всего прочего, такое решение облегчит перенос программного обеспечения с одного типа кристалла на другой.
3.2. Операнды ¦ 173 Эти файлы (для каждой модели микроконтроллеров семейства) свободно распространяются фирмой Atmel вместе с документацией на микроконтроллеры (в частности, включаемые файлы для всех выпускаемых микроконтроллеров AVR входят в комплект бесплатно распространяемой интегрированной среды AVRStudio). Для РОН, используемых в индексных регистрах, в этих файлах определяются также дополнительные символические имена (Табл. 3.1). Таблица 3.1. Дополнительные символические имена индексных регистров Регистр R26 R27 R28 R29 R30 R31 Символическое имя XL хн YL YH ZL ZH Названия этих включаемых файлов унифицированы и определяются следующим образом: <номер_модели>с1е?. inc Например, программа для микроконтроллера ATmegal28x должна содержать следующую директиву ассемблера: .include "ml28def.inc", Необходимо только помнить, что если для обращения к регистру ввода/вывода используются команды обмена с ОЗУ, то к символическому имени требуется прибавить число $20. Как говорилось выше, в микроконтроллерах семейства память программ является 16-битной. Поэтому большинство команд описываются 16-битным словом, которое называется также кодом операции (КОП). Код операции — это число, расположенное в памяти программ и определяющее действие, которое необходимо произвести между источником и приемником. Некоторые команды, у которых один из операндов является 16-битным адресом, занимают две ячейки памяти программ. Соответственно, код операции таких команд является 4-байтным числом. В ряде случаев значение операнда-источника может содержаться непосредственно в коде операции, а не в регистре. Это происходит в том случае, когда операндом-источником является константа.
174 ¦ Глава 3. Система команд Некоторые константы, которые могут быть полезны при написании программ, определены в упомянутых включаемых файлах: IOEND SRAM_START SRAM_SIZE RAMEND XRAMEND E2END EEPROMEND EEADRBITS FLASHEND PAGESIZE NRWW_START_ADDR NRWW_STOP_ADDR RWW_START_ADDR RWW_STOP_ADDR FIRSTBOOTSTART SMALLBOOTSTART SECONDBOOTSTART THIRDBOOTSTART FOURTHBOOTSTART LARGEBOOTSTART — значение верхнего адреса области РВВ; — значение младшего адреса ОЗУ, доступного для хранения данных; — объем ОЗУ в байтах; — значение верхнего адреса внутреннего ОЗУ; — значение верхнего адреса внешнего ОЗУ (для моделей, не поддерживающих подключение внешнего ОЗУ, эта константа равна 0); — значение верхнего адреса EEPROM; — то же, что и E2END; — число задействованных битов регистра адреса EEPROM; — значение верхнего адреса памяти программ (в 2-байтных словах); — размер страницы памяти программ (в 2-байтных словах); — младший адрес области NRWW; — старший адрес области NRWW; — младший адрес области RWW; — старший адрес области RWW; — наименьший размер области загрузчика; — ТО же, ЧТО И FIRSTBOOTSTART, — вторая возможная величина области загрузчика; — третья возможная величина области загрузчика; — наибольший размер области загрузчика; — ТО же, ЧТО И FOURTHBOOTSTART. 3.3. Типы команд Все множество команд микроконтроллеров AVR семейства Mega можно разбить на несколько групп: • команды логических операций; • команды арифметических операций и команды сдвига; • команды операций с битами;
3.3. Типы команд ¦ 175 • команды пересылки данных; • команды передачи управления; • команды управления системой. Далее подробно описана каждая группа команд. 3.3.1. Команды логических операций Эти команды позволяют выполнять стандартные логические операции над байтами, такие как логическое умножение (И), логическое сложение (ИЛИ), операцию «Исключающее ИЛИ», а также вычисление обратного (дополнение до единицы) и дополнительного (дополнение до двух) кодов числа. К этой группе можно отнести также команды очистки/установки регистров и команду перестановки полубайтов. Операции производятся между регистрами общего назначения, либо между регистром и константой; результат сохраняется в РОН. Все команды из этой группы выполняются за один такт. 3.3.2. Команды арифметических операций и команды сдвига К данной группе относятся команды, позволяющие выполнять такие базовые операции, как сложение, вычитание, сдвиг (вправо и влево), инк- рементирование, декрементирование, а также умножение. Все операции производятся только над регистрами общего назначения. При этом микроконтроллеры AVR позволяют легко оперировать как знаковыми, так и беззнаковыми числами, а также работать с числами, представленными в дополнительном коде. Почти все команды рассматриваемой группы выполняются за один такт. Команды умножения и команды, оперирующие 2-байтными значениями, выполняются за два такта. 3.3.3. Команды битовых операций К данной группе относятся команды, выполняющие установку или сброс заданного бита РОН или РВВ. Причем для изменения битов регистра состояния SREG имеются отдельные команды (точнее говоря, эквивалентные мнемонические обозначения общих команд), так как проверка состояния битов именно этого регистра производится чаще всего. Условно к этой группе можно отнести также две команды передачи управления типа «проверка/пропуск», которые пропускают следующую команду в зависимости от состояния бита РОН или РВВ. Все задействованные биты РВВ имеют свои символические имена. Определения этих имен описаны в том же включаемом файле, что и определения символических имен адресов регистров (см. раздел 3.2). Соответственно, после включения в программу указанного файла в командах
176 ¦ Глава 3. Система команд вместо числовых значений номеров битов можно будет указывать их символические имена. Следует помнить, что в командах CBR и SBR операндом является битовая маска, а не номер бита. Для получения битовой маски из номера бита следует воспользоваться ассемблерным оператором «сдвиг влево» («<<»), как показано в следующем примере: sbr rl6, A«SE) + A«SM) out MCUCR,rl6 ; Установить флаги SE и SM регистра MCUCR Всем командам данной группы требуется один такт для выполнения, за исключением случаев, когда в результате проверки происходит пропуск команды. В этом случае команда выполняется за 2 или 3 такта, в зависимости от пропускаемой команды. 3.3.4. Команды пересылки данных Команды этой группы предназначены для пересылки содержимого ячеек, находящихся в адресном пространстве памяти данных. Разделение адресного пространства на три части (РОН, РВВ, ОЗУ) предопределило разнообразие команд данной группы. Пересылка данных, выполняемая командами группы, может производиться в следующих направлениях: • РОН<^>РОН; • РОН о РВВ; • РОН <=> память данных. Также к данной группе можно отнести стековые команды PUSH и POP, позволяющие сохранять в стеке и восстанавливать из стека содержимое РОН. На выполнение команд данной группы требуется от одного до трех тактов, в зависимости от команды. 3.3.5. Команды передачи управления В эту группу входят команды перехода, вызова подпрограмм и возврата из них и команды типа «проверка/пропуск», пропускающие следующую за ними команду при выполнении некоторого условия. Также к этой группе относятся команды сравнения, формирующие флаги регистра SREG и предназначенные, как правило, для работы совместно с командами условного перехода. В системе команд микроконтроллеров семейства имеются команды как безусловного, так и условного перехода. Команды относительного (RJMP), косвенного (UMP, eijmp) и абсолютного (JMP) безусловного перехода являются самыми простыми в этой группе. Их функция заключается только в записи нового адреса в счетчик команд. Команды условного перехода также изменяют содержимое счетчика команд, однако это изменение происходит только при выполнении некоторого условия или, точнее, при определенном состоянии различных флагов регистра SREG.
3.3. Типы команд ¦ 177 Все команды условного перехода можно разбить на две подгруппы. Первая подгруппа — команды условного перехода общего назначения. В эту подгруппу входят две команды — BRBS s, k и BRBC s, к, в которых явно задается номер тестируемого флага регистра SREG. Соответственно, переход осуществляется при SREG.s = О (BRBC) или SREG.s = 1 (BRBS). Другую подгруппу составляют 18 специализированных команд, каждая из которых выполняет переход по какому-либо конкретному условию («равно», «больше или равно», «был перенос» и т. п.). Причем одни команды используются после сравнения беззнаковых чисел, другие — после сравнения чисел со знаком. Возможные проверяемые условия, а также соответствующие им команды условного перехода приведены в Табл. 3.2. Таблица 3.2. Сводная таблица команд условного перехода Проверка Rd > Rr Rd>Rr Rd = Rr Rd<Rr Rd<Rr Rd > Rr Rd > Rr Rd = Rr Rd<Rr Rd<Rr «Перенос» «Меньше нуля» «Переполнение» «Ноль» Логическое условие Zt(N©V) = 0 (N©V) = 0 Z=l Z + (N0V)=1 (N0V)=1 c + z = o c = o Z=l OZ=l C=l C=l N = 1 V=l Z=l Команда BRLT0 BRGE BREQ BRGE0 BRLT BRLO° BRHS/BRCC BREQ BRSH° BRLO/BRCS BRCS BRMI BRVS BREQ Обратная проверка Rd<Rr Rd<Rr Rd*Rr Rd>Rr Rd>Rr Rd<Rr Rd<Rr Rd*Rr Rd^Rr Rd>Rr «Нет переноса» «Больше нуля» «Нет переполнения» «Не ноль» Логическое условие Z + (N0V)=1 (Nev) = i z = o Z»(N©V) = 0 (Nev) = o C + Z=l C=l z = o C = Z-0 c = o c = o N = 0 v=o Z = 0 Команда BRGE0 BRLT BRNE BRLT0 BRGE BRSH° BRLO/BRCS BRNE BRSH/BRCC BRCC BRPL BRVC BRNE Тип данных Co знаком Co знаком Co знаком Co знаком Co знаком Без знака Без знака Без знака Без знака Без знака - - - - 0 Для перехода по этому условию операнды предшествующей команды сравнения должны 1 быть записаны в обратном порядке, т. е. вместо СР Rd, Rr -> CP Rr, Rd.
178 ¦ Глава 3. Система команд Вообще говоря, команды, указанные в Табл. 3.2, являются всего лишь эквивалентными мнемоническими обозначениями команд BRBS s, k и BRBC s, к с определенными значениями операнда s. Команда BREQ к имеет, например, такой же код операции, что и команда BRBS 1, к, а команда BRGE k —BRBC 4 , к. Команды вызова подпрограммы (RCALL, ICALL, EICALL и CALL) работают практически так же, как и команды безусловного перехода. Отличие заключается в том, что, перед тем как выполнить переход, значение счетчика команд сохраняется в стеке. Кроме того, подпрограмма должна заканчиваться командой возврата RET, как показано в следующем примере: rcall sp_test ; Вызов подпрограммы «sp_test» ; Текст основной программы sp_test ; Метка подпрограммы push r2 ; Сохранить г2 в стеке ; Выполнение подпрограммы pop r2 ; Восстановить г2 из стека ret ; Возврат из подпрограммы В приведенном выше примере команда RET заменяет адрес, находящийся в счетчике команд, адресом команды, следующей за командой CALL. Очевидно, что команды передачи управления нарушают нормальное (линейное) выполнение основной программы. Поэтому при каждом выполнении команды этой группы (кроме команд сравнения) нормальное функционирование конвейера нарушается. Перед загрузкой в конвейер нового адреса производится остановка и очистка выполняемой последовательности команд. В результате на выполнение команд затрачивается больше одного такта. Чтобы получить более точную информацию, обратитесь к таблицам, приведенным в разделе 3.4. 3.3.6. Команды управления системой В эту группу входят всего 4 команды: • NOP — пустая команда; • SLEEP — перевод микроконтроллера в режим пониженного энергопотребления; • WDR — сброс сторожевого таймера; • BREAK — команда, используемая внутрисхемным отадчиком. Все команды этой группы, кроме последней, выполняются за один такт.
3.4. Сводные таблицы команд ¦ 179 3.4. Сводные таблицы команд В Табл. 3.3...3.8 указаны все команды, которыми располагают микроконтроллеры AVR семейства Mega. В каждой таблице команды сгруппированы по функциональному признаку. В таблицах приведены основные сведения о командах, такие как мнемоническое обозначение команды, ее описание, число тактов, необходимых для ее выполнения, а также флаги регистра SREG, на которые воздействует эта команда. Информация в таблицах изложена в сжатом виде, а детальное описание всех команд приведено в разделе 3.5. Таблица 3.3. Группа команд логических операций Мнемоника AND Rd,Rr ANDI Rd,K EOR Rd,Rr OR Rc\,Ri; ORI Rd,K COM Rd NEG Rd CLR Rd SER Rd TST Rd SWAP Rd Описание «Логическое И» двух РОН «Логическое И» РОН и константы «Исключающее ИЛИ» двух РОН «Логическое ИЛИ» двух РОН «Логическое ИЛИ» РОН и константы Перевод в обратный код Перевод в дополнительный код Сброс всех битов РОН Установка всех битов РОН Проверка РОН на отрицательное или нулевое значение Обмен местами полубайтов в РОН Операция Rd = Rd • Rr Rd = Rd • К Rd = Rd0Rr Rd = Rd v Rr Rd = RdvK Rd = $FF-Rd Rd = $00-Rd Rd = Rd0Rd Rd = $FF Rd*Rd RdC...0) = RdG...4), RdG...4) = RdC...0) Число тактов Флаги Z,N,V Z,N,V Z,N,V Z,N,V Z,N,V Z,C,N,V Z,C,N,V,H Z,N,V - Z,N,V - Таблица З.4. Группа команд арифметических операций Мнемоника ADD Rd,Rr ADC Rd,Rr ADIW Rdh:Rdl,K Описание Сложение двух РОН Сложение двух РОН с переносом Сложение регистровой пары с константой Операция Rd = Rd + Rr Rd = Rd + Rr + С Rdh:Rdl = Rdh:Rdl + K Число тактов 1 1 2 Флаги Z,C,N,V,H Z, С, N, V, H Z,C,N,V,S
180 ¦ Глава 3. Система команд (продолжение) Мнемоника SUB Rd,Rr SUBI Rd,K SBC Rd;Rr SBCI Rd,K SBIW Rdh:Rdl,K DEC Rd INC Rd ASR Rd LSL Rd LSR Rd ROL Rd ROR Rd MUL Rd,Rr MULS Rd,Rr MULSU Rd,Rr FMUL Rd,Rr FMULS Rd,Rr FMULSU Rd,Rr Описание Вычитание двух РОН Вычитание константы из РОН Вычитание двух РОН с заемом Вычитание константы из РОН с заемом Вычитание константы из регистровой пары Декрементирование РОН Инкрементирование РОН Арифметический сдвиг вправо Логический сдвиг влево Логический сдвиг вправо Сдвиг влево через перенос Сдвиг вправо через перенос Умножение беззнаковых чисел Умножение чисел со знаком Умножение беззнакового числа на число со знаком Умножение дробных беззнаковых чисел Умножение дробных чисел со знаком Умножение дробного беззнакового числа и дробного числа со знаком Операция Rd = Rd - Rr Rd = Rd - К Rd = Rd-Rr-C Rd = Rd-K-C Rdh:Rdl = Rdh:Rdl-K Rd = Rd - 1 Rd = Rd + 1 Rd(/i) = Rd(/rH), w = 0..6 Rd(/i+l) = Rd(/i), Rd@) = 0 Rd(/i) = Rd(/f+l), RdG) = 0 Rd@) = C, Rd(w+l) = Rd(/i), C = RdG) RdG) = C, Rd(/i) = Rd(/i+l), C = Rd@) Rl:R0 = RdxRr Rl:R0 = RdxRr Rl:R0 = RdxRr Rl:R0 = (RdxRr)«l Rl:R0 = (RdxRr)«l Rl:R0 = (RdxRr)«l Число тактов 2 2 2 2 2 2 2 Флаги Z,C,N,V,H Z,C,N,V,H Z,C,N,V,H Z,C,N,V,H Z,C,N,V,S Z,N,V Z,N,V 1 Z,C,N,V Z,C,N,V Z,C,N,V Z,C,N,V Z,C,N,V Z,C z,c z,c z,c z,c z,c
3.4. Сводные таблицы команд ¦ 181 Таблица 3.5. Группа команд операций с битами Мнемоника CBR Rd;K SBR Rd,K CBI A,b SBI A,b BCLR s BSET s BLD Rd,b BST Rr,b CLC SEC CLN SEN CLZ SEZ CLI SEI CLS SES CLV SEV CLT SET CLH SEH Описание Сброс бита(ов) РОН Установка бита(ов) РОН Сброс бита РВВ Установка бита РВВ Сброс флага Установка флага Загрузка бита РОН из флага Т (SREG) Запись бита РОН в флаг Т (SREG) Сброс флага переноса Установка флага переноса Сброс флага отрицательного числа Установка флага отрицательного числа Сброс флага нуля Установка флага нуля Общее запрещение прерываний Общее разрешение прерываний Сброс флага знака Установка флага знака Сброс флага переполнения дополнительного кода Установка флага переполнения дополнительного кода Сброс флага Т Установка флага Т Сброс флага половинного переноса Установка флага половинного переноса Операция Rd = Rd»($FF-K) Rd = Rd v К A.b = 0 A.b=l SREG.s = 0 SREG.s=l Rd.b = T T = Rr.b C = 0 C=l N = 0 N = 1 Z = 0 Z=l 1 = 0 1 = 1 s = o S=l v=o V=l T = 0 T=l H = 0 H = l Число тактов 1 1 2 2 Флаги Z,N,V Z,N,V - - SREG.S SREG.s - T С С N N Z Z I I S S V V T T H H
182 ¦ Глава 3. Система команд Таблица 3.6. Группа команд пересылки данных Мнемоника MOV Rd,Rr MOVW Rd,Rr LDI Rd,K LD Rd,X LD Rd,X+ LD Rd#-X LD Rd,Y LD Rd,Y+ LD Rd,-Y LDD Rd,Y+q LD Rd,Z LD Rd,Z+ LD Rd;-Z LDD Rd,Z+q LDS Rd,k ST X,Rr ST X+,Rr ST -X,Rr ST Y,Rr ST Y+,Rr ST -Y,Rr 1STD Y+q,Rr 1 ST Z,Rr 1 ST Z+,Rr 1 ST -Z,Rr 1STD Z+q,Rr 1 STS k,Rr LPM LPM Rd,Z LPM Rd,Z+ ELPM ELPM Rd,Z Описание Пересылка между РОН Пересылка 2-байтных значений Загрузка константы в РОН Косвенное чтение Косвенное чтение с постинкрементом Косвенное чтение с преддекрементом Косвенное чтение Косвенное чтение с постинкрементом Косвенное чтение с преддекрементом Косвенное относительное чтение Косвенное чтение Косвенное чтение с постинкрементом Косвенное чтение с преддекрементом Косвенное относительное чтение Непосредственное чтение из ОЗУ Косвенная запись Косвенная запись с постинкрементом Косвенная запись с преддекрементом Косвенная запись Косвенная запись с постинкрементом Косвенная запись с преддекрементом Косвенная относительная запись Косвенная запись Косвенная запись с постинкрементом Косвенная запись с преддекрементом Косвенная относительная запись Непосредственная запись в ОЗУ Загрузка данных из памяти программ Загрузка данных из памяти программ Загрузка данных из памяти программ с постинкрементом Расширенная загрузка данных из памяти программ Расширенная загрузка данных из памяти программ Операция Rd = Rr Rd+lRd = Rr+lRr Rd = K Rd = [X] Rd = [X],X = X+l X = X-l,Rd = [X] Rd = [Y] Rd = [Y],Y = Y+l Y = Y-l,Rd = [Y] Rd=[Y+q] Rd = [Z] Rd = [Z],Z = Z+l Z = Z-l,Rd = [Z] Rd = [Z+q] Rd = [k] [X] = Rr [X] = Rr,X = X+l X = X-l,[X] = Rr [Y] = Rr [Y] = Rr,Y = Y+l Y = Y-l,[X] = Rr [Y+q] = Rr [Z] = Rr [Zl = Rr,Z = Z+l Z = Z-l,[Z] = Rr [Z+q] = Rr [k] = Rr R0 = {Z} Rb = {Z} Rb = {Z},Z = Z+1 R0 = {RAMPZZ} Rb = {RAMPZZ} Число тактов 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 Флаги - 1 - | - 1 - 1 - 1 - 1 - J - | - 1 - 1 - 1 - 1 - | - | - | - 1 - 1 - | - 1 - - 1 - 1 - | - | - | - | - 1 - 1 - - - -
3.4. Сводные таблицы команд ¦ 183 (продолжение) Мнемоника ELPM Rd,Z + SPM IN Rd,A OUT A;Rr PUSH Rr POP Rd Описание Расширенная загрузка данных из памяти программ с постинкрементом Запись в память программ Пересылка из РВВ в РОН Пересылка из РОН в РВВ Сохранение байта в стеке Извлечение байта из стека Операция Rb={RAMPZZ}, RAMPZ:Z = RAMPZ:Z+1 {Z} = R1:R0 Rd = A A=Rr STACK = Rr Rd = STACK Число тактов 3 - 1 1 2 2 Флаги - - - - - - Таблица 3,7. Группа команд передачи управления Мнемоника RJMP k IJMP EIJMP JMP к RCALL к ICALL EICALL CALL к RET RETI СР Rd,Rr СРС Rd,Rr CPI Rd,K CPSE Rd,Rr SBRC Rr,b SBRS Rr,b SBIC A,b Описание Относительный безусловный переход Косвенный безусловный переход Расширенный косвенный безусловный переход Абсолютный переход Относительный вызов подпрограммы Косвенный вызов подпрограммы Расширенный косвенный вызов подпрограммы Абсолютный вызов подпрограммы Возврат из подпрограммы Возврат из подпрограммы обработки прерывания Сравнение РОН Сравнение РОН с учетом переноса Сравнение РОН с константой Сравнение и пропуск следующей команды при равенстве Пропуск следующей команды, если бит РОН сброшен Пропуск следующей команды, если бит РОН установлен Пропуск следующей команды, если бит РВВ сброшен Операция РС = РС + к+1 PC = Z PC = EIND:Z РС = к РС = РС + к+1 PC = Z PC = EIND.Z РС = к PC = STACK PC = STACK Rd-Rr Rd-Rr-C Rd-K Если Rd = Rr, то PC = PC + 2 C) Если Rr.b = 0, тоРС = РС + 2C) Если Rr.b= 1, тоРС = РС + 2C) Если A.b = 0, тоРС = РС + 2C) Число тактов 2 2 2 3 3D) 3D) 4 4E) 4E) 4E) 1 1 1 1/2/3 1/2/3 1/2/3 1/2/3 Флаги - - - - - - - - - I Z,N,V, C,H Z,N,V, C,H Z,N,V, C,H - - - -
184 ¦ Глава 3. Система команд (продолжение) Мнемоника SBIS A,b BRBC s,k BRBS s,k BRCS k BRCC k BREQ k BRNE k BRSH k BRLO k BRMI BRPL BRGE BRLT BRHS BRHC BRTS BRTC BRVS BRVC BRID BRIE Описание Пропуск следующей команды, если бит РВВ установлен Переход, если флаг s регистра SREG сброшен Переход, если флаг s регистра SREG установлен Переход по переносу Переход, если нет переноса Переход по «равно» Переход по «не равно» Переход по «больше или равно» Переход по «меньше» Переход по «отрицательное значение» Переход по «положительное значение» Переход по «больше или равно» (числа со знаком) Переход по «меньше нуля» (числа со знаком) Переход по половинному переносу Переход, если нет половинного переноса Переход, если флаг Т установлен Переход, если флаг Т сброшен Переход по переполнению дополнительного кода Переход, если нет переполнения дополнительного кода Переход, если прерывания запрещены Переход, если прерывания разрешены Операция Если А.Ь = 1, тоРС=РС + 2C) E^SREG.s = 0, тоРС = РС + к+1 E<yiHSREG.s=l, тоРС = РС + к+1 Если С = 1, то PC = PC + k + 1 Если С = 0, то PC = PC + k + 1 Если Z = 1, тоРС = РС + к+1 Если Z = 0, тоРС = РС + к+1 Если С = 0, то PC = PC + k + 1 Если С =1, то PC = PC + k + 1 Если N = 1, тоРС = РС + к+1 Если N = 0, то PC = PC + k + 1 Если (N 0 V) = 0, то PC = PC + k + 1 EcyiH(N0V)=l, тоРС = РС + к+1 ЕслиН = 1, тоРС = РС + к+1 Если Н = 0, тоРС = РС + к+1 ЕслиТ= 1, то PC = PC + k + 1 Если Т = 0, то PC = PC + k + 1 ЕслиУ=1, то PC = PC + k + 1 ЕслиУ = 0, то PC = PC + k + 1 Если I = 0, то PC = PC + k + 1 Если 1 = 1, то PC = PC + k + 1 Число тактов 1/2/3 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 Флаги - - - - - - - - - - - - - - - - - - - - -
3.5. Описание команд ¦ 185 Таблица 3.8. Группа команд управления системой Мнемоника NOP SLEEP WDR BREAK Описание Операция Нет операции Переход в «спящий» режим Сброс сторожевого таймера Останов См. соответствующие разделы См. соответствующие разделы Используется только внутрисхемным отладчиком Число тактов 1 3 1 - Флаги - - - - 3.5. Описание команд В этом разделе в алфавитном порядке перечислены все команды, поддерживаемые микроконтроллерами семейства Mega. Для каждой команды приводится ее детальное описание. При описании команд используются обозначения, приведенные в Табл. 3.9. Таблица 3.9. Обозначения, используемые при описании команд Обозначение, символ Описание Регистр состояния SREG С IS) N V S Н Т I Регистр состояния микроконтроллера Флаг переноса @-й бит регистра SREG) Флаг нуля A-й бит регистра SREG) Флаг отрицательного значения B-й бит регистра SREG) Флаг переполнения дополнительного кода C-й бит регистра SREG) Флаг знака D-й бит регистра SREG); S = N Ф V Флаг половинного переноса E-й бит регистра SREG) Пользовательский флаг F-й бит регистра SREG) Флаг общего разрешения прерываний G-й бит регистра SREG) Регистры и операнды Rd Rr К к b s X, Y, Z Регистр-приемник (иногда также регистр-источник) в регистровом файле Регистр-источник в регистровом файле Константа (данные) Адрес — константа Номер бита POH или РВВ @...7) Номер бита регистра состояния SREG @...7) Индексные регистры (X = R27:R26, Y = R29:R28, Z = R31:R30)
186 ¦ Глава 3. Система команд (продолжение) Обозначение, символ I/O А ч [ [XX] {XX} Описание Регистр ввода/вывода Адрес в пространстве ввода/вывода Смещение при относительной косвенной адресации F-битное значение) Разделитель между названием (адресом) регистра и номером бита Содержимое ячейки памяти данных по адресу XX Содержимое ячейки памяти программ по адресу XX Операции ~~ • V Ф Инверсия Логическое И Логическое ИЛИ Исключающее ИЛИ Система PC STACK SP Счетчик команд Текущий уровень стека Указатель стека Флаги о 0 1 - Команда воздействует на флаг Флаг сбрасывается командой в 0 Флаг устанавливается командой в 1 Команда не влияет на состояние флага ADC Rd, Rr Сложение двух РОН с переносом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd + Rr + С 0001 11 rd dddd rrrr 1 слово B байта) 0<d<31,0<r<31 Складывает содержимое двух регистров Rr и Rd и прибавляет содержимое флага переноса С. Результат помещается в регистр Rd I T H S V N Z С - - о о <=> о о <=> 1 ; Сложение двух регистровых пар R1:R0 и R3:R2 add r2,r0 ; Сложить младшие байты adc r3,rl ; Сложить старшие байты с учетом переноса
3.5. Описание команд ¦ 187 ADD Rd, Rr Сложение двух РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd + Rr 0000 11 rd dddd rrrr 1 слово B байта) 0<d<31,0<r<31 Складывает содержимое двух регистров Rr и Rd. Результат помещается в регистр Rd IT H S V N Z С - - о о о о <=> о 1 add rl,r2 ; Прибавить г2 к rl (rl=rl+r2) add r28,r28 ; Сложить г28 с самим собой (r28=r28+r28) ADIWRd+1:Rd,K Сложение регистровой пары с константой Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd+l:Rd = Rd+l:Rd + K 10010110KKddKKKK 1 слово B байта) d e {24, 26, 28,30},К = 0...63 Складывает содержимое регистровой пары Rd+l:Rd с 6-битным числом. Результат помещается обратно в регистровую пару I T H S V N Z С - - - о <=> о о о 2 adiw r25:r24,l ; Прибавить 1 к г25:г24 adiw ZH:ZL,63 ; Прибавить 63 к указателю Z(r31:r30) AND Rd, Rr «Логическое И» двух РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd • Rr 0010 00rd dddd rrrr 1 слово B байта) 0<d<31,0<r<31 Выполняет операцию «Логическое И» между содержимым регистров Rd и Rr. Результат помещается в регистр Rd I T H S V N Z С | - - - о 0 о о - 1 ldi rl6,l ; Загрузить маску 0000 0001 в г1б and r2,rl6 ; Выделить 0-й бит в г2
188 ¦ Глава 3. Система команд ANDI Rd, К «Логическое И» РОН и константы ASRRd Арифметический сдвиг вправо Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Сдвигает содержимое регистра Rd на 1 бит вправо. Состояние 7-го бита не изменяется. Значение 0-го бита помещается в флаг С регистра SREG. Часто используется для деления чисел со знаком на два Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Выполняет операцию «Логическое И» между содержимым регистра Rd и 8-битным числом. Результат помещается в регистр Rd. Команда применима только к 16 старшим РОН (R16...R31) andi rl7,$0F ; Обнулить старший полубайт регистра г17 andi rl8,$10 ; Выделить 4-й бит в регистре г18 ldi rl6,$10 ; Записать число 16 в регистр г1б asr rl6 ; rl6=rl6/2 ldi rl7,$FC ; Записать число -4 в регистр г17 asr rl7 ; rl7=rl7/2
3.5. Описание команд ¦ 189 BCLRs Сброс бита регистра SREG Операция Код операции Операнды Описание Регистр SREG Число тактов Пример SREG.s = 0 1001 0100 lsss 1000 1 слово B байта) 0<s<7 Сбрасывает в 0 заданный бит регистра SREG. Остальные биты регистра SREG остаются без изменения I T H S V N Z С 1 о о о о о о <=> о 1 bclr 0 ; Сбросить флаг переноса bclr 7 ; Запретить прерывания BLD Rd, b Пересылка флага T в бит РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd.b = T 1111 100d dddd Obbb 1 слово B байта) 0<d<31,0<b<7 Копирует флаг Т регистра SREG в бит b регистра Rd I T H S V N Z С 1 - - - - - - - - 1 ; Копирование бита bst rl,2 ; Сохранить 2-й бит регистра rl в Т bid r0,4 ; Записать флаг Т в 4-й бит регистра г0
190 ¦ Глава 3. Система команд BRBCs, к Переход, если бит регистра SREG сброшен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если SREG.s = 0, то PC = PC + k + 1, иначе PC = PC + 1 1111 01 kk kkkk ksss 1 слово B байта) 0 < s < 7, -64 < k < +63 Условный относительный переход. Проверяет заданный бит регистра SREG и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде I T H S V N Z С - - - - - - - - 1, если SREG.s = 1 2, если SREG.s = 0 cpi r20,5 ; Сравнить г20 с числом 5 brbc l,noteq ; Переход, если не равно noteq: BRBSs.k Переход, если бит регистра SREG установлен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если SREG.s = 1, то PC = PC + k + 1, иначе PC = PC + 1 1111 ООкк kkkk ksss 1 слово B байта) 0<s<7,-64<k<+63 Условный относительный переход. Проверяет заданный бит регистра SREG и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде I T H S V N Z С - - - - - - - - 1, если SREG.s = 0 2, если SREG.s = 1 bst r0,3 ; Сохранить 3-й бит rO в флаге Т brbs l,bitset ; Переход, если флаг установлен bitset:
3.5. Описание команд ¦ 191 BRCCk Переход, если не было переноса Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг С = 0, то PC = PC + k + 1, иначе PC = PC + 1 1111 OlkkkkkkkOOO 1 слово B байта) -64<k<+63 Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 0, к I T H S V N Z С - - - - - - - - 1,еслиС=1 2, если С = 0 add r22,r23 ; Прибавить г23 к г22 brcc nocarry ; Перейти, если не было переполнения nocarry: BRCSk Переход по переносу Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флагС = 1, то PC = PC + k + 1, иначе PC = PC + 1 1111 OOkk kkkk kOOO 1 слово B байта) -64 < k < +63 Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 0, к I T H S V N Z С - - - - - - - - 1, если С = 0 2, если С = 1 cpi r26,$56 ; Сравнить г23 с $56 brcs greater ; Перейти, если г23 < $56 greater:
192 ¦ Глава 3. Система команд BREAK к Останов Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Останов программы при внутрисхемной отладке 1001010110011000 1 слово B байта) Нет При выполнении команды ЦПУ AVR переходит в режим останова, в котором внутрисхемный отладчик имеет доступ к внутренним ресурсам микроконтроллера. Если установлены ячейки защиты либо конфигурационные ячейки JTAGEN или OCDEN не запрограммированы A), ЦПУ интерпретирует команду break как команду NOR Используется внутрисхемным отладчиком, в прикладных программах ее использование смысла не имеет I T H S V N Z С - - - - - - - - 1 BREQk Переход по «равно» Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rd = Rr (Z = 1), то PC = PC + k + 1, иначе PC = PC + 1 1111 OOkk kkkk kOO 1 1 слово B байта) -64<k<+63 Условный относительный переход. Проверяет флаг нуля (Z) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды СР, CPI, SUB или SUBI переход произойдет только в том случае, если число (со знаком или без знака), находящееся в регистре Rd, будет равно числу (со знаком или без знака), находящемуся в регистре Rr. Эквивалентна команде BRBS 1, к I T H S V N Z С - - - - - - - - 1, если Z = 0 2, если Z = 1 ср rl,r0 ; Сравнить rl с г0 breq equal ; Перейти, если rl = г 2 equal:
3.5. Описание команд ¦ 193 BRGEk Переход по «больше или равно» (для знаковых данных) Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rd > Rr (N 0 V = 0), то PC = PC + k + 1, иначе PC = PC + 1 1111 Olkk kkkk klOO 1 слово B байта) -64 < k < +63 Условный относительный переход. Проверяет флаг знака (S) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды СР, CPI, SUB или SUBI переход произойдет только в том случае, если число со знаком, находящееся в регистре Rd, будет больше или равно числу со знаком, находящемуся в регистре Rr. Эквивалентна команде BRBC 4, к I T H S V N Z С | - - - - - - - - 1 1, если S = 1 2, если S = 0 ср rll,rl2 ; Сравнить rll с г12 brge greater ; Перейти, если rl > г2 greater: BRHCk Переход, если не было половинного переноса Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг Н = 0, то PC = PC + k + 1, иначе PC = PC + 1 1111 Olkk kkkk klOl 1 слово B байта) -64 < k < +63 Условный относительный переход. Проверяет флаг половинного переноса (Н) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 5, к I T H S V N Z С - - - - - - - - 1, если Н = 1 2, если Н = 0 brhc hclear ; Перейти, если флаг Н сброшен hclear:
194 ¦ Глава 3. Система команд BRHSk Переход по половинному переносу Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг Н = 1, то PC = PC + k + 1, иначе PC = PC + 1 UllOOkkkkkkklOl 1 слово B байта) -64 < k < +63 Условный относительный переход. Проверяет флаг половинного переноса (Н) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 5, к I T H S V N Z С - - - - - - - - 1,еслиН = 0 2, если Н = 1 brhs hset ; Перейти, если флаг Н установлен hset: BRIDk Переход, если прерывания запрещены Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг I = 0, то PC = PC + k + 1, иначе PC = PC + 1 1111 Olkk kkkk kl 11 1 слово B байта) -64<k<+63 Условный относительный переход. Проверяет флаг общего разрешения прерываний (I) и выполняет переход, если лот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 7, к I T H S V N Z С - - - - - - - - 1, если I = 1 2, если I = 0 brid intdis ; Перейти, если прерывания запрещены intdis:
3.5. Описание команд ¦ 195 BRIE к Переход, если прерывания разрешены [ Операция Код операции [Операнды Описание Регистр SREG Число тактов Пример Если флаг I = 1, то PC = PC + k + 1, иначе PC = PC + 1 1111 OOkkkkkk kill 1 слово B байта) -64 < k < +63 Условный относительный переход. Проверяет флаг общего разрешения прерываний (I) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 7,к I T H S V N Z С - - - - - - - - 1, если 1 = 0 1 2, если 1 = 1 brie inten ; Перейти, если прерывания разрешены 1 inten: BRLOk Переход по «меньше» (для беззнаковых данных) Операция Если Rd < Rr (С = 1), то PC = PC + k + 1, иначе PC = PC + 1 Код операции UllOOkkkkkkkOOO 1 слово B байта) Операнды -64<к<+63 Описание Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды СР, CPI, SUB или SUBI переход произойдет только в том случае, если беззнаковое число, находящееся в регистре Rd, будет меньше беззнакового числа, находящегося в регистре Rr. Эквивалентна команде BRBS 0, к Регистр SREG I Н N Число тактов 1,еслиС = 0 2, если С = 1 Пример eor rl9,rl9 loop: inc rl9 cpi rl9;$10 brio loop Очистить rl9 rl9 = rl9 +1 Сравнить г19 с $10 Перейти, если г19 < $10
196 ¦ Глава 3. Система команд BRLTk Переход по «меньше» (для знаковых данных) Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rd< Rr (N © V = 1), то PC = PC + k + 1, иначе PC = PC + 1 1111 OOkkkkkkklOO 1 слово B байта) -64<k<+63 Условный относительный переход. Проверяет флаг знака (S) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды СР, CPI, SUB или SUBI переход произойдет только в том случае, если число со знаком, находящееся в регистре Rd, будет меньше числа со знаком, находящегося в регистре Rr. Эквивалентна команде BRBS 4, к I T H S V N Z С 1 - - - - - - - - 1, если S = 0 2, если S = 1 ср rl6,rl ; Сравнить г1б с rl brlt less ; Перейти, если rl < г2 less: BRMIk Переход по «отрицательное значение» Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг N = 1, то PC = PC + k + 1, иначе PC = PC + 1 UllOOkkkkkkkOlO 1 слово B байта) -64<k<+63 J Условный относительный переход. Проверяет флаг отрицательного значения (N) и выполняет переход, если этот бит установлен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBS 2, к I T H S V N Z С | - - - - - - - - 1,еслиК = 0 2, если N = 1 subi rl8,4 ; г18 = г18 - 4 brmi minus ; Перейти, если результат отрицателен minus:
3.5. Описание команд ¦ 197 BRNEk Переход по «не равно) [ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rd * Rr (Z = 0), то PC = PC + k + 1, иначе PC = PC + 1 1111 OlkkkkkkkOOl 1 слово B байта) -64 < k < +63 Условный относительный переход. Проверяет флаг нуля (Z) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды СР, CPI, SUB или SUBI переход произойдет только в том случае, если числа (со знаком или без знака), находящиеся в регистрах Rd и Rr, не будут равны. Эквивалентна команде BRBC 1, к I T H S V N Z С | - - - - - - - - 1, если Z = 1 2, если Z = 0 еог г27;г27 ; Очистить г27 loop: inc r27 ; г27 = г27 +1 cpi г27,5 ; Сравнить г27 с 5 brne loop ; Перейти, если г27 Ф 5 BRPLk Переход по «положительное значение» Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг N = 0, то PC = PC + k + 1, иначе PC = PC + 1 1 1111 OlkkkkkkkOlO 1 слово B байта) -64 < k < +63 Условный относительный переход. Проверяет флаг отрицательного значения (N) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 2, к I T H S V N Z С - - - - - - - - | 1,еслиК = 1 2, если N = 0 subi г26,$50 ; г26 = г26 - $50 brpl plus ; Перейти, если результат положителен plus:
198 ¦ Глава 3. Система команд BRSHk Переход по «больше или равно» (для беззнаковых данных) Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rd > Rr (С = 0), то PC = PC + k + 1, иначе PC = PC + 1 1111 OlkkkkkkkOOO 1 слово B байта) -64<k<+63 Условный относительный переход. Проверяет флаг переноса (С) и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. При выполнении данной команды сразу же после команды СР, CPI, SUB или SUBI переход произойдет только в том случае, если беззнаковое число, находящееся в регистре Rd, будет больше или равно беззнаковому числу, находящемуся в регистре Rr. Эквивалентна команде BRBC 0, к I T H S V N Z С - - - - - - - - 1 1, если С = 1 2, если С = 0 subi rl9,4 ; г19 = г19 - 4 brsh hgsm ; Перейти, если г19 > 4 hgsm: BRTCk Переход, если флаг T сброшен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример ЕслифлагТ = 0,тоРС = РС + к + I, иначе PC = PC + 1 1 UllOlkkkkkkkllO 1 слово B байта) -64 < к < +63 | Условный относи!ельный переход. Проверяет флаг Т и выполняет переход, если этот бит сброшен. Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 6, к I TH S VNZcl - - - - - - - - J 1, если Т = 1 2, если Т = 0 bst гЗ,5 ; Сохранить 5-й бит гЗ в флаге Т 1 brtc tclear ; Перейти, если этот бит был сброшен 1 tclear: 1 J
3.5. Описание команд ¦ 199 BRTSk Переход, если флаг Т установлен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флагТ= 1, то PC = PC + k + 1, иначе PC = PC + 1 i 1111 OOkkkkkkkllO 1 слово B байта) -64<k<+63 Условный относительный переход Проверяет флаг Т и выполняет переход, если этот бит установлен Величина смещения к представляется числом в дополнительном коде Эквивалентна команде BRBS 6, к I T H S V N Z С - - - - - - - - 1, если Т = 0 2,еслиТ=1 bst гЗ,5 ; Сохранить 5-й бит гЗ в флаге Т brts tset ; Перейти, если этот бит был установлен tset: BRVCk Переход, если нет переполнения дополнительного кода Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг V = 0, то PC = PC + k + 1, иначе PC = PC + 1 1 UllOlkkkkkkkOll 1 слово B байта) -64 < к < +63 Условный относительный переход Проверяет флаг переполнения дополнительного кода (V) и выполняет переход, если этот бит сброшен Величина смещения к представляется числом в дополнительном коде. Эквивалентна команде BRBC 3,к I T H S V N Z С - - - - - - - - 1, если V = 1 2,еслиУ=0 add гЗ, г4 ; гЗ = гЗ + г4 brvc nover ; Перейти, если не было переполнения nover:
200 ¦ Глава 3. Система команд BRVSk Переход по переполнению дополнительного кода Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если флаг V= 1, то PC = PC + k + 1, иначе PC = PC + 1] 1111 OOkk kkkk kO 11 1 слово B байта) -64<k<+63 Условный относительный переход Проверяет флаг переполнения дополнительного кода (V) и выполняет переход, если этот бит установлен Величина смещения к представляется числом в дополнительном коде Эквивалентна команде BRBS 3,k I T H S V N Z С - - - - - - - - 1, если V = 0 2,еслиУ=1 add r3,r4 ; гЗ = гЗ + г4 brvs overfl ; Перейти, если было переполнение overfl: BSETs Установка бита регистра SREG Операция Код операции Операнды Описание Регистр SREG Число тактов Пример SREGs=l 1001 0100 Osss 1000 0<s<7 Устанавливает заданный бит регистра SREG I Т Н S V о о о о <=> 1 bset 6 ; Установить флаг Т bset 7 ; Разрешить прерывания N о 1 слово B байта) Z С о о
3.5. Описание команд ¦ 201 BSTRd,b Запись бита РОН в флаг Т Операция Код операции Операнды Описание Регистр SREG Число тактов Пример T = Rd.b 1111 101 d dddd Obbb 1 слово B байта) 0<d<31,0<b<7 Копирует бит b регистра Rd в флаг Т регистра SREG I T H S V N Z С - о - - - - - - 1 ; Копирование бита: bst rl,2 ; Сохранить 2-й бит регистра rl в Т bid г0,4 ; Записать флаг Т в 4-й бит регистра г0 CALL k Абсолютный вызов подпрограммы Операция Код операции Операнды Описание Регистр SREG Число тактов Пример STACK = PC + 2;PC = k;SP = SP-2C) 1001 010k kkkk 11 Ik kkkk kkkk kkkk kkkk 2 слова D байта) 0<k<4M Абсолютный вызов подпрограммы. Выполняет переход к подпрограмме, адрес которой задается константой к (в пределах всей памяти программ). Адрес следующей за CALL команды B или 3 байта) сохраняется в стеке. На практике вместо числовых значений смещения указываются метки подпрограмм (см. пример) I T H S V N Z С - - - - - - - - 4 (в моделях с PC < 16 битов) 5 (в моделях с PC > 16 битов) call routine ; Вызвать подпрограмму routine: push r14 ; Сохранить г14 pop rl4 ; Восстановить г14 ret ; Возврат из подпрограммы
202 ¦ Глава 3. Система команд CBIA, Ь Сбросить бит РВВ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример 1/О(А).Ь = 0 1001 1000 АААА Abbb 1 слово B байта) 0<A<31,0<b<7 I Сбрасывает бит b регистра ввода/вывода, расположенного по адресу А пространства ввода/вывода. Эта команда применима только к младшим 32 регистрам (адреса 0...31) I T H S V N Z С - - - - - - - - 2 cbi $12,7 ; Сбросить 7-й бит порта D CBR Rd, К Сброс битов РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd«($FF-K) 0111 КККК dddd KKKK 1 слово B байта) 16<d<31,0<K<255 Сбрасывает биты в регистре Rd в соответствии с маской, задаваемой константой К. Результат помещается в регистр Rd I T H S V N Z С 1 - - - <=> 0 о о - 1 cbr rl6,$F0 ; Обнулить старший полубайт регистра г1б cbr г18Д ; Сбросить 4-й бит в регистре г18 CLC Сброс флага переноса Операция Код операции Операнды Описание Регистр SREG Число тактов Пример С = 0 1001 0100 1000 1000 1 слово B байта) Нет операндов Сбрасывает в 0 флаг переноса С регистра SREG. Эквивалентна команде BCLR 0 I T H S V N Z С | - - - - - - - 0 1 add r0,r0 ; Сложить г0 сам с собой clc ; Сбросить флаг переноса
3.5. Описание команд ¦ 203 CLH Сброс флага половинного переноса 1 Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Н = 0 1001 0100 1101 1000 1 слово B байта) Нет операндов 1 Сбрасывает в 0 флаг половинного переноса Н регистра SREG. Эквивалентна команде BCLR 5 I T H S V N Z С - - 0 - - - - - 1 clh ; Сбросить флаг половинного переноса CU Общее запрещение прерываний Операция Код операции Операнды Описание Регистр SREG Число тактов Пример 1 = 0 1001 0100 1111 1000 1 слово B байта) Нет операндов Сбрасывает в 0 флаг общего разрешения прерываний I регистра SREG. Эквивалентна команде BCLR 7 I T H S V N Z С 1 0 - - - - - - - 1 cli ; Запретить прерывания in г11,$16 ; Прочитать состояние порта В sei ; Разрешить прерывания CLN Сброс флага отрицательного значения Операция Код операции Операнды Описание Регистр SREG Число тактов Пример N = 0 1001 0100 1010 1000 1 слово B байта) Нет операндов Сбрасывает в 0 флаг отрицательного значения N регистра SREG. Эквивалентна команде BCLR 2 I T H S V N Z С - - - - - 0 - - 1 add r2,r3 ; Сложить г2 и гЗ cln ; Сбросить флаг отрицательного результата
204 ¦ Глава 3. Система команд CLRRd Очистка РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd © Rd 0010 Oldd dddd dddd 1 слово B байта) 0<d<31 Сбрасывает все биты регистра общего назначения путем выполнения операции «Исключающее ИЛИ» регистра с самим собой I T H S V N Z С 1 - - - 0 0 0 1 - 1 ; Организация цикла с заданным числом повторений: 1 clr г18 ; Очистить регистр г18 loop: inc rl8 ; rl8=rl8+l cpi rl8,$50 ; Завершить цикл? brne loop CLS Сброс флага знака Операция Код операции Операнды Описание Регистр SREG Число тактов Пример s = o "] 1001 0100 1100 1000 1 слово B байта) Нет операндов Сбрасывает в 0 флаг знака S регистра SREG. Эквивалентна команде BCLR 4 I T H S V N Z С - - - 0 - - - - 1 add r2,гЗ ; Сложить г2 и гЗ els ; Сбросить флаг знака CLT Сброс флага Т Операция Код операции Операнды Описание Регистр SREG Число тактов 1 Пример Т = 0 | 1001 0100 1110 1000 1 слово B байта) Нет операндов Сбрасывает в 0 флаг Т регистра SREG. Эквивалентна команде BCLR 6 I T H S V N Z С -0-|----- 1 clt ? Сбросить флаг Т
3.5. Описание команд ¦ 205 CLV Сброс флага переполнения дополнительного кода [Операция Код операции Операнды Описание Регистр SREG Число тактов Пример V = 0 1001 0100 1011 1000 1 слово B байта) Нет операндов Сбрасывает в 0 флаг переполнения дополнительного кода V регистра SREG. Эквивалентна команде ВС LR 3 I T H S V N Z С | - - - - 0 - - - 1 1 add r2,r3 ; Сложить г2 и гЗ civ ; Сбросить флаг переполнения CLZ Сброс флага нуля Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Z = 0 1001 0100 1001 1000 1 слово B байта) Нет операндов Сбрасывает в 0 флаг нуля Z регистра SREG. Эквивалентна команде BCLR 1 I T H S V N Z С - - - - - - 0 - 1 add r2,r3 ; Сложить г2 и гЗ clz ; Сбросить флаг нуля COMRd Вычисление обратного кода Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = $FF-Rd 1001 010d dddd dddd 1 слово B байта) 0<d<31 Вычисляет обратный код числа, находящегося в регистре Rd. Результат помещается обратно в регистр Rd I T H S V N Z С - - - о 0 <=> о 1 1 com r4 ; Вычислить дополнительный код содержимого г4
206 ¦ Глава 3. Система команд СР Rd, Rr Сравнение РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd Rr 0001 01 rd dddd rrrr 1 слово B байта) 0<d<31,0<r<31 Сравнивает содержимое двух регистров общего назначения путем вычитания содержимого регистра Rr из содержимого регистра Rd. Данная команда влияет только на флаги регистра состояния SREG, которые устанавливаются в соответствии с результатом вычитания. Содержимое регистров не изменяется. Как правило, данная команда используется совместно с одной из команд условного перехода I T H S V N Z С - - о о о о о о 1 ср г4,г19 ; Сравнить г4 с rl9 (R=r4-rl9) brne noteq ; Перейти, если г4 о г19 noteq: СРС Rd, Rr Сравнение РОН с учетом переноса Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd-Rr-C 0000 01 rd dddd гггг 1 слово B байта) 0<d^31,0^r<31 Сравнивает содержимое двух регистров общего назначения путем вычитания содержимого регистра Rr и значения флага переноса (С) из содержимого регистра Rd. Данная команда влияет только на флаги регистра состояния SREG, которые устанавливаются в соответствии с результатом вычитания. Содержимое регистров не изменяется. Как правило, данная команда используется совместно с одной из команд условного перехода I T H S V N Z С 1 - - о о <=> о о о 1 ; Сравнение регистровых пар гЗ:г2 и rl:r0: ср г2,г0 ; Сравнить младшие байты срс гЗ,rl ; Сравнить старшие байты brne noteq ; Перейти, если гЗ:г2 о rl:r0 noteq:
3.5. Описание команд ¦ 207 CPI Rd, К Сравнение содержимого РОН с константой Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd-K 0011 КККК dddd KKKK 1 слово B байта) 0<d<31,0<K<255 Сравнивает содержимое регистра общего назначения Rd с константой К путем вычитания константы из содержимого регистра Rd. Данная команда влияет только на флаги регистра состояния SREG, которые устанавливаются в соответствии с результатом вычитания. Содержимое регистра Rd не изменяется. Как правило, данная команда используется совместно с одной из команд условного перехода I T H S V N Z С - - о о о о о ° 1 cpi г19,3 ; Сравнить г19 с числом 3 (R=rl9-3) brne noteq ; Перейти, если г19 о 3 noteq: CPSERd.Rr Пропуск команды при равенстве двух РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rd = Rr, то PC = PC +2 (или 3), иначе PC = PC + 1 0001 00rd dddd rrrr 1 слово B байта) 0<d<31,0<r<31 Сравнивает содержимое двух регистров общего назначения Rr и Rd и пропускает следующую команду, если в регистрах записаны одинаковые значения I T H S V N Z С - - - - - - - - 1, если Rd * Rr (нет пропуска команды) 2, если Rd = Rr (размер пропускаемой команды — 1 слово) 3, если Rd = Rr (размер пропускаемой команды — 2 слова) inc г4 ; Увеличить г 4 (r4=r4+l) cpse r4,r0 ; Сравнить содержимое г4 и г0 neg r4 ; Проинвертировать г4, если г4 * г0
208 ¦ Глава 3. Система команд DECRd Декрементирование РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd - 1 1001 010d dddd 1010 1 слово B байта) 0<d< 31 1 Уменьшает содержимое регистра Rd на единицу. Так как эта команда не влияет на флаг переноса С, она идеально подходит для организации счетчика числа j итераций цикла при выполнении вычислений над многобитными числами. При работе с беззнаковыми числами для выполнения перехода в соответствии с результатом выполнения команды могут использоваться только команды условного перехода BREQ и BRNE. При работе с числами в дополнительном коде могут использоваться все команды условного перехода для знаковых проверок. Флаг V устанавливается в 1 только в том случае, если до выполнения операции в регистре находилось значение $80 I T H S V N Z С - - - о о о о - 1 ldi rl7,$10 ; Записать число 16 в регистр г17 loop: add rl,r2 ; rl=rl+r2 dec rl7 ; Декрементировать г17 brne loop ; Перейти, если г17 * 0 EICALL Расширенный косвенный вызов подпрограммы 1 Операция Код операции Операнды Описание Регистр SREG 1 Число тактов Пример STACK = PC + 1; PQ15..0] = Z, PQ21..16] = EIND; SP = SP - 3 1001 0101 0001 1001 1 слово B байта) Нет операндов Расширенный косвенный вызов подпрограммы. Выполняет переход к подпрограмме, младшие бшы адреса ко юрой находятся в регистре Z, а старшие — в регистре ввода/вывода EIND. Адрес следующей за EICALL команды C байта) сохраняется в стеке. Эта команда поддерживается только микроконтроллерами ATmega2560x/2561x! I T H S V N Z С - - - - - - - - 4 | ldi г1б,$05 ; Инициализируем EIND и указатель Z out EIND,rl6 ldi r30,$00 ldi r31,$10 eicall ; Вызовем подпрограмму, располагающуюся ; по адресу $051000
3.5. Описание команд ¦ 209 EIJMP Расширенный косвенный переход Операция Код операции Операнды Описание Регистр SREG Число тактов Пример PC[15..0] = Z,PC[21..16] = EIND 1001 01000001 1001 1 слово B байта) Нет операндов Косвенный безусловный переход. Выполняет переход по адресу, младшие биты которого находятся в регистре Z, а старшие — в регистре ввода/вывода EIND. Эта команда поддерживается только микроконтроллерами ATmega2560x/256 lx! I T H S V N Z С - - - - - - - - 2 ldi г16,$05 ; Инициализируем EIND и указатель Z out EIND,rl6 ldi r30,$00 ldi r31,$10 eijmp ; Перейдем по адресу $051000 ELPM Расширенная загрузка данных из памяти программ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример R0 = {RAMPZ:Z} 1001 0101 1101 1000 1 слово B байта) Нет операндов Загружает один байт из адресного пространства памяти программ в регистр общего назначения R0. Адрес ячейки памяти, к которой производится обращение, содержится в регистре ввода/вывода RAMPZ и индексном регистре Z. Эта команда поддерживается только микроконтроллерами ATmegal28\, ATmegal280x/1281x и ATmega2560x/2561x! I T H S V N Z С - - - - - - - - 3 clr rl6 ; Очистить регистр RAMPZ out RAMPZ;rl6 clr r31 ; Очистить старший байт индексного ; регистра Z ldi r30,$F0 ; Загрузить адрес в регистр Z elpm ; r0 = {$000F0}
210 ¦ Глава 3. Система команд ELPM Rd, Z Расширенная загрузка данных из памяти программ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = {RAMPZ:Z} 1001 000d dddd 0110 1 слово B байта) 0<d<31 Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в регистре ввода/вывода RAMPZ и индексном регистре Z. Эта команда поддерживается только микроконтроллерами ATmega 128х, ATmegal280x/1281x и AItoega2560x/2561x! I T H S V N Z С - - - - - - - - 1 3 clr г1б ; Очистить регистр RAMPZ out RAMPZ,rl6 clr r31 ; Очистить старший байт индексного ; регистра Z ldi r30,$F0 ; Загрузить адрес в регистр Z elpm rl6,Z ; rl6 = {$000F0} ELPM Rd, Z+ Расширенная загрузка данных из памяти программ с постинкрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = fRAMPZ:Z}, RAMPZ:Z = RAMPZ:Z + 1 1001 OOOd dddd 0111 1 слово B байта) 0<d<31 Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в регистре ввода/вывода RAMPZ и индексном регистре Z. После пересылки байта значение указателя увеличивается на 1. Эта команда поддерживается только микроконтроллерами ATmega 128х, Alhiegal280x/1281x и ATtaega2560x/2561x! I T H S V N Z С - - - - - - - - 3 clr г1б ; Очистить регистр RAMPZ out RAMPZ,rl6 clr r31 ; Очистить старший байт индексного ; регистра Z ldi r30,$F0 ; Загрузить адрес в регистр Z elpm rl6,Z+ ; rl6 = {$000F0}, Z = $00F1
3.5. Описание команд ¦ 211 EOR Rd, Rr «Исключающее ИЛИ» двух РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd9Rr 0010 Olrd dddd rrrr 1 слово B байта) 0<d<31,0<r<31 Выполняет операцию «Исключающее ИЛИ» между регистрами Rd и Rr. Результат помещается в регистр Rd I T H S V N Z С - - - о 0 о о - 1 еог г 2,г 2 ; Очистка регистра г 2 еог г0;г22 ; Побитовое «Исключающее ИЛИ» между г0 и г22 FMULRd,Rr Умножение дробных беззнаковых чисел Операция Rl:R0 = (RdxRr)«l Код операции 00000011 Odddlrrr 1 слово B байта) Операнды 16<d<23,16<r<23 Описание Осуществляет умножение беззнаковых дробных чисел, находящихся в регистрах Rd и Rr. Формат чисел — 1.7 (старший бит — целая часть, 7 младших битов — дробная). Результат умножения (формат результата — 2.14) сдвигается влево на один бит для приведения к формату 1.15 и заносится в регистровую пару Rl :R0 Регистр SREG I Н N Число тактов Пример fmul r23,r22 movw r23:r22,rl:r0 Умножить г23 и г22 Скопировать результат обратно в г23:г22
212 ¦ Глава 3. Система команд FMULS Rd, Rr Умножение дробных чисел со знаком Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rl:RO = (RdxRr)«l 0000 0011 1 ddd Опт 1 слово B байта) 16<d<23,16<г<23 Осуществляет умножение дробных чисел со знаком, находящихся в регистрах Rd и Rr. Формат чисел — 1.7 (старший бит — целая часть, 7 младших битов — дробная). Результат умножения (формат результата — 2.14) сдвигается влево на один бит для приведения к формату 1.15 и заносится в регистровую пару Rl :R0. Обратите внимание, что результат умножения 0x80 (-1) на 0x80 (-1) равен 0x8000 (-1). Поэтому при сдвиге возникнет переполнение дополнительного кода, которое необходимо отслеживать и обрабатывать программно I T H S V N Z С - - - - - - О <=> 2 fmuls r23,r22 ; Умножить г23 и г22 movw r23:r22,rl:r0 ; Скопировать результат обратно ; в г23:г22 FMULSU Rd, Rr Умножение дробного беззнакового числа и дробного числа со знаком Операция Код операции Операнды Описание Регистр SREG Число тактов Пример R1:R0 = (Rd x Rr) « 1 0000 0011 lddd lrrr 1 слово B байта) 16<d<23,16<r<23 Осуществляет умножение дробных чисел, находящихся в регистрах Rd (число со знаком) и Rr (число без знака). Формат чисел — 1.7 (старший бит — целая часть, 7 младших битов — дробная). Результат умножения (формат результата — 2.14) сдвигается влево на один бит для приведения к формату 1.15 и заносится в регистровую пару R1: R0 I T H S V N Z С - - - - - - О о 2 fmulsu r23,r22 ; Умножить г23 и г22 rrovw r23:r22,rl:r0 ; Скопировать результат обратно ; в r23:R22
3.5. Описание команд ¦ 213 ICALL Косвенный вызов подпрограммы Операция Код операции Операнды Описание Регистр SREG Число тактов Пример STACK = PC + 1; PQ15..0] = Z, PQ21..16] = 0; SP = SP - 2 C) 1001010100001001 1 слово B байта) Нет операндов Косвенный вызов подпрограммы. Выполняет переход к подпрограмме, адрес которой находится в регистре Z. Адрес следующей за ICALL команды B или 3 байта) сохраняется в стеке. Область действия команды — младшие 128 Кбайт памяти программ I T H S V N Z С - - - - - - - - 3 (в моделях с PC < 16 битов) 4 (в моделях с PC > 16 битов) mov r30,r0 ; Задать смещение icall ; Вызвать подпрограмму, адрес которой ; находится в регистрах г31:г30 IJMP Косвенный переход Операция Код операции Операнды Описание Регистр SREG Число тактов Пример PC[15..0] = Z,PC[21..16] = 0 1001 0100 0000 1001 1 слово B байта) Нет операндов Косвенный безусловный переход. Выполняет переход по адресу, находящемуся в регистре Z. Область действия команды — младшие 128 Кбайт памяти программ I T H S V N Z С - - - - - - - - 2 mov r30,r0 ; Задать смещение ijmp ; Перейти по адресу г31:г30
214 ¦ Глава 3. Система команд IN Rd, A Пересылка значения из РВВ в РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = 1/0(А) 1011 OAAd dddd AAAA 1 слово B байта) 0<d<31,0<A<63 Пересылает содержимое регистра ввода/вывода А в регистр общего назначения Rd I T H S V N Z С - - - - - - - - 1 in г25,$16 ; Прочитать содержимое порта В cpi г25,4 ; Сравнить содержимое с константой breq exit ; Перейти, если г25 = 4 exit: INCRd Инкрементирование РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd + 1 | 1001 010d dddd 0011 1 слово B байта) | 0<;d<;31 | Увеличивает содержимое регистра Rd на единицу. Так как эта команда не влияет 1 на флаг переноса С, она идеально подходит для организации счетчика числа итераций цикла при выполнении вычислений над многобитными числами. При работе с беззнаковыми числами для выполнения перехода в соответствии с результатом выполнения команды могут использоваться только команды условного перехода BREQ и BRNE. При работе с числами в дополнительном коде могут использоваться все команды условного перехода для знаковых проверок. Флаг V устанавливается в 1 только в том случае, если до выполнения операции в регистре находилось значение $7F I T H S V N Z С 1 - - - О о о <=> - 1 1 clr г22 ; Очистить регистр г22 1 loop: inc r22 ; г22 = г22 + 1 cpi r22,$4F ; brne loop ; Продолжать цикл, если r22 * $4F
3.5. Описание команд ¦ 215 JMP к Абсолютный безусловный переход Операция Код операции Операнды Описание Регистр SREG Число тактов Пример РС = к 1001 010k kkkk 110k kkkk kkkk kkkk kkkk 2 слова D байта) 0<k<4M Команда относительного безусловного перехода. Выполняет переход по адресу, задаваемому константой к. На практике вместо числовых значений адресов используются метки (см. пример) I T H S V N Z С - - - - - - - - 3 add rl6, г17 ; Прибавить г1б к г17 inc г1б ; г1б = г1б + 1 jmp farplc ; Безусловный переход farplc: пор LD Rd, X Косвенное чтение памяти данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [X] 1001 000d dddd 1100 1 ел ова B байта) 0<d< 31 Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X I T H S V N Z С - - - - - - - - 2 clr г27 ; Очистить старший байт индексного регистра ldi г26,$60 ; Загрузить младший байт адреса Id rl,X ; rl = [$0060]
216 ¦ Глава 3. Система команд LD Rd, X+ Косвенное чтение памяти данных с постинкрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [X|,X = X+l 1001 000d dddd 1101 1 слово B байта) 0 < d < 31, для d = 26 или 27 результат операции не определен Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X. После пересылки байта содержимое регистра X увеличивается на 1 I T H S V N Z С - - - - - - - - I 2 clr r27 ldi г26,$60 Id rl,X+ in rl,r26 Очистить старший байт индексного регистра • Загрузить младший байт адреса • rl = [$0060] • В регистре rl - $61 LD Rd, -X Косвенное чтение памяти данных с преддекрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример X = X-l,Rd = [X] 1001 000d dddd 1110 1 слово B байта) 0 < d < 31, для d = 26 или 27 результат операции не определен Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X, причем перед обращением к памяти данных содержимое регистра X уменьшается на 1 I Т /К S V N Z С - - - - - - - - 2 clr r27 ; Очистить старший байт индексного регистра ldi r26,$63 ; Загрузить младший байт адреса Id гЗ,-Х ; гЗ = [$0062]
3.5. Описание команд ¦ 217 LD Rd, Y Косвенное чтение памяти данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [Y] 1000 000d dddd 1000 1 слово B байта) 0<d< 31 Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y I T H S V N Z С - - - - - - - - 2 clr r29 ; Очистить старший байт индексного регистра ldi r28,$60 ; Загрузить младший байт адреса Id rl,Y ; rl = [$0060] LD Rd, Y+ Косвенное чтение памяти данных с постинкрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [Y],Y = Y+l 1001 000d dddd 1001 1 слово B байта) 0 < d < 31, для d = 28 или 29 результат операции не определен Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y. После пересылки байта содержимое регистра Y увеличивается на 1 I T H S V N Z С - - - - - - - - 2 clr r29 ldi г28,$60 Id rl,Y+ in r2,r28 Очистить старший байт индексного регистра Загрузить младший байт адреса rl = [$0060] В регистре г2 - $61
218 ¦ Глава 3. Система команд LD Rd, -Y Косвенное чтение памяти данных с преддекрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Y = Y-l,Rd = [Y] 1001 000d dddd 1010 1 слово B байта) 0 <d < 31, для d = 28 или 29 результат операции не определен Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y, причем перед обращением к памяти данных содержимое регистра Y уменьшается на 1 I T H S V N Z С - - - - - - - - 2 clr г29 ; Очистить старший байт индексного регистра ldi г28,$63 ; Загрузить младший байт адреса Id r3,-Y ; r3 = [$0062] LD Rd, Z Косвенное чтение памяти данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [Z] 1000 000d dddd 0000 1 слово B байта) 0?d<31 Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z I T H S V N Z С - - - - - - - - 2 clr r31 ; Очистить старший байт индексного регистра ldi r30,$60 ; Загрузить младший байт адреса Id rl,Z , rl = [0060]
3.5. Описание команд ¦ 219 LD Rd, Z+ Косвенное чтение памяти данных с постинкрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [Z],Z = Z+l 1001 000d dddd 0001 1 слово B байта) 0 < d < 31, для d = 30 или 31 результат операции не определен Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z После пересылки байта содержимое регистра Z увеличивается на 1 I T H S V N Z С - - - - - - - - 2 clr r31 ldi г30,$60 Id rl,Z+ in r2,r30 Очистить старший байт индексного регистра Загрузить младший байт адреса rl = [$0060] В регистре г2 - $61 LDRd,-Z Косвенное чтение памяти данных с преддекрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Z = Z-l,Rd = [Z] 1001 000d dddd 0010 1 слово B байта) 0 < d < 31, для d = 30 или 31 результат операции не определен Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z, причем перед обращением к памяти данных содержимое регистра Z уменьшается на 1 I T H S V N Z С - - - - - - - - 2 clr r31 ; Очистить старший байт индексного регистра ldi г30,$63 ; Загрузить младший байт адреса Id r3,-Z ; r3 = [$0062]
220 ¦ Глава 3. Система команд LDDRd,Y+q Косвенное относительное чтение памяти данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [Y + q] 1 OqO qqOd dddd lqqq 1 слово B байта) 0<d<31, 0<q<63 Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Y и константы q. Содержимое индексного регистра не изменяется I T H S V N Z С - - - - - - - - 2 clr г29 ; Очистить старший байт индексного регистра ldi r28,$63 ; Загрузить младший байт адреса ldd r4,Y+2 ; r4 = [$0065] LDD Rd, Z+q Косвенное относительное чтение памяти данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [Z + q] 10q0 qqOd dddd Oqqq 1 слово B байта) 0<d<31, 0<q<63 Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Z и константы q. Содержимое индексного регистра не изменяется I T H S V N Z С - - - - - - - - 2 clr r31 ; Очистить старший байт индексного регистра ldi г30,$63 ; Загрузить младший байт адреса ldd r4;Z+2 ; r4 = [$0065]
3.5. Описание команд ¦ 221 LDI Rd, К Загрузка константы в РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = K 1110 КККК dddd KKKK 1 слово B байта) 16<d<31,0<k<255 Загружает 8-битное число в регистр общего назначения Rd. Данная команда применима только к старшей половине РОН (адреса 16...31) I T H S V N Z С - - - - - - - - 1 clr г31 ; Очистить старший байт индексного регистра Z ldi r30,$F0 ; Загрузить адрес в регистр Z 1pm ; Загрузить константу из памяти программ ; по адресу $00F0 LDS Rd, k Непосредственная загрузка из памяти данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = [к] | 1001 000d dddd 0000 кккк кккк кккк кккк 2 слова D байта) 0<d<31,0<k<65535 Загружает один байт из адресного пространства памяти данных в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, задается константой к I T H S V N Z С - - - - - - - - 2 Ids r2,$FF00 ; r2 = [$FF00] add r2,rl ; r2 = r2 + rl sts $FF000,r2 ; Записать результат по тому же адресу
222 ¦ Глава 3. Система команд LPM Загрузка данных из памяти программ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример R0 = {Z} 1001 0101 1100 1000 1 слово B байта) Нет операндов Загружает один байт из адресного пространства памяти программ в регистр общего назначения R0. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z I T H S V N Z С - - - - - - - - 3 clr г31 ; Очистить старший байт индексного ; регистра Z ldi r30,$F0 ; Загрузить адрес в регистр Z 1pm ; r0 = {$00F0} LPM Rd, Z Загрузка данных из памяти программ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = {Z} 1 1001 OOOddddd 0100 1 слово B байта) 1 0<d<31 I Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z I T H S V N Z С - - - - - - - - 3 clr r31 ; Очистить старший байт индексного ; регистра Z ldi r30,$F0 ; Загрузить адрес в регистр Z 1pm rl6,Z ; rl6 = {$00F0}
3.5. Описание команд ¦ 223 LPM Rd, Z+ Загрузка данных из памяти программ с постинкрементом Операция Rd = {Z} Код операции 1001 OOOddddd 0101 1 слово B байта) Операнды 0<d<31 Описание Загружает один байт из адресного пространства памяти программ в регистр общего назначения Rd. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z. После пересылки байта содержимое регистра Z увеличивается на 1 Регистр SREG I Н N Число тактов Пример clr г31 ; Очистить старший байт индексного ; регистра Z ldi r30,$F0 ; Загрузить адрес в регистр Z lpm rl6,Z+ ; rl6 = {$00F0}, Z = $00F1 LSLRd Логический сдвиг влево Операция Код операции Операнды Описание 1 Регистр SREG Число тактов Пример в- «— Ь7 ЬО <•— 0 1000 lldddddddddd 1 слово B байта) 0<d<31 Сдвигает все биты регистра Rd влево. Бит Ь0 сбрасывается в 0, а бит Ь7 загружается в флаг С регистра SREG. Эквивалентна команде ADD Rd, Rd I T H S V N Z С - - - <=> О 0 о о 1 add r0,r4 ; rO = rO + r4 lsl rO ; rO = rO * 2
224 ¦ Глава 3. Система команд LSRRd Логический сдвиг вправо Операция Код операции Операнды Описание Регистр SREG Число тактов Пример о—> _> -а 1001 010d dddd 0110 1 слово B байта) 1 0<d<31 Сдвигает все биты регистра Rd вправо. Бит Ь7 сбрасывается в 0, а бит Ь0 загружается в флаг С регистра SREG I T H S V N Z С - - - <=> о 0 о о 1 add r0,r4 ; г0 = г0 + г4 lsr rO ; г0 = гО/2 MOVRd.Rr Пересылка между РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rr 0010 llrd dddd гггг 0<d<31,0<r<31 1 слово B байта) Копирует содержимое регистра Rr в регистр Rd. Регистр-источник (Rr) не изменяется I Т - - mov rl6,r0 call check check: cpi rl6, $rl ret H S V N Z С - - - - - - 1 ; Переслать содержимое гО в rl6 ; Вызвать подпрограмму 1 ; Сравнить г1б с $11 ; Вернуться из подпрограммы
3.5. Описание команд ¦ 225 M0VWRd+1:Rd,Rr+1:Rr Пересылка между парами РОН I Операция [ Код операции [Операнды Описание Регистр SREG Число тактов Пример Rd+l:Rd = Rr+l:Rr 0000 0001 dddd гггг 1 слово B байта) de {0,2,...,30},re {0,2,...,30} Копирует содержимое регистровой пары Rr+1 :Rr в регистровую пару Rd+1 :Rd. Регистры-источники (Rr+1 и Rr) не изменяются I T H S V N Z С - - - - - - - - 1 movw rl7:rl6,rl:r0 ; Переслать rl:r0 в rl7:rl6 I MULRd, Rr Умножение беззнаковых чисел Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rl:R0 = RdxRr 1001 11 rd dddd rrrr 1 слово B байта) 0<d<31,0<r<31 Осуществляет умножение беззнаковых чисел, находящихся в регистрах Rd и Rr. Результат умножения заносится в регистровую пару Rl :R0 I T H S V N Z С 1 - - - - - - <=> о 1 2 mul r5,r4 ; Умножить г5 и г4 movw r5:r4,rl:r0 ; Скопировать результат обратно в г5:г4 MULS Rd, Rr Умножение чисел со знаком Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rl:R0 = RdxRr 0000 0010 dddd rrrr 1 слово B байта) 16 < d < 31,16 < г < 31 Осуществляет умножение чисел со знаком, находящихся в регистрах Rd и Rr. Результат умножения заносится в регистровую пару Rl :R0 I T H S V N Z С 1 - - - - - - О О 2 muls rl6,rl7 ; Умножить г1б и г17 movw rl7:rl6,rl:r0 ; Скопировать результат обратно ; В г17;г1б
226 ¦ Глава 3. Система команд MULSU Rd, Rr Умножение беззнакового числа и числа со знаком Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rl'RO-RdxRr ] 0000 0011 Oddd Orrr 1 слово B байта) | 16<d<23,16<r<23 Осуществляет умножение чисел, находящихся в регистрах Rd (число со знаком) и Rr (число без знака). Результат умножения заносится в регистровую пару Rl :R0 ITHSVNZCJ - - - | - - ~ ° ° 1 2 ] mulsu rl6,rl7 ; Умножить г16 и rl7 J movw rl7:rl6,rl:r0 ; Скопировать результат обратно в rl7:rla NEGRd Вычисление дополнительного кода Операция Код операции Операнды Описание Регистр SREG Число тактов Пример RdT=$00^Rd \ 1001 OlOddddd 0001 1 слово B байта) | 0<d< 31 1 Вычисляет дополнительный код числа, находящегося в регистре Rd. Результат 1 помещается обратно в регистр Rd I T H S V N Z С | - - о о о о о о 1 1 | sub rll,r0 ; Вычесть г0 из rll (rll = rll - г0) brpl positive ; Перейти, если результат положителен neg rll ; Вычислить дополнительный код числа positive: Л NOP Пустая команда Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Нет операции 0000 00000000 0000 Нет операндов Пропускает один такт I Т - - clr г16 ser rl7 out $18,rl6 пор out $18,rl7 Н S V N - - - - 1 ; Очистить регистр г1б ; Установить регистр г17 ; Записать нули в порт В ; Ждать один такт ; Записать единицы в порт В 1 1 слово B байта) 1 z с 1 - - |
3.5. Описание команд ¦ 227 OR Rd, Rr «Логическое ИЛИ» двух РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd v Rr OOlOlOrdddddrrrr 0<d<31,0<r<3 1 слово B байта) Выполняет операцию «Логическое ИЛИ» между регистрами Rd и Rr. Результат помещается в регистр Rd I Т - - or rl5,rl6 bst rl5,6 brts ok ok: H S V N Z С - о 0 о <=> - 1 ; Побитовое «ИЛИ» г15 и rl6 ; Записать 6-й бит регистра г15 в флаг Т ; Перейти, если флаг Т равен 1 ORI Rd, К «Логическое ИЛИ» РОН и константы Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = RdvK 0110 КККК dddd KKKK 1 слово B байта) 16<d<31,0<K<255 Выполняет операцию «Логическое ИЛИ» между регистром Rd и константой К. Результат помещается в регистр Rd. Команда применима только к 16 старшим POH(R16...R31) I T H S V N Z С - - - о 0 о о - 1 ori rl7,$0F ; Установить старший полубайт регистра г17 on г18,1 ; Установить 0-й бит регистра г18
228 ¦ Глава 3. Система команд OUTA,Rr Пересылка значения из РОН в РВВ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример 1/0(А) = Rr 1011 lAArrrrrAAAA 0<r<31,0<A<63 Пересылает содержи? ввода/вывода А I Т - - clr г1б ser rl7 out $18,rl6 пор out $18,г17 doe регистра общего назначения Rr в Н S V N - - - - 1 ; Очистить регистр г1б ; Установить регистр г17 ; Записать нули в порт В ; Ждать один такт ; Записать единицы в порт 1 слово B байта) регистр Z - в С - POPRd Извлечение байта из стека Операция Код операции Операнды Описание Регистр SREG Число тактов Пример SP = SP+l,Rd = STACK 1001 OOOddddd 1111 1 0<d< 31 Загружает 1 байт из стека в регистр общего назначения Rd I Т - - call routm routine: push rl4 push rl5 pop rl5 pop rl4 ret H S V N - - - - 2 э ; Вызов подпрограммы ; Сохранить г14 в стеке ; Сохранить г15 в стеке ; Восстановить г15 из стека ; Восстановить г14 из стека ; Возврат из подпрограммы слово B байта) Z С - - |
3.5. Описание команд ¦ 229 PUSH Rr Сохранение байта в стеке Операция Код операции Операнды Описание Регистр SREG Число тактов Пример STACK- Rr,SP~SP l 1001 001 г rrrr 1111 0<г< 31 1 слово B байта) Сохраняет содержимое регистра общего назначения Rr в стеке I Т Н call routine ; routine: push rl4 push rl5 pop rl5 ; pop rl4 ; ret S V N Z 2 Вызов подпрограммы Сохранить г14 в стеке Сохранить г15 в стеке Восстановить г15 из стека Восстановить г14 из стека Возврат из подпрограммы С RCALLk Относительный вызов подпрограммы Операция Код операции Операнды Описание Регистр SREG Число тактов Пример STACK = PC + 1; PC = PC + к + 1; SP = SP - 2 C) 1101 kkkkkkkkkkkk 1 слово B байта) -2047 <k< 2047 Относительный вызов подпрограммы. Выполняет переход к подпрограмме, адрес которой получается сложением содержимого счетчика команд с константой к. Адрес следующей за RCALL команды B или 3 байта) сохраняется в стеке. На практике вместо числовых значений смещения указываются метки подпрограмм (см. пример) I T H S V N Z С 1 - - - - - - - - 3 (в моделях с PC < 16 битов) 4 (в моделях с PC > 16 битов) rcall routine ; Вызвать подпрограмму routine: push rl4 ; Сохранить г14 pop rl4 ; Восстановить rl4 ret ; Возврат из подпрограммы
230 ¦ Глава 3. Система команд RET Возврат из подпрограммы Операция Код операции Операнды Описание Регистр SREG Число тактов Пример SP = SP + 2C); PC = STACK | 1001 0101 0000 1000 1 слово B байта) J Нет операндов 1 Возврат из подпрограммы. Выполняет возврат в то место, откуда подпрограмма 1 была вызвана 1 I T H S V N Z С J - - - - - - - - | 4 (в моделях с PC < 16 битов) 5 (в моделях с PC > 16 битов) I rcall routine ; Вызвать подпрограмму 1 routine: 1 push r14 ; Сохранить г14 1 pop rl4 ; Восстановить г14 1 ret ; Возврат из подпрограммы 1 RETI Возврат из подпрограммы обработки прерывания Операция Код операции Операнды Описание Регистр SREG Число тактов Пример SP = SP + 2C); PC = STACK | 1001 0101 0001 1000 1 ел ово B байта) Нет операндов Возврат из подпрограммы обработки прерывания. Выполняет возврат в то место, в котором выполнение программы было прервано в результате возникновения прерывания. Следует обратить внимание, что контекст программы (регистр состояния SREG) не сохраняется при вызове подпрограммы обработки прерывания и соответственно не восстанавливается при выходе из нее. В связи с этим сохранение и восстановление этого регистра необходимо выполнять самостоятельно I T H S V N Z С 1 1 - - - - - - - 4 (в моделях с PC < 16 битов) 5 (в моделях с PC > 16 битов) extint: push r0 ; Сохранить r0 pop rO ; Восстановить гО reti ; Возврат из подпрограммы
3.5. Описание команд ¦ 231 RJMPk Относительный безусловный переход Операция РС = РС + к+1; Код операции ПООкккккккккккк 1 слово B байта) Операнды -2047 < к < 2047 Описание Команда относительного безусловного перехода. Выполняет переход по адресу, равному сумме содержимого счетчика команд и константы к. На практике вместо числовых значений смещения используются метки (см. пример) Регистр SREG I Н N Число тактов Пример cpi rl6,$42 brne error rjmp ok error: add rl6, rl7 inc rl6 ok: Сравнить г16 с числом $42 Перейти, если г16 * $42 Безусловный переход Прибавить г1б к г17 г1б = г1б + 1 ROLRd Сдвиг влево через перенос Операция ш- -ьо ш Код операции 0001 lldddddddddd 1 слово B байта) Операнды 0<d<31 Описание Сдвигает содержимое регистра Rd влево на один бит. В бит Ь0 заносится содержимое флага С регистра SREG, а бит Ь7 загружается в флаг С. В комбинации с командой LSL данная команда может использоваться для умножения многобайтных чисел (как знаковых, так и беззнаковых) на два. Эквивалентна команде ADC Rd, Rd. Значение флага Vравно «Исключающему ИЛИ» флагов N и С после сдвига Регистр SREG I Н N Число тактов 1 Умножить регистровую пару г19:г18 на 2: lsl rl8 ; г18 = г18 * 2 rol г19 ; г19:г18 - 16-битное целое Пример
232 ¦ Глава 3. Система команд RORRd Сдвиг вправо через перенос Операция ш Ь7- ¦-ЬО га Код операции lOOlOlOdddddOlll 1 слово B байта) Операнды 0<d < 31 Описание Сдвигает содержимое регистра Rd вправо на один бит. В бит Ь7 заносится содержимое флага С регистра SREG, а бит ЬО загружается в флаг С. В комбинации с командой ASR данная команда может использоваться для деления многобайтных знаковых чисел на два, а в комбинации с командой LSR — для деления многобайтных беззнаковых чисел на два. Значение флага V равно «Исключающему ИЛИ» флагов N и С после сдвига Регистр SREG I Н N Число тактов 1 Пример lsr rl9 гог г18 asr rl7 гог г16 Разделить регистровую пару г19:г18 на 2 г19:г18 - 16-битное целое без знака Разделить регистровую пару г17:г1б на 2 г17:г1б - 16-битное целое со знаком SBCRd,Rr Вычитание с заемом Операция Rd = Rd-Rr-C Код операции OOOOlOrdddddrrrr 1 слово B байта) Операнды 0^d?31,0<r<31 Описание Вычитает из регистра Rd содержимое регистра Rr. Если флаг переноса С установлен, полученная разность уменьшается на 1. Результат помещается в регистр Rd. Если результат вычитания не равен нулю, флаг нуля Z сбрасывается в О, в противном случае он остается без изменений Регистр SREG I Н N Число тактов Пример Вычитание регистровой пары R1:R0 из R3:R2 sub r2,r0 ; Вычесть младшие байты sbc r3,rl ; Вычесть старшие байты с учетом переноса
3.5. Описание команд ¦ 233 SBCI Rd, К Вычитание константы из РОН с заемом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd-K-C OlOOKKKKddddKKKK 1 слово B байта) 16<d<31,0<K<255 Вычитает из регистра Rd значение константы К. Если флаг переноса С установлен, полученная разность уменьшается на 1. Результат помещается в регистр Rd. Если результат вычитания не равен нулю, флаг нуля Z сбрасывается в 0, в противном случае он остается без изменений I T H S V N Z С - - о о о о о о 1 ; Вычитание двухбайтного числа $4F23 из регистровой ; пары R17:R16 subi rl6,$23 ; Вычесть младший байт sbci rl7,$4F ; Вычесть старший байт с учетом переноса SBI А, Ь Установить бит РВВ Операция Код операции Операнды Описание Регистр SREG Число тактов Пример 1/0(А).Ь=1 1001 1010 АААА Abbb 1 слово B байта) 0<А<31,0<Ь<7 Устанавливает бит b регистра ввода/вывода, расположенного по адресу А пространства ввода/вывода. Эта команда применима только к младшим 32 регистрам (адреса 0...31) I T H S V N Z С - - - - - - - - 2 out $1Е,г0 ; Задать адрес ячейки EEPROM sbi $1C,0 ; Установить запрос на чтение in rl,$lD ; Считать данные из EEPROM
234 ¦ Глава 3. Система команд SBICA, b Пропустить команду, если бит РВВ сброшен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если 1/0(А).Ь = 0, то PC = PC + 2 C), иначе PC = PC + 1 1001 1001АААА Abbb 1 слово B байта) 0<A<31,0<b<7 Проверяет состояние бита b регистра ввода/вывода А. Если бит сброшен, команда, следующая за SBIC А, Ь, пропускается. Эта команда применима только к младшим 32 регистрам (адреса 0...31) I T H S V N Z С - - - - - - - - 1, если 1/0(А).Ь = 1 (нет пропуска команды) 2, если 1/0(А).Ь = 0 (размер пропускаемой команды — 1 слово) 3, если 1/0(А).Ь = 0 (размер пропускаемой команды — 2 слова) e2wait: sbic $1С,1 ; Пропустить команду, если флаг EEWE сброшен rjmp e2wait ; Запись в EEPROM еще не закончилась SBISA,b Пропустить команду, если бит РВВ установлен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если 1/0(А).Ь = 1, то PC = PC + 2 C), иначе PC = PC + 1 ] 1001 1011 АААА Abbb 1 слово B байта) 0<A<31,0<b<7 Проверяет состояние бита b регистра ввода/вывода А. Если бит установлен, команда, следующая за SBIS А, Ь, пропускается. Эта команда применима только к младшим 32 регистрам (адреса 0...31) I T H S V N Z С - - - - - - - - 1, если 1/0(А).Ь = 0 (нет пропуска команды) 2, если 1/0(А).Ь = 1 (размер пропускаемой команды — 1 слово) 3, если 1/0(А).Ь = 1 (размер пропускаемой команды — 2 слова) waitset: sbis $1D,0 ; Пропустить след. команду, если 0-й бит ; порта D установлен rjmp waitset ; Ждать, пока бит не будет установлен
3.5. Описание команд ¦ 235 SBIWRd+1,Rd,K Вычитание константы из регистровой пары Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd+l:Rd = Rd+l:Rd-K 1001 0111 KKdd KKKK 1 слово B байта) d e {24, 26,28, 30},0<К<63 Вычитает из регистровой пары Rd+1 :Rd значение константы К. Результат помещается обратно в регистровую пару. Команда применима только к 4 старшим регистровым парам из регистров общего назначения I T H S V N Z С - - - О о <=> о <=> 2 ; Вычитание двухбайтного числа $4F23 из регистровой ; пары R17:R16 sbiw r25:r24,l ; Вычесть единицу из г25:г24 sbiw YH:YL,63 ; Вычесть 63 из индексного регистра Y SBR Rd, К Установка битов РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = RdvK 0110 KKKK dddd KKKK 1 слово B байта) 16<d<31,0<K<255 Устанавливает отдельные биты регистра Rd путем выполнения операции «Логическое ИЛИ» между содержимым регистра Rd и маской, задаваемой константой К. Результат помещается в регистр Rd I T H S V N Z С - - - <=> 0 о о - 1 sbr г16,3 ; Установить биты 0 и 1 регистра г16 sbr rl8,$F0 ; Установить 4 старших бита регистра г18
236 ¦ Глава 3. Система команд SBRC Rr, b Пропустить команду, если бит РОН сброшен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rr.b = 0, то PC = PC + 2 C), иначе PC = PC + 1 1111 11 Or rrrr Obbb 1 слово B байта) 0<r<31,0<b<7 Проверяет состояние бита Ь регистра общего назначения Rr. Если бит сброшен, команда, следующая за SBRC Rr, b, пропускается I T H S V N Z С - - - - - - - - 1 1, если Rr.b = 1 (нет пропуска команды) 2, если Rr.b = 0 (размер пропускаемой команды — 1 слово) 3, если Rr.b = 0 (размер пропускаемой команды — 2 слова) sub r0,rl ; Вычесть rl из г0 sbrc г 0,7 ; Пропустить команду, если г0.7 = 0 sub r0,rl ; Выполняется, только если г0.7 = 1 SBRS Rr, b Пропустить команду, если бит РОН установлен Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Если Rr.b = 1, то PC = PC + 2 C), иначе PC = PC + 1 1111 111 г rrrr Obbb 1 слово B байта) 1 0<r<31,0<b<7 I Проверяет состояние бита b регистра общего назначения Rr. Если бит установлен, команда, следующая за SBRS Rr, b, пропускается I T H S V N Z С 1 - - - - - - - - 1, если Rr.b = 0 (нет пропуска команды) 2, если Rr.b = 1 (размер пропускаемой команды — 1 слово) 3, если Rr.b = 1 (размер пропускаемой команды — 2 слова) sub r0,rl ; Вычесть rl из г0 sbrs r0,7 ; Пропустить след. команду, если г0.7 = 0 neg r0 ; Выполняется, только если г0.7 = 1
3.5. Описание команд ¦ 237 SEC Установка флага переноса [Операция [Код операции Операнды Описание Регистр SREG Число тактов Пример С = 1 1001 0100 0000 1000 1 слово B байта) Нет операндов Устанавливает в 1 флаг переноса С регистра SREG. Эквивалентна команде BSET 0 I T H S V N Z С - - - - - - - 1 1 sec ; Установить флаг переноса addc r0,rl ; r0 = r0 + rl + 1 SEH Установка флага половинного переноса Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Н = 1 10010100 0101 1000 1 словоB байта) Нет операндов Устанавливает в 1 флаг половинного переноса Н регистра SREG. Эквивалентна команде bset 5 I T H S V N Z С - - 1 - - - - - 1 sin ; Установить флаг половинного переноса SEI Общее разрешение прерываний Операция Код операции Операнды Описание Регистр SREG Число тактов Пример 1 = 1 1001 0100 0111 1000 1 слово B байта) Нет операндов Устанавливает в 1 флаг общего разрешения прерываний I регистра SREG. Эквивалентна команде BSET 7 I T H S V N Z С | 1 - - - - - - - 1 cli ; Запретить прерывания in rl3,$16 ; Прочитать состояние порта В sei ; Разрешить прерывания
238 ¦ Глава 3. Система команд SEN Установка флага отрицательного значения Операция Код операции Операнды Описание Регистр SREG Число тактов Пример N = 1 1001 0100 0010 1000 1 слово B байта) 1 Нет операндов Устанавливает в 1 флаг отрицательного значения N регистра SREG. Эквивалентна команде bset 2 I T H S V N Z С - - - - - 1 - - | 1 add r2;rl9 ; Сложить г2 и г19 sin ; Установить флаг отрицательного результата SERRd Установка РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = $FF I 1110 1111 dddd 1111 1 слово B байта) 16<d<31 Устанавливает все биты регистра общего назначения в 1. Команда применима только к регистрам из старшей половины регистрового файла I T H S V N Z С - - - - - - - - 1 clr г1б ; Очистить регистр г16 ser rl7 ; Установить регистр г17 out $18,rl6 ; Записать в порт В нули пор out $18,rl7 ; Записать в порт В единицы
3.5. Описание команд ¦ 239 SES Установка флага знака [Операция Код операции Операнды Описание Регистр SREG Число тактов Пример S = l 1001 0100 0100 1000 1 слово B байта) | Нет операндов Устанавливает в 1 флаг знака S регистра SREG. Эквивалентна команде BSET 4 | I T H S V N Z С - - - 1 - - - 1 1 add r2,rl9 ; Сложить г2 и г19 ses ; Установить флаг знака SET Установка флага Т Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Т=1 1001 0100 0110 1000 1 слово B байта) Нет операндов Устанавливает в 1 флаг Т регистра SREG. Эквивалентна команде BSET 6 I T H S V N Z С - 1 - - - - - - 1 1 ] set ; Установить флаг Т SEV Установка флага переполнения дополнительного кода Операция Код операции Операнды Описание Регистр SREG Число тактов Пример V=l 1001 0100 0011 1000 1 слово B байта) Нет операндов Устанавливает в 1 флаг переполнения дополнительного кода V регистра SREG. Эквивалентна команде BSET 3 I T H S V N Z С - - - - 1 - - - 1 1 add r2,rl9 ; Сложить г2 и г19 sev ; Установить флаг переполнения
240 ¦ Глава 3. Система команд SEZ Установка флага нуля Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Z=l 1001 0100 0001 1000 1 слово B байта) 1 Нет операндов Устанавливает в 1 флаг нуля Z регистра SREG. Эквивалентна команде BSET 1 I T H S V N Z С - - - - - - 1 - | 1 add r2,rl9 ; Сложить г2 и г19 1 sez ; Установить флаг нуля SLEEP Перевод микроконтроллера в режим пониженного энергопотребления Операция Код операции Операнды Описание Регистр SREG Число тактов Пример См. описание режимов пониженного энергопотребления в подразделе 4.3.1 1001 0101 1000 1000 1 слово B байта) Нет операндов Переводит микроконтроллер в режим пониженного энергопотребления. Конкретные действия зависят от модели микроконтроллера и от выбранного режима. Для получения более подробной информации обратитесь к разделу 4.3 I T H S V N Z С - - - - - - - - | 1 mov r0,rll ; Скопировать регистр rll в г0 ldi rl6,(l«SE) ; Разрешить переход в «спящий» режим out MCUCR,rl6 sleep ; Переключиться в «спящий» режмим
3.5. Описание команд ¦ 241 SPM Изменение содержимого памяти программ Операция Зависит от контекста: {RAMPZ:Z} = $FFFF — стирание страницы памяти программ; {RAMPZ:Z} = R1:R0 — запись слова в память программ или запись страницы в буфер; {RAMPZ:Z} = TEMP — пересылка содержимого буфера страницы в память программ; {BLBITS} = R1:R0 — запись ячеек защиты секции загрузчика Код операции 10010101 11101000 1 слово B байта) Операнды Нет операндов Описание Эта команда может выполнять стирание отдельной страницы памяти программ, запись страницы памяти программ, а также изменение ячеек защиты секции загрузчика. Адрес страницы памяти программ или слова в ней содержится в регистре Z, а данные, если они необходимы, находятся в регистровой паре Rl :R0. Подробно использование этой команды описано в главе 14 Регистр SREG I Н N Число тактов Зависит от операции Пример Пример записи слова Idi r31,$F0 clr гЗО Idi rl6,$CF mov rl,rl6 Idi rl6,$FF mov r0,rl6 Idi rl6,$03 out SPMCR,rl6 spm Idi rl6,$01 out SPMCR,rl6 spm в память программ Загрузить адрес в регистр Z Загрузить данные Разрешить SPM (стереть страницу) Стереть страницу памяти программ ни адресу $F000 Разрешить SPM (записать слово в память программ) Записать содержимое rl:r0 по адресу $F000
242 ¦ Глава 3. Система команд STX,Rr Косвенная запись в память данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [X] = Rr 1001 OOlr rrrr 1100 1 слово B байта) 1 0<г<31 Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X I T H S V N Z С - - - - - - - - 2 clr r27 ; Очистить старший байт индексного регистра ldi r26,$60 ; Загрузить младший байт адреса st X,rl ; Загрузить rl по адресу $0060 STX+,Rr Косвенная запись в память данных с постинкрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [X] = Rr,X = X+l 1001 001r rrrr 1101 1 слово B байта) 0 < г < 31, для г = 26 ил и 27 результат операции не определен Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X. После пересылки байта содержимое регистра X увеличивается на 1 I T H S V N Z С - - - - - - - - 2 clr r27 ldi г26,$60 st X+,rl in rl,r26 Очистить старший байт индексного регистра Загрузить младший байт адреса Загрузить rl по адресу $0060 В регистре rl - $61
3.5. Описание команд ¦ 243 ST-X,Rr Косвенная запись в память данных с преддекрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример X = X-l,[X] = Rr JOOlOOlrrrrrJUO 1 слово B байта) 0 < г < 31, для г = 26 или 27 результат операции не определен Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре X, причем перед обращением к памяти данных содержимое регистра X уменьшается на 1 I T H S V N Z С - - - - - - - - 2 clr r27 ; Очистить старший байт индексного регистра ldi г2б,$63 ; Загрузить младший байт адреса st -X,r3 ; Загрузить гЗ по адресу $0062 STY, Rr Косвенная запись в память данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [Y] = Rr lOOOOOlrrrrrlOOO 0<r<31 1 слово B байта) Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y I Т - - clr r29 ldi г28,$60 st Y,rl Н S V N Z С - - - - - - 2 ; Очистить старший байт индексного регистра ; Загрузить младший байт адреса ; Переслать rl по адресу $0060
244 ¦ Глава 3. Система команд STY+,Rr Косвенная запись в память данных с постинкрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [Y] = Rr,Y = Y+l 1001 OOlrrrrr 1101 1 слово B байта) 1 0 < г < 31, для г = 28 или 29 результат операции не определен Сохраняет содержимое регистра общего назначения Rr в памяти данных Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y После пересылки байта содержимое регистра Y увеличивается на 1 I T H S V N Z С - - - - - - - - 2 clr г29 , Очистить старший байт индексного регистра ldi г28,$60 , Загрузить младший байт адреса st Y+,rl , Переслать rl по адресу $0060 in r2,r28 , В регистре г2 - $61 ST-Y,Rr Косвенная запись в память данных с преддекрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Y = Y-l,[Y] = Rr I 1001 OOlrrrrr 1010 1 слово B байта) 0 < г < 31, для г = 28 или 29 результат операции не определен Сохраняет содержимое регистра общего назначения Rr в памяти данных Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Y, причем перед обращением к памяти данных содержимое регистра Y уменьшается на 1 I T H S V N Z С - - - - - - - - 2 clr r29 ; Очистить старший байт индексного регистра ldi г28,$63 ; Загрузить младший байт адреса st -Y,r3 , Переслать гЗ по адресу $0062
3.5. Описание команд ¦ 245 STZ, Rr Косвенная запись в память данных Операция ' Код операции Операнды Описание Регистр SREG Число тактов Пример [Z] = Rr 1000 001 г rrrr 0000 1 слово B байта) i 0<г<31 Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z I T H S V N Z С - - - - - - - - 2 clr r31 ; Очистить старший байт индексного регистра ldi r30,$60 ; Загрузить младший байт адреса st Z,rl ; Переслать rl по адресу $0060 STZ+,Rr Косвенная запись в память данных с постинкрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [Z] = Rr,Z = Z+l 1001 001 г rrrr 1001 1 слово B байта) 0 < г < 31, для г = 30 или 31 результат операции не определен Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z. После пересылки байта содержимое регистра Z увеличивается на 1 I T H S V N Z С - - - - - - - - 2 clr r31 ldi r30,$60 st Z+,rl in r2,r30 Очистить старший байт индексного регистра • Загрузить младший байт адреса • Переслать rl по адресу $0060 • В регистре г2 - $61
246 ¦ Глава 3. Система команд ST-Z,Rr Косвенная запись в память данных с преддекрементом Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Z = Z-l,[Z] = Rr 1001 OOlr rrrr 1010 1 слово B байта) 0 < г < 31, для г = 30 или 31 результат операции не определен Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, содержится в индексном регистре Z, причем перед обращением к памяти данных содержимое регистра Z уменьшается на 1 I T H S V N Z С - - - - - - - - 2 clr г31 ; Очистить старший байт индексного регистра ldi r30,$63 ; Загрузить младший байт адреса st -Z,r3 ; Переслать гЗ по адресу $0062 STDY+q,Rr Косвенная относительная запись в память данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [Y + q] = Rr 10q0 qql r rrrr 1 qqq 1 слово B байта) 0<г<31, 0<q<63 1 Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Y и константы q. Содержимое индексного регистра не изменяется I T H S V N Z С - - - - - - - - 2 clr r29 ; Очистить старший байт индексного регистра ldi г28,$63 ; Загрузить младший байт адреса std Y+2,r4 ; Переслать г4 по адресу $0065
3.5. Описание команд ¦ 247 STDZ+q,Rd Косвенная относительная запись в память данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [Z + q] = Rr 1 OqO qq 1 г гггг Oqqq 1 слово B байта) 0<г<31, 0<q<63 Сохраняет содержимое регистра общего назначения Rr в памяти данных. Адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра Z и константы q. Содержимое индексного регистра не изменяется I T H S V N Z С - - - - - - - - 2 clr г31 ; Очистить старший байт индексного регистра ldi г30,$63 ; Загрузить младший байт адреса std Z+2,r4 ; Переслать г4 по адресу $0065 STSk, Rd Непосредственная запись в память данных Операция Код операции Операнды Описание Регистр SREG Число тактов Пример [k] = Rd 1001 OOld dddd 0000 кккк кккк кккк кккк 2 слова D байта) 0<d<31,0<k<65535 Сохраняет содержимое регистра общего назначения Rd в памяти данных. Адрес ячейки памяти, к которой производится обращение, задается константой к I T H S V N Z С - - - - - - - - 2 Ids r2,$FF00 ; r2 = [$FF00] add r2,rl ; r2 = r2 + rl sts $FF000,r2 ; Записать результат по тому же адресу
248 ¦ Глава 3. Система команд SUB Rd, Rr Вычитание двух РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd - Rr 0001 lOrdddddrrrr 1 слово B байта) 0<d<31,0<r<31 Вычитает из регистра Rd содержимое регистра Rr. Результат помещается в регистр Rd I Т - - sub rl3,rl2 brne noteq noteq: H S V N Z С 1 о о о о о о 1 ; Вычесть г12 из rl3 (rl3=rl3-rl2) ; Перейти, если г12 * г13 SUBI Rd, К Вычитание константы из регистра Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd - К 1010KKKKddddKKKK 16<d<31,K = 0...255 1 слово B байта) Вычитает из регистра Rd значение константы К. Результат помещается обратно в регистр. Данная команда применима только к старшей половине регистров общего назначения I T H S V N - - о о о о 1 subi r22,$ll ; Вычесть $11 из г22 brne noteq ; Перейти, если г22 * $11 noteq: Z С о о
3.5. Описание команд ¦ 249 SWAP Rd Перестановка полубайтов РОН Операция Код операции Операнды Описание Регистр SREG Число тактов Пример RdG:4) = RdC:0), RdC:0) = RdG:4) 1001 OlOd dddd 0010 1 слово B байта) 0<d<31 Команда производит перестановку старшего и младшего полубайта содержимого регистра Rd I T H S V N Z С - - - - - - - - 1 inc rl ; Инкрементировать rl swap rl ; Переставить полубайты inc rl ; Инкрементировать старший полубайт rl swap rl ; Переставить полубайты обратно TSTRd Проверка РОН на нулевое или отрицательное значение Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Rd = Rd«Rd 0010 00dd dddd dddd 1 слово B байта) 0<d < 31 Проверяет содержимое регистра на нулевое или отрицательное значение путем выполнения операции «Логическое И» регистра с самим собой. Содержимое регистра Rd не изменяется I T H S V N Z С - - - о 0 о о - 1 tst r0 ; Проверить г0 breq zero ; Перейти, если г0 = 0 zero:
250 ¦ Глава 3. Система команд WDR Сброс сторожевого таймера Операция Код операции Операнды Описание Регистр SREG Число тактов Пример Рестарт сторожевого таймера 1001 0101 1010 1000 1 слово B байта) Нет Выполняет сброс сторожевого таймера При включенном сторожевом таймере данная команда должна выполняться через определенный промежуток времени, определяемый коэффициентом деления предделителя сторожевого таймера Для получения подробной информации обратитесь к главе 6 I T H S V N Z С - - - - - - - - 1 wdr ; Сбросить сторожевой таймер
4.1. Общие сведения С микроконтроллерами семейства Mega могут использоваться самые различные источники тактового сигнала. Прежде всего, это встроенный кварцевый генератор с подключаемым внешним резонатором. Также в качестве тактового может использоваться простейший ЛС-генератор — как внутренний (калиброванный), так и с внешней ЛС-цепочкой. Кроме того, в качестве тактового может использоваться сигнал от внешнего источника. Все микроконтроллеры семейства Mega имеют несколько (до шести) режимов пониженного энергопотребления, обычно называемых одним термином — «спящий» режим. Каждый из этих режимов позволяет снизить энергопотребление микроконтроллера в периоды его бездействия. Вход в любой из этих режимов выполняется по команде SLEEP. При выходе микроконтроллера из «спящего» режима выполнение программы продолжается с места остановки. Сброс микроконтроллера может произойти в результате наступления опре- деленных событий. Такими событиями являются появление на выводе RESET сигнала Н ИЗКОГО уровня, включение напряжения питания, снижение напряжения питания ниже минимально допустимого уровня, срабатывание сторожевого таймера, а также получение команды сброса по интерфейсу JTAG. 4.2. Тактовый генератор В общем виде устройство синхронизации микроконтроллеров семейства Mega представлено на Рис. 4.1 (блок предделителя и возможность подключения внешней /?С-цепочки имеются не во всех моделях). Как видно из рисунка, на базе системного тактового сигнала формируются дополнительные сигналы, используемые для тактирования различных модулей и блоков микроконтроллера: • clkCpu — тактовый сигнал центрального процессора. Используется для тактирования блоков микроконтроллера, отвечающих за работу с ядром микроконтроллера (регистровый файл, память данных и т. п.). При выключении этого сигнала ЦПУ останавливается и соответственно прекращаются все вычисления; ГЛАВА 4 Тактирование, режимы пониженного энергопотребления и сброс
252 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Рис. 4.1. Устройство синхронизации • с1к|/0 — тактовый сигнал подсистемы ввода/вывода. Используется большинством периферийных устройств, таких как таймеры/счетчики и интерфейсные модули. Этот сигнал используется также подсистемой внешних прерываний, однако ряд внешних прерываний может генерироваться и при его отсутствии; • CALASH — тактовый сигнал для FLASH-памяти программ. Как правило, этот сигнал активируется и деактивируется одновременно с тактовым сигналом центрального процессора clkCPU; • clkASY — тактовый сигнал асинхронного таймера/счетчика. Тактирование осуществляется непосредственно от внешнего кварцевого резонатора C2 768 Гц). Наличие выделенного сигнала позволяет использовать соответствующий таймер/счетчик в качестве часов реального времени даже при нахождении микроконтроллера в «спящем» режиме; • c^adc — тактовый сигнал модуля АЦП. Наличие выделенного тактового сигнала позволяет осуществлять преобразования при остановленном ЦПУ и подсистеме ввода/вывода. При этом значительно уменьшается уровень помех, генерируемых микроконтроллером, и соответственно увеличивается точность преобразования. Тактовый генератор микроконтроллеров семейства Mega может работать с внешним кварцевым/керамическим резонатором, внешней или внутренней /?С-цепочкой, а также с внешним сигналом синхронизации.
4.2. Тактовый генератор ¦ 253 Возможность использования того или иного источника тактового сигнала зависит от модели микроконтроллера (см. Табл. 4.1). Поскольку архитектура микроконтроллеров полностью статическая, минимально допустимая частота ничем не ограничена (вплоть до пошагового режима работы), а максимальная рабочая частота определяется конкретной моделью микроконтроллера. Таблица 4.1. Источники тактового сигнала Источник тактового сигнала Кварцевый генератор Генератор с внешней /?С-цепочкой Внутренний ЛС-генератор Внешний сигнал синхронизации ATmega8x/16x/32x/ 64х/128х • ATmega8515x • ATmega8535x • ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/ 644x ATmegal65x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x Таблица 4.2. Выбор режима работы тактового генератора Режим работы Экономичный кварцевый генератор Кварцевый генератор Низкочастотный кварцевый генератор Генератор с внешней 7?С-цепочкой Внутренний RC-генератор на 128 кГц Внутренний калиброванный /?С-генератор!) Внешний сигнал синхронизации Зарезервировано CKSEL3...0 ATmega8515x/8535x, ATmega8x/16x/32x, ATmega64x/128x 1111...1010 1001 1000...0101 - 0100...0001 0000 - ATmegal62x - 1111...1000 0111...0100 - - 0010 0000 0011,0001 ATmegal65x, ATmega325x/3250x, ATmega645x/6450x - 1111...1000 0111...0110 — — 0010 0000 0001,0011, 0100,0101 ATmega48x/88x/168x, ATmegal64x/324x/644x, ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x 1111...1000 0111...0110 0101...0100 - 0011 0010 0000 0001 ]) Режим по умолчанию.
254 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Во всех моделях выбор режима работы тактового генератора осуществляется программированием конфигурационных ячеек (FUSE Bits) CKSEL3...0. Требуемые значения для каждого режима работы приведены в Табл. 4.2. Подробно о конфигурационных ячейках будет рассказано в главе 14, посвященной программированию микроконтроллеров. От значений, занесенных в эти ячейки, зависит также длительность задержки сброса /tout (cm. раздел 4.4 этой главы). 4.2.1. Генератор с внешним резонатором Резонатор подключается к выводам XTAL1 и XTAL2 микроконтроллеров, как показано на Рис. 4.2. Эти выводы являются соответственно входом и выходом инвертирующего усилителя тактового генератора. Емкости конденсаторов С\ и С2, подключаемых между выводами резонатора и общим проводом, зависят от типа резонатора. Для кварцевых резонаторов емкости этих конденсаторов обычно находятся в пределах 12...22пФ, а для керамических должны выбираться согласно рекомендациям производителей резо- Рис. 4.2. Под- наторов. ключение квар- Теперь рассмотрим, каким образом осуществляется цевого или кера- конфигурирование тактового генератора с внешним ре- мического зонатором (далее, для простоты, кварцевого генератора) резонатора в различных моделях. АТтеда8515х/8535хиАТтеда8х/16х/32х/64х/128х Усилитель тактового генератора этих моделей может работать в одном из двух режимов, определяемом состоянием конфигурационной ячейки СКОРТ. Если эта ячейка запрограммирована @), то размах колебаний на выходе усилителя (вывод XTAL2) практически равен напряжению питания. Данный режим полезен при работе устройства в условиях сильных электромагнитных помех, а также при использовании сигнала тактового генератора для управления внешними устройствами. В последнем случае между выводом и внешней схемой обязательно должен быть буфер. Если ячейка СКОРТ не запрограммирована A), то размах колебаний на выходе усилителя будет значительно меньше. Соответственно, ток потребления микроконтроллера уменьшается, однако при этом сужается и диапазон возможных частот тактового сигнала. Кроме того, в этом режиме сигнал тактового генератора нельзя использовать для управления внешними устройствами. Собственно генератор может работать в четырех различных режимах, каждый из которых предназначен для определенного диапазона частот. Эти режимы определяются ячейками CKSEL3...1 и СКОРТ (см. Табл. 4.3).
4.2. Тактовый генератор ¦ 255 Таблица 4.3. Режимы работы кварцевого генератора Г СКОРТ 1 1 1 0 CKSEL3...1 101') 110 111 101,110,111 Примерный диапазон частот [МГц] 0.4...0.9 0.9...3.0 3.0...8.0 >1.0 ]) В этом режиме должен использоваться только керамический резонатор. ATmega162x, ATmega165x, ATmega325x/3250x/645x/6450x Кварцевый генератор этих моделей также может работать в четырех различных режимах, определяемых состоянием ячеек CKSEL3...1. Диапазоны частот, для которых предназначен тот или иной режим, приведены в Табл. 4.4. Таблица 4.4. Режимы работы кварцевого генератора CKSEL3...1 100 !) 101 по 111 Примерный диапазон частот [МГц] 0.4...0.9 0.9...3.0 3.0...8.0 >8.0 1) В этом режиме должен использоваться только керамический резонатор. АТтеда48х/88х/168х, АТтеда164х/324х/644х, АТтеда640х/1280х/1281х/2560х/2561х Кварцевый генератор этих моделей может работать в пяти различных режимах. Причем в первом режиме размах колебаний на выходе генератора практически равен напряжению питания, а остальные четыре режима являются «экономичными», т. е. размах колебаний на выходе генератора будет гораздо меньше. Как уже упоминалось, в таком случае уменьшается ток потребления микроконтроллера, однако при этом микроконтроллер становится более чувствительным к внешним помехам. Используемый режим задается ячейками CKSEL3...1 (см. Табл. 4.5). Таблица 4.5. Режимы работы кварцевого генератора CKSEL3...1 ОН» 1002) 101 110 111 Примерный диапазон частот [МГц] 0.4...16 0.4...0.9 0.9...3.0 3.0...8.0 >8.0 1) Обычный (неэкономичный) режим. 2) В этом режиме должен использоваться только керамический резонатор.
256 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс 4.2.2. Низкочастотный кварцевый генератор Этот режим предназначен для использования низкочастотного кварцевого резонатора на частоту 32 768 Гц, так называемого «часового кварца». Как и другие внешние резонаторы, он подключается к выводам XTAL1 и XTAL2 микроконтроллеров. У некоторых моделей имеются внутренние конденсаторы, которые можно подключить между выводами резонатора и общим проводом. При этом надобность во внешних конденсаторах, естественно, отпадает. В моделях ATmega8515x/8535x и ATmega8x/16x/32x/64xl28x конденсаторы емкостью 36 пФ подключаются при записи 0 в конфигурационную ячейку СКОРТ, а в моделях ATmegal62x конденсаторы подключаются, если в ячейках CKSEL3...0 записано значение 0110 или 0111. Емкость каждого из конденсаторов составляет 10 пФ. В остальных моделях необходимо использовать внешние конденсаторы. 4.2.3. Внешний сигнал синхронизации Рис, 4.3. Подключение внешнего источника тактового сигнала Сигнал от внешнего источника подается на вывод XTAL1, как показано на Рис. 4.3. Разумеется, этот сигнал должен удовлетворять требованиям микроконтроллера по частоте, скважности и уровням напряжения. Вывод XTAL2 в этом режиме оставляют неподключенным. В моделях ATmega8x/16x/32x/64x/128x и ATmega8515x/8535x между выводом XTAL1 и общим проводом можно включить внутренний конденсатор емкостью 36 пФ. Это осуществляется записью 0 в конфигурационную ячейку СКОРТ. 4.2.4. Генератор с внешней ЯС-цепочкой Рис. 4.4. Подключение внешней ЛС-цепочки При реализации приложений, не требующих высокой временной точности, можно использовать простейший ЛС-генератор. При этом внешняя /?С-цепочка подключается к выводу XTAL1, как показано на Рис. 4.4. Емкость конденсатора цепочки должна быть не менее 22 пФ, а сопротивление резистора рекомендуется выбирать из диапазона 3.3... 100 кОм. Ориентировочно частоту сигнала генератора можно оценить по формуле
4.2. Тактовый генератор ¦ 257 Внешний конденсатор в этих моделях можно исключить, задействовав внутренний емкостью 36 пФ. Как уже было отмечено, внутренний конденсатор подключается при записи 0 в конфигурационную ячейку СКОРТ. Как и в случае кварцевого генератора, при использовании внешней /?С-цепочки тактовый генератор может работать в четырех различных режимах, каждый из которых оптимизирован для определенного диапазона частот. Эти режимы определяются содержимым ячеек CKSEL3...0 согласно Табл. 4.6. Таблица 4.6. Режимы работы генератора с внешней Ж*-цепочкой CKSEL3...0 0101 оно 0111 1000 Примерный диапазон частот [мГц] 0...0.9 0.9...3.0 3.0...8.0 8.0...12.0 4.2.5. Внутренний калиброванный /?С-генератор Использование встроенного /?С-генератора с внутренней времязадаю- щей ЛС-цепочкой (внутреннего /?С-генератора) является наиболее экономичным решением, так как при этом не требуются никакие внешние компоненты. Номинальные частоты внутреннего /?С-генератора для различных моделей приведены в Табл. 4.7. Таблица 4,7. Номинальные частоты внутреннего ЖЧенератора Модель ATmega8515x/8535x ATmega8x/16x/32x/64x/128x ATmega48x/88x/168x ATmegal62x ATmega 164x/324x/644x ATmega 165x/325x/3250x/645x/6450x ATmega640x/1280x/1281x/2560x/2561x Частота [МГц] 1.0,2.0,4-0,8.0 1.0,2.0,4.0,8.0 8.0 8.0 8.0 8.0 8.0 Примечание ПриКсс = 5.0В, Г=+25°С ПриКСс = 3.0 В, Г=+25°С Как видно из таблицы, в некоторых моделях внутренний RC-генератор может работать на нескольких фиксированных частотах. Рабочая частота генератора этих моделей определяется содержимым конфигурационных ячеек CKSEL3...0 согласно Табл. 4.8.
258 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Таблица 4.8. Режимы работы внутреннего Ж1-генератора CKSEL3...0 0001 ° 0010 ООП 0100 Частота [МГц] 1.0 2.0 4.0 8.0 !) Режим по умолчанию. Следует отметить, что при работе с внутренним /?С-генератором в конфигурационной ячейке СКОРТ (если она имеется в микроконтроллере) должна быть записана 1. Во всех микроконтроллерах семейства предусмотрена возможность подстройки частоты внутреннего генератора (так называемая калибровка). Для этой цели используется регистр OSCCAL, расположение которого в пространстве ввода/вывода для разных моделей приведено в Табл. 4.9. Таблица 4.9. Адреса регистра OSCCAL Модель ATmega8515x ATmega8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x/325x/3250x/645x/6450x ATmega640x/1280x/1281x/2560x/2561x Адрес регистра OSCCAL $04($24) $31 ($51) $31 ($51) $31($51)° ($6F) ($66) 1 $04($24)п ($66) ($66) ($66) !) Регистр OSCCAL доступен из программы по указанному адресу только в том случае, если в конфигурационной ячейке OCDEN записана 1. Чем больше значение, записанное в регистре OSCCAL, тем больше частота генератора. Диапазон возможного изменения частоты ЯС-генера- тора в зависимости от содержимого этого регистра указан в Табл. 4.10.
4.2. Тактовый генератор ¦ 259 Таблица 4.10. Влияние содержимого регистра OSCCAL на частоту внутреннего .ЛС-генератора Содержимое регистра OSCCAL $00 $7F $FF /min (в процентах от номинальной) 50 75 100 /мах (в процентах от номинальной) 100 150 200 Значение, необходимое для подстройки генератора на номинальную частоту с точностью не хуже ±1% при температуре +25°С (для всего диапазона рабочих температур это значение соответствует точности не хуже ±3%), записывается при изготовлении микроконтроллера в специальные калибровочные ячейки, количество которых равно числу номинальных частот внутреннего ЯС-генератора данной модели. Эти ячейки доступны только в режиме программирования микроконтроллеров. Загрузка калибровочной константы для частоты 1 МГц осуществляется аппаратно при каждом включении питания. Если же требуется другая частота внутреннего ЛС-генератора, соответствующее значение должно загружаться в регистр OSCCAL программным путем. Для этого программатор должен считать содержимое калибровочной ячейки и записать его в заранее определенное место в FLASH-памяти программ или EEPROM. А в самом начале программы следует прочитать содержимое по этому адресу и загрузить его в регистр OSCCAL. Следует помнить, что внутренний генератор предназначен для работы на номинальных частотах. Поэтому подстройка на другие частоты хотя и возможна, но не гарантируется. Более того, внутренний ЛС-генератор определяет временные параметры доступа к FLASH- и EEPROM-памяти, поэтому увеличение частоты генератора более чем на 10% может привести к невозможности записи в эти области памяти. 4.2.6. Внутренний RC-генератор на 128 кГц В моделях ATmega48x/88x/168x, ATmegal64x/324x/644x, ATmega640x и ATmegal280x/1281x/2560x/2561x в качестве тактового можно использовать еще один внутренний ЯС-генератор, имеющий фиксированную частоту 128 кГц. Для выбора этого источника тактового сигнала в ячейках CKSEL3...0 должно быть записано значение 0011. 4.2.7. Управление тактовой частотой В некоторых моделях семейства имеется возможность программного уменьшения частоты сигнала, поступающего от тактового генератора. Понятно, что одновременно с уменьшением тактовой частоты уменьшаются
260 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс частоты сигналов clkCPU, clkI/0, clkFLASH, с1кАос> т- е- замедляется работа всех периферийных устройств микроконтроллера. Если асинхронный таймер/счетчик работает в синхронном режиме, то соответствующим образов изменяется и частота сигнала clkASY. Для управления предделителем тактового сигнала используется один из регистров ввода/вывода. Название этого регистра и его адрес для разных моделей приведены в Табл. 4.11. Таблица 4.11. Регистры управления предделителем тактового сигнала Модель ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmega 164x/324x/644x ATmega 165x/325x/3250x/645x/6450x ATmega640x/1280x/1281x/2560x/2561x Регистр XDIV CLKPR CLKPR CLKPR CLKPR CLKPR Адрес $3C ($5C) ($61) ($61) ($61) ($61) ($61) В микроконтроллерах ATmega64x и ATmega 128x для управления предделителем тактового сигнала предназначен регистр ввода/вывода XDIV, расположенный по адресу $ЗС ($5С). Формат этого регистра приведен на Рис. 4.5. Рис. 4.5. Формат регистра XDIV Старший бит регистра (XDIVEN) служит для включения/выключения предцелителя тактового сигнала, а остальные биты (XDIV6...0) определяют тактовую частоту микроконтроллера. Если обозначить содержимое битов XDIV6...0 как d, зависимость тактовой частоты от состояния этих битов будет определяться выражением /. = Частота источника Jclk- m_d Изменение битов XDIV6...0 возможно только при сброшенном бите XDIVEN. При установке его в 1 тактовая частота микроконтроллера будет определяться выражением, приведенным выше. При сброшенном в 0 бите XDIVEN содержимое битов XDIV6...0 игнорируется.
4.2. Тактовый генератор ¦ 261 В остальных моделях для управления предделителем тактового сигнала предназначен регистр CLKPR, расположенный по адресу ($61) в пространстве дополнительных регистров ввода/вывода. Формат этого регистра приведен на Рис. 4.6. Рис. 4.6. Формат регистра CLKPR Старший бит (СРСЕ) служит для разрешения изменения частоты тактового сигнала, а биты CLKPS3...CLKPS0 задают коэффициент деления предделителя (Табл. 4.12). Таблица 4.12. Выбор коэффициента деления предделителя тактового сигнала CLKPS3 0 0 0 0 0 0 0 0 1 1 CLKPS2 0 0 0 0 1 1 1 1 0 0 CLKPS1 0 0 1 1 0 0 1 1 0 0 CLKPS0 0 1 0 1 0 1 0 1 0 1 1 1 1 1 Коэффициент деления 1 2 4 8 16 32 64 128 256 Зарезервировано Для изменения содержимого битов CLKPS3...0 следует выполнить следующие действия: 1. Записать в бит СРСЕ лог. 1, а в биты CLKPS3...0 — лог. 0. 2. В течение следующих четырех тактов занести требуемое значение в биты CLKPS3...0, при этом бит СРСЕ будет сброшен в 0. В противном случае бит СРСЕ буден сброшен аппаратно по истечении четырех тактов, запрещая дальнейшее изменение битов CLKPS3...0.
262 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Начальное состояние битов CLKPS3...0 определяется конфигурационной ячейкой CKDIV8. Если она не запрограммирована A), то при запуске микроконтроллера в битах CLKPS3...0 будет находиться значение 0000. Если же ячейка CKDIV8 запрограммирована @), стартовым значением битов CLKPS3...0 является 0011 (коэффициент деления — 8). 4.3. Управление электропитанием Микроконтроллеры семейства Mega предоставляют пользователю широкие возможности по уменьшению тока, потребляемого кристаллом. Для этого в любой модели семейства имеется несколько (от 3 до 6) режимов пониженного потребления, при переходе в которые выполнение программы приостанавливается, а возобновляется при наступлении определенных событий. В новых моделях, кроме того, предусмотрен менее радикальный способ снижения энергопотребления кристалла — отключение тактовых сигналов незадействованных периферийных модулей. 4.3.1. Режимы пониженного энергопотребления Различные модели микроконтроллеров семейства поддерживают от 3 до 6 режимов пониженного энергопотребления (Табл. 4.13). Режимы отличаются числом периферийных устройств микроконтроллера, функционирующих во время «сна» микроконтроллера, и соответственно степенью уменьшения энергопотребления. Таблица 4.13. Режимы пониженного энергопотребления Режим пониженного энергопотребления Idle ADC Noise Reduction Power Down Power Save Standby Extended Standby ATmega8515x • • • ATmega8535x ATmega8x ATmegal6x/32x/64x/128x ATmega48x/88x/168x ATmegal62x • • • • • ATmegal64x/324x/644x ATmegal65x, ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x
4.3. Управление электропитанием ¦ 263 В зависимости от модели для управления «спящим» режимом используется различное число регистров ввода/вывода, которые сведены в Табл. 4.14. Форматы этих регистров приведены на Рис. 4.7...4.10 (биты, не имеющие отношения к управлению энергопотреблением, выделены серым цветом). Таблица 4.14. Регистры для управления «спящим» режимом Название MCUCR MCUCR MCUCSR EMCUCR SMCR Описание Регистр управления микроконтроллера Регистр управления микроконтроллера Регистр управления и состояния микроконтроллера Дополнительный регистр управления микроконтроллера Регистр управления спящим режимом Адрес $35($55) $35($55) $34($54) $36($56) $33($53) Рис. 4.7 4.7 4.8 4.9 4.10 Модель ATmega8x/16x/32x/64x/128x, ATmega8535x ATmega8515x, ATmegal62x ATmega48x/88x/168x, ATmega 164x/324x/644x/l 65x, ATmega325x/3250x/645x/6450x, ATmega640x, ATmega1280x/1281x/2560x/2561x Рис. 4.7. Формат регистра MCUCR
264 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Рис. 4.8. Формат регистра MCUCSR моделей ATmega8515x и ATmegal62x Рис. 4.9. Формат регистра EMCUCR моделей ATmega8515x и ATmegal62x Рис. 4.10. Формат регистра SMCR В общей сложности для управления «спящим» режимом в микроконтроллерах семейства используется четыре бита регистров ввода/вывода. Назначение этих битов приведено в Табл. 4.15. Таблица 4.15. Биты регистров для управления «спящим» режимом Название бита SE SM2...SM0 Описание Разрешение перехода в режим пониженного энергопотребления. Установка этого бита в 1 разрешает перевод микроконтроллера в режим пониженного энергопотребления. Переключение осуществляется по команде SLEEP. При сброшенном бите SE выполнение команды не производит никаких действий Выбор режима пониженного энергопотребления. Состояние этих битов определяет, в какой режим перейдет микроконтроллер после выполнения команды SLEEP Переключение в любой из режимов пониженного потребления осуществляется командой SLEEP. При этом флаг SE должен быть установлен в 1. Во избежание непреднамеренного переключения микроконтроллера е «спящий» режим рекомендуется устанавливать этот флаг непосредственно перед выполнением команды SLEEP. Режим, в который перейдет микроконтроллер после выполнения команды SLEEP, определяется состоянием битов SM2...SM0. Соответствие между содержимым этих битов и режимом пониженного энергопотребления приведено в Табл. 4.16.
4.3. Управление электропитанием ¦ 265 Таблица 4.16. Выбор режима пониженного энергопотребления SM2 0 0 0 0 1 1 1 1 SM1 0 0 1 1 0 0 1 1 SM0 0 1 0 1 0 1 0 1 Режим Idle ADC Noise Reduction Power Down Power Save Зарезервировано Зарезервировано Standby0 Extended Standby0 0 Эти режимы можно использовать только при работе с внешним резонатором (три первых режима работы тактового генератора согласно Табл. 4.2) Наличие того или иного режима в конкретной модели можно определить по Табл. 4.13, находящейся в начале подраздела. При отсутствии в конкретной модели микроконтроллера какого-либо из режимов значения битов SM2...SM0, соответствующие этому режиму, являются зарезервированными. Выход из «спящего» режима может быть осуществлен: 1.В результате прерывания. При генерации прерывания микроконтроллер переходит в рабочий режим, останавливается на 4 такта, выполняет подпрограмму обработки прерывания и возобновляет выполнение программы с инструкции, следующей за командой SLEEP. Содержимое РОН, ОЗУ и РВВ при этом не изменяется. 2. В результате сброса. После перехода микроконтроллера в рабочий режим управление передается по адресу вектора сброса. Idle (режим холостого хода) В этом режиме прекращается формирование тактовых сигналов clkCPU и clkFLASH При этом ЦПУ микроконтроллера останавливается, а все остальные периферийные устройства (интерфейсные модули, таймеры/счетчики, аналоговый компаратор, АЦП, сторожевой таймер), а также подсистема прерываний продолжают функционировать. Поэтому выход из режима Idle возможен как по внешнему, так и по внутреннему прерыванию. Если разрешена работа АЦП, то преобразование начнет выполняться сразу же после перехода в «спящий» режим. Основным преимуществом режима Idle является быстрая реакция на события, приводящие к «пробуждению» микроконтроллера. Другими словами, выполнение программы начинается сразу же после перехода из режима Idle в рабочий режим.
266 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс ADC Noise Reduction (режим снижения шумов АЦП) Данный режим имеется только в моделях, содержащих в своем составе модуль АЦП. В этом режиме прекращает работу ЦПУ микроконтроллера и подсистема ввода/вывода (отключаются тактовые сигналы clkCPU, clkFLASH и с1к|/0), а АЦП, подсистема обработки внешних прерываний, сторожевой таймер, асинхронный 8-битный таймер/счетчик, блок сравнения адреса модуля TWI и схема обнаружения состояния СТАРТ модуля USI продолжают функционировать. За счет этого уменьшаются помехи на входах АЦП, вызываемые работой системы ввода/вывода микроконтроллера, что, в свою очередь, позволяет повысить точность преобразования. Если АЦП включен, преобразование начнет выполняться сразу же после перехода в «спящий» режим. Поскольку тактовый сигнал подсистемы ввода/вывода clki/0 в этом режиме не генерируется, возврат микроконтроллера в рабочий режим может произойти только в результате сброса (аппаратного, от сторожевого таймера, от схемы BOD) или в результате генерации следующих прерываний: • прерывания от сторожевого таймера; • прерывания от асинхронного таймера/счетчика; • прерывания по совпадению адреса от интерфейса TWI; • прерывания по обнаружению модулем USI состояния СТАРТ; • внешнего прерывания, обнаруживаемого асинхронно; • прерывания по изменению состояния выводов; • прерывания от EEPROM-памяти и SPM-прерывания; • прерывания от АЦП. Power Down (режим микропотребления) В режиме Power Down отключаются все внутренние тактовые сигналы, соответственно прекращается функционирование всех систем микроконтроллера, работающих в синхронном режиме. Единственными узлами, продолжающими работать в этом режиме, являются асинхронные модули микроконтроллера: сторожевой таймер (если он включен), подсистема обработки внешних прерываний, блок сравнения адреса модуля TWI и схема обнаружения состояния СТАРТ модуля USI. Соответственно, выход из режима Power Down возможен либо в результате сброса (аппаратного, от сторожевого таймера, от схемы BOD) или в результате генерации следующих прерываний: • прерывания по совпадению адреса от интерфейса TWI; • прерывания по обнаружению модулем USI состояния СТАРТ; • внешнего прерывания (обнаруживаемого асинхронно). Поскольку тактовый генератор микроконтроллера в режиме Power Down останавливается, между наступлением события, приводящего к «пробуждению» микроконтроллера, и началом его работы проходит некоторое время, в течение которого тактовый генератор микроконтроллера выходит на рабочий режим. Эта задержка определяется теми же конфигу-
4.3. Управление электропитанием ¦ 267 рационными ячейками, которые задают задержку сброса микроконтроллера (см. раздел 4.4). Также следует помнить, что для «пробуждения» микроконтроллера по внешнему прерыванию, генерируемому по НИЗКОМУ уровню, длительность активного сигнала на входе микроконтроллера должна быть не меньше времени запуска микроконтроллера /s (см. раздел 4.4). Если сигнал, вызвавший «пробуждение» микроконтроллера, будет снят раньше, чем микроконтроллер перейдет в рабочий режим, то обработчик соответствующего прерывания вызван не будет! Power Save (экономичный режим) Этот режим практически идентичен режиму Power Down, за исключением поведения 8-битного таймера/счетчика, поддерживающего работу в асинхронном режиме. Кроме того, этот спящий режим в разных моделях семейства реализован немного по-разному. В моделях ATmega8535x, ATmega8x/16x/32x/64x/128x и ATmegal62x асинхронный таймер/счетчик может работать в асинхронном режиме во время «сна» микроконтроллера. А в остальных моделях этот таймер/счетчик может работать во время «сна» как в асинхронном, так и в синхронном режиме, причем в последнем случае синхронный тактовый сигнал подается только на этот модуль микроконтроллера. Если синхронный режим работы таймера/счетчика не задействован, то при входе микроконтроллера в режим Power Save основной источник тактового сигнала останавливается. Таким образом, выход из режима Power Save возможен не только в результате событий, перечисленных при рассмотрении режима Power Down, но и по прерываниям от асинхронного таймера/счетчика. Разумеется, эти прерывания должны быть разрешены. Standby (режим ожидания) Этот режим рекомендуется задействовать только при использовании в качестве источника тактового сигнала встроенного генератора с внешним резонатором. Режим Standby полностью идентичен режиму Power Down, за исключением того, что тактовый генератор продолжает функционировать. Благодаря этому, переход микроконтроллера в рабочий режим происходит гораздо быстрее — за 6 тактов. Extended Standby (расширенный режим ожидания) Как и режим Standby, этот режим рекомендуется задействовать только при использовании в качестве источника тактового сигнала встроенного генератора с внешним резонатором. Режим Extended Standby полностью идентичен режиму Power Save, за исключением того, что тактовый генератор продолжает функционировать. Поэтому интервал между «пробуждением» микроконтроллера и выходом его в рабочий режим составляет всего 6 тактов.
268 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Основные отличия разных режимов пониженного энергопотребления приведены в Табл. 4.17. Таблица 4Л7. Основные отличия режимов пониженного энергопотребления Режим Активные внутренние тактовые сигналы Генераторы Источники «пробуждения» микроконтроллера Idle ADC Noise Reduction Power Down Power Save Standby i) Extended Standby ° ,3) 1) Источником тактового сигнала должен быть кварцевый генератор. 2) Если таймер/счетчик работает в асинхронном режиме. 3) Если таймер/счетчик работает в асинхронном режиме (только модели ATmega8535x, ATmega8x/16x/32x/64x/128x и ATmegal62x) и при любом режиме работы таймера/счетчика в остальных моделях. 4) Только прерывания, обнаруживаемые асинхронно. 4.3.2. Управление тактовыми сигналами модулей В моделях ATmega48x/88x/168x, ATmegal64x/324x/644x, ATmegal65x/ 325х/3250х/645х/6450х и ATmega640x/1280x/1281x/2560x/2561x помимо энергосберегающих режимов предусмотрен еще один метод снижения суммарного потребления кристалла. Этот метод заключается в отключении тактовых сигналов тех периферийных модулей, которые не задействованы в конкретном приложении. При этом состояние периферийного модуля «замораживается», а его регистры становятся недоступными для операций чтения/записи. Перед отключением тактового сигнала периферийного модуля желательно запрещать функционирование данного модуля. Это связано с тем, что при отключении тактового сигнала аппаратные ресурсы кристалла, используемые периферийным модулем, остаются в его распоряжении.
4.3. Управление электропитанием ¦ 269 Для управления локальными тактовыми сигналами используется один или два (в зависимости от модели микроконтроллера) регистра ввода/вывода, указанные в Табл. 4.18. Форматы этих регистров приведены на Рис.4.11...4.13. Таблица 4.18. Регистры для управления тактовыми сигналами модулей Название PRR PRR0 PRR0 PRR1 Описание Регистр снижения потребляемой мощности 0-й регистр снижения потребляемой мощности 0-й регистр снижения потребляемой мощности 1-й регистр снижения потребляемой мощности Адрес ($64) ($64) ($64) ($65) Рис. 4.11 4.12 4.12 4.13 Модель ATmega48x/88x/168x, ATmegal65x/325x/3250x/645x/6450x ATmega 164х/324х/644х ATmega640x, ATmegal280x/1281x/2560x/2561x Рис. 4.11. Формат регистра PRR Рис. 4.12. Формат регистра PRR0 Рис. 4.13. Формат регистра PRR1
270 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Назначение битов регистров снижения потребляемой мощности различных моделей приведено в Табл. 4.19 и Табл. 4.20. Таблица 4.19. Биты регистров PRR и PRR0 Бит 7 6 5 4 3 2 1 0 Название PRTWI PRTIM2 PRTIM0 PRUSART1 - PRTIM1 PRSPI PRUSART0 PRADC Описание Отключение модуля TWI. При установке этого бита в 1 прекращается формирование тактового сигнала модуля TWI, в результате чего он отключается. После повторного включения модуль необходимо ре- инициализировать Отключение таймера/счетчика Т2. При установке этого бита в 1 отключается таймер/счетчик Т2, работающий в синхронном режиме (бит AS2 регистра ASSR сброшен в 0). После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме Отключение таймера/счетчика ТО. При установке этого бита в 1 отключается таймер/счетчик ТО. После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме Отключение модуля USART1. При установке этого бита в 1 прекращается формирование тактового сигнала 1-го модуля USART, в результате чего он отключается. После повторного включения модуль необходимо реинициализировать Зарезервирован, читается как 0 Отключение таймера/счетчика Т1. При установке этого бита в 1 отключается таймер/счетчик Т1. После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме Отключение модуля SPI. При установке этого бита в 1 прекращается формирование i актового сигнала модуля SPI, в результате чего он отключается. После повторного включения модуль необходимо реинициализировать Отключение модуля USART0. При установке этого бита в 1 прекращается формирование тактового сигнала 0-го модуля USART, в результате чего он отключается. После повторного включения модуль необходимо реинициализировать Отключение модуля АЦП. При установке этого бита в 1 отключается АЦП. Перед отключением функционирование АЦП необходимо запретить. Примечание. При выключенном АЦП аналоговый компаратор не может использовать входной мультиплексор модуля АЦП Модель ATmega48x/88x/168x, ATmega 164х/324х/644х, ATmega640x, ATmegal280x/1281x, ATmega2560x//2561x ATmega 164x/324x Остальные модели 1 Все модели Все модели Все модели Все модели
4.3. Управление электропитанием ¦ 271 Таблица 4.20. Биты регистра PRR1 1 Бит 7,6 5 4 3 2 1 0 Название - PRTIM5 PRTIM4 PRTIM3 PRUSART3 PRUSART2 PRUSART1 Описание Зарезервированы, читаются как 0 Отключение таймера/счетчика Т5. При установке этого бита в 1 отключается таймер/счетчик Т5. После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме Отключение таймера/счетчика Т4. При установке этого бита в 1 отключается таймер/счетчик Т4. После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме Отключение таймера/счетчика ТЗ. При установке этого бита в 1 отключается таймер/счетчик ТЗ. После повторного включения таймер/счетчик продолжит функционирование в прежнем режиме Отключение модуля USART3. При установке этого бита в 1 прекращается формирование тактового сигнала 3-го модуля USART, в результате чего он отключается. После повторного включения модуль необходимо реинициализировать Отключение модуля USART2. При установке этого бита в 1 прекращается формирование тактового сигнала 2-го модуля USART, в результате чего он отключается. После повторного включения модуль необходимо реинициализировать Отключение модуля USART1. При установке этого бита в 1 прекращается формирование тактового сигнала 1-го модуля USART, в результате чего он отключается. После повторного включения модуль необходимо реинициализировать Модель ATmega640x, ATmegal280x/1281x, ATmega2560x//2561x Использовать отключение тактовых сигналов модулей можно как при нормальном функционировании микроконтроллера, так и совместно с энергосберегающим режимом Idle. 4.3.3. Общие рекомендации по уменьшению энергопотребления Если требуется свести энергопотребление микроконтроллера к минимуму, то при разработке программы необходимо учитывать два момента. Во-первых, необходимо как можно активнее использовать энергосберегающие режимы, причем режим следует выбирать так, чтобы в нем функционировало минимально необходимое количество узлов микроконтроллера. Во-вторых, должна быть запрещена работа всех неиспользуемых модулей. Ниже перечислены модули, на которые рекомендуется обратить более пристальное внимание при решении задачи минимизации суммарного энергопотребления кристалла.
272 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Аналого-цифровой преобразователь Если функционирование АЦП разрешено, то он будет работать во всех «спящих» режимах. Соответственно, для снижения потребляемого тока модуль АЦП необходимо отключать перед переводом микроконтроллера в любой из энергосберегающих режимов. Аналоговый компаратор Если компаратор не используется, то при переводе микроконтроллера в режим Idle или ADC Noise Reduction его необходимо отключить. В других «спящих» режимах модуль аналогового компаратора отключается автоматически. Тем не менее, если в качестве одного из входных сигналов в компараторе используется сигнал от внутреннего ИОН, модуль аналогового компаратора необходимо отключать вручную перед переводом микроконтроллера в любой из «спящих» режимов. В противном случае ИОН останется включенным независимо от «спящего» режима, увеличивая суммарное потребление кристалла. Подробнее о конфигурировании аналогового компаратора будет рассказано в главе 8. Детектор пониженного напряжения питания Если детектор пониженного напряжения питания (Brown-Out Detector — BOD) в приложении не требуется, этот узел необходимо отключить. Если же работа этого узла разрешена, то он будет работать в любом из «спящих» режимов, увеличивая суммарное потребление кристалла. Внутренний источник опорного напряжения Внутренний ИОН будет работать, если включен хотя бы один из следующих узлов микроконтроллера: детектор снижения напряжения питания, аналоговый компаратор, АЦП. При отключении всех этих модулей ИОН выключится автоматически. Не забудьте, что при повторном включении ИОН его выходной сигнал можно будет использовать только спустя некоторый промежуток времени (см. раздел 4.4). Сторожевой таймер Если сторожевой таймер не требуется в приложении, его необходимо отключить. В противном случае он будет работать в любом из «спящих» режимов, увеличивая общее потребление кристалла. Порты ввода/вывода Перед переключением в «спящий» режим все выводы портов ввода/вывода необходимо сконфигурировать так, чтобы они потребляли наименьший ток. Главное — свести к минимуму количество линий, управляющих резистивной нагрузкой. Во всех «спящих» режимах, где прекращается
4.4 Сброс ш 273 формирование тактовых сигналов clkI/0 и clkADC, входные буферы портов ввода/вывода отключаются. Исключение составляют только входные узлы тех линий ввода/вывода, которые используются для вывода микроконтроллера из «спящего» режима. Если же при включенном входном буфере вывод микроконтроллера останется неподключенным или на нем будет присутствовать аналоговый сигнал с напряжением, близким к Ксс/2, то буфер будет потреблять чрезмерный ток. В моделях, позволяющих отключать цифровые входные буферы на аналоговых входах, они должны всегда быть выключены. Модуль внутрисхемной отладки Если внутрисхемная отладка разрешена, то при переходе микроконтроллера в «спящий» режим основной источник тактового сигнала не останавливается, продолжая потреблять ток. Отключить модуль внутрисхемной отладки можно тремя способами: • записать 1 в конфигурационную ячейку OCDEN; • записать 1 в конфигурационную ячейку JTAGEN; • записать 1 в бит JTD соответствующего регистра ввода/вывода. 4.4. Сброс Реинициализация, или так называемый «сброс», переводит микроконтроллер в определенное устойчивое состояние. Сброс может быть вызван следующими событиями: • включение напряжения питания микроконтроллера; • подача сигнала НИЗКОГО уровня на вывод RESET (аппаратный сброс); • тайм-аут сторожевого таймера; • падение напряжения питания ниже заданной величины; • сброс по интерфейсу JTAG. При наступлении любого из перечисленных событий во все регистры ввода/вывода заносятся их начальные значения, а в счетчик команд загружается значение адреса вектора сброса. По этому адресу должна находиться команда безусловного перехода (RJMP — для моделей ATmega8515x/8535x, ATmega8x и ATmega48x/88x, JMP — для остальных моделей) на начало программы. Если же прерывания в программе не используются, то она может начинаться непосредственно с адреса вектора сброса. Сказанное справедливо и для случая, когда вектор сброса располагается в области основной программы, а таблица векторов прерываний — в области загрузчика. Во всех моделях, кроме ATmega48x, значение адреса вектора сброса определяется состоянием конфигурационной ячейки BOOTRST. Если BOOTRST = 1 (до программирования), то вектор сброса располагается в са-
274 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс мом начале памяти программ по адресу $0000 (в моделях ATmega48x вектор сброса всегда располагается по этому адресу). После программирования ячейки вектор сброса располагается в начале области загрузчика. Конкретное значение этого адреса зависит от установок конфигурационных ячеек BOOTSZ1 и BOOTSZ0, определяющих в том числе и размер области загрузчика. Подробно использование этих ячеек будет рассмотрено в главе 14. Зависимость значения адреса вектора сброса от установок конфигурационных ячеек BOOTSZ1 и BOOTSZ0 для всех моделей семейства приведена в Табл. 4.21. Таблица 4.21. Значения адреса вектора сброса BOOTSZ1 1 1 0 0 BOOTSZ0 1 0 1 0 ATmega8515x/8535x, ATmega8x, ATmega88x $F80 $F00 $E00 $C00 ATmegal6x, ATmegal62x, ATmegal64x, ATmegal65x, ATmegal68x $1F80 $1F00 $1E00 $1C00 ATmega32x, ATmega324x, ATmega325x/3250x $3F00 $3E00 $3C00 $3800 ATmega64x, ATmega640x, ATmega644x, ATmega645x/6450x $7E00 $7C00 $7800 $7000 ATmegal28x, ATmegal280x/1281x $FE00 $FC00 $F800 $F000 ATmega2560x/2561x $1FE001 $1FC00 $1F800 $1F000 Обобщенная структурная схема подсистемы сброса приведена на Рис. 4.14. Элементы, выделенные пунктиром, в ряде моделей отсутствуют. Логика схемы сброса всех микроконтроллеров семейства следующая. При наступлении события, приводящего к сбросу микроконтроллера, формируется внутренний сигнал сброса. Одновременно запускается таймер формирования задержки сброса. По истечении определенного промежутка времени внутренний сигнал сброса снимается и начинается выполнение программы. Все микроконтроллеры семейства позволяют определить событие, в результате которого произошел сброс устройства. В зависимости от модели (Табл. 4.22) для этого используется либо регистр управления и состояния микроконтроллера MCUCSR, расположенный по адресу $34 ($54), либо регистр состояния микроконтроллера MCUSR, расположенный по тому же адресу. Эти регистры содержат набор флагов, состояние которых зависит от события, вызвавшего сброс устройства. Формат регистров MCUSR и MCUCSR приведен на Рис. 4.15 (биты, не относящиеся к подсистеме сброса, выделены серым цветом). Описание флагов, используемых для определения источника сброса, приведено в Табл. 4.23.
4.4. Сброс ш 275 Рис. 4.14. Структурная схема подсистемы сброса Таблица 4.22. Регистры для определения источника сброса Название MCUCSR MCUSR Описание Регистр управления и состояния микроконтроллера Регистр состояния микроконтроллера Адрес $34($54) $34 ($54) Модель ATmega8515x/8535x, ATmega8x/16x/32x/64x/128x, ATmegal62x ATmega48x/88x/168x, ATmegal64x/324x/644x, ATmegal65x/325x/3250x/645x/6450x, ATmega640x/1280x/1281x/2560x/2561x
276 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Рис. 4.15. Формат регистров MCUCSR (а) и MCUSR (б) Таблица 4.23. Флаги источников сброса регистров MCUSR и MCUCSR Название флага JTRF WDRF BORF EXTRF PORF Описание Флаг JTAG-сброса. Устанавливается в 1, если сброс произошел в результате команды JTAG AVR_RESET. Бит сбрасывается в результате сброса по питанию или непосредственной записью в него лог. 0 Флаг сброса от сторожевого таймера. Устанавливается в 1, если источником сброса был сторожевой таймер. Бит сбрасывается в результате сброса по питанию или непосредственной записью в него лог. 0 Флаг сброса по снижению питания. Устанавливается в 1, если источником сброса была подсистема BOD. Бит сбрасывается в результате сброса по питанию или непосредственной записью в него лог. 0 Флаг аппаратного сброса. Устанавливается в 1, если сброс произошел в результате подачи на вывод сброса сигнала НИЗКОГО уровня. Бит сбрасывается в результате сброса по питанию или непосредственной записью в него лог. 0 Флаг сброса по включению питания. Устанавливается в 1 после подачи напряжения питания на микроконтроллер. Бит сбрасывается только непосредственной записью в него лог. 0
4.4. Сброс ш 111 4.4.1. Сброс по включению питания В состав всех микроконтроллеров семейства Mega входит система сброса по включению питания (схема POR — Power-on Reset). Эта схема удерживает микроконтроллер в состоянии сброса до тех пор, пока напряжение питания не превысит некоторого порогового значения V?0T. При достижении напряжением питания значения VP0T схема POR запускает таймер задержки сброса. По окончании счета (после формирования задержки /jout) внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Управление выводом RESET микроконтроллера при включении питания может осуществляться двумя способами. Если время нарастания напряжения источника питания известно и не превышает величины /тоиъ можно использовать способ, при котором напряжение на выводе RESET «повторяет» напряжение питания. Соответствующие данному способу временные диаграммы показаны на Рис. 4.16. Для реализации этого способа вывод RESET можно подключить к источнику питания либо оставить неподключенным, поскольку он уже подтянут к источнику питания внутренним резистором. Рис. 4.16. Временные диаграммы сигналов при сбросе по включению питания; вывод RESET подключен к KDD При втором способе вывод RESET управляется внешней схемой, и сигнал ВЫСОКОГО уровня подается на него только после установления напряжения питания. Временные диаграммы, соответствующие этому способу, показаны на Рис. 4.17. В этом случае работой таймера задержки сброса будет управлять схема аппаратного сброса, и он начнет работать при достижении напряжением на выводе RESET порогового значения KRST.
278 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Рис. 4.17. Временные диаграммы сигналов при сбросе по включению питания; вывод RESET управляется внешней схемой Данное решение является более дорогостоящим, так как требует применения внешних компонентов. Однако этот способ позволяет «подгонять» время запуска микроконтроллера под время нарастания напряжения используемого источника питания. 4.4.2. Аппаратный сброс Аппаратный (или внешний) сброс микроконтроллера осуществляется подачей на вывод RESET сигнала НИЗКОГО уровня. Микроконтроллер остается в состоянии сброса до тех пор, пока на выводе RESET будет присутствовать сигнал НИЗКОГО уровня. Минимальная длительность импульса, при которой гарантируется сброс микроконтроллера, для разных моделей различна, но не превышает 3.0 мкс (ATmegal62x). При достижении напряжением на выводе RESET порогового значения KRST запускается таймер задержки сброса. После формирования задержки /tout внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Временные диаграммы сигналов при аппаратном сбросе показаны на Рис. 4.18. Рис. 4.18. Временные диаграммы сигналов при аппаратном сбросе
4.4. Сброс ¦ 279 4.4.3. Сброс от сторожевого таймера По тайм-ауту сторожевого таймера (если он включен) устанавливается внутренний сигнал сброса и генерируется короткий положительный импульс, длительность которого равна одному периоду тактового сигнала микроконтроллера. По спадающему фронту этого импульса запускается таймер задержки сброса. После формирования задержки /tout внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Временные диаграммы, соответствующие сбросу от сторожевого таймера, показаны на Рис. 4.19. 4.4.4. Сброс при снижении напряжения питания Все модели микроконтроллеров семейства Mega имеют в своем составе схему BOD (Brown-Out Detection), которая отслеживает уровень напряжения источника питания. Если работа этой схема разрешена, то при снижении напряжения питания ниже некоторого значения она переводит микроконтроллер в состояние сброса. Когда напряжение питания вновь увеличится до порогового значения, запускается таймер задержки сброса. После формирования задержки /tout внутренний сигнал сброса снимается и происходит запуск микроконтроллера. Временные диаграммы, соответствующие сбросу от схемы BOD, показаны на Рис. 4.20. Для уменьшения вероятности ложных срабатываний порог переключения схемы имеет гистерезис относительно порога срабатывания Квот, равный 50 мВ (^вот+ = ^вот + 25 мВ, Квот_ = VB0T — 25 мВ). Кроме того, срабатывание схемы BOD произойдет только в том случае, если длительность провала напряжения питания будет больше 2 мкс. Во всех моделях включением/выключением схемы BOD управляет конфигурационная ячейка BODEN. Для разрешения работы схемы эта ячейка должна быть запрограммирована @). А вот для задания порога срабатывания схемы BOD в разных моделях используется разное количество конфигурационных ячеек. Рис. 4.19. Временные диаграммы сигналов при сбросе от сторожевого таймера
280 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Рис. 4.20. Временные диаграммы сигналов при сбросе по снижению напряжения питания ATmega8515x/8535x,ATmega8x/16x/32x/64x/128x В этих моделях порог срабатывания определяется состоянием конфигурационной ячейки BODLEVEL. Если в этой ячейке записана 1, порог срабатывания равен 2.7 В. Если же в ней записан 0 (после ее программирования), порог срабатывания равен 4.0 В. АТтеда325х/3250х/645х/6450х В этих моделях для управления схемой BOD используются две конфигурационные ячейки BODLEVEL1 ...0. Влияние содержимого этих ячеек на работу схемы BOD показано в Табл. 4.24. Таблица 4.24. Задание порога срабатывания схемы BOD в моделях ATmega325x/3250x/645x/6450x BODLEVEL1...0 11 10 01 00 Порог срабатывания ^вот0ур)[В] Схема BOD выключена 1.8 2.7 43 АТтеда162х В моделях ATmegal62(V) для управления схемой BOD используются уже три конфигурационные ячейки BODLEVEL2...0. Влияние содержимого этих ячеек на работу схемы BOD показано в Табл. 4.25.
4.4. Сброс ¦ 281 Таблица 4.25. Задание порога срабатывания схемы BOD в моделях A1hiegal62(V) [ BODLEVEL2...0 1 Ш ПО» 101 100 оп'> 010 001 000 Порог срабатывания Уъот (typ) [В] Схема BOD выключена 1.8 2.7 4.3 2.3 Зарезервировано !) Только для модели ATmegal62V. В модели ATmegal62 эти значения зарезервированы. ATmega48x/88x/168x, ATmega164x/324x/644x, ATmega165x, ATmega640x/1280x/1281x/2560x/2561x В этих моделях для управления схемой BOD используются тоже три конфигурационные ячейки BODLEVEL2...0. Влияние содержимого этих ячеек на работу схемы BOD показано в Табл. 4.26. Таблица 4.26. Задание порога срабатывания схемы BOD в моделях ATmega48x/88x/168x, ATmegal64x/324x/644x, ATmegal65x, ATmega640x/1280x/1281x/2560x/2561x BODLEVEL2...0 111 ПО I0l 100 on 010 001 000 Порог срабатывания Уют (typ) [В] Схема BOD выключена 1.8 2.7 4.3 Зарезервировано 4.4.5. Управление схемой сброса Управление схемой сброса заключается в задании длительности задержки сброса Агоит Для этого используются те же конфигурационные ячейки, которые определяют режим работы тактового генератора микроконтроллера, плюс (в некоторых моделях) ряд других. Собственно задержка сброса имеет две составляющие. В течение первой части задержки (/s) происходит выход на рабочий режим и стабилизация частоты тактового генератора перед началом выполнения команд. Кроме того, эта составляющая определяет длительность перехода микроконтроллера в рабочий режим из режимов Power Down и Power Save. При
282 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс формировании этой составляющей таймер задержки сброса работает от тактового генератора микроконтроллера. Вторая часть задержки (/R) предназначена для того, чтобы дать возможность установиться напряжению питания. При формировании этой составляющей задержки таймер работает от ДС-генератора сторожевого таймера. АТтеда8515х/8535х, АТтеда8х/16х/32х/64х/128х Для управления длительностью задержки сброса используются две конфигурационные ячейки — SUT1 и SUT0, а при использовании внешнего резонатора — еще и конфигурационная ячейка CKSELO (младший бит числа, определяющего режим работы тактового генератора). Задание длительности задержки сброса для каждого из режимов работы тактового генератора показано в Табл. 4.27. Таблица 4.27. Определение задержки сброса в моделях ATmega8515x/8535x и ATmega8x/16x/32x/64x/128x Режим работы тактового генератора Кварцевый или керамический резонатор A111...1010) CKSEL0 0 0 0 0 1 1 1 1 SUT1...0 00 01 10 11 00 01 10 11 /g [тактов] 258 258 1К 1К 1К 16К 16К 16К 'R КСС = 5.0В 41 65 - 41 65 - 4.1 65 мс] ГСС = 3.0В 4.3 69 - 4.3 69 - 4.3 69 Рекомендуемые условия использования Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Керамический резонатор, схема BOD включена Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Кварцевый резонатор, схема BOD включена Кварцевый резонатор, малое время нарастания напряжения питания Кварцевый резонатор, большое время нарастания напряжения питания Примечание Могут быть использованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы Могут быть использованы также для кварцевых резонаторов при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы -
4.4. Сброс ш 283 (продолжение) Режим работы тактового генератора Низкочастотный кварцевый резонатор A001) Встроенный генератор с внешней /?С-цепочкой A000...0101) Встроенный генератор с внутренней /?С-цепочкой @100. .0001) Внешний сигнал синхронизации @000) CKSEL0 - - - - - - - - - - - - - - - - SUT1...0 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11 /§ [тактов] 1К 1К 32К - 18 18 18 6 6 6 6 - 6 6 6 - 'R Гсс = 5.0В 41 65 65 - - 4.1 65 41 - 4.1 65 - - 4.1 65 - мс] Гсс = 3.0В 43 69 69 - - 4.3 69 43 - 4.3 69 - - 4.3 69 - Рекомендуемые условия использования Малое время нарастания напряжения питания или схема BOD включена Большое время нарастания напряжения питания Необходимость стабильной частоты при старте программы Зарезервировано Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Малое время нарастания напряжения питания или схема BOD включена Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Примечание Могут быть использованы только в том случае, если стабильность тактовой частоты при старте программы не требуется - Не должны использоваться при работе на частотах, близких к максимальной - Состояние по умолчанию - АТтеда162х Как и в предыдущих моделях, для управления длительностью задержки сброса используются три конфигурационные ячейки: CKSEL0 и SUT1...0. Задание длительности задержки сброса для каждого из режимов работы тактового генератора показано в Табл. 4.28.
284 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс Таблица 4,28. Определение задержки сброса в моделях ATmegal62x Режим работы тактового генератора Кварцевый или керамический резонатор A111...1000) Низкочастотный кварцевый резонатор @1И...0100) CKSEL0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 SUT1...0 1 00 01 10 11 00 01 10 и 00 01 10 11 00 01 10 11 rs [тактов] 258 258 1К 1К 1К 16К 16К 16К 1К 1К 1К - 32К 32К 32К - tK [мс] *сс = 5.0В 4.1 65 - 4.1 65 - 4.1 65 - 4.1 65 - - 4.1 65 - Гсс = 3.0В 4.3 69 - 4.3 69 - 4.3 69 - 4.3 69 - - 4.3 69 - Рекомендуемые условия использования Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Керамический резонатор, схема BOD включена Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Кварцевый резонатор, схема BOD включена Кварцевый резонатор, малое время нарастания напряжения питания Кварцевый резонатор, большое время нарастания напряжения питания Малое время нарастания напряжения питания или схема BOD включена Малое время нарастания напряжения питания или схема BOD включена Большое время нарастания напряжения питания Зарезервировано Малое время нарастания напряжения питания или схема BOD включена Малое время нарастания напряжения питания или схема BOD включена Большое время нарастания напряжения питания Зарезервировано Примечание Могут быть использованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы Могут быть использованы также для кварцевых резонаторов при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы - Могут быть использованы только в том случае, если стабильность тактовой частоты при старте программы не требуется -
4.4. Сброс ш 285 (продолжение) Режим работы тактового генератора Внутренний /?С-генера- 'тор @010) Внешний сигнал синхронизации @000) CKSEL0 - - - - - - - - SUT1...0 00 01 10 11 00 01 10 11 ts [тактов] 6 6 6 - 6 6 6 - 'rM Гсс = 5.0В - 4.1 65 - - 4.1 65 - Гсс = 3.0В - 4.3 69 - - 4.3 69 - Рекомендуемые условия использования Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Примечание - Состояние по умолчанию - - ATmega165x, ATmega325x/3250x/645x/6450x В этих моделях для управления длительностью задержки сброса также используются три конфигурационные ячейки: CKSELO и SUT1...0. Задание длительности задержки сброса для каждого из режимов работы тактового генератора показано в Табл. 4.29. Таблица 4.29, Определение задержки сброса в моделях ATmegal65x и Alhiega325x/3250x/645x/6450x Режим работы тактового генератора Кварцевый или керамический резонатор A111...1000) CKSEL0 0 0 SUT1...0 00 01 ?5 [тактов] 258 258 'R [МС] *fcc = 5.0B 14СК + 4.1 14СК + 65 ГСС = 3.0В 14СК + 4.3 14СК + 69 Рекомендуемые условия использования Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Примечание Могут быть использованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы
286 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс (продолжение Режим работы тактового генератора Кварцевый или керамический резонатор A111...1000) Низкочастотный кварцевый резонатор @111...0110) CKSEL0 0 0 1 1 1 1 0 0 0 SUT1...0 10 11 00 01 10 11 00 01 10 ?S [тактов] 1К 1К 1К 16К 16К 16К 1К 1К 1К гк[мс] КСС=5.0В 14СК 14СК + 4.1 14СК + 65 ИСК 14СК + 4.1 14СК + 65 14СК ИСК+ 4.1 14СК + 65 ГСС = 3.0В иск 14СК + 4.3 14СК + 69 14СК 14СК + 4.3 14СК + 69 14СК 14СК + 4.3 14СК + 69 Рекомендуемые условия использования Керамический резонатор, схема BOD включена Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Кварцевый резонатор, схема BOD включена Кварцевый резонатор, малое время нарастания напряжения питания Кварцевый резонатор, большое время нарастания напряжения питания Малое время нарастания напряжения питания или схема BOD включена Малое время нарастания напряжения питания или схема BOD включена Большое время нарастания напряжения питания Примечание Могут быть использованы также для кварцевых резонаторов при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы _ Могут быть использованы только в том случае, если стабильность тактовой частоты при старте программы не требуется
4.4. Сброс ш 287 (продолжение) Режим работы тактового генератора Низкочастотный кварцевый резонатор @111...0110) Внутренний ЛС-генера- тор(ООЮ) Внешний сигнал синхронизации @000) CKSEL0 0 1 1 1 1 - - - - - - - - SUT1...0 11 00 01 10 и 00 01 10 11 00 01 10 и г§ [тактов] - 32К 32К 32К - 6 6 6 - 6 6 6 - 'R [МС] *fcc = 5.0B - ИСК 14СК + 4.1 ИСК+ 65 - 14СК ИСК+ 4.1 14СК + 65 - 14СК 14СК + 4.1 14СК + 65 - *fcc = 3.0B - 14СК 14СК + 4.3 ИСК+ 69 - 14СК 14СК + 4.3 14СК + 69 - 14СК 14СК + 4.3 14СК + 69 - Рекомендуемые условия использования Зарезервировано Малое время нарастания напряжения питания или схема BOD включена Малое время нарастания напряжения питания или схема BOD включена Большое время нарастания напряжения питания Зарезервировано Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Примечание - - Состояние по умолчанию - -
288 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс АТтеда48х/88х/168х, АТтеда164х/324х/644х, АТтеда640х/1280х/1281х/2560х/2561х В этих моделях для управления длительностью задержки сброса также используются три конфигурационные ячейки: CKSEL0 и SUT1...0. Задание длительности задержки сброса для каждого из режимов работы тактового генератора показано в Табл. 4.30. Таблица 4.30. Определение задержки сброса в моделях ATmega48x/88x/168x, ATmegal64x/324x/644x и ATmega640x/1280x/1281x/2560x/2561x Режим работы тактового генератора Кварцевый или керамический резонатор A111...ОНО) Кварцевый или керамический резонатор A111...0110) CKSEL0 0 0 0 0 1 1 1 1 SUT1...0 00 01 10 11 00 01 10 11 ts [тактов] 258 258 1К 1К 1К 16К 16К 16К >r [мс] Гсс = 5.0В ИСК+ 4.1 ИСК+ 65 14СК ИСК+ 4.1 14СК + 65 ИСК 14СК + 4.1 14СК + 65 Гсс = 3.0В ИСК+ 4.3 14СК + 69 ИСК 14СК + 4.3 ИСК+ 69 14СК 14СК + 4.3 14СК + 69 Рекомендуемые условия использования Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Керамический резонатор, схема BOD включена Керамический резонатор, малое время нарастания напряжения питания Керамический резонатор, большое время нарастания напряжения питания Кварцевый резонатор, схема BOD включена Кварцевый резонатор, малое время нарастания напряжения питания Кварцевый резонатор, большое время нарастания напряжения питания Примечание Могут быть ис- 1 пользованы только при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы Могут быть использованы также для кварцевых резонаторов при работе на частотах, далеких от максимальной, и при отсутствии жестких требований к стабильности тактовой частоты при старте программы -
4.4. Сброс ¦ 289 (продолжение) Режим работы тактового генератора Низкочастотный кварцевый резонатор @101...0100) Внутренний ЛС-генератор с частотой 128 кГц (ООП) CKSEL0 0 0 0 0 1 1 1 1 - - - - SUT1...0 00 01 10 11 00 01 10 11 00 01 10 11 %[тактов] 1К 1К 1К - 32К 32К 32К - 6 6 6 - 'R [МС] ^сс = 5.0В ИСК 14СК + 4.1 14СК + 65 - 14СК 14СК + 4.1 14СК + 65 - 14СК 14СК + 4.1 14СК + 65 - Ксс = 3.0В 14СК 14СК + 4.3 14СК + 69 - 14СК 14СК + 4.3 14СК + 69 - 14СК 14СК + 4.3 14СК + 69 - Рекомендуемые условия использования Малое время нарастания напряжения питания или схема BOD включена Малое время нарастания напряжения питания или схема BOD включена Большое время нарастания напряжения питания Зарезервировано Малое время нарастания напряжения питания или схема BOD включена Малое время нарастания напряжения питания или схема BOD включена Большое время нарастания напряжения питания Зарезервировано Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Примечание Могут быть использованы только в том случае, если стабильность тактовой частоты при старте программы не требуется - -
290 ¦ Глава 4. Тактирование, режимы пониженного энергопотребления и сброс (продолжение) Режим работы тактового генератора Внутренний ЛС-генера- тор(ООЮ) Внешний сигнал синхронизации @000) CKSEL0 - - - - - - - - SUT1...0 00 01 10 11 00 01 10 11 /s [тактов] 6 6 6 - 6 6 6 - /R [мс] *сс = 5.0В ИСК 14СК + 4.1 ИСК+ 65 - ИСК 14СК + 4 1 ИСК+ 65 - *сс = 3.0В 14СК 14СК + 4 3 14СК + 69 - 14СК 14СК + 4.3 14СК + 69 - Рекомендуемые условия использования Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Схема BOD включена Малое время нарастания напряжения питания Большое время нарастания напряжения питания Зарезервировано Примечание - Состояние по умолчанию - Действительное значение задержек может отличаться от приведенных в Табл. 4.27...4.30, поскольку для формирования составляющей /R задержки используется ЛС-генератор сторожевого таймера, на частоту которого влияют различные факторы, в частности величина напряжения питания. В заключение необходимо сказать несколько слов еще об одном узле микроконтроллера, функционирование которого косвенно связано со схемой сброса, — встроенном источнике опорного напряжения (ИОН). Дело в том, что напряжение этого ИОН становится стабильным только через некоторое время после его включения. Типовое время запуска ИОН составляет 40 мс, а максимальное — 70 мс. Напоминаю, что ИОН включается в следующих случаях: • включен детектор пониженного напряжения питания; • выход ИОН подключен к аналоговому компаратору; • разрешена работа АЦП.
Прерывания 5.1. Общие сведения Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу, как правило, находится команда безусловного перехода к подпрограмме обработки прерывания. Последней командой подпрограммы обработки прерывания должна быть команда RETI, которая осуществляет возврат в основную программу и восстановление предварительно сохраненного счетчика команд. Поскольку основными источниками прерываний являются различные периферийные устройства микроконтроллеров, количество прерываний зависит от конкретной модели. 5.2. Таблица векторов прерываний Микроконтроллеры AVR семейства Mega имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ, начиная с адреса $0001 (модели ATmega8515x/8535x, ATmega8x и ATmega48x/88x) или $0002 (остальные модели), отведены под таблицу векторов прерывания. Каждому прерыванию соответствует адрес в этой таблице, который загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице также определяет и приоритет соответствующего прерывания: чем меньше адрес, тем выше приоритет прерывания. Размер вектора прерывания зависит от объема памяти программ микроконтроллера и составляет 1 байт для моделей с объемом памяти меньше 16 Кбайт и 2 байта для остальных моделей. Соответственно, для перехода к подпрограммам обработки прерываний в моделях ATmega8515x/8535x, ATmega8x и ATmega48x/88x используются команды RJMP, а в остальных моделях — команды JMP. Практически во всех микроконтроллерах семейства Mega, за исключением модели ATmega48x, положение таблицы векторов прерываний может быть
292 ¦ Глава 5. Прерывания изменено. Таблица может располагаться не только в начале памяти программ, но также и в начале области загрузчика, причем перемещение таблицы может быть осуществлено непосредственно в ходе выполнения программы. В зависимости от модели (Табл. 5.1) для управления размещением таблицы прерываний используется либо регистр управления микроконтроллера MCUCR, расположенный по адресу $35 ($55), либо общий регистр управления прерываниями GICR, расположенный по адресу $ЗВ ($5В). Таблица 5.1. Регистры для управления размещением таблицы прерываний Название MCUCR GICR Описание Регистр управления микроконтроллера Общий регистр управления прерываниями Адрес $35 ($55) $ЗВ ($5В) Модель 1 ATmega64x/128x, ATmega88x/168x, ATmega 164х/324х/644х, ATmegal65x/325x/3250x/645x/6450x, ATmega640x/l 280x/l 28 lx/2560x/256 lx j ATmega8515x/8535x, ATmega8x/16x/32x, ATmega 162x Для управления таблицей прерываний в этих регистрах используются два младших бита: IVSEL A-й бит) и IVCE @-й бит). Состояние флага IVSEL определяет положение таблицы в памяти программ. Если флаг сброшен в 0, то таблица векторов прерываний располагается в начале памяти программ, если установлен в 1 — в начале области загрузчика. Конкретное значение начального адреса области загрузчика зависит от установок конфигурационных ячеек BOOTSZ1 и BOOTSZ0 (кроме моделей ATmega48x). Бит IVCE предназначен для разрешения изменения флага IVSEL. Для изменения положения таблицы векторов прерываний необходимо выполнить следующие действия: 1. Установить бит IVCE в 1. 2. В течение следующих четырех тактов занести требуемое значение в бит IVSEL, при этом бит IVCE сбрасывается в 0. В противном случав бит IVCE буден сброшен аппаратно по истечении четырех тактов, запрещая дальнейшее изменение флага IVSEL. На время выполнения описанной последовательности прерывания автоматически запрещаются и разрешаются только после сброса флага IVCE. Состояние флага I регистра SREG при этом не меняется. Размер таблицы зависит от модели микроконтроллера и составляет от 16 (модели ATmega8 515х) до 56 (модели ATmega640x/1280x/2560x) векторов. Распределение адресов таблицы векторов прерываний для различных микроконтроллеров семейства приведено в Табл. 5.2...5.13. При размещении векторов прерываний в области загрузчика к значениям, указанным в таблицах, следует прибавить значение начального адреса области загрузчика.
5.2. Таблица векторов прерываний ¦ 293 Таблица 5.2. Таблица векторов прерываний моделей ATmega8515x Источник INTO INT1 TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0OVF SPI, STC USART, RXC USART, UDRE USART, TXC ANA_COMP INT2 TIMER0COMP EE_RDY SPM_RDY Описание Внешнее прерывание 0 Внешнее прерывание 1 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Переполнение таймера/счетчика ТО Передача по SPI завершена USART, прием завершен Регистр данных USART пуст USART, передача завершена Аналоговый компаратор Внешнее прерывание 2 Совпадение таймера/счетчика ТО EEPROM готово Готовность SPM № 1 2 3 4 5 6 7 8 9 10 И 12 13 14 15 16 Адрес $0001 $0002 $0003 $0004 $0005 $0006 $0007 $0008 $0009 $000А $000В $ооос $000D $000Е $000F $0010 Таблица 5.3. Таблица векторов прерываний моделей ATmega8535x Источник INTO INT1 TIMER2 СОМР TIMER2 OVF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0OVF SPI, STC kjSART, RXC Описание Внешнее прерывание 0 Внешнее прерывание 1 Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Переполнение таймера/счетчика ТО Передача по SPI завершена USART, прием завершен № 1 2 3 4 5 6 7 8 9 10 11 Адрес $0001 $0002 $0003 $0004 $0005 $0006 $0007 $0008 $0009 $000А $000В
294 ¦ Глава 5. Прерывания (продолжение) Источник USART, UDRE USART, TXC ADC ЕЕ RDY ANA COMP TW1 INT2 TIMER0_COMP SPM_RDY Описание Регистр данных USART пуст USART, передача завершена Преобразование АЦП завершено ЕЕ PROM готово Аналоговый компаратор Прерывание от модуля TWI Внешнее прерывание 2 Совпадение таймера/счетчика ТО Готовность SPM № 12 13 14 15 16 17 18 19 20 Адрес $ооос а $000D ] $000Е S000F $0010 1 $0011 $0012 1 $0013 $0014 Таблица 5.4. Таблица векторов прерываний моделей ATVnega8x { Источник INTO INT1 TIMER2COMP TIMER2 OVF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI SPM_RDY Описание Внешнее прерывание 0 Внешнее прерывание 1 Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Переполнение таймера/счетчика ТО Передача по SPI завершена USART, прием завершен Регистр данных USART пуст USART, передача завершена Преобразование АЦП завершено EEPROM готово Аналоговый компаратор Прерывание от модуля TWI Готовность SPM № 1 2 3 4 5 6 7 8 9 10 И 12 13 14 15 16 17 18 Адрес | $0001 J $0002 $0003 $0004 | $0005 $0006 $0007 ! $0008 ! $0009 j $000А ! $000В $000С $000D $000Е $000F $0010 $0011 $0012
5.2. Таблица векторов прерываний ¦ 295 Таблица 5.5. Таблица векторов прерываний моделей AThiegal6x Источник INTO INT1 TIMER2 СОМР TIMER2 0VF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI- INT2 TIMEROCOMP SPM_RDY Описание Внешнее прерывание 0 Внешнее прерывание 1 Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Переполнение таймера/счетчика ТО Передача по SPI завершена USART, прием завершен Регистр данных USART пуст USART, передача завершена Преобразование АЦП завершено EEPROM готово Аналоговый компаратор Прерывание от модуля TWI Внешнее прерывание 2 Совпадение таймера/счетчика ТО Готовность SPM № 1 2 3 4 5 6 7 8 9 10 И 12 13 14 15 16 17 18 19 20 Адрес $0002 $0004 $0006 $0008 $000А $000С $000Е $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 Таблица 5.6. Таблица векторов прерываний моделей ATmega32x Источник INTO INT1 INT2 Описание Внешнее прерывание 0 Внешнее прерывание 1 Внешнее прерывание 2 № 1 2 3 Адрес $0002 $0004 $0006
296 ¦ Глава 5. Прерывания (продолжение) Источник TIMER2COMP TIMER2 0VF TIMER1CAPT TIMER1COMPA TIMER1 СОМРВ TIMER1 OVF TIMER0COMP TIMER0OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI SPM_RDY Описание Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SPI завершена USART, прием завершен Регистр данных USART пуст USART, передача завершена Преобразование АЦП завершено EEPROM готово Аналоговый компаратор Прерывание от модуля TWI Готовность SPM № 4 5 6 7 8 9 10 И 12 13 14 15 16 17 18 19 20 Адрес $0008 $000А 1 $000С $000Е $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 Таблица 5.7. Таблица векторов прерываний моделей ATmega64x и AThiegal28x Источник INTO INT1 INT2 INT3 INT4 INT5 INT6 Описание Внешнее прерывание 0 Внешнее прерывание 1 Внешнее прерывание 2 Внешнее прерывание 3 Внешнее прерывание 4 Внешнее прерывание 5 Внешнее прерывание 6 М103С = 1 № 1 2 3 4 5 6 7 Адрес $0002 $0004 $0006 $0008 $000А $000С $000Е М103С = 0 № 1 2 3 4 5 6 7 Адрес $0002 1 $0004 1 $0006 1 $0008 1 $000А 1 $000С 1 $000Е |
5.2. Таблица векторов прерываний ¦ 297 (продолжение) Источник INT7 TIMER2COMP TIMER2 0VF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0COMP TIMER0OVF SPI, STC USARTO, RX USARTO, UDRE USARTO, TX ADC EE_RDY ANA_COMP TIMER1 СОМРС TIMER3CAPT TIMER3 СОМРА TIMER3 СОМРВ TIMER3 СОМРС TIMER3 OVF USART1,RX USART1,UDRE USART1,TX TWI SPM_RDY Описание Внешнее прерывание 7 Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SPI завершена USARTO, прием завершен Регистр данных USARTO пуст USARTO, передача завершена Преобразование АЦП завершено EEPROM готово Аналоговый компаратор Совпадение С таймера/счетчика Т1 Захват таймера/счетчика ТЗ Совпадение А таймера/счетчика ТЗ Совпадение В таймера/счетчика ТЗ Совпадение С таймера/счетчика ТЗ Переполнение таймера/счетчика ТЗ USART1, прием завершен Регистр данных USART1 пуст USART1, передача завершена Прерывание от модуля TWI Готовность SPM М103С = 1 № 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 к Адрес $0010 $0012 $0014 $0016 $0018 $001А $001С $00 IE $0020 $0022 $0024 $0026 $0028 $002А $002С $002Е $0030 $0032 $0034 $0036 $0038 $003А $003С $003Е $0040 $0042 $0044 М103С = 0 № 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 - - - - - - - - - - - Адрес $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 $002А $002С $002Е - - - - - - - - - - -
298 ¦ Глава 5. Прерывания Таблица 5.8. Таблица векторов прерываний моделей ATmega48x/88x/168x Источник INTO INT1 PCINT0 PCINT1 PCINT2 WDT TIMER2 СОМРА TIMER2 СОМРВ TIMER2 0VF TIMER1CAPT TIMER1 СОМРА TIMER1 СОМРВ TIMER10VF TIMER0 СОМРА TIMER0 СОМРВ TIMER0OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI SPM_RDY Описание Внешнее прерывание 0 Внешнее прерывание 1 Прерывание 0 по изменению состояния выводов Прерывание 1 по изменению состояния выводов Прерывание 2 по изменению состояния выводов Тайм-аут сторожевого таймера Совпадение А таймера/счетчика Т2 Совпадение В таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение А таймера/счетчика ТО Совпадение В таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SPI завершена USART, прием завершен Регистр данных USART пуст USART, передача завершена Преобразование АЦП завершено EEPROM готово Аналоговый компаратор Прерывание от модуля TWI Готовность SPM № 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Адрес ATtaega48x/88x $0001 $0002 $0003 $0004 $0005 $0006 $0007 $0008 $0009 $000А $000В $000С $000D $000Е $000F $0010 $0011 $0012 $0013 $0014 $0015 $0016 $0017 $0018 $0019 ATmegal68x $0002 $0004 $0006 $0008 $000А $000С $000Е $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 $002А $002С $002Е $0030 $0032
5.2. Таблица векторов прерываний ¦ 299 Таблица 5.9. Таблица векторов прерываний моделей AThiegal62x Источник INTO INT1 INT2 PCINT0 PCINT1 TIMER3 САРТ TIMER3COMPA TIMER3COMPB TIMER3 0VF TIMER2 СОМР TIMER2 OVF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF ,TIMER0COMP TIMER0OVF SPI, STC USARTO, RXC USART1,RXC USARTO, UDRE USART1,UDRE USARTO, TXC USART1,TXC EE_RDY ANA_COMP SPM_RDY Описание Внешнее прерывание 0 Внешнее прерывание 1 Внешнее прерывание 2 Прерывание 0 по изменению состояния вывода Прерывание 1 по изменению состояния вывода Захват таймера/счетчика ТЗ Совпадение А таймера/счетчика ТЗ Совпадение В таймера/счетчика ТЗ Переполнение таймера/счетчика ТЗ Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SPI завершена USARTO, прием завершен USART1, прием завершен Регистр данных USARTO пуст Регистр данных USART1 пуст USARTO, передача завершена USART1, передача завершена EEPROM готово Аналоговый компаратор Готовность SPM М161С=1 № 1 2 3 4 5 6 7 8 9 10 И 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Адрес $0002 $0004 $0006 $0008 $000А $000С $000Е $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 $002А $002С $002Е $0030 $0032 $0034 $0036 М161С = 0 № 1 2 3 - - - - - - 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Адрес $0002 $0004 $0006 - - - 1 - - - $0008 $000А $000С $000Е $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 $002А
300 ¦ Глава 5. Прерывания Таблица 5.10. Таблица векторов прерываний моделей AThiegal64x/324x/644x Источник INTO INT1 INT2 PCINT0 PCINT1 PCINT2 PCINT3 WDT TIMER2 СОМРА TIMER2 СОМРВ TIMER2 0VF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0 СОМРА TIMER0 СОМРВ TIMER0OVF SPI, STC USARTO, RX USARTO, UDRE USARTO, TX ANA_COMP ADC EE_RDY TWI SPM_RDY USART1,RX USART1,UDRE |USART1,TX Описание Внешнее прерывание 0 Внешнее прерывание 1 Внешнее прерывание 2 Прерывание 0 по изменению состояния выводов Прерывание 1 по изменению состояния выводов Прерывание 2 по изменению состояния выводов Прерывание 3 по изменению состояния выводов Тайм-аут сторожевого таймера Совпадение А таймера/счетчика Т2 Совпадение В таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение А таймера/счетчика ТО Совпадение В таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SPI завершена USARTO, прием завершен Регистр данных USARTO пуст USARTO, передача завершена Аналоговый компаратор Преобразование АЦП завершено EEPROM готово Прерывание от модуля TWI Готовность SPM USART1, прием завершен Регистр данных US ART 1 пуст USART1, передача завершена № 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Адрес $0002 J $0004 J $0006 j $0008 ] $000А | $000С ] $000Е | $0010 j $0012 | $0014 ] $0016 1 $0018 | $001А | $001С j $001Е | $0020 j $0022 | $0024 | $0026 1 $0028 1 $002А | $002С 1 $002Е | $0030 | $0032 1 $0034 | $0036 1 $0038° 1 $003А!) ] $003CI} j ]) Только в моделях ATmegal64x/324x. J
5.2. Таблица векторов прерываний ¦ 301 Таблица 5.11. Таблица векторов прерываний моделей ATftiegal65x Источник INTO PCINT0 PCINT1 TIMER2 СОМР TIMER2 OVF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0COMP TIMER0OVF SPI, STC USART, RX USART, UDRE USART, TX USI START USI OVF ANA_COMP ADC EE_RDY SPM_RDY Описание Внешнее прерывание 0 Прерывание 0 по изменению состояния выводов Прерывание 1 по изменению состояния выводов Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SPI завершена USART, прием завершен Регистр данных USART пуст USART, передача завершена Состояние СТАРТ USI Переполнение USI Аналоговый компаратор Преобразование АЦП завершено EEPROM готово Готовность SPM № 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Адрес $0002 $0004 $0006 $0008 $000А $000С $000Е $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 $002А
302 ¦ Глава 5. Прерывания Таблица 5.12. Таблица векторов прерываний моделей AItaega325x/3250x/645x/6450x Источник INTO PCINT0 PCINT1 TIMER2 СОМР TIMER2 OVF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 OVF TIMER0COMP TIMER0OVF SPI, STC USART, RX USARX UDRE USART, TX USI START USIOVF ANA_COMP ADC EE_RDY SPM_RDY - PCINT2 PCINT3 Описание Внешнее прерывание 0 Прерывание 0 по изменению состояния выводов Прерывание 1 по изменению состояния выводов Совпадение таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SP1 завершена USART, прием завершен Регистр данных USART пуст USART, передача завершена Состояние СТАРТ USI Переполнение USI Аналоговый компаратор Преобразование АЦП завершено EEPROM готово Готовность SPM Зарезервировано Прерывание 2 по изменению состояния выводов Прерывание 3 по изменению состояния выводов № 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Адрес $0002 $0004 $0006 $0008 $000А $000С $000Е $0010 $0012 $0014 $0016 $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 $002А $002С $002Е1} $0030') ]) Только в моделях ATmega3250x/6450x.
5.2. Таблица векторов прерываний ¦ 303 Таблица 5.13. Таблица векторов прерываний моделей Altaega640x/1280x/1281x/2560x/2561x Источник INTO INT1 INT2 INT3 INT4 INT5 INT6 INT7 PCINT0 PCINT1 PCINT2 WDT TIMER2 СОМРА TIMER2 СОМРВ TIMER2 0VF TIMER1 САРТ TIMER1 СОМРА TIMER1 СОМРВ TIMER1 СОМРС TIMER1 OVF TIMER0 СОМРА TIMER0 СОМРВ TIMERO OVF SPI, STC USARTO, RX USARTO, UDRE USARTO, TX ANA_COMP Описание Внешнее прерывание 0 Внешнее прерывание 1 Внешнее прерывание 2 Внешнее прерывание 3 Внешнее прерывание 4 Внешнее прерывание 5 Внешнее прерывание 6 Внешнее прерывание 7 Прерывание 0 по изменению состояния выводов Прерывание 1 по изменению состояния выводов Прерывание 2 по изменению состояния выводов Тайм-аут сторожевого таймера Совпадение А таймера/счетчика Т2 Совпадение В таймера/счетчика Т2 Переполнение таймера/счетчика Т2 Захват таймера/счетчика Т1 Совпадение А таймера/счетчика Т1 Совпадение В таймера/счетчика Т1 Совпадение С таймера/счетчика Т1 Переполнение таймера/счетчика Т1 Совпадение А таймера/счетчика ТО Совпадение В таймера/счетчика ТО Переполнение таймера/счетчика ТО Передача по SPI завершена USARTO, прием завершен Регистр данных USARTO пуст USARTO, передача завершена Аналоговый компаратор № 1 2 3 4 5 6 7 8 9 10 И 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Адрес $0002 $0004 $0006 $0008 $000А $000С $000Е $0010 $0012 $0014 $0016п $0018 $001А $001С $001Е $0020 $0022 $0024 $0026 $0028 $002А $002С $002Е $0030 $0032 $0034 $0036 $0038
304 ¦ Глава 5. Прерывания (продолжение) Источник ADC ЕЕ RDY TIMER3CAPT TIMER3COMPA TIMER3COMPB TIMER3COMPC TIMER3 0VF USART1,RX USART1.UDRE USART1.TX TWI SPM_RDY TIMER4CAPT TIMER4COMPA TIMER4COMPB TIMER4COMPC TIMER4 0VF TIMER5CAPT TIMER5COMPA TIMER5COMPB TIMER5COMPC TIMER5 0VF USART2, RX USART2, UDRE USART2,TX USART3, RX USART3, UDRE USART3,TX Описание Преобразование АЦП завершено EEPROM готово Захват таймера/счетчика ТЗ Совпадение А таймера/счетчика ТЗ Совпадение В таймера/счетчика ТЗ Совпадение С таймера/счетчика ТЗ Переполнение таймера/счетчика ТЗ USART1, прием завершен Регистр данных USART1 пуст USART1, передача завершена Прерывание от модуля TWI Готовность SPM Захват таймера/счетчика Т4 Совпадение А таймера/счетчика Т4 Совпадение В таймера/счетчика Т4 Совпадение С таймера/счетчика Т4 Переполнение таймера/счетчика Т4 Захват таймера/счетчика Т5 Совпадение А таймера/счетчика Т5 Совпадение В таймера/счетчика Т5 Совпадение С таймера/счетчика Т5 Переполнение таймера/счетчика Т5 USART2, прием завершен Регистр данных USART2 пуст USART2, передача завершена USART3, прием завершен Регистр данных USART3 пуст USART3, передача завершена № 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 Адрес $003А $003С $003Е $0040 $0042 $0044 $0046 $0048 $004А $004С $004Е $0050 $0052° $0054 $0056 $0058 $005А $005С° $005Е $0060 $0062 $0064 $0066° 1 $0068° $006А!) 1 $006С> J $006Е° 1 $0070° 1 ]) Только в моделях ATmega640x/1280x/2560x
5.2. Таблица векторов прерываний ¦ 305 Если прерывания в работе микроконтроллера не предусматриваются, то на месте таблицы векторов прерываний может быть размещена часть основной программы. Далее приведены фрагменты листингов для различных положений векторов сброса и прерываний (на примере моделей ATmegal28x, размер области загрузчика — 8 Кбайт). 1. Вектор сброса и таблица векторов прерываний располагаются в начале памяти программ (BOOTRST = 1, IVSEL = 0) Address Labels Code Comments $0000 jmp RESET ; Обработчик сброса $0002 jmp EXT_INT0 ; Обработчик IRQ0 $0004 jmp EXT_INT1 ; Обработчик IRQ1 $0044 jmp SPM_RDY ; Обработчик прерывания ; "готовность SPM" $0046 RESET: ldi rl6,high(RAMEND) ; Начало основной программы $0047 out SPH,rl6 $0048 ldi rl6,low(RAMEND) $0049 out SPH,rl6 ; Проинициализировали ; указатель стека $004A sei ; Разрешили прерывания $004B <команда> ххх 2. Вектор сброса располагается в начале памяти программ, а таблица векторов прерываний — в начале области загрузчика (BOOTRST = 1, IVSEL =1) Address Labels Code Comments $0000 RESET: ldi rl6,high(RAMEND) ; Начало основной программы $0001 out SPH,rl6 $0002 ldi rl6,low(RAMEND) $0003 out SPH,rl6 ; Проинициализировали ; указатель стека $0004 sei ; Разрешили прерывания $0005 <команда> ххх .org $F002 $F002 jmp EXT_INT0 ; Обработчик IRQ0 $F004 jmp EXT_INT1 ; Обработчик IRQ1 $F044 jmp SPM_RDY ; Обработчик прерывания ; "готовность SPM" 3. Вектор сброса располагается в начале области загрузчика, а таблица векторов прерываний — в начале памяти программ (BOOTRST = О, 1VSEL = 0)
306 ¦ Глава 5. Прерывания 4. Вектор сброса и таблица векторов прерываний располагаются в области загрузчика (BOOTRST = 0, IVSEL = 1) 5.3. Обработка прерываний Для глобального разрешения/запрещения прерываний предназначен флаг I регистра SREG. Для разрешения прерываний он должен быть установлен в 1, а для запрещения — сброшен в 0. Индивидуальное разрешение или запрещение (маскирование) прерываний производится установкой/сбросом соответствующих битов регистров масок прерываний, рассматриваемых ниже. При возникновении прерывания флаг I регистра SREG аппаратно сбрасывается, запрещая тем самым обработку следующих прерываний. Однако в подпрограмме обработки прерывания этот флаг можно снова установить в 1 для разрешения вложенных прерываний. При возврате из Address Labels Code Comments .org $0002 $0002 jmp EXT_INT0 ; Обработчик IRQ0 $0004 jmp EXT_INT1 ; Обработчик IRQ1 $0044 jmp SPM_RDY ; Обработчик прерывания ; "готовность SPM" .org $F000 $F000 RESET: ldi rl6,high(RAMEND) ; Начало основной программы $F001 out SPH,rl6 $F002 ldi rl6,low(RAMEND) $F003 out SPH,rl6 ; Проинициализировали ; указатель стека $F004 sei ; Разрешили прерывания $F005 <команда> ххх Address Labels Code Comments .org $F000 $F000 jmp RESET ; Обработчик сброса $F002 jmp EXT_INT0 ; Обработчик IRQ0 $F004 jmp EXT_INT1 ; Обработчик IRQ1 $F044 jmp SPM_RDY ; Обработчик прерывания ; "готовность SPM" $F046 RESET: ldi rl6,high(RAMEND) ; Начало основной программы $F047 out SPH,rl6 $F048 ldi rl6,low(RAMEND) $F049 out SPH,rl6 ; Проинициализировали ; указатель стека $F04A sei ; Разрешили прерывания $F04B <команда> ххх
5.3. Обработка прерываний ¦ 307 подпрограммы обработки прерывания (при выполнении команды reti) флаг I устанавливается аппаратно. Все имеющиеся прерывания можно разделить на два типа. Прерывания первого типа генерируются при наступлении некоторого события, в результате которого устанавливается флаг прерывания. Затем, если прерывание разрешено, в счетчик команд загружается адрес вектора соответствующего прерывания. При этом флаг прерывания аппаратно сбрасывается. Он также может быть сброшен программно, записью лог. 1 в бит регистра, соответствующий флагу. Прерывания второго типа не имеют флагов прерываний и генерируются в течение всего времени, пока присутствуют условия, необходимые для генерации прерывания. Соответственно, если условия, вызывающие прерывание, исчезнут до разрешения прерывания, генерации прерывания не произойдет. Следует помнить, что при вызове подпрограмм обработки прерываний регистр состояния SREG не сохраняется. Поэтому пользователь должен самостоятельно запоминать содержимое этого регистра при входе в подпрограмму обработки прерывания (если это необходимо) и восстанавливать его значение перед вызовом команды reti. Микроконтроллеры семейства Mega поддерживают очередь прерываний, которая работает следующим образом: если условия генерации одного или более прерываний возникают в то время, когда флаг общего разрешения прерываний сброшен (все прерывания запрещены), соответствующие флаги устанавливаются в 1 и остаются в этом состоянии до установки флага общего разрешения прерываний. После разрешения прерываний выполняется их обработка в порядке приоритета. Наименьшее время отклика для любого прерывания составляет 5 тактов в моделях ATmega2560x/2561x и 4 такта — в остальных моделях. В течение этого времени происходит сохранение счетчика команд в стеке. В течение последующих двух (для моделей ATmega8515x/8535x, ATmega8x и ATmega48x/88x) или трех тактов выполняется команда перехода к подпрограмме обработки прерывания. Если прерывание произойдет во время выполнения команды, длящейся несколько циклов, то генерация прерывания произойдет только после выполнения этой команды. Если же прерывание произойдет во время нахождения микроконтроллера в «спящем» режиме, то время отклика увеличивается еще на 4 или 5 тактов. Возврат в основную программу занимает 4 такта (в моделях ATmega2560x/2561x — 5 тактов), в течение которых происходит восстановление счетчика команд из стека. После выхода из прерывания процессор всегда выполняет одну команду основной программы, прежде чем обслужить любое отложенное прерывание.
308 ¦ Глава 5. Прерывания 5.4. Внешние прерывания Сразу следует сказать, что в микроконтроллерах семейства Mega имеется две разновидности внешних прерываний. Прерывания первого типа генерируются при появлении на входе внешнего прерывания заданного сигнала. Эти прерывания присутствуют во всех микроконтроллерах семейства (конкретное число таких прерываний зависит от модели). Преры вания второго типа генерируются при любом изменении состояния определенных выводов микроконтроллера. Наличие тех или иных внешних прерываний в различных моделях показано в Табл. 5.14. Таблица 5.14. Внешние прерывания Внешнее прерывание INTO INT1 INT2 INT3 INT4 INT5 INT6 INT7 PCI0 РСП PCI2 PCI3 X 5 51 8 ega Tm А • » X 5 53 8 ega Tm * • ¦> X 8 ega Ita A X 32 / 6x ega Tm A • ¦> ]) Асинхронное обнаружение фронто X 8 12 / 64x ega Tm A #D #D в сигш /168x X 88 / 8x 4 ega Tm * • uia X 62 1 ega Tm A • » 24x/644x /3 X 64 1 ega Tm A . • • X 65 1 ega Tm A 5x 4 /6 X 25 3 ega Tm A 450x 6 x/ 0 25 3 ega Tm A • • 281x, 561x 1 2 x, Ox/ Ox/ 640 128 256 ega ega ega Tm Tm Tm A A A •u •" •° Обратите внимание, что на определенных входах внешних прерываний обнаружение фронтов сигналов происходит асинхронно, т. е. не требует наличия тактового сигнала clkI/0. Внешние прерывания по НИЗКОМУ
5.4. Внешние прерывания ¦ 309 уровню и прерывания по изменению состояния выводов всегда регистрируются асинхронно. Соответственно, все эти прерывания могут использоваться для вывода микроконтроллера из «спящих» режимов, отличных от режима Idle. Для разрешения/запрещения «обычных» внешних прерываний в зависимости от модели (Табл. 5.15) используется либо общий регистр управления прерываниями GICR, либо регистр маскирования внешних прерываний EIMSK. Для разрешения/запрещения прерываний по изменению состояния выводов используются либо те же самые регистры, либо отдельный регистр PCICR. Таблица 5.15. Регистры для разрешения/запрещения внешних прерываний Модель ATmega8515x/8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x/325x/645x ATmega3250x/6450x ATmega640x, ATmegal280x/1281x/2560x/2561x Прерывание INT0...INT2 INTO, INT1 INT0...INT2 INT0...INT7 INTO, INT1 PCI0...PCI2 INT0...INT2,PCI0,PCI1 INT0...INT2 PCI0...PCI3 INTO, PCIO, PCI 1 INTO, PCI0...PCI3 INT0...INT7 PCI0...PCI2 Регистр GICR GICR GICR EIMSK EIMSK PCICR GICR EIMSK PCICR EIMSK EIMSK EIMSK PCICR Адрес $3B ($5B) $3B($5B) $3B ($5B) $39($59) $1D($3D) $68 $3B ($5B) $1D($3D) $68 $1D($3D) $1D($3D) $1D($3D) $68 Форматы регистров GICR, EIMSK и PCICR различных моделей показаны на Рис. 5.1, а описания их битов, относящихся к прерываниям, приведены в Табл. 5.16. Для индикации наступления «обычных» внешних прерываний в микроконтроллерах Mega используется либо общий регистр флагов прерываний GIFR, либо регистр флагов внешних прерываний EIFR (Табл. 5.17). Для индикации прерываний по изменению состояния выводов используются либо те же самые регистры, либо отдельный регистр PCIFR.
310 ¦ Глава 5. Прерывания Рис. 5.1. Формат регистров для разрешения/запрещения внешних прерываний: GICR (я), EIMSK (б) и PCICR (в)
5.4. Внешние прерывания ¦ 311 Таблица 5.16. Биты регистров GICR, EIMSK и PCICR Название INT7 INT6 INT5 INT4 INT3 INT2 INT1 INTO PCIE3 Описание Разрешение внешнего прерывания INT7. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT7. Условие генерации прерывания определяется содержимым битов ISC71 и ISC70 регистра EICRB Разрешение внешнего прерывания INT6. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT6. Условие генерации прерывания определяется содержимым битов ISC61 и ISC60 регистра EICRB Разрешение внешнего прерывания INT5. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT5. Условие генерации прерывания определяется содержимым битов ISC51 и ISC50 регистра EICRB Разрешение внешнего прерывания INT4. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT4. Условие генерации прерывания определяется содержимым битов ISC41 и ISC40 регистра EICRB Разрешение внешнего прерывания INT3. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT3. Условие генерации прерывания определяется содержимым битов ISC31 и ISC30 регистра EICRA Разрешение внешнего прерывания INT2. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT2. Условие генерации прерывания определяется содержимым битов ISC21 и ISC20 регистра EICRA или бита ISC2 регистра EMCUCR (ATmega8515x и ATmegal62x) или MCUCSR (ATmega8535x и ATmegal6x/32x) Разрешение внешнего прерывания INT1. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INT1. Условие генерации прерывания определяется содержимым битов ISC11 и ISC10 регистра EICRA или MCUCR Разрешение внешнего прерывания INTO. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание с вывода INTO. Условие генерации прерывания определяется содержимым битов ISC01 и ISC00 регистра EICRA или MCUCR Разрешение прерывания по изменению состояния выводов 3-й группы. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов PCINT30...24 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом выводе
312 ¦ Глава 5. Прерывания (продолжение) Название PCIE2 PCIE1 PCIEO Описание Разрешение прерывания по изменению состояния выводов 2-й группы. Если в этом бите записана лог 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов PCINT23...16 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом выводе Разрешение прерывания по изменению состояния выводов 1-й группы. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов PCINT15...8 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом выводе Разрешение прерывания по изменению состояния выводов 0-й группы. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается внешнее прерывание по изменению состояния выводов PCINT7...0 микроконтроллера. К возникновению прерывания приводит любое изменение сигнала на любом выводе Таблица 5.17. Регистры флагов внешних прерываний Модель ATmega8515x/8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmega 164x/3 24x/644x ATmegal65x/325x/645x ATmega3250x/6450x ATmega640x, ATmegal280x/1281x/2560x/2561x Прерывание INTO .INT2 INTO, INT1 INT0...INT2 INT0...INT7 INTO, INT1 PCI0...PCI2 INT0...INT2, PCIO, PCI1 INT0...INT2 PCI0...PCI3 INTO, PCIO, PCI 1 INTO, PCI0...PCI3 INT0...INT7 PCI0...PCI2 Регистр GIFR GIFR GIFR EIFR EIFR PCIFR GIFR EIFR PCIFR EIFR EIFR EIFR PCIFR Адрес $3A($5A) 1 $3A($5A) $3A($5A) $38($58) $1C($3C) $1B($3B) 1 $3A($5A) $1C($3C) $1B($3B) $1C($3C) $1C($3C) $1C($3C) J $1B($3B) Форматы регистров GIFR, EIFR и PCIFR различных моделей показаны на Рис. 5.2, а описания их битов приведены в Табл. 5.18.
5.4. Внешние прерывания ¦ 313 Рис. 5.2. Формат регистров флагов внешних прерываний: GIFR (a), EIFR (б) и PCIFR (в)
314 ¦ Глава 5. Прерывания Таблица 5.18. Биты регистров GIFR, EIFR и PCIFR Название INTF7 INTF6 1NTF5 INTF4 INTF3 INTF2 INTF1 INTF0 PCIF3 Описание Флаг внешнего прерывания INT7. Если в результате события на выводе INT7 сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF7 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT7 Флаг внешнего прерывания INT6. Если в результате события на выводе INT6 сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF6 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT6 Флаг внешнего прерывания INT5. Если в результате события на выводе INT5 сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF5 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT5 Флаг внешнего прерывания INT4. Если в результате события на выводе INT4 сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF4 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT4 Флаг внешнего прерывания INT3. Если в результате события на выводе INT3 сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF3 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT3 Флаг внешнего прерывания INT2. Если в результате события на выводе INT2 сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF2 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT2 Флаг внешнего прерывания INT1. Если в результате события на выводе INT1 сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог 1. Флаг INTF1 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INT1 Флаг внешнего прерывания INTO. Если в результате события на выводе INTO сформировался запрос на внешнее прерывание, то этот бит устанавливается в 1. Флаг J сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Флаг INTF0 сброшен постоянно, если генерация прерывания должна происходить по НИЗКОМУ уровню на выводе INTO Флаг прерывания по изменению состояния выводов 3-й группы. Если в результате события на любом из выводов PCINT31...24 сформировался запрос на прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1
5.4. Внешние прерывания ¦ 315 (продолжение) Г Название PCIF2 PCIF1 PCIFO Описание Флаг прерывания по изменению состояния выводов 2-й группы. Если в результате события на любом из выводов PCINT23...16 сформировался запрос на прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1 Флаг прерывания по изменению состояния выводов 1-й группы. Если в результате события на любом из выводов PCINT15...8 сформировался запрос на прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1 Флаг прерывания по изменению состояния выводов 0-й группы. Если в результате события на любом из выводов PCINT7...0 сформировался запрос на прерывание, то этот бит устанавливается в 1. Флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1 Следует иметь в виду, что в ранних моделях микроконтроллеров, таких как ATmega8515x/8535x, ATmega8x/16x/32x и ATmega64x/128x, для программного сброса флагов прерываний нельзя использовать команду SBI (установить бит регистра ввода/вывода), так как при ее выполнении будут сброшены все флаги в регистре. Это связано с тем, что команда сначала считывает содержимое регистра, затем изменяет указанный бит и записывает результат обратно в регистр. Аналогично, при выполнении команды CBI (сбросить бит регистра ввода/вывода), будут сброшены все биты регистра, кроме указанного. В остальных моделях эти команды влияют только на заданный бит, поэтому для сброса флага прерывания в данных моделях можно использовать команду SBI. Прерывания INT0...INT7 могут быть сгенерированы по нарастающему/спадающему фронту сигнала или при появлении НИЗКОГО уровня на входе (кроме прерывания INT2 в моделях ATmega8515x/8535x, ATmegal6x/32x и ATmegal62x). Прерывания PCI0...PCI3 генерируются при изменении состояния любого заданного вывода соответствующей группы. Условия генерации прерываний INT0...INT3 определяются состоянием определенных битов регистра MCUCR или EICRA, а условие генерации прерывания INT2 в моделях ATmega8515x/8535x, ATmegal6x/32x и ATmegal62x определяется состоянием бита ISC2 регистра EMCUCR или MCUCSR. Условия генерации прерываний INT7...INT4 определяются регистром EICRB. Указание выводов, изменение состояния которых вызывает генерацию прерываний PCI0...PCI3, производится с помощью регистров PCMSK3...PCMSK0. Соответствие регистров конкретным моделям приведено в Табл. 5.19.
316 ¦ Глава 5. Прерывания Таблица 5.19. Регистры, определяющие условия генерации внешних прерываний Модель ATmega8515x ATmega8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmega 164x/324x/644x ATmegal65x/325x/645x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x Прерывание INTO, INT1 INT2 INTO, INT1 INT2 INTO, INT1 INTO, INT1 INT2 INT0...INT3 INT4...INT7 INTO, INT1 PCIO PCI1 PCI2 INTO, INT1 INT2 PCIO PCI1 INT0...INT2 PCIO PCI1 PCI2 PCI3 INTO PCIO PCI1 INTO PCIO PCI1 PCI2 PCI3 INT0...INT3 INT4...INT7 PCIO PCI1 PCI2 Регистр MCUCR EMCUCR MCUCR MCUCSR MCUCR MCUCR MCUCSR EICRA EICRB EICRA PCMSKO PCMSK1 PCMSK2 MCUCR EMCUCR PCMSKO PCMSK1 EICRA PCMSKO PCMSK1 PCMSK2 PCMSK3 EICRA PCMSKO PCMSK1 EICRA PCMSKO PCMSK1 PCMSK2 PCMSK3 EICRA EICRB PCMSKO PCMSK1 PCMSK2 Адрес | $35($55) $36 ($56) | $35 ($55) | $34($54) $35 ($55) $35 ($55) $34($54) 1 $6A | $3A($5A) | $69 $6B | $6C | $6D 1 $35 ($55) $36 ($56) J $6B 1 $6C | $69 S6B 1 $6C | $6D | $73 1 $69 | $6B | $6C 1 $69 $6B 1 $6C $6D $73 $69 $6A $6B $6C $6D J
5.4. Внешние прерывания ¦ 317 Форматы регистров, перечисленных в предыдущей таблице, показаны на Рис. 5.3 и Рис. 5.4, а описание их битов приведено в Табл. 5.20...5.22. Рис. 5.3. Формат регистров, определяющих условия генерации внешних прерываний: MCUCR (л), MCUCSR F)f EMCUCR (в), EICRA (г) и EICRB (д)
318 ¦ Глава 5. Прерывания Рис. 5.4. Формат регистров PCMSK0...PCMSK3 Таблица 5.20. Определение условий генерации внешних прерываний (регистры MCUCR, EICRAh EICRB) Регистр Бит Описание MCUCR/ EICRA EICRB ISC31, ISC30 ISC21, ISC20 ISC11, ISC10 ISC01, ISC00 ISC71, ISC70 ISC61, ISC60 ISC51, ISC50 ISC41, ISC40 Определяют условие генерации внешних прерываний INT0...INT7 следующим образом: ISOil 0 0 1 1 ISCwO 0 1 0 1 Условие По НИЗКОМУ уровню на выводе ШХп Зарезервировано По спадающему фронту сигнала на выводе INTaj По нарастающему фронту сигнала на выводе INTaj Примечание. Минимальная длительность импульса, гарантирующая генерацию прерывания, равна периоду тактового сигнала микроконтроллера, а в моделях ATmegal64x/324x/644x — 50 не.
5.4. Внешние прерывания ¦ 319 Таблица 5,21. Определение условия генерации асинхронного внешнего прерывания INT2 (регистры MCUCSR и EMCUCR) Регистр MCUCSR/ EMCUCR Бит ISC2 Описание Определяет условие генерации внешнего асинхронного прерывания INT2 следующим образом: ISC2 0 1 Условие По спадающему фронту сигнала на выводе INT2 По нарастающему фронту сигнала на выводе INT2 Примечание. Минимальная длительность импульса, гарантирующая генерацию прерывания, составляет 50 не. Таблица 5.22. Определение выводов, вызывающих генерацию прерываний по изменению состояния выводов (регистры PCMSK3...0) Регистр PCMSK0 PCMSK1 PCMSK2 PCMSK3 Бит PCINT7 PCJNT0 PCINT15 PCINT8 PCINT23 PCINT16 PCINT31 PCINT24 Описание Определяют условие генерации прерывания PCI0. Если какой-либо бит установлен в 1, то изменение состояния соответствующего вывода вызовет генерацию прерывания Определяют условие генерации прерывания РСИ. Если какой-либо бит установлен в 1, то изменение состояния соответствующего вывода вызовет генерацию прерывания Определяют условие генерации прерывания PCI2. Если какой-либо бит установлен в 1, то изменение состояния соответствующего вывода вызовет генерацию прерывания Определяют условие генерации прерывания РСИ. Если какой-либо бит установлен в 1, то изменение состояния соответствующего вывода вызовет генерацию прерывания В заключение следует отметить, что все внешние прерывания генерируются даже в том случае, если соответствующие выводы сконфигурированы как выходы. Эта особенность микроконтроллеров позволяет генерировать прерывания программно.
Порты ввода/вывода 6.1. Общие сведения Каждый порт микроконтроллеров состоит из определенного числа выводов, через которые микроконтроллер может осуществлять прием и передачу цифровых сигналов. Задание направления передачи данных через любой контакт ввода/вывода может быть произведено программно в любой момент времени. Выходные буферы всех портов, имея симметричные нагрузочные характеристики, обеспечивают высокую нагрузочную способность при любом уровне сигнала. Нагрузочной способности достаточно для непосредственного управления светодиодными индикаторами. Входные буферы всех выводов построены по схеме триггера Шмитта. Для всех входов имеется возможность подключения внутреннего подтягивающего резистора между входом и шиной питания Ксс. Отличительной особенностью портов микроконтроллеров семейства Mega (как и всех микроконтроллеров AVR) при использовании их в качестве цифровых портов ввода/вывода общего назначения является реализация истинной функциональности «чтение/модификация/запись». Благодаря этому можно выполнять операции над любым выводом (с помощью команд SBI и CBI), не влияя на другие выводы порта. Это относится к изменению режима работы контакта ввода/вывода, к изменению состояния выходного буфера (для выходов) и к изменению состояния внутреннего подтягивающего резистора (для входов). Микроконтроллеры различных моделей семейства имеют разное число портов и соответственно контактов ввода/вывода. Эти данные приведены в Табл. 6.1.
6.2. Регистры портов ввода/вывода ¦ 321 1 PORTA • • - •[•-•••[•# PORTB PORTC PORTD PORTE PORTF PORTG PORTH PORTJ PORTK PORTL Число контактов ввода/вывода ]) Вывод Р RESET). • 3 - - 35 G5- • - - - 32 7 - - - 23 • - - - 32 5 53 7 - - - 23 • 3 - - 35 • - - - 32 голько вход с постоянно включенной подтял 5 53 ской (с 6') 53 овмеи 6" • 7 68 1енсв 6 - - 86 кодом 51 Примечание. Цифра обозначает разрядность порта (отличную от 8). 6.2. Регистры портов ввода/вывода Обращение к портам производится через регистры ввода/вывода. Под каждый порт в адресном пространстве ввода/вывода зарезервировано по 3 адреса, по которым размещены следующие регистры: регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PIN*. Действительные названия регистров получаются подстановкой названия порта вместо символах. Соответственно, регистры порта А называются PORTA, DDRA, PINA, порта В - PORTB, DDRB, PINB и т. д. Поскольку с помощью регистров PINx осуществляется доступ к физическим значениям сигналов на выводах порта, они доступны только для чтения, Порт ввода/вывода ATmega8515x ATmega8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/645x ATmega3250x/6450x ATmegal281x/2561x ATmega640x, I ATmegal280x/2560x Таблица 6.1. Порты ввода/вывода микроконтроллеров семейства Mega
322 ¦ Глава 6. Порты ввода/вывода тогда как остальные два регистра доступны и для чтения, и для записи. Тем не менее, в новых моделях микроконтроллеров (все модели, кроме ATmega8515x/8535x, ATmega8x/16x/32x/64x/128x и ATmegal62x) запись 1 в бит регистра PINx приводит к переключению состояния соответствующего бита регистра данных PORT*. Адреса регистров всех портов ввода/вывода приведены в Табл. 6.2. Таблица 6.2. Регистры портов ввода/вывода А В С D Е PORTA DDRA PINA PORTB DDRB PINB PORTC DDRC PINC PORTD DDRD PIND PORTE DDRE PINE $1B($3B) $1A($3A) $19($39) $07 ($27) $06($26) $05 ($25) - - - $1B($3B) $1A($3A) $19($39) $18 ($38) $17 ($37) $16($36) $15 ($35) $14 ($34) $13 ($33) $12($32) $11 ($31) $10 ($30) - - - - - - $07 ($27) $06 ($26) $05 ($25) $03 ($23) $02 ($22) $01 ($21) - - - - - - - - - $02($22) $01($21) $00($20) $05 ($25) $04 ($24) $03 ($23) $08($28) $07 ($27) $06 ($26) $0B ($2B) $0А($2А) $09 ($29) $0Е ($2Е) $0D($2D) $0С($2С) ATmega8515x ATmega8535x ATmega8x ATmegal6x ATmegal62x ATmega64x, ATmegal28x ATmega48x/88x/168x I ATmegal64x/324x/64* ATmegal65x, ATmega325x/645x ATmega3250x/6450x ATmegal281x/2561x ATmega640x, ATmegal280x/2560x
6.3. Конфигурирование портов ввода/вывода ¦ 323 (продолжение) F G Н J К L PORTF DDRF PINF PORTG DDRG PING PORTH DDRH PINH PORTJ DDRJ PINJ PORTK DDRK PINK PORTL DDRL PINL fee ье ю о $02 ($22) $01 ($21) - - - 1 - - - - - 1 - - - - - 1 - - - - - 1 - - - - - fee ($61) $00 ($20) ($65) ($64) ($63) 1 - - - - - 1 - - - - - fee fee $10 ($30) $0F($2F) $14($34) $13($33) $12($32) ($DA) ($D9) ($D8) ($DD) ($DC) ($DB) - - - - - - ($102) ($101) ($100) ($105) ($104) ($103) ($108) ($107) ($106) ($10B) ($10A) ($109) 6.3. Конфигурирование портов ввода/вывода Упрощенная структурная схема одного из каналов порта ввода/вывода Рхп при работе его в качестве цифрового входа/выхода общего назначения приведена на Рис. 6.1. ATmega8515x ATmega8535x ATmega8x ATmegal6x ATmegal62x ATmega64x, ATmegal28x ATmega48x/88x/168x ATmegal64x/324x/644x ATmegal65x, ATmega325x/645x ATmega3250x/6450x ATmegal281x/2561x ATmega640x, ATmegal280x/2560x Порт Регистр
324 ¦ Глава 6. Порты ввода/вывода PUD — выключение подт резистора SLEEP — управление спящим режимом clk|/o — тактовый сигнал подсистемы ввода/вывода WDx — запись регистра DDRx RDx — чтение регистра DDRx WPx — запись регистра PORTx RRx — чтение регистра PORTx RPx — чтение выводов порта PORTx АЮхл —аналоговый вход/выход вывода л порта PORTx Примечание. Сигналы WPx WDx RPx RDx являются общими для всех выводов одного порта сигналы clk|/o SLEEP и PUD являются общими для всех портов микроконтроллера Рис. 6.1. Структурная схема канала ввода/вывода Каждому выводу порта соответствуют три бита регистров ввода/вывода: PORTxfl (регистр PORTx), DDxn (регистр DDRx) и РШхя (регистр PINx). Действительные названия битов регистров получаются подстановкой названия порта вместо символах и номера бита вместо символа п. Порядковый номер вывода порта соответствует порядковому номеру бита регистров этого порта. Поэтому, если разрядность порта меньше восьми, регистрах порта используется соответствующее число младших битов. Не- задействованные старшие биты регистров доступны только для чтения всегда содержат 0. Бит DDxrt регистра DDx определяет направление передачи данных через контакт ввода/вывода Если этот бит установлен в 1, то я-й вывод порта является выходом, если же сброшен в 0 — входом. Бит РСЖТхл регистра PORTx выполняет двойную функцию. Если вывод функционирует как выход (DDxaz = 1), то этот бит определяет состояние вывода порта. Если бит установлен в 1, на выводе устанавливается напряжение ВЫСОКОГО уровня. Если бит сброшен в 0, на выводе устанавливается напряжение НИЗКОГО уровня.
6.3. Конфигурирование портов ввода/вывода ¦ 325 Если же вывод функционирует как вход (DDxn = 0), то бит PORTjw определяет состояние внутреннего подтягивающего резистора для данного вывода. При установке бита РСЖТхл в 1 подтягивающий резистор подключается между выводом микроконтроллера и линией питания. Вообще говоря, управление подтягивающими резисторами во всех микроконтроллерах семейства осуществляется на двух уровнях. Общее управление (для всех выводов портов) осуществляется битом PUD регистра специальных функций SFIOR или регистра управления микроконтроллера MCUCR (в зависимости от модели). В моделях ATmega64x и ATmegal28x регистр SFIOR располагается по адресу $20 ($40), а в остальных моделях — по адресу $30 ($50). Регистр MCUCR располагается по адресу $35 ($55). Форматы этих регистров приведены на Рис. 6.2. Рис 6.2 Регистры управления подтяжкой SFIOR (а) и MCUCR (б) Если бит PUD сброшен в 0 (начальное состояние), то состояние подтягивающих резисторов будет определяться состоянием битов PORTxn для каждого входа порта. Если же бит PUD установлен в 1, подтягивающие резисторы отключаются от всех выводов микроконтроллера. Обратите внимание, что при переключении вывода между третьим состоянием (DDxn = 0, ?ОКТхп = 0) и состоянием ВЫСОКОГО уровня (DDxn = 1, PORTjw = 1) происходит переход че{>ез одно из промежуточных состояний: либо включается подтягивающий резистор (DDxn = 0, PORTxaj = 1), либо выход переключается в состояние НИЗКОГО уровня (DDxn= 1, PORTxyj = 0). Наиболее применимым является, как правило, первый вариант, поскольку для высокоимпедансных систем безразлично, каким образом формируется ВЫСОКИЙ уровень. Если в каком-либо слу-
326 ¦ Глава 6. Порты ввода/вывода чае это не подходит, пользователь может отключить подтягивающие резисторы от всех портов установкой бита PUD в 1. Аналогичная ситуация возникает и при переключении между состоянием с включенным подтягивающим резистором (DDxn = 0, РОКТхп = 1) и состоянием НИЗКОГО уровня (DDxn = 1, РСЖТхя = 0). В этом случае промежуточным состоянием является либо высокоимпедансное состояние (DDxn = 0, PORTxfl = 0), либо состояние ВЫСОКОГО уровня (DDjw=1,PORTxa2=1). Все возможные сочетания состояний управляющих битов и соответственно конфигурации выводов портов приведены в Табл. 6.3. Таблица 6.3. Конфигурации выводов портов DDxn 0 0 0 1 1 POKEx» 0 1 1 0 1 PUD X 0 1 X X Функция вывода Вход Вход Вход Выход Выход Резистор Отключен Подключен Отключен Отключен Отключен Примечание Третье состояние (Hi-ZI* При подключении нагрузки между выводом и общим проводом вывод является источником тока Третье состояние (Hi-Z) Выход установлен в 0 Выход установлен в 1 }) Состояние выводов портов при сбросе. Состояние вывода микроконтроллера (независимо от установок бита DDxn) может быть получено путем чтения бита PINxn регистра PIN*. При этом следует помнить, что между действительным изменением сигнала на выводе и изменением бита PINx« существует задержка. Эта задержка вносится узлом синхронизации, состоящим, как показано на Рис. 6.1, из бита PINxrt и дополнительного триггера-защелки. Значение сигнала на выводе микроконтроллера фиксируется триггером-защелкой при НИЗКОМ уровне тактового сигнала и переписывается затем в бит РШхя по нарастающему фронту тактового сигнала. Соответственно, величина задержки может составлять от 0.5 до 1.5 периодов системного тактового сигнала, как показано на Рис. 6.3, а. По этой же причине между операциями изменения и повторного считывания состояний вывода необходимо вставлять команду NOP. Поскольку команда OUT устанавливает сигнал «SYNC LATCH» в 1 по положительному фронту тактового сигнала, задержка в этом случае равна одному периоду тактового сигнала (Рис. 6.3, б).
6.3. Конфигурирование портов ввода/вывода ¦ 327 б) Рис. 6.3. Синхронизация при чтении состояния вывода: а — при считывании бита PINxw; б— при считывании состояния вывода, заданного программно Далее приведен пример конфигурирования одного из портов микроконтроллера. В примере выводы 0 и 1 порта В устанавливаются в 1, выводы 2 и 3 — в 0. Выводы 4...7 порта конфигурируются как входы, при этом к выводам 6 и 7 подключаются подтягивающие резисторы. Пример на ассемблере ldi П6, A«РВ7) I A«РВб) I A«РВ1) I A«РВ0) ldi ill, A«DDB3) I A«DDB2) I A«DDB1) I A«DDB0) out PORTB,rl6 ; Задать состояние выходов и подтягиваюших ; резисторов out DDRB,rl7 ; Задать режимы работы выводов пор ; для синхронизации in rl6,PINB ; Считать состояние выводов порта
328 ¦ Глава 6. Порты ввода/вывода Пример на Си unsigned char i; /* Задать состояние выходов и подтягивающих резисторов */ /* Задать режимы работы выводов */ PORTB = A«РВ7) I A«РВб) I A«РВ1) I A«РВ0) ; DDRB = A«DDB3) I A«DDB2) I A«DDB1) I A«DDB0) ; _NOP(); /* Синхронизация */ i = PINB; /* Считать состояние выводов порта */ В заключение отметим, что подавляющее большинство контактов ввода/вывода всех микроконтроллеров семейства имеют дополнительные функции и могут использоваться различными периферийными устройствами микроконтроллеров. При этом возможны две ситуации. В одних случаях пользователь должен самостоятельно задавать конфигурацию вывода, а в других вывод конфигурируется автоматически при включении соответствующего периферийного устройства. Об этом будет сказано при рассмотрении соответствующих периферийных устройств.
Таймеры 7.1. Общие сведения Микроконтроллеры семейства в зависимости от модели имеют в своем составе от двух до шести таймеров/счетчиков общего назначения (Табл. 7.1). Таблица 7.1. Таймеры/счетчики общего назначения Таймер/счетчик ТО (8-битный) Таймер/счетчик Т1 A6-битный) Таймер/счетчик Т2 (8-битный) Таймер/счетчик ТЗ A6-битный) Таймер/счетчик Т4 A6-битный) Таймер/счетчик Т5 A6-битный) 1} Асинхронный таймер • '> /счетчи • '> к. • » •') •" » ••> •') » •" » •" Как видно из таблицы, во всех моделях микроконтроллеров семейства присутствуют как минимум два таймера/счетчика — ТО и Т1. Таймер/счетчик ТО имеет минимальный набор функций, зависящий, тем не менее, от ATmega8515x ATmega8535x ATmega8x, ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, 1 ATmega2560x/2561x Таймер/счетчик
330 ¦ Глава 7. Таймеры модели микроконтроллера. В одних моделях он может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий. В других моделях к этим функциям добавляется возможность генерации сигналов с широтно-импульсной модуляцией (ШИМ) фиксированной разрядности (один или два канала), а также возможность работать в асинхронном режиме в качестве часов реального времени (в моделях ATmega64x/128x). Таймер/счетчик Т1 тоже может использоваться для отсчета временных интервалов и как счетчик внешних событий. Кроме того, он может осуществлять запоминание своего состояния по внешнему сигналу. Как и таймер/счетчик ТО, он может работать в качестве 2- или 3-канального ши- ротно-импульсного модулятора, но уже переменной разрядности. Количество каналов ШИМ зависит от модели. Таймер/счетчик Т2 практически полностью аналогичен таймеру/счетчику ТО. Во всех моделях, кроме ATmega64x/128x, таймер/счетчик Т2 может работать в асинхронном режиме. Таймеры/счетчики ТЗ...Т5 по функциональным возможностям идентичны таймеру/счетчику Т1. В составе всех микроконтроллеров семейства имеется также сторожевой таймер, являющийся непременным атрибутом всех современных микроконтроллеров. Этот таймер позволяет избежать несанкционированного зацикливания программы, возникающего по тем или иным причинам. 7.2. Назначение выводов таймеров/счетчиков Каждый таймер/счетчик использует один или более выводов микроконтроллера. Как правило, эти выводы — линии портов ввода/вывода общего назначения, а функции, реализуемые этими выводами при работе совместно с таймерами/счетчиками, являются их альтернативными функциями. Все выводы микроконтроллеров, используемые таймерами/счетчиками общего назначения, приведены в Табл. 7.2. Там же указаны функции этих выводов. Не забывайте о том, что при использовании альтернативных функций линий портов ввода/вывода необходимо, как правило, самостоятельно сконфигурировать эти выводы в соответствии с их функциональным назначением.
7.2. Назначение выводов таймеров/счетчиков ¦ 331 то рсо ОСОА ОСОБ Т1 ICP ICP1 ОС1А ОС1В ОС1С Т2 ОС2 ОС2А ОС2В тз ICP3 РВО РВО - РВ1 РЕО - PD5 РЕ2 - - - - - - РВО РВЗ - РВ1 PD6 PD5 PD4 - - - - PD4 - - PD5 РВО РВ1 РВ2 - - РВЗ - - - РВО РВЗ - РВ1 PD6 PD5 PD4 - - PD7 - - - - РВ4 - PD6 PD4 РВ5 РВ6 РВ7 PD7 РВ7 - РЕ6 РЕ7 PD4 - PD6 PD5 PD5 РВО РВ1 РВ2 - - - РВЗ PD3 - - РВО РВО - - РВ1 РЕО PD5 РЕ2 - - РВ1 - - - PD3 РВО - РВЗ РВ4 РВ1 PD6 PD5 PD4 - - PD7 PD6 - - PG4 - РВ4 - PG3 PDO РВ5 РВ6 - - РВ7 - - - PG4 - РВ4 - PG3 PDO РВ5 РВ6 - - РВ7 - - - PD7 - РВ7 PG5 PD6 PD4 РВ5 РВ6 РВ7 - РВ4 - РЕ6 РЕ7 PD7 - РВ7 PG5 PD6 PD4 РВ5 РВ6 РВ7 - РВ4 РН6 РЕ6 РЕ7 Вход внешнего сигнала таймера ТО Выход схемы сравнения таймера ТО Вход внешнего сигнала таймера Т1 Вход захвата таймера Т1 Выход схемы сравнения таймера Т1 Вход внешнего сигнала таймера Т2 Выход схемы сравнения таймера Т2 Вход внешнего сигнала таймера ТЗ Вход захвата таймера ТЗ Название ATmega8515x ATmega8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x/325x/645x ATmega3250x/6450x ATmegal281x/2561x ATmega640x/1280x/2560x Описание Таблица 7.2. Выводы, используемые таймерами/счетчиками общего назначения
7.3. Прерывания от таймеров/счетчиков ¦ 333 7.3. Прерывания от таймеров/счетчиков В старых моделях для разрешения/запрещения прерываний от таймеров/счетчиков использовалось от одного до двух регистров ввода/вывода. В новых моделях число таких регистров C...6) равно числу счетчиков в конкретной модели. Точно так же дело обстоит и с регистрами, содержащими флаги прерываний. Названия и адреса всех этих регистров приведены в Табл. 7.3. Таблица 7.3. Регистры для управления прерываниями от таймеров/счетчиков Модель ATmega8515x ATmega8535x ATmega8x/16x/32x ATmega64x/128x ATmega 162x ATmega48x/88x/168x, ATmega 164x/324x/644x, ATmegal65x/325x/645x, ATmega3250x/6450x ATmega640x, ATmegal280x/1281x, ATmega 2560x/2561x Таймер/счетчик Т0Д1 Т0Д1Д2 Т0Д1Д2 Т0Д1Д2 T1J3 Т0Д1Д2 T1,T3 TO Tl T2 TO Tl T2 T3 T4 T5 Разрешение прерываний Регистр TIMSK TIMSK TIMSK TIMSK ETIMSK TIMSK ETIMSK TIMSKO TIMSK1 TIMSK2 TIMSKO TIMSK1 TIMSK2 TIMSK3 TIMSK4 TIMSK5 Адрес $39($59) $39 ($59) $39 ($59) $37 ($57) ($7D) $39($59) ($7D) ($6E) ($6F) ($70) ($6E) ($6F) ($70) ($71) ($72) ($73) Флаги прерываний Регистр TIFR TIFR TIFR TIFR ETIFR TIFR ETIFR TIFRO TIFR1 TIFR2 TIFRO TIFR1 TIFR2 TIFR3 TIFR4 TIFR5 Адрес $38 ($58) $38($58) $38 ($58) $36($56) ($7C) $38 ($58) ($7C) $15 ($35) $16($36) $17($37) $15 ($35) $16($36) $17 ($37) $18($38) $19 ($39) $1A($3A) Форматы регистров, используемых для разрешения/запрещения прерываний от таймеров/счетчиков, показаны на Рис. 7.1...7.2, а описание их битов приведено в Табл. 7.4. Для разрешения какого-либо прерывания от таймера/счетчика необходимо установить в 1 соответствующий бит регистра TIMSK (TIMSIO0/ETIMSK и, разумеется, флаг I регистра SREG.
334 ¦ Глава 7. Таймеры Таблица 7А. Биты регистров TIMSK, ETIMSK и TIMSK0...TIMSK5 Название бита Описание Т01Ел Флаг разрешения прерывания по переполнению таймера/счетчика In (п = 0...5) OCIEn Флаг разрешения прерывания по событию «Совпадение» таймера/счетчика In (« = 0,2) OCIEM Флаг разрешения прерывания по событию «Совпадение А» таймера/счетчика Ти (л = 0...5) ОС1ЕлВ Флаг разрешения прерывания по событию «Совпадение В» таймера/счетчика In (л = 0...5) ОС1ЕлС Флаг разрешения прерывания по событию «Совпадение С» таймера/счетчика In (л=1,3...5) TICIEI/I ICIEw Флаг разрешения прерывания по событию «Захват» таймера/счетчика In {п = 1, 3) Флаг разрешения прерывания по событию «Захват» таймера/счетчика Тп{п=\, 3...5) Рис. 7.7. Формат регистров TIMSK (а) и ETIMSK (б)
7.3. Прерывания от таймеров/счетчиков ¦ 335 Рис, 7.2. Формат регистров TIMSKO (a), TIMSK1 (б), TIMSK2 (в), TIMSK3 (г), TIMSK4(d),TIMSK5(e) Форматы регистров, используемых для индикации наступления прерываний от таймеров/счетчиков, показаны на Рис. 7.3 и Рис. 7.4, а описание их битов приведено в Табл. 7.5.
336 ¦ Глава 7. Таймеры Таблица 7.5. Биты регистра TIFR Название бита TOVa? OCFrt OCFajA OCFajB OCFnC ICFai Описание Флаг прерывания по переполнению таймера /счетчика In (п = 0...5) Флаг прерывания по событию «Совпадение» таймера/счетчика In (n = 0, 2) Флаг прерывания по событию «Совпадение А» таймера/счетчика In (п = 0...5) Флаг прерывания по событию «Совпадение В» таймера/счетчика In (п = 0...5) Флаг прерывания по событию «Совпадение С» таймера/счетчика Тп(п=\, 3...5) Флаг прерывания по событию «Захват» таймера/счетчика In (п = 1, 3...5) Рис. 7.3. Формат регистров TIFR (а) и ETIFR (б) При наступлении какого-либо события соответствующий флаг регистра TIFR (TIFRrt)/ETIFR устанавливается в 1. При запуске подпрограммы обработки прерывания он аппаратно сбрасывается в 0. Любой флаг может быть также сброшен программно, записью в него лог. 1.
7.3. Прерывания от таймеров/счетчиков ¦ 337 Рис. 7.4. Формат регистров TIFRO (a), TIFR1 (б), TIFR2 (в), TIFR3 (г), TIFR4 (д), TIFR5 (е)
338 ¦ Глава 7. Таймеры 7.4. Предделители таймеров/счетчиков Блоки предделителей предназначены для формирования тактовых сигналов таймеров/счетчиков clkT0, clkT1, clkT2, clkT3. Упрощенная структурная схема блока предделителя таймеров/счетчиков, не имеющих асинхронного режима работы, приведена на Рис. 7.5, а. Структурная схема блока предделителя таймеров/счетчиков, имеющих возможность работы в асинхронном режиме, приведена на Рис. 7.5, б. Как показано на рисунке, в состав каждого блока входят собственно 10-битный предделитель, выходной мультиплексор (селектор тактового сигнала), а для таймеров, имеющих возможность работы в асинхронном режиме, — еще и входной мультиплексор исходного тактового сигнала. По последней схеме выполнен предделитель таймера/счетчика ТО моделей ATmega64x/128x и таймера/счетчика Т2 остальных моделей. Следует иметь в виду, что все таймеры/счетчики каждой модели семейства, не имеющие асинхронного режима работы, используют один и тот же 10-битный предделитель. При этом управление тактовым сигналом каждого таймера/счетчика осуществляется индивидуально и будет описано при их рассмотрении.
7.4. Предделители таймеров/счетчиков ¦ 339 Рис. 7.5. Блок предцелителя таймеров/счетчиков: - без асинхронного режима; б— с асинхронным режимом Следует понимать, что предделители работают независимо от таймеров/счетчиков. Следствием этого является, в частности, неопределенный промежуток времени A...7V+1 тактов исходного сигнала, где N — коэффициент деления предцелителя) между разрешением таймера/счетчика и первым его отсчетом при работе совместно с предделителем. Чтобы уйти от этой неопределенности, можно воспользоваться средствами, описанными в следующем подразделе. 7.4.1. Управление предделителями Помимо управления тактовым сигналом таймера/счетчика, все микроконтроллеры семейства позволяют осуществлять сброс предделите- лей, а отдельные модели позволяют также осуществлять их остановку. Для этого используется либо регистр специальных функций SFIOR, либо (в новых моделях) регистр управления таймеров/счетчиков GTCCR, расположенный по адресу $23 ($43). Формат этого регистра для различных моделей микроконтроллеров приведен на Рис. 7.6 (биты, не используемые для управления предделителями таймеров/счетчиков, указаны на рисунке как X).
340 ¦ Глава 7. Таймеры Рис. 7.6. Управление предделителями таймеров/счетчиков — регистры SFIOR (а) и GTCCR (б) Для сброса предделителей таймеров/счетчиков используются биты PSRjc (PSRSYNC/PSRASY) регистра. При записи в эти биты лог. 1 предделители соответствующих таймеров/счетчиков переводятся в исходное состояние. Биты сбрасываются в 0 аппаратно после выполнения операции сброса. Напоминаю, что один предделитель, как правило, используется несколькими таймерами/счетчиками, и соответственно сброс предделителя повлияет на все таймеры/счетчики, которые его используют. Остановка всех предделителей микроконтроллера осуществляется записью лог. 1 в бит TSM регистра SFIOR или GTCCR. Последующий запуск предделителей осуществляется записью в бит TSM лог. 0. Указанная функция может использоваться, в частности, для синхронизации тай-
7.4. Предделители таймеров/счетчиков ¦ 341 меров/счетчиков. После установки бита TSM и битов PSRjc (PSRSYNC/PSRASY) соответствующие таймеры/счетчики останавливаются и могут быть проинициализированы требуемыми значениями. После сброса бита TSM биты PSRx (PSRSYNC/PSRASY) аппаратно сбрасываются и все таймеры/счетчики начинают работать одновременно. 7.4.2. Использование внешнего тактового сигнала Практически все таймеры/счетчики, не имеющие асинхронного режима работы, могут тактироваться от внешнего сигнала. Исключение составляет лишь таймер/счетчик ТЗ модели ATmegal62x. Внешний сигнал, поступающий на вход Тл (n = 0...5) микроконтроллера, прежде чем поступить на вход селектора тактового сигнала, проходит через специальный узел, включающий схему синхронизации и детектор фронтов. В общем виде схема этого узла приведена на Рис. 7.7. Рис. 7.7. Входной каскад выводов In Синхронизация внешнего сигнала осуществляется с частотой тактового сигнала микроконтроллера (состояние вывода Т1 считывается по нарастающему фронту тактового сигнала clk|/0). Поэтому частота внешнего сигнала должна быть в 2 раза ниже частоты тактового сигнала микроконтроллера (fEXj </clk_i/o/2). Однако, чтобы гарантировать обнаружение фронтов внешнего сигнала во всем диапазоне возможных изменений частоты и скважности тактового сигнала микроконтроллера (из-за разброса параметров элементов тактового генератора), рекомендуется, чтобы частота внешнего сигнала была меньше, чем /clk_i/o/2.5. Также следует понимать, что из-за входного каскада происходит временная задержка между изменением состояния вывода и обновлением счетного регистра таймера/счетчика. Величина задержки составляет от 2.5 до 3.5 тактов.
342 ¦ Глава 7. Таймеры 7.5. Восьмибитные таймеры/счетчики Восьмибитный таймер/счетчик ТО присутствует во всех моделях микроконтроллеров семейства Mega, а таймер/счетчик Т2 — во всех, кроме ATmega8515x. Всего в микроконтроллерах семейства реализовано пять исполнений восьмибитных таймеров/счетчиков, отличающихся набором выполняемых функций. Самым простым является таймер/счетчик ТО в модели ATmega8x (Рис. 7.8, а). Он может использоваться только для отсчета временных интервалов или как счетчик внешних событий. Более совершенным является таймер/счетчик ТО моделей ATmega8515x/8535x, ATmegal6x/32x, ATmegal62x, ATmegal65x, ATmega325x/3250x/645x/6450x и таймер/счетчик Т2 моделей ATmega64x/128x (Рис. 7.8, б). Помимо уже упомянутых функций, эти таймеры/счетчики могут использоваться в качестве одноканального генератора 8-битного ШИМ-сигнала. А в таймере/счетчике ТО остальных моделей (за исключением ATmega64x/128x) имеется уже два независимых блока сравнения, что позволяет реализовать 2-канальный генератор 8-битного ШИМ-сигнала (Рис. 7.8, в). Несколько особняком стоят таймер/счетчик ТО моделей ATmega64x/128x и таймер/счетчик Т2 всех остальных моделей. Основное их отличие заключается в том, что они могут работать в асинхронном режиме (обычно этот режим используется для реализации часов реального времени). В них также имеется один (модели ATmega8535x и ATmega8x/16x/32x/64x/128x) или два (остальные модели) блока сравнения, позволяющие реализовать 1- или 2-канальный генератор ШИМ-сигнала (Рис. 7.9). Все эти данные сведены в Табл. 7.6 и Табл. 7.7.
7.5. Восьмибитные таймеры/счетчики ш 343 Рис. 7.8. Структурные схемы 8-битных таймеров-счетчиков без асинхронного режима
344 ¦ Глава 7. Таймеры Рис. 7.9. Структурные схемы 8-битных таймеров/счетчиков с асинхронным режимом
7.5. Восьмибитные таймеры/счетчики ¦ 345 Таблица 7.6. Функции таймера/счетчика ТО Функции Восьмибитный счетчик Счетчик внешних событий Широтно-импуль- сный модулятор, число каналов Часы реального времени Рисунок ATmega8515x, ATmega8535x • 1 - 7.8,6 ATmega8x • - - 7.8, а ATmegal6x/32x • 1 - 7.8,6 ATmega64x/128x - 1 • 7.9, a ATmega48x/88x/168x • 2 - 7.8, в ATmegal62x • 1 - 7.8,6 ATmegal64x/324x/644x • 2 - 7.8, в ATmegal65x • 1 - 7.8,6 ATmega325x/3250x, ATmega645x/6450x • 1 - 7.8,6 ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x • 2 - 7.8, в Таблица 7.7. Функции таймера/счетчика Т2 Функции Восьмибитный счетчик Счетчик внешних событий Широтно-импуль- сный модулятор, число каналов Часы реального времени Рисунок ATmega8515x - - - - - ATmega8535x - 1 • 7.9, а ATmega8x - 1 • 7.9, а ATmegal6x/32x - 1 • 7.9, а ATmega64x/128x • 1 - 7.8,6 ATmega48x/88x/168x - 2 • 7.9,6 ATmegal62x - 1 • 7.9, a ATmegal64x/324x/644x - 2 • 7.9,6 ATmegal65x - 1 • 7.9, a ATmega325x/3250x, ATmega645x/6450x - 1 • 7.9, a ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x - 2 • 7.9,6
346 ¦ Глава 7. Таймеры Количество регистров ввода/вывода, имеющихся в составе таймеров/счетчиков, зависит от сложности и возможностей последних. Все регистры 8-битных таймеров/счетчиков указаны в Табл. 7.8. Эти же факторы влияют и на количество прерываний, генерируемых конкретным таймером/счетчиком. TCCRO TCCROA TCCROB TCNTO OCRO OCROA OCROB TCCR2 TCCR2A TCCR2B $33 1 1 1 1 II || ($53) $24 ($44) $25 ($45) $32 ($52) $26 ($46) $31 ($51) $3C ($5C) $27 ($47) $28 ($48) $25 ($45) $27 ($47) ($BO) ($B1) • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • Регистр управления Счетный регистр Регистр сравнения Регистр управления Регистр Адрес ATmega8515x ATmega8535x ATmega8x ATmegal6x/32x 64x/128x | ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x Назначение
7.5. Восьмибитные таймеры/счетчики ¦ 347 (продолжение) Регистр TCNT2 0CR2 0CR2A 0CR2B ASSR Адрес $24 ($44) $23 ($43) ($В2) $23 ($43) ($ВЗ) ($В4) $22 ($42) $26 ($46) $30 ($50) ($В6) ATmega8515x ATmega8535x • • • ATmega8x • • • ATmegal6x/32x • • • 64x/128x • • • ATmega48x/88x/168x • • • • ATmegal62x • • ATmegal64x/324x/644x| • • • • ATmegal65x • • • ATmega325x/3250x, 1 ATmega645x/6450x • • • ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x • • • • Назначение j Счетный регистр Регистр сравнения Регистр состояния асинхронного режима Счетный регистр таймера/счетчика TCNTaj входит в состав основного блока модуля — блока реверсивного счетчика. В зависимости от режима работы модуля содержимое счетного регистра сбрасывается, инкре- ментируется или декрементируется по каждому импульсу тактового сигнала таймера/счетчика clkT0 (clkT2). Независимо от того, присутствует тактовый сигнал или нет, регистр доступен в любой момент времени как для чтения, так и для записи. Однако следует помнить, что любая операция записи в счетный регистр блокирует работу блока сравнения на время одного периода тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNTh находится нулевое значение. При достижении таймером/счетчиком максимального или минимального значения (конкретный вариант зависит от его режима работы) уста-
348 ¦ Глава 7. Таймеры навливается флаг TOVa; в регистре флагов TIFR (TIFR/7). Разрешение прерывания осуществляется установкой в 1 бита ТСНЕл регистра маски TIMSK (TIMSKrt). Разумеется, флаг I регистра SREG также должен быть установлен в 1. Регистры сравнения OCR/i (OCRrtA/OCR^B) входят в состав блоков сравнения модуля. Во время работы таймера/счетчика производится непрерывное (в каждом такте) сравнение этих регистров с регистром TCNTVj. В случае равенства содержимого этих регистров в следующем такте устанавливается флаг ОС?п (OCFazA/OCFaiB) в соответствующем регистре флагов и генерируется прерывание (если оно разрешено). Кроме того, при наступлении этого события может изменяться состояние вывода ОСп (ОСлА/ОСяВ) микроконтроллера. Чтобы таймер/счетчик мог управлять состоянием этих выводов, они должны быть сконфигурированы как выходы (соответствующий бит регистра DDRx должен быть установлен в 1). Напоминаю, что любая операция записи в счетный регистр блокирует формирование сигнала о совпадении, если оно произойдет в следующем такте. Регистры ТССЯл (TCCRtfA/TCCRtfB) предназначены для управления модулем таймера/счетчика. Формат этих регистров приведен на Рис. 7.10...7.12, а описание их битов — соответственно в Табл. 7.9...7.11. Рис. 7.10. Формат регистров TCCR0 (а) и TCCR2 (б)
7.5. Восьмибитные таймеры/счетчики ¦ 349 Таблица 7.9. Биты регистра TCCRO (TCCR2) ГБит 7 6,3 5,4 2...0 Название FOCn WGMajI. WGMrtO COMwl: СОМлО CS/i2...CSa?0 Описание Принудительное изменение состояния вывода OC/i (режимы Normal и СТС). При записи лог. 1 в этот бит состояние вывода ОСп изменяется в соответствии с установками битов СОМл1 :СОМлО. Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. В режимах Fast PWM и Phase Correct PWM этот бит должен быть сброшен в 0. При чтении бита всегда возвращается 0 Режим работы таймера/счетчика. Эти биты определяют режим работы таймера/счетчика следующим образом: Номер режима 0 1 2 3 WGM/fl 0 0 1 1 WGM/iO 0 1 0 1 Режим работы таймера/счетчика Тл Normal Phase correct PWM СТС (сброс при совпадении) Fast PWM Режим работы блока сравнения. Эти биты определяют поведение вывода ОСп при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика Управление тактовым сигналом. Эти биты определяют источник тактового сигнала таймера/счетчика Действие этих битов зависит от исполнения таймера/счетчика и будет описано ниже Примечания: 1. я = 0 или 2. 2. В регистре TCCR0 модели ATmega8x задействованы только биты CS02. .CS00. Остальные биты регистра зарезервированы и читаются как 0. Таймер/счетчик этих моделей работает только в режиме Normal. Рис. 7.11. Формат регистров TCCR0A (а) и TCCR2A (б) моделей Atmegal65x/325x/3250x/645x/6450x
350 ¦ Глава 7. Таймеры Таблица 7.10. Биты регистра TCCROA (TCCR2A) моделей Atmegal65x/325x/3250x/645x/6450x Бит 7 6,3 5,4 2...0 Название FOCwA WGMwl: WGM/Ю COMwAl: СОМлАО CSnL.CSnO Описание Принудительное изменение состояния вывода OC/iA (режимы Normal и СТС). При записи лог. 1 в этот бит состояние вывода ОСлА изменяется в соответствии с установками битов СОМлА1:СОМлА0. Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. В режимах Fast PWM и Phase Correct PWM этот бит должен быть сброшен в 0. При чтении бита всегда возвращается 0 Режим работы таймера/счетчика. Эти биты определяют режим работы таймера/счетчика следующим образом: Номер режима 0 1 2 3 WGM/il 0 0 1 1 WGM/iO 0 1 0 1 Режим работы таймера/счетчика Тл Normal Phase correct PWM СТС (сброс при совпадении) Fast PWM Режим работы блока сравнения. Эти биты определяют состояние вывода ОСлА при наступлении события «Совпадение». Влияние содержимого этил битов на состояние вывода зависит от режима работы таймера/счетчика Управление тактовым сигналом. Эти биты определяют источник тактового сигнала таймера/счетчика. Действие этих битов зависит от исполнения таймера/счетчика и будет описано ниже Примечание, п = 0 или 2. Рис. 7.12. Формат регистров ТССЯОАДССЯОВ (а) и TCCR2A/TCCR2B (б)
7.5. Восьмибитные таймеры/счетчики ¦ 351 Таблица 7.11. Биты регистров TCCROA/TCCROB (TCCR2A/TCCR2B) ГРегистр TCCRM ТССЯлВ Бит 7,6 5,4 3,2 1,0 7 6 5,4 3 2...0 Название СОМлА1: СОМлАО СОМлВ1: СОМлВО - WGMa?1: WGMaiO FOOjA FOO/B - WGMw2 CSw2...CSwO Описание Режим работы блока сравнения «А». Эти биты определяют поведение вывода ОСлА при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика Режим работы блока сравнения «В». Эти биты определяют поведение вывода ОСлВ при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика Зарезервированы, читаются как 0 1 Режим работы таймера/счетчика. Эти биты совместно с битом 1 WGMai2 регистра TCCRajB определяют режим работы таймера/счетчика следующим образом: Номер режима 0 1 2 3 4 5 6 7 WGIVW 0 0 0 0 1 1 1 1 WGMal 0 0 1 1 0 0 1 1 WGMwO 0 1 0 1 0 1 0 1 Режим работы таймера/счетчика Тл Normal I Phase correct PWM 1 СТС (сброс при совпадении) 1 Fast PWM I Зарезервировано 1 Phase correct PWM 1 Зарезервировано 1 Fast PWM Принудительное изменение состояния вывода ОСлА (режимы Normal и СТС). При записи лог. 1 в этот бит состояние вывода ОСлА изменяется в соответствии с установками битов СОМлА1:СОМлА0. Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. В режимах Fast PWM и Phase Correct PWM этот бит должен быть сброшен в 0. При чтении бита всегда возвращается 0 Принудительное изменение состояния вывода ОСлВ (режимы Normal и СТС). При записи лог. 1 в этот бит состояние вывода ОСлВ изменяется в соответствии с установками битов СОМлВ1:СОМлВ0. Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. В режимах Fast PWM и Phase Correct PWM этот бит должен быть сброшен в 0. При чтении бита всегда возвращается 0 Зарезервированы, читаются как 0 1 Режим работы таймера/счетчика. Этот бит совместно с битами 1 WGMл 1 Л\Х}МлО регистра ТССЯлА определяют режим работы таймера/счетчика Управление тактовым сигналом. Эти биты определяют источник так- 1 тового сигнала таймера/счетчика. Действие этих битов зависит от исполнения таймера/счетчика и будет описано ниже Примечание, л = 0 или 2.
352 ¦ Глава 7. Таймеры 7.5.1. Управление тактовым сигналом Формирование тактового сигнала таймера/счетчика clkT0 (clkT2) осуществляется блоком предделителя, который был рассмотрен в разделе 7.4. В качестве тактового сигнала clkT0 (clkT2) таймеров/счетчиков, не имеющих асинхронного режима, может использоваться (см. Рис. 7.5, а): • системный тактовый сигнал (clkT0 (Т2) = clk|/0); • масштабированный системный тактовый сигнал (clkT0(T2) = clk,/oA0; • внешний сигнал, поступающий на вход ТО (Т2) микроконтроллера (с1кТ0(Т2) = с1кЕхт). Тактовый сигнал таймеров/счетчиков с асинхронным режимом может формироваться либо из системного тактового сигнала clk|/0 (clkT0 (Т2) = с1к|/0/я), либо — в асинхронном режиме — из сигнала от дополнительного кварцевого резонатора (clkT0(T2) = clkTosciA0> k^k показано на Рис. 7.5, б. Переключение между синхронным и асинхронным режимами работы осуществляется с помощью бита ASO (AS2) регистра ASSR. Выбор источника тактового сигнала, а также запуск и остановка таймеров/счетчиков осуществляются с помощью битов CS02...CS00 (CS22...CS20) регистров управления таймером TCCR/г (TCCR/iA/TCCRaB) согласно Табл. 7.12. Таблица 7.12. Выбор источника тактового сигнала таймеров/счетчиков ТО и Т2 CSnl 0 0 0 0 1 1 1 1 CS/il 0 0 1 1 0 0 1 1 CS/iO 0 1 0 1 0 1 0 1 Источник тактового сигнала Обычный таймер/счетчик Таймер/счетчик остановлен clki/o clk1/0/8 clkj/o/64 c!k1/0/256 clki/o/1024 Вывод Т/?, счет осуществляется по спадающему фронту импульсов Вывод Тл, счет осуществляется по нарастающему фронту импульсов Асинхронный таймер/счетчик ASn = 0 ASw = 1 Таймер/счетчик остановлен clkI/0 clkI/0/8 clk1/0/32 clk|/0/64 clkl/0/128 clkI/0/256 с1к,/о/1024 clkTosci clk-rosci/8 J clkTOSCi/32 j clk-rosci/64 clkrosci/128 clkTosci/256 clkTOsci/1024 Примечание, n = О или 2.
7.5. Восьмибитные таймеры/счетчики ¦ 353 7.5.2. Режимы работы Режим работы таймера/счетчика ТО (Т2) определяется состоянием битов WGM/*2:WGMrtO регистра TCCRai (TCCR/iA/TCCR/iB). Зависимость режима работы таймеров/счетчиков от состояния этих битов показана в Табл. 7.13. Таблица 7.13. Режимы работы таймеров/счетчиков ТО и Т2 Номер режима 0 1 2 3 40 5° 6° 7° WGMл21) 0 0 0 0 1 1 1 1 WGMnl 0 0 1 1 0 0 1 1 WGMwO 0 1 0 1 0 1 0 1 Режим работы таймера/счетчика Тл Normal Phase correct PWM CTC (сброс при совпадении) Fast PWM Зарезервировано Phase correct PWM Зарезервировано Fast PWM Модуль счета (TOP) $FF $FF OCR/i (OCR/jA) $FF - OCR/* (OCR/iA) - OCR// (OCRM) Обновление регистров OCRiuc Немедленно При TOP Немедленно При TOP - При TOP - При TOP Момент установки флага ТОУл $FF $00 $FF $FF - $00 - TOP 1)BмoдeляxATmega48x/88x/168x,ATmegal64x/324x/644xиATmega640x/1280x/1281x/2560x/2561xJ Примечание, п = 0 или 2. Режим Normal Это наиболее простой режим работы таймеров/счетчиков. А в таймере/счетчике ТО модели ATmega8x это вообще единственный режим. В режиме Normal счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала с1кТя осуществляется инкрементирование счетного регистра. При переходе через значение $FF возникает переполнение, и счет продолжается со значения $00. В том же такте сигнала clkTw, в котором обнуляется регистр TCNTa*, флаг прерывания по переполнению TOV/j устанавливается в 1. При равенстве счетного регистра и регистра сравнения устанавливается соответствующий флаг прерывания OCFw (OCFajA/OCFajB) и, если бит OCIEw (ОСШяА/ООЕлВ) регистра маски установлен в 1, генерируется прерывание. Наряду с установкой флага при равенстве счетного регистра и
354 ¦ Глава 7. Таймеры регистра сравнения может изменяться состояние вывода ОСл (ОСяА/ОСяВ) микроконтроллера. Каким образом оно будет изменяться, определяется битами СОМл1:СОМяО (СОМях1:СОМшЮ) регистра управления TCCRaj/TCCR/jA в соответствии с Табл. 7.14. Таблица 7.14. Управление выводами ОСл (ОСлА/OC/iB) в режиме Normal СОМл1 (COM/ucl) 0 0 1 1 COM/iO (СОМлхО) 0 1 0 1 Описание Таймер/счетчик In отключен от вывода ОСя (ОСях) Состояние вывода меняется на противоположное Вывод сбрасывается в 0 Вывод устанавливается в 1 Примечание, п = О или 2 При необходимости состояние вывода ОСл (ОСяА/ОСяВ) может быть изменено принудительно записью лог. 1 в бит FOOj (FOOjA/FOCaiB) соответствующего регистра управления. Прерывание при этом не генерируется. Режим СТС (сброс при совпадении) В этом режиме счетный регистр тоже функционирует как обычный суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала clkTw. Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяются регистром сравнения OCR/7 (OCR/iA). После достижения значения, записанного в регистре сравнения, счет продолжается со значения $00. Если в регистре сравнения записано $FF, то в том же такте сигнала clkTw, в котором обнуляется счетный регистр, устанавливается флаг прерывания по переполнению TOVn в соответствующем регистре флагов. Временные диаграммы для этого режима работы таймера/счетчика приведены на Рис. 7.13. При достижении счетчиком максимального значения устанавливается флаг OCFaj (OCFajA), и, если бит ОСШя (ОСШяА) соответствующего регистра маски установлен в 1, генерируется прерывание. Одновременно с установкой флага может изменяться состояние выводов ОСп (ОСяА/ОСяВ) микроконтроллера. Состояние выводов определяется битами СОМл1:СОМл0 (СОМлх1:СОМлх0) регистра управления TCCR/*/TCCR/zA, как указано в Табл. 7.15.
7.5. Восьмибитные таймеры/счетчики ¦ 355 Рис. 7.13. Временные диаграммы для режима СТС Таблица 7.15. Управление выводами ОС/i (ОСяА/ОСлВ) в режиме СТС СОМл1 (СОМл*1) 0 0 1 1 СОМлО (СОМлхО) 0 1 0 1 Описание Таймер/счетчик In отключен от вывода ОСл (ОСпх) Состояние вывода меняется на противоположное Вывод сбрасывается в 0 Вывод устанавливается в 1 Примечание, п = О или 2. Для генерации сигнала заданной частоты необходимо записать в биты СОМл1:СОМлО (COM/dc1:COMaixO) значение 01 (переключение вывода). Частота генерируемого сигнала будет определяться выражением где N — коэффициент деления предделителя (см. Табл. 7.12). При необходимости состояние вывода ОСл (ОСлА/ОСлВ) можно изменить принудительно записью лог. 1 в бит FOOi (FOOiA/FOO/B) соответствующего регистра управления. Прерывание при этом не генерируется и сброса счетного регистра не производится. Режим Fast PWM Режим Fast PWM («Быстродействующий ШИМ») позволяет генерировать высокочастотный сигнал с широтно-импульсной модуляцией. В связи с высокой частотой генерируемого сигнала данный режим с успехом
356 ¦ Глава 7. Таймеры может использоваться в таких приложениях, как регулирование мощности, выпрямление, цифро-аналоговое преобразование и др. Счетный регистр в этом режиме функционирует как суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала clkT„. Состояние счетчика изменяется от $00 до максимального значения, после чего счетный регистр сбрасывается и цикл повторяется. При достижении счетчиком максимального значения устанавливается флаг прерывания по переполнению TOVn в соответствующем регистре флагов, а при равенстве содержимого счетного регистра и регистра сравнения ОСКп (ОСИлА/ OCRuB) устанавливается флаг OCFn (OCFazA/OCFajB). Максимальное значение равно $FF (при WGM«2 = 0 или при отсутствии этого бита в регистре микроконтроллера) или задается регистром ОСЯяА (при WGMa2 = 1). Особенностью работы схемы сравнения в этом режиме является двойная буферизация записи в регистр OCR/* (OCRazA/OCRajB), которая заключается в том, что записываемое число на самом деле сохраняется в специальном буферном регистр, а изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения. Благодаря такому решению исключается появление несимметричных импульсов сигнала (помех) на выходе модулятора, которые были бы неизбежны при непосредственной записи в регистр сравнения. Состояние выводов ОСп (ОСлА/ОСяВ) микроконтроллера в этом режиме также определяется содержимым битов СОМл1:СОМл0 (СОМял:1:СОМлх0) регистра TCCR/*/TCCR/iA (см. Табл. 7.16 и Рис. 7.14). Таблица 7.16. Управление выводами OC/i (OC/tA/OC/iB) в режиме Fast PWM СОМл1 (СОМлх1) 0 0 1 1 СОМлО (СОМяхО) 0 1 0 1 Описание Таймер/счетчик Тл отключен от вывода ОСл (ОСпх) ОСлА: WG№to2 = 0 — таймер/счетчик Тл отключен от вывода ОСлА; WGM«2 = 1 — состояние вывода меняется на противоположное при равенстве регистров ТСЫТл и ОСЯлА. ОСлВ, ОСлС: Зарезервировано Сбрасывается в 0 при равенстве регистров TCNTw и ОСЯл (OCR/uc). Устанавливается в 1 при достижении счетчиком максимального значения (неинвертированный ШИМ-сигнал) Устанавливается в 1 при равенстве регистров ТСШл и OCRn (ОСЯлх). Сбрасывается в 0 при достижении счетчиком максимального значения (инвертированный ШИМ-сигнал) Примечание, л = 0 или 2
7.5. Восьмибитные таймеры/счетчики ¦ 357 Рис. 7.14. Формирование ШИМ-сигнала в режиме Fast PWM Частота генерируемого сигнала определяется выражением где N— коэффициент деления предделителя (см. Табл. 7.12). Отдельно следует рассматривать случаи, когда в регистре сравнения находятся предельно возможные значения. Если в регистре сравнения OCR/2 (OCRM/OCR/jB) содержится $00, то на выходе ОСп (ОСлА/ОСлВ) будут наблюдаться короткие выбросы с периодом, равным максимальному значению таймера/счетчика. Если же содержимое регистра сравнения равно максимальному значению, то вывод ОСп (ОСяА/ОСлВ) переключится в устойчивое состояние, определяемое установками битов СОМл1:СОМя0 (СОМшс1:СОМях0). В частности, подобным образом функционирует выход ОСлА, когда максимальное значение задается регистром OCR/jA. Режим Phase Correct PWM Режим Phase Correct PWM («ШИМ с точной фазой»), как и режим Fast PWM, предназначен для генерации сигналов с широтно-импульсной модуляцией. Однако в этом режиме счетный регистр функционирует как реверсивный счетчик, изменение состояния которого осуществляется по каждому импульсу тактового сигнала clkT0 (clkT2). Состояние счетчика сначала изменяется от $00 до максимального значения, а затем обратно до $00. Соответственно, максимальная частота сигнала в этом режиме в 2 раза меньше максимальной частоты сигнала в режиме Fast PWM. Тем не менее
358 ¦ Глава 7. Таймеры благодаря «симметричности» изменения состояния счетчика режим Phase Correct PWM предпочтительнее использовать для решения задач управления двигателями. Максимальное значение равно $FF (при WGMw2 = 0 или при отсутствии этого бита в регистре микроконтроллера) или задается регистром OCR/?A (при WGMfl2 = 1). При достижении счетчиком максимального значения происходит смена направления счета, однако счетчик остается в этом состоянии в течение одного периода сигнала с1кТя. При достижении счетчиком минимального значения ($00) также происходит смена направления счета и одновременно устанавливается флаг прерывания TOWn в соответствующем регистре флагов. При равенстве содержимого счетного регистра и регистра сравнения OCRn (OCRM/OCR/jB) устанавливается флаг OCFn (OCFhA/OCFaiB) и изменяется состояние вывода ОСи (ОСпА/ОСпВ). Характер изменения определяется, как обычно, содержимым битов СОМл1:СОМл0 (СОМлх1:СОМл;с0) регистра TCCR/i/TCCRuA (Табл. 7.17 и Рис. 7.15). Таблица 7.17. Управление выводами ОСп (ОСлА/ОСяВ) в режиме Phase Correct PWM СОМл1 (COMnxl) 0 0 1 1 СОМлО (СОМлхО) 0 1 0 1 Описание Таймер/счетчик In отключен от вывода ОСп (ОСпх) 1 ОСлА: WGMw2 = 0 — таймер/счетчик In отключен от вывода ОСлА; WGMfl2 = 1 — состояние вывода меняется на противоположное при равенстве регистров ТСОТл и OCRflA. ОСлВ, ОСл: Зарезервировано Сбрасывается в 0 при прямом счете и устанавливается в 1 при обратном 1 счете (неинвертированный ШИМ-сигнал) Устанавливается в 1 при прямом счете и сбрасывается в 0 при обратном счете (инвертированный ШИМ-сигнал) Примечание, л = 0 или 2. Для исключения несимметричных выбросов в этом режиме тоже реализована двойная буферизация записи в регистры сравнения. Поэтому действительное изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения. Если в регистр сравнения записать минимальное ($00) или максимальное значение, то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.18.
7.5. Восьмибитные таймеры/счетчики ¦ 359 Рис. 7.15. Формирование ШИМ-сигнала в режиме Phase Correct PWM Таблица 7.18. Устойчивые состояния выхода схемы сравнения С0Мл1 (COM/txl) 1 1 1 1 СОМлО (СОМлхО) 0 0 1 1 Регистр OCfoi (OCfoiA/OCItoB) $00 Максимальное значение $00 Максимальное значение Состояние вывода ОСл (ОСлА/ОСлВ) 0 1 1 0 Примечание, п = 0 или 2. Частота генерируемого в рассматриваемом режиме сигнала определяется выражением где N— коэффициент деления предделителя (см. Табл. 7.12).
360 ¦ Глава 7. Таймеры 7.5.3. Асинхронный режим В моделях ATmega64x и ATmegal28x в асинхронном режиме может работать таймер/счетчик ТО. В остальных моделях (кроме ATmega8515x) такой возможностью обладает таймер/счетчик Т2. В асинхронном режиме на вход предделителя поступает сигнал от кварцевого генератора таймера/счетчика, что позволяет использовать таймер/счетчик в качестве часов реального времени. В качестве источника сигнала, как правило, используется кварцевый резонатор, подключаемый к выводам TOSC1 и TOSC2 микроконтроллера. В некоторых моделях можно использовать сигнал от внешней схемы, подаваемый на вывод TOSCI. Тактовый генератор таймера/счетчика оптимизирован для работы на частоте 32 768 Гц, при этом она должна быть как минимум в 4 раза ниже частоты тактового сигнала микроконтроллера. Непосредственная запись в регистры TCNTaj, OCR/i (OCR/jA/OCRaiB) и TCCRn (TCCRflA/TCCR/tB) в асинхронном режиме синхронизируется с тактовым сигналом таймера/счетчика. При записи числа в любой из указанных регистров оно сохраняется в специальном временном регистре, своем для каждого регистра таймера/счетчика. А пересылка содержимого временного регистра в рабочий регистр таймера/счетчика осуществляется по третьему после записи положительному фронту сигнала на выводе TOSC1. Соответственно, запись нового значения можно производить только после пересылки содержимого временного регистра в регистр таймера/счетчика. Для определения момента действительного изменения регистров таймера/счетчика, а также для управления асинхронным режимом таймера/счетчика предназначен регистр ASSR. Формат этого регистра приведен на Рис. 7.16, а описание его битов — в Табл. 7.19. Рис. 7.16. Формат регистра ASSR
7.5. Восьмибитные таймеры/счетчики ¦ 361 Таблица 7.19. Биты регистра ASSR Название AS/j EXCLK TCNwUB OCR/iUB, OCR2AUB, OCR2BUB TCR/ШВ, TCR2AUB, TCR2BUB Описание Переключение режима работы. Если бит установлен в 1, то на вход предделителя таймера/счетчика Тл поступают импульсы с кварцевого генератора таймера/счетчика (асинхронный режим). В этом режиме выводы TOSC1 и TOSC2 используются для подключения кварцевого резонатора и соответственно не могут использоваться как контакты ввода/вывода общего назначения. Если бит сброшен в 0, то на вход предделителя поступает внутренний тактовый сигнал микроконтроллера. В этом случае выводы TOSC1 и TOSC2 являются линиями ввода/вывода общего назначения. При изменении состояния этого бита содержимое регистров TCNT/i, OCR/* (OCR/?A/OCR/iB) и TCCR/i (TCCR/iA/TCCR/iB) может быть повреждено Разрешение внешнего тактового сигнала. При установке бита в 1 включается входной буфер внешнего тактового сигнала и таймер/счетчик может тактироваться внешним сигналом, подаваемым на вход TOSC1. Установка этого бита должна производиться перед включением асинхронного режима. Если в регистре ASSR конкретной модели этот бит отсутствует, то использование внешнего тактового сигнала с этим микроконтроллером не рекомендуется Состояние обновления регистра TCNTn. При записи в регистр TCNTw этот флаг устанавливается в 1, а после пересылки записываемого значения в данный регистр флаг аппаратно сбрасывается в 0. Таким образом, сброшенный флаг TCNwUB означает, что регистр TCNTrt готов для записи в него нового значения. Запись в регистр TCNTVi при установленном флаге TCNwUB может привести к повреждению прежнего содержимого регистра и к генерации прерывания Состояние обновления регистра ОСИл (OCR2A/OCR2B). При записи в регистр сравнения соответствующий флаг устанавливается в 1, а после пересылки записываемого значения в регистр флаг аппаратно сбрасывается в 0. Таким образом, сброшенный флаг OCRuUB (OCR2AUB/OCR2BUB) означает, что соответствующий регистр сравнения готов для записи в него нового значения. Запись в регистр сравнения при установленном флаге OCRwUB (OCR2AUB/OCR2BUB) может привести к повреждению прежнего содержимого регистра и к генерации прерывания Состояние обновления регистра ТССИл (TCCR2A/TCCR2B). При записи в регистр управления соответствующий флаг устанавливается в 1, а после пересылки записываемого значения в регистр флаг аппаратно сбрасывается в 0. Таким образом, сброшенный флагТС^иВ (TCR2AUB/TCR2BUB) означает, что соответствующий регистр управления готов для записи в него нового значения. Запись в регистр управления при установленном флаге TCR/iUB (TCR2AUB/TCR2BUB) может привести к повреждению прежнего содержимого регистра и к генерации прерывания Примечание, п = 0 для моделей ATmega64x/128x и 2 — для остальных моделей (кроме ATmega8515x).
362 ¦ Глава 7. Таймеры Необходимо отметить, что при переключении между синхронным и асинхронным режимами содержимое регистров таймера/счетчика может быть повреждено. Чтобы этого избежать, рекомендуется придерживаться следующей последовательности действий: 1. Запретить прерывания от таймера/счетчика. 2. Переключить его в требуемый режим. 3. Записать новые значения в регистры TCNTaj, OCR/i (OCRnx) и TCCRn (TCCRnx). 4. В случае переключения в асинхронный режим дождаться сброса флагов TCNaiUB, OCR/jUB (OCR2xUB) и TCR/zUB (TCR2xUB). 5. Сбросить флаги прерываний таймера/счетчика. 6. Разрешить прерывания (если требуется). При работе таймера/счетчика в асинхронном режиме установка флагов прерываний от него производится синхронно с тактовым сигналом микроконтроллера. Для синхронизации требуется 3 такта плюс один период тактового сигнала таймера/счетчика. Поэтому к моменту, когда микроконтроллер сможет прочитать состояние счетчика, вызвавшее установку флага прерывания, оно изменится, по меньшей мере, на единицу. Изменение состояния выводов ОСл (ОСлА/ОСлВ) производится по тактовому сигналу таймера/счетчика и не синхронизируется с тактовым сигналом микроконтроллера. Отдельно следует сказать о «взаимодействии» асинхронного режима таймеров/счетчиков с режимами пониженного энергопотребления микроконтроллера. Первое замечание касается использования прерываний от таймера/счетчика для «пробуждения» микроконтроллера. Если перевод микроконтроллера в режим Power Save или Extended Standby осуществляется сразу же после записи в регистры таймера/счетчика, необходимо убедиться, что операция записи завершена. Наиболее важно это в случае, когда для «пробуждения» микроконтроллера используется прерывание от блока сравнения, поскольку во время записи в счетный регистр или регистр сравнения работа блока сравнения заблокирована. Соответственно, если переход в «спящий» режим произойдет до окончания операции записи в указанные регистры, прерывания от схемы сравнения никогда не произойдет, и микроконтроллер не сможет выйти из «спящего» режима. Кроме того, необходимо быть осторожным при повторном переходе в режим Power Save или Extended Standby после выхода из них по прерыванию от таймера/счетчика. Дело в том, что в этом случае для запуска подсистемы прерываний требуется промежуток времени, равный одному периоду сигнала на выводе TOSC1. Если же промежуток времени между «пробуждением» и повторным переходом в «спящий» режим будет меньше указанного, генерации прерывания и соответственно перехода микроконтроллера в рабочий режим не произойдет. Для формирования задержки требуемой длительности рекомендуется
7.6. 16-битные таймеры/счетчики ¦ 363 после «пробуждения» микроконтроллера выполнить запись в какой-либо из регистров таймера/счетчика и дождаться завершения этой операции. После подачи напряжения питания, а также после «пробуждения» микроконтроллера из режима Power Down или Standby таймер/счетчик рекомендуется использовать только спустя секунду после указанных событий. Эта задержка необходима для запуска тактового генератора таймера/счетчика. Соответственно, при выходе из режима Power Down или Standby содержимое всех регистров таймера/счетчика можно считать потерянным (из-за нестабильности тактового сигнала во время запуска генератора). Причем это справедливо не только при использовании кварцевого резонатора, но и при использовании внешнего тактового сигнала. 7.6.16-битные таймеры/счетчики Количество 16-битных таймеров/счетчиков зависит от модели. Таймер/счетчик Т1 присутствует во всех моделях микроконтроллеров семейства Mega. В моделях ATmega64x/128x и ATmegal62x имеется уже два 16-битных таймера/счетчика — Т1 и ТЗ. Больше всего 16-битных таймеров/счетчиков в моделях ATmega640x/1280x/1281x/2560x/2561x — целых пять (Tl, T3...T5). Как и 8-битные таймеры/счетчики ТО и Т2, они могут использоваться для формирования временных интервалов, для подсчета числа внешних событий, формирования сигналов и генерации сигналов с ШИМ. В дополнение к этому 16-битные таймеры/счетчики могут по внешнему сигналу сохранять свое текущее состояние в отдельном регистре ввода/вывода. Рассматриваемые таймеры/счетчики различных моделей отличаются только количеством блоков сравнения и соответственно количеством каналов генерации ШИМ-сигналов. Так, если в моделях ATmega64x/128x и ATmega640x/1280x/1281x/2560x/2561x 16-битные таймеры/счетчики имеют по три блока сравнения, то в остальных моделях — только по два. Кроме того, таймеры/счетчики Т4 и Т5 моделей ATmegal281x/2561x являются усеченными — из-за малого количества выводов микроконтроллера в них не поддерживаются функции захвата и сравнения, а также тактирование от внешнего сигнала. Упрощенная структурная схема 16-битных таймеров/счетчиков приведена на Рис. 7.17. В состав каждого таймера/счетчика входят следующие регистры ввода/вывода: • 16-битный счетный регистр TCNTaj; • 16-битный регистр захвата ICR/z; • два или три 16-битных регистра сравнения OCR/jA, OCRajB, OCR/jC; • два или три 8-битных регистра управления TCCR/jA, ТССЯлВ, TCCR/iC.
364 ¦ Глава 7. Таймеры Рис. 7.17, Структурная схема 16-битных таймеров/счетчиков (Т1,ТЗ,Т4,Т5) Каждый из 16-битных регистров физически размещается в двух регистрах ввода/вывода, названия которых получаются добавлением к названию регистра буквы «Н» (старший байт) и «L» (младший байт). Счетный регистр таймера/счетчика Tl TCNT1, например, размещается в регистрах TCNT1H:TCNT1L. Адреса всех регистров 16-битных таймеров/счетчиков указаны в Табл. 7.20.
7.6. 16-битные таймеры/счетчики ¦ 365 TCCR1A TCCR1B TCCR1C TCNT1 0CR1A OCR1B OCR1C ICR1 TCCR3A TCCR3B TCCR3C TCNT3 $2F($4F) ($80) $2E ($4E) ($81) ($7A) ($82) $2D:$2C ($4D:$4C) ($85:$84) $2B:$2A ($4B:$4A) ($89:$88) $29:$28 ($49:$48) ($8B:$8A) ($79:$78) ($8D:$8C) $27:$26 ($47:$46) $25:$24 ($45:$44) ($87:$86) ($8B) ($90) ($8A) ($91) ($8C) ($92) ($89:$88) ($95:$94) • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 1 • • I • 1 • • 1 • • • • • Таблица 7.20. Регистры 16-битных таймеров/счетчиков Регистр Адрес ATmega8515x ATmega8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644j ATmegal65x I ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x
366 ¦ Глава 7. Таймеры (продолжение) 0CR3A 0CR3B 0CR3C ICR3 TCCR4A TCCR4B TCCR4C TCNT4 0CR4A 0CR4B 0CR4C ICR4 TCCR5A TCCR5B TCCR5C TCNT5 0CR5A 0CR5B 0CR5C ICR5 ($87:$86) ($99:$98) ($85:$84) ($9В:$9А) ($83:$82) ($9D:$9C) ($81:$80) ($97:$96) ($А0) ($А1) ($А2) ($А5:$А4) ($А9:$А8) ($АВ:$АА) ($AD:$AC) ($А7:$А6) ($120) ($121) ($122) ($125:$124) ($129:$128) ($12В:$12А) ($12D:$12C) ($127:$126) • • • • • • • Таймеры/счетчики Т1 и ТЗ...Т5 могут генерировать прерывание при наступлении следующих событий: • переполнение счетного регистра; • равенство счетного регистра и регистра сравнения (по одному прерыванию на каждый блок сравнения); • сохранение счетного регистра в регистре захвата. Регистр Адрес ATmega8515x ATmega8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x
7.6. 16-битные таймеры/счетчики ¦ 367 Флаги всех прерываний 16-битных таймеров/счетчиков находятся в регистрах флагов TIFR/ETIFR/TIFRa, а разрешение/запрещение этих прерываний осуществляется установкой/сбросом соответствующих флагов регистров TIMSK/ETIMSK/TIMSK/7 (см. раздел 7.3). Счетный регистр таймера/счетчика TCNTa входит в состав основного блока модуля — блока реверсивного счетчика. В зависимости от режима работы модуля содержимое счетного регистра сбрасывается, инкременти- руется или декрементируется по каждому импульсу тактового сигнала таймера/счетчика clkT„. Независимо от того, присутствует тактовый сигнал или нет, регистр доступен в любой момент времени как для чтения, так и для записи. При этом любая операция записи в счетный регистр блокирует работу всех блоков сравнения на время одного периода тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNTw находится нулевое значение. При некоторых изменениях состояния таймера/счетчика, определяемых режимом его работы, устанавливается бит ТОУл в соответствующем регистре флагов. Разрешение прерывания осуществляется установкой в 1 бита Т01Ел соответствующего регистра маски. Регистры сравнения OCR/zA/OCR/zB/OCRflC входят в состав блоков сравнения. Во время работы таймера/счетчика производится непрерывное (в каждом такте) сравнение этих регистров с регистром TCNT/j. В случае равенства содержимого регистра сравнения и счетного регистра в следующем такте устанавливается флаг OCFajA/OCFazB/OCFhC в соответствующем регистре флагов и генерируется прерывание (если оно разрешено). Также при наступлении этого события может изменяться состояние вывода ОСяА/ОСлВ/ОСяС микроконтроллера. Чтобы таймер/счетчик мог управлять состоянием какого-либо из этих выводов, он должен быть сконфигурирован как выходной (соответствующий бит регистра DDRjc должен быть установлен в 1). Особенностью работы блока сравнения в режимах, предназначенных для формирования ШИМ-сигналов, является двойная буферизация записи в регистры сравнения. Она заключается в том, что записываемое число на самом деле сохраняется в специальном буферном регистре. А изменение содержимого регистра сравнения происходит только при достижении счетчиком максимального значения. Регистр захвата ICR/i входит в состав блока захвата, назначение которого — сохранение в определенный момент времени состояния таймера/счетчика в регистре захвата. Это действие может производиться либо по активному фронту сигнала на выводе 1СРл микроконтроллера, либо (для таймера/счетчика Т1) по сигналу от аналогового компаратора. Одновременно с записью в регистр захвата устанавливается флаг ICFaj соответствующего регистра флагов и генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой в 1 бита TICIEw регистра маски.
368 ¦ Глава 7. Таймеры Программно запись в регистр \CRn возможна только в режимах, в которых регистр захвата определяет модуль счета таймера/счетчика (см. Табл. 7.25). Вывод 1СРл в этих режимах отключен от микроконтроллера, а функция захвата соответственно выключена. Упрощенная структурная схема блока захвата приведена на Рис. 7.18. * Выход аналогового компаратора подключен только к таймеру/счетчику Т1. Рис. 7.18. Структурная схема блока захвата Для управления схемой захвата используются два бита регистра TCCR/iB — ICNO* и ICESaj. Бит ICNC« управляет схемой подавления помех. Если этот бит сброшен в 0, схема подавления помех выключена и захват производится по первому же активному фронту на выходе мультиплексора (Рис. 7.18). Если же этот бит установлен в 1, то при появлении активного фронта производится 4 выборки с частотой, равной тактовой частоте микроконтроллера. Захват будет выполнен только в том случае, если все выборки имеют уровень, соответствующий активному фронту сигнала (лог. 1 для нарастающего и лог. О для спадающего). Активный фронт сигнала, т. е. фронт, по которому будет выполнено сохранение содержимого счетного регистра в регистре захвата, определяется битом ICESaj. Если этот бит сброшен в 0, то активным является спадающий фронт. Если бит установлен в 1, то активным является нарастающий фронт. Для захвата по сигналу с вывода 1СРя этот вывод должен быть сконфигурирован как вход (бит регистра DDRx, соответствующий выводу, должен быть сброшен в 0). Если же он будет сконфигурирован как выход, захват можно будет осуществлять программно, управляя соответствующим битом порта.
7.6. 16-битные таймеры/счетчики ¦ 369 Следует понимать, что между изменением состояния входа блока захвата и копированием счетного регистра в регистр захвата таймера/счетчика проходит некоторое время. Эту задержку вносит каскад, состоящий из синхронизатора (на рисунке не показан) и детектора фронтов. Величина задержки составляет от 2.5 до 3.5 тактов. При включении схемы подавления помех задержка увеличивается еще на 4 такта. Для управления таймером/счетчиком используются три регистра управления: TCCR/jA, TCCRrtB, TCCRnC. Формат этих регистров приведен на Рис. 7.19...7.21, а описание их битов — в Табл. 7.21...7.23. Рис. 7.19. Формат регистров TCCR1A (a), TCCR3A F), TCCR4A (в) иТССЯ5А(г)
370 ¦ Глава 7. Таймеры Таблица 7.21. Биты регистров TCCRwA Название СОМлА1:СОМлА0 СОМлВ1:СОМлВ0 СОМлС1:СОМлС0 WGM/?l:WGM/iO FOCaiA FOC«B Описание Режим работы блока сравнения jc. Эти биты определяют состояние вывода ОСпх при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика Режим работы таймера/счетчика. Совместно с битами WGMw3:WGM«2 регистра ТССЯлВ определяют режим работы таймера/счетчика Тл (см. Табл. 7.25) Принудительное изменение состояния вывода ОСпх. При записи в бит FOCnx лог. 1 состояние вывода ОСпх изменяется в соответствии с установками битов СОМл1х:СОМл(к регистра TCCR/jA. Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. Эта функция доступна только в тех режимах, которые не используются для генерации сигнала с ШИМ. При чтении бита всегда возвращается 0 Примечание, п = 1,3,4,5; х = А, В или С. Рис. 7.20. Формат регистров TCCR1B (a), TCCR3B (б), TCCR4B (в) и TCCR5B (г)
7.6. 16-битные таймеры/счетчики ¦ 371 Таблица 7.22. Регистр TCCR/iB [Бит 7 6 5 4,3 2...0 Название ICNC/i ICES/i - WGMAi3:WGMn2 CS/22...CS«0 Описание Управление схемой подавления помех блока захвата. Если бит сброшен в 0, схема подавления помех выключена (захват производится по первому активному фронту). Если бит установлен в 1, схема подавления помех включена и захват осуществляется только в случае четырех одинаковых выборок, соответствующих активному фронту сигнала Выбор активного фронта сигнала захвата. Если бит \CESn сброшен в 0, сохранение счетного регистра в регистре захвата осуществляется по спадающему фронту сигнала. Если бит установлен в 1, то сохранение счетного регистра в регистре захвата осуществляется по нарастающему фронту сигнала. Одновременно с сохранением счетного регистра устанавливается также флаг прерывания ICF/i регистра флагов Не используется, читается как 0 Режим работы таймера/счетчика. Совместно с битами WG Мл 1:WG М лО регистра TCCR/iA определяют режим работы таймера/счетчика In (Табл. 7.25) Управление тактовым сигналом. Эти биты определяют источник тактового сигнала микроконтроллера (см. подраздел 7.6.2) Примечание, л = 1, 3,4,5. Рис. 7.21. Формат регистров TCCR1C (я), TCCR3C (E), TCCR4C (в) и TCCR5C (г)
372 ¦ Глава 7. Таймеры Таблица 7.23. Регистр TCCR/iC Бит 7 6 5 4...0 Название FOOA FOOB FOOiC - Описание | Принудительное изменение состояния вывода ОСлх. При записи в бит ?ОСпх 1 лог. 1 состояние вывода ОСлх изменяется в соответствии с установками битов СОМ«1х СОМлОх регистра TCCR^A Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. Эта функция доступна только в тех режимах, которые не используются для генерации сигнала с ШИМ При чтении бита всегда возвращается 0 Не используются, читаются как 0 Примечание, п = 1, 3,4, 5, х = А, В или С 7.6.1. Обращение к 16-битным регистрам Каждый 16-битный регистр таймеров/счетчиков физически размещается в двух 8-битных регистрах. Соответственно, для обращения к ним требуется выполнить по две операции чтения или записи. Для того чтобы запись или чтение обоих байтов содержимого 16-битного регистра происходило одновременно, в составе каждого таймера/счетчика имеется специальный 8-битный регистр TEMP, предназначенный для хранения старшего байта значения (этот регистр используется только процессором и программно недоступен). Для выполнения цикла записи 16-битного регистра первым должен быть загружен старший байт значения, который помещается в регистр TEMP. При последующей записи младшего байта он объединяется с содержимым регистра TEMP, и оба байта одновременно (в одном и том же такте) записываются в 16-битный регистр. Если требуется изменить несколько 16-битных регистров таймера/счетчика, а старшие байты всех записываемых значений одинаковы, то загрузку старшего байта достаточно выполнить только один раз. Для выполнения цикла чтения 16-битного регистра первым должен быть прочитан младший байт. При его чтении содержимое старшего байта помещается в регистр TEMP. При последующем чтении старшего байта возвращается значение, сохраненное в регистре TEMP. Исключение составляют только регистры сравнения OCR/7A/B/C, при чтении которых регистр TEMP не задействуется. При выполнении цикла обращения к 16-битному регистру таймера/счетчика прерывания должны быть запрещены. В противном случае, если прерывание произойдет между двумя командами обращения к 16-битному регистру, а в подпрограмме обработки этого прерывания тоже будет произведено обращение к какому-либо из 16-битных регистров того же таймера/счетчика, содержимое регистра TEMP будет изменено. Как следствие, результат обращения к 16-битному регистру в основной программе будет неверным.
7.6. 16-битные таймеры/счетчики ¦ 373 7.6.2. Управление тактовым сигналом Формирование тактового сигнала 16-битных таймеров/счетчиков clkT„ (п = 1, 3,4, 5) осуществляется блоком предделителя, который был рассмотрен в разделе 7.4 этой главы. В качестве тактового сигнала clkTw таймеров/счетчиков Т1, ТЗ, Т4 и Т5 может использоваться (см. Рис. 7.5, а): • системный тактовый сигнал (clkTw = clkI/0); • масштабированный системный тактовый сигнал (clkT„ = clk|/0//V); • внешний сигнал, поступающий на вход Т1 (ТЗ) микроконтроллера (clkT„ = clkEXT). Исключение составляет лишь таймер/счетчик ТЗ моделей ATmegal62x,, который не может работать от внешнего тактового сигнала. Выбор источника тактового сигнала, а также запуск и остановка таймеров/счетчиков осуществляются с помощью битов CSaj2...CSaiO регистра управления таймером TCCR/zB согласно Табл. 7.24. Таблица 7.24. Выбор источника тактового сигнала 16-битных таймеров/счетчиков CSn2 0 0 0 0 1 1 1 1 CS/il 0 0 1 1 0 0 1 1 CS/iO 0 1 0 1 0 1 0 1 Источник тактового сигнала ТЗ в моделях ATmegal62x Таймер/счетчик остановлен clk1/0 с11с1/()/8 clkI/0/64 clkI/0/256 clk,/o/1024 clk,/0/16 clkI/0/32 Остальные Таймер/счетчик остановлен с1к,/0 clkI/0/8 clki/o/64 clkI/0/256 с1к|/о/1024 Вывод Та?, счет осуществляется по спадающему фронту импульсов Вывод Тл, счет осуществляется по нарастающему фронту импульсов Примечание, п = 1,3,4,5. 7.6.3. Режимы работы Режим работы таймеров/счетчиков Т1, ТЗ, Т4 и Т5 определяется состоянием битов WGMrt3:WGMrt2 регистра TCCR/iB совместно с битами WGM/j1:WGMaiO регистра ТССЯлА. Зависимость режима работы таймеров/счетчиков от состояния этих битов показана в Табл. 7.25.
374 ¦ Глава 7. Таймеры Таблица 7.25. Режимы работы 16-битных таймеров/счетчиков Т1, ТЗ, Т4 и Т5 Номер режима 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 WGM*3 0 0 0 0 0 0 0 0 WGMh2 0 0 0 и 1 1 1 1 0 0 0 0 1 1 1 1 WGMwl 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 WGM/iO 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Режим работы таймера/счетчика Тл Normal Phase correct PWM, 8-битный Phase correct PWM, 9-битный Phase correct PWM, 10-битный CTC (сброс при совпадении) Fast PWM, 8-битный Fast PWM, 9-битный Fast PWM, 10-битный Phase and Frequency Correct PWM Phase and Frequency Correct PWM Phase correct PWM Phase correct PWM CTC (сброс при совпадении) Зарезервировано Fast PWM Fast PWM Модуль счета (TOP) $FFFF $00FF $01FF $03FF OCR/rA $00FF $01FF $03FF ICRai OCR/iA ICRrt OCR/iA ICR/i - ICR/i OCR/iA Обновление регистров OCR/ut Немедленно При TOP При TOP При TOP Немедленно При TOP При TOP При TOP $0000 $0000 При TOP При TOP Немедленно - При TOP При TOP Момент установки флага TOV/i | $FFFF I $0000 $0000 $0000 $FFFF При TOP При ТОР При ТОР $0000 $0000 $0000 $0000 $FFFF - При ТОР При ТОР Примечание, п = 1,3,4,5. Режим Normal Это наиболее простой режим работы таймеров/счетчиков. В этом режиме счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала с1кТл инкрементируется счетный регистр. При переходе через значение $FFFF возникает переполнение, и счет продолжается со значения $0000. В том же такте сигнала clkTw, в котором обнуляется регистр TCNTw, флаг прерывания по переполнению TOVn устанавливается в 1.
7.6. 16-битные таймеры/счетчики ¦ 375 Блоки сравнения обоих таймеров в этом режиме могут использоваться как для генерации прерываний, так и для формирования сигналов. Состояние выходов ОСлА/ОСлВ/ОСлС каждого из блоков сравнения 16-битных таймеров/счетчиков определяется содержимым битов СОМлх1:СОМ/аО регистров TCCR/jA, как показано в Табл. 7.26. Таблица 7.26. Управление выводами ОСлА/ОСпВ/ОСлС в режиме Normal [ COM/txl 0 0 1 1 СОМ/иО 0 1 0 1 Описание Таймер/счетчик Тя отключен от вывода ОСпх Состояние вывода меняется на противоположное Вывод сбрасывается в 0 Вывод устанавливается в 1 1 Примечание, п = 1,3,4,5; х = А, В или С. Состояние выхода любого блока сравнения также может быть изменено принудительно, записью лог. 1 в бит FOCajA/FOCajB/FOCaiC регистра TCCR/*C (в некоторых моделях — TCCR/jA). Прерывание при этом не генерируется. Режим СТС (сброс при совпадении) В этом режиме счетный регистр тоже функционирует как обычный суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала clkT„. Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяются либо регистром сравнения блока A OCR/jA (WGMaj3:0 = 0100), либо регистром захвата ICR/i (WGMai3:0 = 1100). После достижения максимального значения счет продолжается со значения $0000. Как и в режиме Normal, флаг прерывания TOVai устанавливается при изменении значения счетного регистра с $FFFF на $0000. Временные диаграммы для этого режима работы таймера/счетчика приведены на Рис. 7.22. Рис. 7.22. Временные диаграммы для режима СТС
376 ¦ Глава 7. Таймеры При достижении счетчиком максимального значения устанавливается флаг: • OCFajA, если модуль счета определяется регистром сравнения OCRuA (WGM«3:0 = 0100); • ICFfl, если модуль счета определяется регистром захвата ICR/j (WGMrt3:0=1100). Одновременно с установкой флага может изменяться состояние вывода ОСпх микроконтроллера. Состояние вывода определяется содержимым битов СОМял:1:СОМях0 регистра TCCRux, как указано в Табл. 7.27. Таблица 7.27. Управление выводами OC/iA/OC/iB/ОСяС в режиме СТС COM/ud 0 0 1 1 СОМ/исО 0 1 0 1 Описание | Таймер/счетчик Тл отключен от вывода ОСлдс Состояние вывода меняется на противоположное Вывод сбрасывается в 0 Вывод устанавливается в 1 Примечание, п = 1,3,4, 5, х = А, В или С где X— модуль счета (значение, находящееся в регистре ОСЯлА или ICR/z), N — коэффициент деления предделителя (см. Табл. 7.24). Как и в режиме Normal, состояние выводов ОСлА/ОСяВ/ОСлС при необходимости может быть изменено принудительно, записью лог. 1 в бит FOCajA/FOCajB/FOOjC регистра ТССЯяС (в некоторых моделях — ТССЛлА). Прерывание при этом не генерируется, и сброс счетного регистра не производится. Режим Fast PWM Режим Fast PWM («Быстродействующий ШИМ») позволяет генерировать высокочастотный сигнал с широтно-импульсной модуляцией. Этот режим практически полностью идентичен одноименному режиму 8-битных таймеров/счетчиков. Отличие заключается только в том, что 16-битные таймеры/счетчики позволяют генерировать ШИМ-сигнал различной разрядности. Для генерации сигнала заданной частоты необходимо записать в биты СОМлх1:СОМяхО значение 01 (переключение состояния вывода). Частота генерируемого сигнала будет определяться выражением
7.6. 16-битные таймеры/счетчики ¦ 377 Счетный регистр в этом режиме функционирует как суммирующий счетчик, инкрементирование которого осуществляется по каждому импульсу тактового сигнала с1кТя. Состояние счетчика изменяется от $0000 до максимального значения, после чего счетный регистр сбрасывается и цикл повторяется. В зависимости от установок битов WGM«3:0 максимальное значение счетчика (разрешение ШИМ-сигнала) либо является фиксированным значением, либо определяется содержимым определенных регистров таймера/счетчика (Табл. 7.28). При этом разрешающая способность определяется выражением Таблица 7.28. Разрешающая способность модулятора в режиме Fast PWM Номер режима 5 6 7 14 15 WGMw3 0 0 0 1 1 WGMn2 1 1 1 1 1 WGM/il 0 1 1 1 1 WGM/iO 1 0 1 0 1 Разрешающая способность 8 битов 9 битов 10 битов Переменная B...16) Переменная B... 16) Модуль счета (ТОР) $00FF $01FF $03FF ICR/jA ($0003...$FFFF) OCRM ($0003...$FFFF) Примечание, n - 1,3,4,5. При работе с какими-либо фиксированными значениями модуля счета для задания модуля рекомендуется использовать регистр захвата. При этом регистр OCR/iA может использоваться для формирования ШИМ-сигнала. Если же в процессе формирования ШИМ-сигнала его частота меняется очень часто, для задания модуля счета рекомендуется использовать регистр сравнения. В этом случае за счет буферизации записи в регистры сравнения исключается появление несимметричных импульсов сигнала на выходе модулятора. При достижении счетчиком максимального значения устанавливается флаг прерывания TOVa? соответствующего регистра флагов. Одновременно с ним устанавливается флаг ICFn (режим 14) либо OCF«A (режим 15). При равенстве содержимого счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг прерывания OCFaiA/OCF/jB/OCFa/C. Одновременно изменяется состояние выхода блока сравнения ОСлА/ОСяВ/ОСлС. Состояние этих выходов определя- где ЮР — модуль счета.
378 ¦ Глава 7. Таймеры ется содержимым битов СОМлх1:СОМл;сО регистров TCCR/iA (Табл. 7.29). Временные диаграммы для случая, когда модуль счета определяется содержимым регистра ICR/jA или OCR/гА, показаны на Рис. 7.23. Таблица 7.29. Управление выводами ОСлА/ОСлВ/ОСлС в режиме Fast PWM COM/ucl о 0 1 1 СОМлхО 0 1 0 1 Описание Таймер/счетчик Тп отключен от вывода ОСпх ОСлА: WGMa?3 = 0 — таймер/счетчик Тл отключен от вывода ОСлА; WGMw3 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNTw и OCR/iA. ОСлВ, ОСлС: Зарезервировано Сбрасывается в 0 при равенстве счетного регистра и соответствующего регистра сравнения. Устанавливается в 1 при достижении счетчиком максимального значения (неинвертированный ШИМ-сигнал) Устанавливается в 1 при равенстве счетного регистра и соответствующего регистра сравнения. Сбрасывается в 0 при достижении счетчиком максимального значения (инвертированный ШИМ-сигнал) Примечание, п = 1,3,4,5; х - А, В или С. Рис. 7.23. Формирование ШИМ-сигнала в режиме Fast PWM Если содержимое регистра сравнения равно модулю счета, то выход соответствующего блока сравнения переключится в устойчивое состояние, определяемое установками битов COMazx1:COMaixO (Рис. 7.23).
7.6. 16-битные таймеры/счетчики ¦ 379 где N — коэффициент деления предделителя (см. Табл. 7.24). При необходимости блок сравнения А в этом режиме может также использоваться для генерации сигнала меандра. Для этого необходимо записать в биты СОМяА1:СОМяА0 значение 01, задающее переключение состояния вывода ОСяА при наступлении события «Совпадение». Режим Phase Correct PWM Режим Phase Correct PWM («ШИМ с точной фазой»), как и режим Fast PWM, предназначен для генерации сигналов с широтно-импульсной модуляцией. Однако в этом режиме счетный регистр функционирует как реверсивный счетчик, состояние которого сначала изменяется от $0000 до максимального значения, а затем обратно до $0000. Соответственно, максимальная частота сигнала в этом режиме в 2 раза ниже максимальной частоты сигнала в режиме Fast PWM. В зависимости от установок битов WGMw3:0 максимальное значение счетчика (разрешение ШИМ-сигнала) либо является фиксированным значением, либо определяется содержимым определенных регистров таймера/счетчика (Табл. 7.30). При этом разрешающая способность определяется выражением Таблица 7.30. Разрешающая способность модулятора в режиме Phase Correct PWM Номер режима 1 2 3 10 11 WGMw3 0 0 0 1 1 WGM«2 0 0 0 0 0 WGMwl 0 1 1 1 1 WGMnO 1 0 1 0 1 Разрешающая способность 8 битов 9 битов 10 битов Переменная B... 16) Переменная B... 16) Модуль счета (ТОР) $00FF $01FF $03FF ICRnA ($0003...$FFFF) OCR/iA ($0003...$FFFF) Примечание, n = 1,3,4,5. Частота генерируемого в этом режиме сигнала определяется выражением: где ЮР — модуль счета.
380 ¦ Глава 7. Таймеры Как и в режиме Fast PWM, при работе с какими-либо фиксированными значениями модуля счета для задания модуля рекомендуется использовать регистр захвата. При этом регистр OCRM может использоваться для формирования ШИМ-сигнала. Если же в процессе формирования ШИМ-сигнала его частота меняется очень часто, для задания модуля счета рекомендуется использовать регистр сравнения. При достижении счетчиком максимального значения происходит смена направления счета, но счетчик остается в этом состоянии в течение одного периода сигнала clkT„. В этом же такте производится обновление содержимого регистра сравнения. Если модуль счета определяется регистром сравнения ICRM (режим 10) или OCRM (режим 11), одновременно с обновлением регистра сравнения устанавливается флаг ICFaj либо OCFaiA соответственно. При достижении счетчиком минимального значения ($0000) также происходит смена направления счета и одновременно устанавливается флаг прерывания TOVaz соответствующего регистра флагов. При равенстве содержимого счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг OCFflA/OCFflB/OCFtfC. Одновременно изменяется состояние выхода блока сравнения ОСяА/ОСяВ/ОСлС. Как обычно, состояние вывода определяется содержимым битов СОМях1:СОМях0 регистров TCCR/iA (Табл. 7.31). Временные диаграммы для случая, когда модуль счета определяется содержимым регистра ICR/iA или OCRajA, показаны на Рис. 7.24. Таблица 7.31. Управление выводами ОСлА/ОСлВ/ОСлС в режиме Phase Correct PWM COM/tcl 0 0 1 1 СОМяхО 0 1 0 1 Описание Таймер/счетчик In отключен от вывода ОСпх ОСлА: WGM«3 = 0 — таймер/счетчик In отключен от вывода ОСлА; WGMw3 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNTw и OCR/jA. ОСлВ, ОСлС: Зарезервировано Сбрасывается в 0 при прямом счете и устанавливается в 1 при обратном счете (неинвертированный ШИМ-сигнал) Устанавливается в 1 при прямом счете и сбрасывается в 0 при обратном счете (инвертированный ШИМ-сигнал) Примечание, п = 1,3,4,5; х = А, В или С. Следует понимать, что при изменении модуля счета во время работы таймера/счетчика на выходе блоков сравнения могут появиться несиммет-
76. 16-битные таймеры/счетчики ¦ 381 Рис. 7.24. Формирование ШИМ-сигнала в режиме Phase Correct PWM ричные (относительно середины периода модуляции) импульсы. Поскольку обновление содержимого регистра сравнения происходит в момент достижения счетчиком максимального значения, период ШИМ-сигнала равен времени между этими моментами. При этом время обратного счета определяется предыдущим значением модуля счета, а время прямого счета — новым значением. Если эти значения различны, то время прямого и время обратного счета также отличаются. Результатом этого и являются несимметричные импульсы на выходе блоков сравнения, как показано на Рис. 7.24 C-й период сигнала). Поэтому при частом изменении модуля счета во время работы таймера/счетчика рекомендуется использовать режим Phase and Frequency Correct PWM, описанный в следующем подразделе. Если же используется постоянное значение модуля счета, то между этими двумя режимами нет никакой разницы. Если значение, находящееся в регистре сравнения, равно $0000 или модулю счета (ТОР), то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.32.
382 ¦ Глава 7. Таймеры Таблица 7.32. Устойчивые состояния выхода схемы сравнения . , , , .j СОМлх1 1 1 1 1 СОМяхО 0 0 1 1 Регистр OCR/ut $0000 ТОР $0000 ТОР Состояние вывода ОСпх 0 1 1 0 Примечание, п = 1,3,4,5; х = А, В или С. где N— коэффициент деления предделителя, задаваемый согласно Табл. 7.24. Режим Phase and Frequency Correct PWM Режим Phase and Frequency Correct PWM («ШИМ с точной фазой и частотой») очень похож на режим Phase Correct PWM. Единственная принципиальная разница между ними — момент обновления содержимого регистра сравнения. Максимальное значение счетчика (разрешение ШИМ-сигнала) в этом режиме может определяться только регистрами ICRflA или ОСЛлА таймера/счетчика, как показано в Табл. 7.33. Разрешающая способность модулятора в этом режиме определяется выражением Таблица 7.33. Разрешающая способность модулятора в режиме Phase and Frequency Correct PWM Номер режима 8 9 WGM*3 1 1 WGMw2 0 0 WGMnl 1 1 WGIVfoO 0 1 Разрешающая способность Переменная B .16) Переменная B...16) Модуль счета (TOP) J ICR/iA 1 ($0003...$FFFF)J OCR/iA Л ($0003. .$FFFF)j Примечание, п = 1,3,4,5. Частота генерируемого сигнала определяется выражением где ТОР — модуль счета.
7.6. 16-битные таймеры/счетчики ¦ 383 Как и в остальных режимах, при работе с какими-либо фиксированными значениями модуля счета для задания модуля рекомендуется использовать регистр захвата. При этом регистр OCR/iA может использоваться для формирования ШИМ-сигнала. Если же в процессе формирования ШИМ-сигнала его частота меняется очень часто, то для задания модуля счета рекомендуется использовать регистр сравнения. При достижении счетчиком максимального значения происходит смена направления счета, но счетчик остается в этом состоянии в течение одного периода сигнала с1кТл. В этом же такте устанавливается флаг ICFai либо OCFaiA (в зависимости от того, какой из регистров используется для задания модуля счета). При достижении счетчиком минимального значения ($0000) направление счета опять изменяется. При этом устанавливается флаг прерывания TOVaj и производится обновление содержимого регистра сравнения. При равенстве содержимого счетного регистра и какого-либо регистра сравнения устанавливается соответствующий флаг OCFaiA/OCF/jB/OCFa2C соответствующего регистра. Одновременно изменяется состояние выхода блока сравнения ОСяА/ОСяВ/ОСлС. Как обычно, состояние вывода определяется содержимым битов СОМдис1:СОМюс0 регистров TCCR/iA (Табл. 7.34 и Рис. 7.25). Таблица 7.34, Управление выводами OCnA/OClB/OC/iC в режиме Phase and frequency Correct PWM СОМлх1 0 0 1 1 COMwjcO 0 1 0 1 Описание Таймер/счетчик In отключен от вывода ОСлА/ОСлВ/ОСлС ОСлА: WGM/rt = 0 — таймер/счетчик In отключен от вывода ОСлА; WGM/i3 = 1 — состояние вывода меняется на противоположное при равенстве регистров TCNT/i и OCR//A. ОСлВ, ОСлС: Зарезервировано Сбрасывается в 0 при прямом счете и устанавливается в 1 при обратном счете (неинвертированный ШИМ-сигнал) Устанавливается в 1 при прямом счете и сбрасывается в 0 при обратном счете (инвертированный ШИМ-сигнал) Примечание, л = 1,3,4,51; jc = A, B или С. Если сравнить Рис. 7.24 и 7.25, можно увидеть, что в режиме Phase and Frequency Correct PWM каждый период сигнала является полностью симметричным. Это следствие того, что обновление содержимого регистра сравнения происходит в момент достижения счетчиком минимального
384 ¦ Глава 7. Таймеры Рис. 7.25. Формирование ШИМ-сигнала в режиме Phase and Frequency Correct PWM значения. Поэтому время прямого счета всегда равно времени обратного счета, выходные импульсы симметричны, и соответственно частота генерируемого сигнала остается постоянной. Частота генерируемого сигнала определяется выражением где N— коэффициент деления предцелителя (см. Табл. 7.24). Если значение, находящееся в регистре сравнения, равно $0000 или модулю счета (ТОР), то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно Табл. 7.35. Таблица 7.35. Устойчивые состояния выхода схемы сравнения COM/trl 1 1 1 |_ 1 COM/uri) 0 0 1 1 Регистр OCR/ur $0000 ТОР $0000 ТОР Состояние вывода OC/tx I 0 ] 1 J 1 J 0 _J Примечание, п = 1,3,4,5, х = А, В или С
7.7 Модулятор ¦ 385 7.7. Модулятор В микроконтроллерах ATmega640x/1280x/1281x/2560x/2561x появился новый блок, отсутствующий в других моделях, — модулятор (Output Compare Modulator). С его помощью можно формировать сигналы, модулированные несущей частотой. Для генерации сигнала несущей частоты используется блок сравнения А таймера/счетчика ТО, а для формирования модулирующего сигнала — блок сравнения С таймера/счетчика Т1. Структурная схема модулятора показана на Рис. 7.26. Выходы упомянутых блоков сравнения (ОС 1С и ОСОА) задействуют один и тот же вывод микроконтроллера — 7-й бит порта В. Поэтому модулятор включается автоматически при одновременном разрешении работы этих блоков сравнения (т. е. при значении битов СОМях1:0, отличном от 0). Тип модуляции («Логическое И» или «Логическое ИЛИ») определяется битом PORTB7 регистра PORTB. Упрощенная схема модулятора приведена на Рис. 7.27, а временные диаграммы работы модулятора — на Рис. 7.28. Рис. 7.26. Структурная схема модулятора Рис. 7.27. Упрощенная схема модулятора
386 ¦ Глава 7. Таймеры Рис. 7.28. Временные диаграммы работы модулятора Обратите внимание, что в результате модуляции снижается разрешение ШИМ-сигнала (ОС1С). Коэффициент уменьшения равен количеству тактов системного тактового сигнала, укладывающихся в один период сигнала несущей частоты (ОСОА). В случае, показанном на Рис. 7.28, разрешающая способность уменьшается в 2 раза. Причину такого снижения разрешающей способности можно понять, посмотрев на выходной сигнал модулятора B-й и 3-й периоды при PORTB7 = 0). Несмотря на то что длительность ВЫСОКОГО уровня модулирующего сигнала во 2-м периоде на один такт больше, чем в 3-м периоде, итоговый сигнал в обоих периодах одинаков. 7.8. Сторожевой таймер Все микроконтроллеры семейства Mega имеют в своем составе сторожевой таймер, предназначенный для защиты микроконтроллера от сбоев в процессе работы. В общей сложности в микроконтроллерах семейства можно встретить сторожевой таймер двух исполнений — стандартный и расширенный. Во всех старых моделях и в некоторых новых реализован стандартный сторожевой таймер, структурная схема которого приведена на Рис. 7.29, а. В большинстве же новых микроконтроллеров реализован так называемый расширенный сторожевой таймер, структурная схема которого приведена на Рис. 7.29, б. Основным отличием нового сторожевого таймера является возможность генерации прерывания по его тайм-ауту.
7.8. Сторожевой таймер ¦ 387 Рис, 7.29, Структурная схема сторожевого таймера: а — стандартный сторожевой таймер; б — расширенный сторожевой таймер Сторожевой таймер обоих исполнений имеет независимый тактовый генератор, поэтому он работает даже во время нахождения микроконтроллера в любом из спящих режимов. Типовое значение частоты этого генератора равно 1 МГц (стандартный таймер) или 128 кГц (расширенный тай-
388 ¦ Глава 7. Таймеры мер) при Vcc = 5.0 В. Фактическая частота генератора зависит от напряжения питания устройства, температуры, технологического разброса. Если сторожевой таймер включен, то через промежутки времени, равные его периоду, он выполняет сброс микроконтроллера (как уже упоминалось, расширенный сторожевой таймер может также генерировать прерывание). Чтобы избежать сброса при нормальном выполнении программы, сторожевой таймер необходимо регулярно сбрасывать через промежутки времени, меньшие его периода. Сброс сторожевого таймера осуществляется командой WDR. Конфигурирование сторожевого таймера в различных моделях осуществляется по-разному. АТтеда16х/32х В этих моделях для управления сторожевым таймером предназначен регистр WDTCR, расположенный по адресу $21 ($41). Формат этого регистра приведен на Рис. 7.30, а описание его битов — в Табл. 7.36. Рис. 7.30. Формат регистра WDTCR Таблица 7.36. Биты регистра WDTCR Бит 7...5 4 3 2 1 0 Название - WDTOE WDE WDP2 WDP1 WDP0 Краткое описание Зарезервировано, читается как 0 Разрешение выключения сторожевого таймера Разрешение сторожевого таймера A — включен) Коэффициент деления предделителя сторожевого таймера Для включения/выключения сторожевого таймера используются два бита регистра WDTCR — WDE и WDTOE. Если бит WDE установлен в 1, сторожевой таймер включен, если сброшен в 0 — выключен. Причем для сброса бита WDE необходимо выполнить следующие действия: 1. Одной командой записать лог. 1 в биты WDE и WDTOE. 2. В течение следующих четырех тактов записать лог. 0 в бит WDE. Период тайм-аута сторожевого таймера задается с помощью битов WDP2...WDP0 регистра WDTCR согласно Табл. 7.37.
7.8. Сторожевой таймер ¦ 389 Таблица 7,37. Задание периода сторожевого таймера WDP2 0 1 ° 0 0 1 1 1 1 WDP1 0 0 1 1 0 0 1 1 WDP0 0 1 0 1 0 1 0 1 Число тактов генератора 16К A6384) 32К C2768) 64К F5536) 128К A31072) 256К B62144) 512К E24288) 1024К A048576) 2048К B097152) Период тайм-аута (типовое значение) [мс] ГСС=3.0В 17.3 34.3 68.5 140 270 550 1100 2200 Гсс=5.0В 16.3 32.5 65 130 260 520 1000 2100 Чтобы избежать непреднамеренного сброса микроконтроллера при изменении периода сторожевого таймера, необходимо перед записью битов WDP2:0 либо запретить сторожевой таймер, либо сбросить его. АТтеда8515х/8535х, АТтедавх, АТтеда64х/128х, АТтеда162х, АТтеда165, АТтеда325х/3250х/645х/6450х В этих моделях для управления сторожевым таймером также используется регистр WDTCR, расположенный по адресу $21 ($41). Формат этого регистра приведен на Рис. 7.31, а описание его битов — в Табл. 7.38. Рис. 7.31. Формат регистра WDTCR Таблица 7.38. Биты регистра WDTCR Бит 7...5 4 3 2 1 1 ° Название - WDCE WDE WDP2 WDP1 WDP0 Краткое описание Зарезервировано, читается как 0 Разрешение изменения конфигурации сторожевого таймера Разрешение сторожевого таймера A — включен) Коэффициент деления предцелителя сторожевого таймера
390 ¦ Глава 7. Таймеры Для включения/выключения сторожевого таймера используются два бита регистра WDTCR — WDE и WDTOE. Если бит WDE установлен в 1, сторожевой таймер включен, если сброшен в 0 — выключен. В этих моделях предусмотрено несколько так называемых уровней безопасности, каждый из которых накладывает определенные ограничения на изменение конфигурации сторожевого таймера. Для выбора конкретного уровня почти во всех указанных моделях используются две конфигурационные ячейки (в моделях ATmega8x, ATmegal65x и ATmega325x/3250x/645x/6450x — одна). Первая ячейка, общая для всех моделей, называется WDTON. Второй ячейкой, определяющей уровень безопасности, служит ячейка, которая переводит микроконтроллер в режим совместимости с какими-либо другими моделями. Соответственно, в моделях ATmega8515x это ячейка S8515C, в моделях ATmega8535x — ячейка S8535C, в моделях ATmegal62x — М161С, а в моделях ATmega64x/128x — М103С. Соответствие между состоянием этих ячеек и конфигурацией сторожевого таймера показано в Табл. 7.39. Таблица 7.39. Конфигурация сторожевого таймера S8515C (ATmega8515x), S8535C (ATtaega8535x), M161C(ATmegal62x), М103С (ATmega64x/128x) 1 1 0 0 WDTON 1 0 1 0 Уровень 1 2 о1) 2D Начальное состояние сторожевого таймера Выключен Включен Выключен Включен Выключение сторожевого таймера Последовательность команд Всегда включен Последовательность команд Всегда включен Изменение периода тайм-аута Последовательность команд Последовательность команд Без ограничений Последовательность команд ') Отсутствует в моделях ATmega8x, ATmegal65x и ATmega325x/3250x/645x/6450x Режим управления в рассматриваемых моделях характеризуется тремя уровнями: 0, 1 и 2. Уровень 0. В этом режиме управление сторожевым таймером осуществляется так же, как в более ранних моделях (см. описание предыдущей группы микроконтроллеров). При включении микроконтроллера сторожевой таймер выключен, однако он может быть включен в любой момент записью лог. 1 в бит WDE регистра WDTCR.
7.8. Сторожевой таймер ¦ 391 Уровень 1. Для выключения сторожевого таймера или для изменения периода тайм-аута необходимо выполнить следующие действия: 1. Одной командой записать лог. 1 в биты WDE и WDTCE. 2. В течение следующих четырех тактов записать (одной командой) требуемые значения в биты WDE и WDP2:0, одновременно сбрасывая бит WDCE. Уровень 2. В этом режиме сторожевой таймер включен постоянно (бит WDE всегда читается как 1) и не может быть выключен. Для изменения периода тайм-аута необходимо выполнить следующие действия: 1. Одной командой записать лог. 1 в биты WDE и WDTCE. 2. В течение следующих четырех тактов записать требуемое значение в биты WDP2:0, одновременно сбрасывая бит WDCE. Значение, записываемое в бит WDE, безразлично. Период тайм-аута сторожевого таймера задается с помощью битов WDP2...WDP0 регистра WDTCR согласно Табл. 7.40. Таблица 7.40. Задание периода сторожевого таймера WDP2 0 0 0 0 1 1 1 1 WDP1 0 0 1 1 0 0 1 1 WDP0 0 1 0 1 0 1 0 1 Число тактов генератора 16K A6384) 32К C2768) 64К F5536) 128КA31072) 256К B62144) 512КE24288) 1024КA048576) 2048КB097152) Период тайм-аута (типовое значение) [мс] ГСС=3.0В 17.3 34.3 68.5 140 270 550 1100 2200 Гсс=5.0В 16.3 32.5 65 130 260 520 1000 2100 Как и прежде, перед записью битов WDP2:0 рекомендуется либо запретить сторожевой таймер, либо сбросить его. АТтеда48х/88х/168х, АТтеда164х/324х/644х, АТтеда640х/1280х/1281х/2560х/2561х В этих моделях реализован расширенный сторожевой таймер, основным отличием которого от обычного таймера является возможность работы в нескольких режимах. Частота генератора расширенного сторожевого таймера была уменьшена до 128 кГц, благодаря чему максимальный период тайм-аута увеличился до 8 с. Для управления расширенным сторожевым таймером используется регистр управления WDTCSR, расположенный по адресу ($60). Формат этого регистра приведен на Рис. 7.32, а описание его битов — в Табл. 7.41.
392 ¦ Глава 7. Таймеры Рис. 7.32. Формат регистра WDTCSR Таблица 7.41. Биты регистра WDTCSR Бит 7 6 5 4 3 2 1 0 Название WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 Краткое описание Флаг прерывания от сторожевого таймера Разрешение прерывания от сторожевого таймера Коэффициент деления предделителя сторожевого таймера (совместно с битами WDP2. .WDP0) Разрешение изменения конфигурации сторожевого таймера Разрешение сброса по тайм-ауту сторожевого таймера Коэффициент деления предделителя сторожевого таймера Для включения/выключения сторожевого таймера используются два бита регистра WDTCR — WDE и WDCE. Если бит WDE установлен в 1, сторожевой таймер включен, если сброшен в 0 — выключен. Для сброса бита WDE необходимо выполнить следующие действия: 1. Одной командой записать лог. 1 в биты WDE и WDCE. 2. В течение следующих четырех тактов записать лог. О в бит WDE. Обратите внимание на то, что состояние флага сброса WDRF регистра MCUSR отменяет состояние бита WDE. Это означает, что бит WDE установлен всегда, когда установлен флаг WDRF, поэтому перед сбросом WDE необходимо также сбросить WDRF. Разрешение прерывания от сторожевого таймера осуществляется установкой в 1 бита WDIE регистра WDTCSR. Для индикации прерывания служит флаг WDIF того же регистра. При генерации запроса на прерывание этот флаг устанавливается в 1. Сбрасывается он аппаратно при запуске соответствующей подпрограммы обработки прерывания или же вручную, записью в него лог. 1. Как уже упоминалось, расширенный сторожевой таймер может работать в нескольких режимах (Табл. 7.42). В режиме сброса он работает как стандартный сторожевой таймер, вызывая сброс микроконтроллера через заданные промежутки времени. Как правило, этот режим используется для предотвращения зависания программы из-за сбоя в работе микроконтроллера.
7.8. Сторожевой таймер ¦ 393 В режиме прерывания по тайм-ауту сторожевого таймера вместо сброса микроконтроллера генерируется прерывание. Это прерывание можно использовать для вывода микроконтроллера из «спящего» режима или же в качестве системного таймера, например для ограничения времени выполнения какой-либо операции. Режим прерывания включается установкой бита WDIE при сброшенном бите WDE. Третий режим — режим прерывания и сброса — объединяет в себе два предыдущих. В этом режиме по первому тайм-ауту сторожевого таймера генерируется прерывание, после завершения обработки которого сторожевой таймер автоматически переключается в режим сброса. Соответственно при последующем тайм-ауте выполняется сброс микроконтроллера. Данный режим позволяет перед сбросом микроконтроллера сохранить различные критические переменные программы. Режим сброса и прерывания включается одновременной установкой битов WDE и WDIE. При выполнении подпрограммы обработки прерывания флаги WDIE и WDIF автоматически сбрасываются (таймер переключается в режим сброса). Чтобы сторожевой таймер остался в режиме сброса и прерывания, бит WDIE необходимо устанавливать после каждого прерывания, причем это рекомендуется осуществлять вне обработчика прерывания. Таблица 7.42. Режимы работы сторожевого таймера WDTON 1 1 1 1 0 WDE 0 0 1 1 X WDIE 0 1 0 1 X Режим Остановлен Режим прерывания Режим сброса Режим прерывания и сброса Режим сброса Действие по тайм-ауту Нет действий Прерывание Сброс Прерывание, затем переключение в режим сброса Сброс Период тайм-аута сторожевого таймера задается с помощью битов WDP3...WDP0 регистра WDTCSR согласно Табл. 7.43. Для изменения периода тайм-аута необходимо выполнить следующие действия: 1. Одной командой записать лог. 1 в биты WDE и WDCE. 2. В течение следующих четырех тактов записать требуемое значение в биты WDP3:0 и WDE, одновременно сбрасывая бит WDCE. Перед изменением битов WDP3:0 сторожевой таймер рекомендуется сбрасывать.
394 ¦ Глава 7. Таймеры Таблица 7.43. Задание периода сторожевого таймера WDP3 0 0 0 0 0 0 0 0 WDP2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 WDP1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 WDP0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Число тактов генератора 2К B048) 4К D096) 8К(8192) 16К A6384) 32К C2768) 64К F5536) 128КA31072) 256К B62144) 512К E24288) 1024К A048576) Период тайм-аута (типовое значение) при Vcc = 5.0 В 16 мс 32 мс 64 мс 0.125 с 0.25 с 0.5 с 1.0с 2.0 с 4.0 с 8.0 с Зарезервировано
ГЛАВА 8 Аналоговый компаратор 8.1. Общие сведения Модуль аналогового компаратора входит в состав всех без исключения микроконтроллеров семейства Mega. Будучи включенным, компаратор позволяет сравнивать значения напряжений, присутствующих на двух выводах микроконтроллера. Результатом сравнения является логическое значение, которое может быть прочитано из программы. По результату сравнения может быть сгенерировано прерывание, а также осуществлен захват состояния таймера/счетчика Т1. Последняя функция позволяет, в частности, измерять длительность аналоговых сигналов. Используемые компаратором выводы являются контактами портов ввода/вывода общего назначения (см. Табл. 8.1). Таблица 8.1. Выводы, используемые аналоговым компаратором Название AIN0 AIN1 ATmega8515x, ATmega8535x РВ2 РВЗ ATmega8x PD6 PD7 ATmegal6x/32x РВ2 РВЗ ATmega64x/128x РЕ2 РЕЗ ATmega48x/88x/168x PD6 PD7 ATmegal62x PB2 РВЗ ATmegal64x/324x/644x PB2 РВЗ ATmegal65x PE2 РЕЗ ATmega325x/3250x, ATmega645x/6450x PE2 РЕЗ ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x PE2 PE3 Назначение Неинверти- рующий вход Инвертирующий вход Чтобы указанные выводы можно было использовать с компаратором, они должны быть сконфигурированы как входы (соответствующий бит регистра DDRjc установлен в 0). Необходимо также отключить внутренние подтягивающие резисторы путем записи лог. 0 в соответствующий бит регистра PORTjc.
396 ¦ Глава 8. Аналоговый компаратор Кроме того, в моделях ATmega48x/88x/168x, ATmegal65x, ATmega325x/3250x/645x/6450x и ATmega640x/1280x/1281x/2560x/2561x имеется возможность отключения входных цифровых буферов в случае, если контакты микроконтроллера, соответствующие выводам AIN0 и AIN1, используются только для ввода аналоговых сигналов. При отключенных цифровых буферах уменьшается общий ток потребления микроконтроллера, а соответствующие биты регистра PINx всегда читаются как 0. Отключение цифровых буферов на входах AIN0 и AIN1 осуществляется записью лог. 1 соответственно в биты AIN0D и AIN1D регистра DIDR1, расположенного по адресу ($7F). Формат этого регистра приведен на Рис. 8.1. Рис. 8.1. Формат регистра DIDR1 8.2. Функционирование компаратора Структурная схема аналогового компаратора приведена на Рис. 8.2. Пунктирной линией обведены узлы, имеющиеся только в моделях с АЦП. Рис. 8.2. Структурная схема аналогового компаратора
8.2. Функционирование компаратора ¦ 397 Таблица 8.2. Размещение регистра ACSR Модель ATmega8515x/8535x ATmega8x/16x/32x/64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/3250x/645/6450x ATmega640x/l 280x/l 28 lx/2560x/256 lx Адрес регистра ACSR $08($28) $30($50) $08 ($28) $30 ($50) Основное управление компаратором и контроль его состояния осуществляются с помощью регистра ACSR, который в зависимости от модели (см. Табл. 8.2) располагается по адресу $08 ($28) или $30 ($50). Формат этого регистра приведен на Рис. 8.3, а назначение его битов кратко описано в Табл. 8.3. Таблица 8.3. Биты регистра ACSR Бит 7 6 5 4 3 2 1,0 Название ACD ACBG АСО ACI ACIE ACIC ACIS1:ACIS0 Описание Выключение компаратора @ — включен, 1 — выключен) Подключение к неинвертирующему входу компаратора внутреннего ИОН @ — не подключен, 1 — подключен) Результат сравнения (выход компаратора) Флаг прерывания от компаратора Разрешение прерывания от компаратора Подключение компаратора к блоку захвата таймера/счетчика Т1 A — подключен, 0 — отключен) Условие возникновения прерывания от компаратора По своему действию рассматриваемый узел микроконтроллера является обычным компаратором. Если напряжение на выводе AIN0 (неинвер- тирующий вход) больше напряжения на выводе AIN1 (инвертирующий вход), то результат сравнения будет равен 1. В противном случае результат сравнения будет равен 0. Этот результат (состояние выхода компаратора) сохраняется в бите АСО регистра ACSR. Рис. 8.3. Формат регистра ACSR
398 ¦ Глава 8. Аналоговый компаратор Бит ACD отвечает за включение и выключение компаратора. Поскольку при подаче напряжения питания все биты регистра ACSR сбрасываются в 0, компаратор включается автоматически при включении микроконтроллера. Для выключения компаратора бит ACD следует установить в 1. Перед изменением состояния этого бита прерывание от компаратора следует запретить во избежание случайной генерации прерывания. Как говорилось выше, по результату сравнения схема компаратора может генерировать запрос на прерывание. Если состояние выхода компаратора (бит АСО) изменилось заданным образом, устанавливается флаг прерывания ACI регистра ACSR и генерируется запрос на прерывание. Как и для других прерываний, этот флаг сбрасывается аппаратно при запуске подпрограммы обработки прерывания или программно, записью в него лог. 1. Для разрешения прерывания необходимо установить в 1 бит ACIE регистра ACSR и, разумеется, флаг I регистра SREG. Какое именно изменение состояния выхода компаратора вызовет прерывание, определяется состоянием битов ACIS1:ACIS0 регистра ACSR согласно Табл. 8.4. При изменении этих битов прерывание от компаратора (как и для бита ACD) должно быть запрещено. Таблица 8.4. Условия генерации запроса на прерывание от компаратора ACIS1 0 0 1 1 ACIS0 0 1 0 1 Условие Любое изменение состояния выхода компаратора Зарезервировано Изменение состояния выхода компаратора с 1 на 0 Изменение состояния выхода компаратора с 0 на 1 Помимо генерации прерывания компаратор также может управлять схемой захвата таймера/счетчика Т1. Для этого необходимо установить бит ACIC регистра ACSR в 1. В результате выход компаратора подключится к схеме захвата вместо вывода ICP1 микроконтроллера. Если же бит ACIC сброшен в 0, компаратор полностью отключен от блока захвата таймера/счетчика. Компаратор может сравнивать сигналы, присутствующие не только на выводах AIN0 и AIN1. Так, вместо вывода AIN0 микроконтроллера к не- инвертирующему входу компаратора может быть подключен внутренний источник опорного напряжения (ИОН) с номинальным напряжением 1.1 или 1.23 В (Табл. 8.5). Для этого необходимо установить бит ACBG регистра ACSR в 1. Причем, если выключена схема BOD и модуль АЦП, то между подключением ИОН к компаратору и началом использования компаратора необходимо выждать некоторое время (не более 70 мкс).
8.2. Функционирование компаратора ¦ 399 Таблица 8.5. Номинальное напряжение внутреннего ИОН Модель ATmega8515x/8535x ATmega8x/16x/32x/64x/128x ATmega48x/88x/168x ATmega 162x ATmega 164x/3 24x/644x ATmegal65x ATmega325x/3250x/645/6450x ATmega640x/1280x/1281x/2560x/2561x Напряжение ИОН [В] 1.23 1.10 А на инвертирующий вход компаратора может поступать сигнал с выхода мультиплексора модуля АЦП. Другими словами, вместо вывода AIN1 микроконтроллера инвертирующий вход компаратора может быть подключен к любому из входов АЦП ADC0...ADC7 (ADC0...ADC15 в моделях ATmega640x/1280x/1281x/2560x/2561x). Естественно, в моделях ATmega8515x и ATmega 162x, не имеющих модуля АЦП, эта возможность недоступна. Подключение выхода мультиплексора АЦП к входу компаратора осуществляется установкой в 1 бита ACME, который расположен, в зависимости от модели (Табл. 8.6), либо в регистре специальных функций SFIOR C-й бит регистра), либо в регистре управления АЦП ADCSRB F-й бит). Разумеется, модуль АЦП при этом должен быть выключен (бит ADEN регистра ADCSRA сброшен в 0). Какой именно из входов АЦП будет использоваться в качестве инвертирующего входа компаратора, определяется битами MUX2...0 регистра ADMUX, как показано в Табл. 8.7 (в моделях ATmega640x/1280x/1281x/2560x/2561x используется также бит MUX5 регистра ADCSRB). Таблица 8.6. Подключение мультиплексора АЦП к компаратору Модель ATmega8535x ATmega8x/16x/32x ATmega64x/128x ATmega48x/88x/168x ATmega 164x/324x/644x ATmega 165x ATmega325x/3250x/645/6450x ATmega64Ox/1280x/1281x/2560x/2561x Регистр SFIOR ADCSRB Адрес $30($50) $20($40) ($7B)
400 ¦ Глава 8. Аналоговый компаратор Таблица 8.7. Управление инвертирующим входом компаратора ACME 0 ADEN X 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 MUX52) X X 0 0 0 0 0 0 0 0 MUX2...0 XXX XXX 000 001 010 011 100 101 по 111 000 001 010 011 100 101 по 111 Инвертирующий вход компаратора AIN1 AIN1 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6» ADC71) ADC82) ADC92) ADC102) ADC112) ADC122) ADC132) ADC142) ADC152) 1 ) В моделях ATmega8x и ATmega48x/88x/168х — только в корпусах TQFP и МLF. 2) Только в моделях ATmega640x/1280x/2560x. Подробно регистры ADCSRjc и ADMUX будут рассмотрены в следующем разделе, посвященном модулю АЦП. В заключение ознакомьтесь с Табл. 8.8, в которой представлены основные параметры аналогового компаратора. Таблица 8.8. Основные параметры аналогового компаратора Обозначение *АСЮ l\CLK >ACPD Параметр Входное напряжение смещения Ток утечки по входу Время отклика Условия КСС = 5В, КСС = 5В, *tc = 2.7B ^сс = 4.0В min - -50 0 - typ <10 - - max 40.0 50 0 750 500 Единицы измерения мВ нА НС
Аналого-цифровой преобразователь 9.1. Общие сведения Модуль 10-битного АЦП последовательного приближения входит в состав практически всех моделей семейства, за исключением ATmega8515x и ATmegal62x. Основные параметры этого АЦП следующие: • абсолютная погрешность: ±2 LSB]); • интегральная нелинейность: ±0.5 LSB; • быстродействие: до 15 тыс. выборок/с. На входе модуля АЦП имеется 8-канальный (в моделях ATmega640x/1280x/2560x — 16-канальный) аналоговый мультиплексор, предоставляющий в распоряжение пользователя 8 A6) каналов с несимметричными входами. Кроме того, в моделях ATmega8x, выпускаемых в корпусе DIP, доступно только 6 каналов из восьми. В большинстве моделей входы АЦП могут объединяться попарно для формирования различного числа каналов с дифференциальным входом. При этом в некоторых каналах имеется возможность 10- и 200-кратного предварительного усиления входного сигнала. При коэффициентах усиления 1х и 10х действительная разрешающая способность АЦП по этим каналам составляет 8 бит, а при коэффициенте усиления 200х — 7 бит. В качестве источника опорного напряжения для АЦП может использоваться как напряжение питания микроконтроллера, так и внутренний либо внешний источник опорного напряжения. Модуль АЦП может работать в двух режимах: • режим одиночного преобразования, когда запуск каждого преобразования инициируется пользователем; • режим непрерывного преобразования, когда запуск преобразований выполняется непрерывно через определенные интервалы времени. !) Least Significant Bit — младший значащий бит. Соответствует обозначению МЗР, которое можно встретить в отечественной литературе. Аналогично, MSB (Most Significant Bit — старший значащий бит) соответствует обозначению C3P. глава 9
402 ¦ Глава 9. Аналого-цифровой преобразователь 9.2. Функционирование модуля АЦП Обобщенная структурная схема модуля АЦП приведена на Рис. 9.1. В моделях ATmega8x и ATmega48x/88x/168x элементы, выделенные на рисунке серым цветом, и связанные с ними сигналы отсутствуют, а неинвертирующий вход компаратора выборки-хранения подключен непосредственно к выходу мультиплексора (показано пунктиром). Регистры, используемые для управления модулем АЦП в различных моделях, приведены в Табл. 9.1. Формат регистров ADCSRA (ADCSR) и ADMUX приведен на Рис. 9.2 и Рис. 9.3, а краткое описание функций их битов приведено в Табл. 9.2 и Табл. 9.3 соответственно. Таблица 9.7. Регистры управления модулем АЦП Регистр ADCSR ADCSRA ADCSRB ADMUX SFIOR Адрес $06 ($26) $06 ($26) ($7А) ($8Е) ($7В) $07 ($27) ($7С) $30 ($50) $20 ($40) ATmega8535x • • ATmega8x • • ATmegal6x/32x • • ATmega64x • • ATmegal28x • • ATmega48x/88x/168x • • • ATmegal64x/324x/644x • • • ATmegal65x • • • ATmega325x/3250x, ATmega645x/6450x • • • ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x • • • Описание Регистр управления и состояния Регистр А управления и состояния Регистр В управления и состояния Регистр управления мультиплексором Регистр специальных функций
9.2. Функционирование модуля АЦП ¦ 403 Рис. 9.1. Структурная схема модуля АЦП
404 ¦ Глава 9. Аналого-цифровой преобразователь Рис. 9.2. Формат регистра ADCSRA (ADCSR) Таблица 9.2. Биты регистра ADCSRA (ADCSR1)) | Бит 7 6 5 1 4 | 3 1 2...0 Название ADEN ADSC ADATE (ADFR2)) ADIF ADIE ADPS2ADPS0 Описание Разрешение АЦП A — включено, 0 — выключено) Запуск преобразования A — начать преобразование) Выбор режима работы АЦП Флаг прерыв