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 — начать преобразование) Выбор режима работы АЦП Флаг прерывания от компаратора Разрешение прерывания от компаратора Выбор частоты преобразования | 1) В модели ATmega8x. I 2) ВмоделяхАТтеЕа8хиАТп^а128х. Рис. 9.3. Формат регистра ADMUX Таблица 9.3. Биты регистра ADMUX | Бит 7,6 5 4 | 3...0 Название REFS1:REFS0 ADLAR - MUX4 MUX3...MUX0 Описание Выбор источника опорного напряжения Выравнивание результата преобразования Зарезервировано Выбор входного канала Выбор входного канала Модель 1 Все модели 1 Все модели | ATmega8x, ATmega48x/88x/168x Остальные Все модели
9.2. Функционирование модуля АЦП ¦ 405 Формат регистров ADCSRB и SFIOR приведен на Рис. 9.4 и Рис. 9.5 соответственно (неиспользуемые в данном случае биты регистра SFIOR указаны на рисунке как «X»). Для разрешения работы АЦП необходимо записать лог. 1 в бит ADEN регистра ADCSR, а для выключения — соответственно лог. 0. Если АЦП будет выключен во время цикла преобразования, то преобразование завершено не будет (в регистре данных АЦП останется результат предыдущего преобразования). Рис. 9.4. Формат регистра ADCSRB Рис. 9.5. Регистр SFIOR В моделях ATmega8x и ATmegal28x режим работы АЦП определяется состоянием бита ADFR. Если он установлен в 1, АЦП работает в режиме непрерывного преобразования. В этом режиме запуск каждого следующего преобразования осуществляется автоматически после окончания текущего. Если же бит ADFR сброшен в 0, АЦП работает в режиме одиночного преобразования и запуск каждого преобразования осуществляется по команде пользователя. Во всех моделях, кроме ATmega8x и ATmegal28x, запуск АЦП возможен не только по команде пользователя, но и по прерыванию от некоторых периферийных устройств, имеющихся в составе микроконтроллера. Для выбора режима работы в этих моделях используется бит ADATE регистра ADCSRA и биты ADTDS2:0 регистра SFIOR или ADCSRB (см. Табл. 9.1 и Рис. 9.4, 9.5).
406 ¦ Глава 9. Аналого-цифровой преобразователь Если бит ADATE сброшен в 0, АЦП работает в режиме одиночного преобразования. Если же бит ADTAE установлен в 1, функционирование АЦП определяется содержимым битов ADTS2:0 согласно Табл. 9.4. Таблица 9.4. Источник сигнала для запуска преобразования ADTS2 0 0 0 0 1 1 1 1 ADTS1 0 0 1 1 0 0 1 1 ADTS0 0 1 0 1 0 1 0 1 Источник стартового сигнала Режим непрерывного преобразования Прерывание от аналогового компаратора Внешнее прерывание INTO Прерывание по событию «Совпадение» («Совпадение А») таймера/счетчика ТО Прерывание по переполнению таймера/счетчика ТО Прерывание по событию «Совпадение В» таймера/счетчика Т1 Прерывание по переполнению таймера/счетчика Т1 Прерывание по событию «Захват» таймера/счетчика Т1 Запуск каждого преобразования в режиме одиночного преобразования, а также запуск первого преобразования в режиме непрерывного преобразования осуществляется установкой в 1 бита ADSC регистра ADCSRA (ADCSR). Запуск преобразования по прерыванию осуществляется при установке в 1 флага выбранного прерывания. Бит ADSC регистра ADCSRA при этом аппаратно устанавливается в 1. Запуск преобразования в этих режимах также может быть осуществлен установкой бита ADSC регистра ADCSRA в 1. В режимах одиночного и непрерывного преобразований цикл преобразования начинается по первому нарастающему фронту тактового сигнала после установки бита ADSC. Если используется запуск по прерыванию, то цикл преобразования начинается по первому нарастающему фронту тактового сигнала после установки флага выбранного прерывания. Причем в момент установки этого флага осуществляется сброс предделителя модуля АЦП. Тем самым обеспечивается фиксированная задержка между генерацией запроса на прерывание и началом цикла преобразования. Обратите внимание, что преобразование запускается при установке соответствующего флага, т. е. даже если само прерывание запрещено. Длительность цикла составляет 13 тактов при использовании несимметричного входа и 13 либо 14 тактов при использовании дифференциального входа (разные значения связаны с работой схемы синхронизации); выборка и запоминание входного сигнала осуществляется в течение первых 1.5 и 2.5 тактов соответственно. Через 13 A4) тактов преобразование
9.2. Функционирование модуля ЛЦП ¦ 407 завершается, бит ADSC аппаратно сбрасывается в 0 (в режиме одиночного преобразования), и результат преобразования сохраняется в регистре данных АЦП. Одновременно устанавливается флаг прерывания ADIF регистра ADCSR и генерируется запрос на прерывание. Как и флаги остальных прерываний, флаг ADIF сбрасывается аппаратно при запуске подпрограммы обработки прерывания от АЦП или программно, записью в него лог. 1. Разрешение прерывания осуществляется установкой в 1 бита ADIE регистра ADCSR при установленном флаге I регистра SREG. Если АЦП работает в режиме непрерывного преобразования, то новый цикл начнется сразу же после записи результата. В режиме одиночного преобразования новое преобразование может быть запущено сразу же после сброса бита ADSC (до сохранения результата текущего преобразования). Однако реально цикл преобразования начнется не ранее чем через один такт после окончания текущего преобразования. Временные диаграммы, иллюстрирующие сказанное, приведены на Рис. 9.6. При первом запуске после включения АЦП для выполнения преобразования потребуется 25 тактов, т. е. на 12 тактов больше, чем обычно. В течение этих 12 тактов выполняется «холостое» преобразование, во время которого производится инициализация АЦП (Рис. 9.7). Отдельно следует сказать об использовании режима запуска по прерыванию совместно с дифференциальными каналами. В этом случае АЦП необходимо выключать между преобразованиями, чтобы избежать некорректных измерений, связанных с неопределенностью момента сброса предделителя АЦП. В результате выключения и включения АЦП между преобразованиями будут выполняться только «длинные» преобразования, результаты которых всегда будут корректными. Для формирования тактовой частоты модуля АЦП в нем имеется отдельный предделитель. Коэффициент деления предделителя и соответственно длительность преобразования определяются состоянием битов ADPS2...ADPS0 регистра ADCSRA/ADCSR (см. Табл. 9.5). Наибольшая точность преобразования достигается, если тактовая частота модуля АЦП находится в диапазоне 50...200 кГц. Соответственно, коэффициент деления предделителя рекомендуется выбирать таким, чтобы тактовая частота модуля АЦП находилась в указанном диапазоне. Если же точности преобразования меньше 10 битов достаточно, можно использовать более высокую частоту, увеличивая тем самым частоту выборки. В зависимости от модели выводы микроконтроллера, подключенные/К входу АЦП, определяются состоянием битов MUX3:0, MUX4:0 либо MUX5:0 (MUX5 - в ADCSRB, MUX4...MUX0 - в ADMUX). Для каналов с дифференциальным входом указанные биты определяют также коэффициент предварительного усиления входного сигнала. Соответствие установок этих битов используемым входам АЦП приведено в Табл. 9.6...9.8.
408 ¦ Глава 9 Аналого-цифровой преобразователь Рис. 9.6. Временные диаграммы работы АЦП в режиме одиночного преобразования (а), в режиме запуска по прерыванию (б) и в режиме непрерывного преобразования (в)
9.2. Функционирование модуля ЛЦП ¦ 409 Рис. 9.7. Временные диаграммы работы АЦП при первом преобразовании (режим одиночного преобразования) Таблица 9.5. Задание коэффициента деления предделителя АЦП ADPS2 0 0 0 0 1 1 1 1 ADPS1 0 0 1 1 0 0 1 1 ADPS0 0 1 0 1 0 1 0 1 Коэффициент деления 2 2 4 8 16 32 64 128 Таблица 9.6. Управление входным мультиплексором в моделях ATmega8x HAlrnega48x/88x/168x MUX3...MUX0 0000 0001 0010 ООН 0100 0101 Несимметричный вход ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 | MUX3...MUX0 оно от 1000...1101 1110 пп Несимметричный вход ADC6!) ADC71) Зарезервировано 1.22 ВA.1 В2>) 0 В (GND) 1) Только в корпусах TQFP-32 и MLF-32. 2) В моделях ATmega48x/88x/168x.
410 ¦ Глава 9. Аналого-цифровой преобразователь Таблица 9,7. Управление входным мультиплексором в моделях ATmega8535x, ATmegal6x/32x/64x/128x,Annegal64x/324x/644x, ATmegal65x/325x/3250x/645x/6450x и AIhiegal281x/2561x MUX4...MUX0 | 00000 00001 | 00010 1 ооои | 00100 1 ooioi 00110 00111 01000 01001 01010 01011 01100 01101 OHIO 01111 10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111 Несимметричный вход ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 - 1 22 В A 1В") 0 В (GND) Дифференциальный вход положительный отрицательный Предварительное усиление - ADC0 ADC1 ADC0 ADC1 ADC2 ADC3 ADC2 ADC3 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 АПГ6 А1>Г» ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC0 ADC0 ADC0 ADC0 ADC2 ADC2 ADC2 ADC2 ADC1 ADC1 ADC1 ADC1 ADC1 ADC1 ADC1 ADC1 ADC2 ADC2 ADC2 ADC2 ADC2 ADC2 10х 10х 200х 200х 10х 10х 200х 200х 1х 1х 1х 1х 1х 1х 1х 1х I 1х 1х 1х 1 1х 1х 1х - п В моделях ATmegal65x/325x/3250x/645x/6450x и ATmegal251x/2561x
9.2. Функционирование модуля ЛЦП ¦ 411 Таблица 9.8. Управление входным мультиплексором в моделях ATVnega640x/1280x/2560x MUX5...MUX0 000000 000001 000010 000011 000100 000101 000110 000111 001000 001001 001010 001011 001100 001101 001110 001111 010000 010001 010010 010011 010100 010101 010110 010111 011000 011001 011010 011011 1 011100 011101 1 011110 011111 Несимметричный вход ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 - 1.1В OB(GND) Дифференциальный вход положительный отрицательный Предварительное усиление - ADC0 ADC1 ADC0 ADC1 ADC2 ADC3 ADC2 ADC3 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC0 ADC0 ADC0 ADC0 ADC2 ADC2 ADC2 ADC2 ADC1 ADC1 ADC1 ADC1 ADC1 ADC1 ADC1 ADC1 ADC2 ADC2 ADC2 ADC2 ADC2 ADC2 10х 10х 200х 200х 10х 10х 200х 200х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х
412 ¦ Глава 9. Аналого-цифровой преобразователь (продолжение) MUX5...MUX0 100000 100001 100010 100011 100100 100101 100110 100111 101000 | 101001 101010 101011 101100 101101 101110 ЮПИ 110000 110001 110010 110011 110100 110101 110110 110111 111000 111001 111010 111011 111100 111101 111110 111111 Несимметричный вход ADC8 ADC9 ADC10 ADC11 ADC12 ADC13 ADC14 ADC15 - Зарезервировано Зарезервировано Дифференциальный вход положительный отрицательный Предварительное усиление - ADC8 ADC9 ADC8 ADC9 ADC10 ADC11 ADC10 ADC11 ADC8 ADC9 ADC10 ADC11 ADC12 ADC13 ADC14 ADC15 ADC8 ADC9 ADC10 ADC11 ADC12 ADC13 ADC8 ADC8 ADC8 ADC8 ADC10 ADC10 ADC10 ADC10 ADC9 ADC9 ADC9 ADC9 ADC9 ADC9 ADC9 ADC9 ADC10 ADC10 ADC10 ADC10 ADC10 ADC10 10х | 10х 1 200х 200х 10х 10х 200х 200х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х 1х
9.2. Функционирование модуля АЦП ¦ 413 Следует отметить, что предварительный усилитель, используемый каналами с дифференциальным входом, имеет встроенную схему коррекции смещения. Оставшаяся после коррекции величина смещения может быть учтена программным способом. Для этого следует оба входа дифференциального усилителя подключить к одному и тому же выводу микроконтроллера (Табл. 9.7 и Табл. 9.8), а затем вычитать полученное значение из результата последующих преобразований. Таким образом, ошибка смещения может быть снижена до величины, меньшей 1 LSB. Состояние битов MUX5...MUX0 можно изменить в любой момент, однако если это будет сделано во время цикла преобразования, то смена канала произойдет только после завершения преобразования. Благодаря этому в режиме непрерывного преобразования можно легко осуществлять последовательное преобразование сигналов нескольких каналов. Отдельно следует сказать о каналах с дифференциальным входом. После смены таких каналов первое измерение следует производить не ранее чем через 125 мкс после выбора канала. Указанное время требуется для установления значения коэффициента усиления предусилителя. Соответственно, значения, измеренные до истечения этого срока, не могут считаться достоверными. Кроме того, при переключении на канал с изменяемым коэффициентом усиления результат первого преобразования может иметь пониженную точность из-за времени установления автоматической схемы коррекции смещения. Поэтому будет лучше считать результат первого преобразования некорректным. В новых микроконтроллерах, а именно в ATmega48x/88x/168x, ATmega 164х/324х/644х, ATmega 165x, ATmega325x/3250x/645x/6450x и ATmega640x/1280x/l281x/2560x/2561x, имеется возможность отключения входных цифровых буферов на выводах ADC0...ADC15 в случае, если соответствующие выводы используются только для считывания аналоговых сигналов. При отключенных цифровых буферах уменьшается общий ток потребления микроконтроллера, а соответствующие биты регистров PINx всегда читаются как 0. Отключение цифровых буферов на входах ADC0...ADC7 осуществляется записью лог. 1 соответственно в биты ADC0D...ADC7D регистра DIDR0, расположенного по адресу ($7Е). А отключение буферов на входах ADC8...ADC15 (модели ATmega640x/1280x/2560x) осуществляется записью лог. 1 в биты ADC8D...ADC15D регистра DIDR2, расположенного по адресу ($7D). Формат этих регистров приведен на Рис. 9.8. Как уже было отмечено, в модуле АЦП могут использоваться различные источники опорного напряжения (ИОН). Выбор конкретного источника опорного напряжения осуществляется с помощью битов REFS1:REFS0 регистра ADMUX (см. Табл. 9.9).
414 ¦ Глава 9. Аналого-цифровой преобразователь Рис. 9.8. Формат регистров DIDR0 (а) и DIDR2 (б) Таблица 9.9. Выбор источника опорного напряжения REFS1 0 0 1 1 REFS0 0 1 0 1 Источник опорного напряжения1} Внешний ИОН, подключенный к выводу AREF; внутренний ИОН отключен Напряжение питания AVCC Внутренний ИОН напряжением 1.1 В2) Зарезервировано Внутренний ИОН напряжением 1.1 В2) Внутренний ИОН напряжением 2.56 В2) Модель Все модели Все модели ATmega 164х/324х/644х, ATmega640x/1280x/1281x, ATmega2560x/2561x Остальные модели ATmega48x/88x/168x, ATmegal65x/325x/3250x, ATmega645x/6450x Остальные модели 1) При работе с усилением 10х или 200х в качестве внутреннего ИОН можно использовать только ИОН, подключаемый при REFS1:0 =11. 2) Если к выводу AREF подключен источник напряжения, то эти варианты использоваться не могут. Поскольку внутренний ИОН соединяется с выводом AREF микроконтроллера, при его использовании к выводу AREF желательно подключить внешний фильтрующий конденсатор для повышения помехозащищенности. Кроме того, при использовании канала с дифференциальным входом первое измерение после смены источника опорного напряжения следует производить не ранее чем через 125 мкс. Указанное время требуется для установления значения коэффициента усиления предусилителя.
9.3. Результат преобразования ¦ 415 9.3. Результат преобразования После завершения преобразования (при установке в 1 флага ADIF регистра ADCSR) его результат сохраняется в регистре данных АЦП. Поскольку АЦП — 10-битный, этот регистр физически размещен в двух регистрах ввода/вывода ADCH:ADCL, доступных только для чтения. Эти регистры расположены по адресам $05:$04 ($25:$24) в моделях ATmega8535x, ATmega8x/16x/32x/64x/128x и ($79:$78) в остальных моделях. При включении микроконтроллера в регистре данных АЦП содержится значение $0000. По умолчанию результат преобразования выравнивается вправо (старшие 6 битов регистра ADCH — незначащие). Однако он может выравниваться и влево (младшие 6 битов регистра ADCL — незначащие). Для управления выравниванием результата преобразования служит бит ADLAR регистра ADMUX. Если этот бит установлен в 1, результат преобразования выравнивается по левой границе 16-битного слова, если сброшен в 0 — по правой границе. Обращение к регистрам ADCH и ADCL для получения результата преобразования должно выполняться в определенной последовательности: сначала необходимо прочитать регистр ADCL, а затем ADCH. Это требование связано с тем, что после обращения к регистру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH. Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очередное преобразование завершится до обращения к регистру ADCH, результат преобразования будет потерян. С другой стороны, если результат преобразования выравнивается влево и достаточно 8-битной точности, то для получения результата можно прочитать только содержимое регистра ADCH. Для каналов с несимметричным входом результат преобразования определяется выражением где KIN — значение входного напряжения, a KREF — величина опорного напряжения. Для каналов с дифференциальным входом результат преобразования определяется выражением
416 ¦ Глава 9. Аналого-цифровой преобразователь где Kpos — величина напряжения на положительном входе, KNEG — величина напряжения на отрицательном входе, а К — коэффициент усиления Результат преобразования представляется в этом случае в дополнительном коде, а его значение лежит в диапазоне от $200 (-512) до $ IFF (+512). 9.4. Повышение точности преобразования В этом разделе приведены некоторые рекомендации, позволяющие в наибольшей степени использовать возможности АЦП. Прежде всего, для минимизации погрешности самого АЦП необходимо правильно выбрать тактовую частоту преобразования. С этой же целью на входе АЦП рекомендуется устанавливать фильтр нижних частот. Кроме того, при разработке конструкции и разводке печатной платы следует придерживаться общих правил проектирования цифро-аналоговых устройств: 1. На печатной плате необходимо предусмотреть область сплошной металлизации под аналоговую «землю» Аналоговая часть микроконтроллера и аналоговая часть всего устройства должна располагаться над этой областью. Аналоговая и цифровая «земли» должны соединяться друг с другом только в одной точке печатной платы. 2. Проводники, по которым распространяются аналоговые сигналы, должны быть как можно короче и располагаться над аналоговой «землей». Кроме того, они должны быть размещены как можно дальше от быстродействующих цифровых цепей. 3. Вывод AVCC микроконтроллера должен подключаться к источнику питания Vcc через LC-фильтр, как показано на Рис. 9.9 (расположение выводов показано условно). 4. Если какие-либо выводы АЦП используются как цифровые выходы, они не должны переключаться во время преобразования. Рис. 9.9. Подключение цепей питания АЦП
9.5. ПараметрыЛЦП ¦ 417 Для сведения к минимуму электромагнитных помех, наводимых ядром процессора, во всех рассматриваемых микроконтроллерах имеется дополнительный «спящий» режим — ADC Noise Reduction (режим снижения шумов АЦП). В этом режиме из всех периферийных устройств функционируют только АЦП и сторожевой таймер. Для той же цели (но с меньшим эффектом) может быть использован режим Idle. Для использования АЦП в любом из указанных режимов необходимо выполнить следующее: 1. Убедиться, что АЦП включен и не занят преобразованием. Затем переключить АЦП в режим одиночного преобразования и разрешить прерывание от АЦП. 2. Перевести микроконтроллер в режим ADC Noise Reduction (или Idle). Сразу же после остановки процессора начнется цикл преобразования. 3. По завершении преобразования будет сгенерировано прерывание от АЦП, которое переведет микроконтроллер в рабочий режим и начнется выполнение подпрограммы обработки этого прерывания. 9.5. Параметры АЦП Основные параметры АЦП приведены в Табл. 9.10. Все значения указаны для диапазона температур окружающей среды -40...+80°С. Таблица 9.10. Основные параметры АЦП Параметр Разрешение Абсолютная погрешность Интегральная нелинейность Обозначение - - INL Условия Несимметричный вход Дифференциальный вход, /Ги=1хи20х Дифференциальный вход, Кц = 200х Несимметричный вход, KREF = 4B, /АОС = 200кГц Несимметричный вход, /А0С=1МГц >W = 4B min - - - - - - typ 10 8 7 2 4 0.5 max - - - 2.5 - ч Единицы измерения Бит Бит Бит LSB LSB LSB
418 ¦ Глава 9. Аналого-цифровой преобразователь (продолжение) Параметр Дифференциальная нелинейность Ошибка смещения Время преобразования Тактовая частота Напряжение питания Опорное напряжение Напряжение внутреннего ИОН Входное сопротивление канала опорного напряжения Входное сопротивление аналогового входа Обозначение DNL - - Adc AVCC ^REF r.NT ^REF ^AIN Условия KREF = 4B ^REF-4B Режим непрерывного преобразования - - Несимметричный вход Дифференциальный вход 2.56 В 1.1В - - min - - 13 50 ^сс-0.3 2.0 2.0 2.4 1.0 - - typ 0.25 0.75 - - - - - 2.56 1.1 32 100 max - - 260 1000 Ксс + 0.3 ^сс ^сс-0.2 2.7 1.2 - - Единицы измерения . LSB LSB МКС кГц В В J В в 1 В 1 кОм МОм
Последовательный периферийный интерфейс SPI 10.1. Общие сведения Последовательный периферийный интерфейс SPI (Serial Peripheral Interface), реализованный во всех микроконтроллерах семейства Mega, имеет два назначения. Во-первых, с его помощью может осуществляться обмен данными между микроконтроллером и различными периферийными устройствами, такими как цифровые потенциометры, ЦАП/АЦП, FLASH-ПЗУ и др. Посредством этого интерфейса также может производиться обмен данными между несколькими микроконтроллерами AVR. Использование интерфейса SPI в качестве высокоскоростного канала связи и рассматривается в данной главе. Кроме того, через интерфейс SPI может быть осуществлено программирование микроконтроллера (так называемый режим последовательного программирования). Использование интерфейса SPI в этом качестве будет описано в главе 14. При обмене данными по интерфейсу SPI микроконтроллер AVR может работать как ведущий (режим Master) либо как ведомый (режим Slave). При этом пользователь может задавать следующие параметры: • скорость передачи (восемь программируемых значений); • формат передачи (от младшего бита к старшему или наоборот). Дополнительной возможностью подсистемы SPI является «пробуждение» микроконтроллера из режима Idle при поступлении данных. 10.2. Функционирование модуля SPI Структурная схема модуля SPI приведена на Рис. 10.1. Модуль SPI использует четыре вывода микроконтроллера. Как и в большинстве прочих периферийных устройств, эти выводы являются линиями портов ввода/вывода общего назначения (см. Табл. 10.1). При включенном модуле SPI режим работы указанных выводов (направление передачи данных) переопределяется согласно Табл. 10.2. ГЛАВА 1 0
420 ¦ Глава 10. Последовательный периферийный интерфейс SPI Рис, 10.1. Структурная схема модуля SPI Таблица 10.1. Выводы, используемые модулем SPI SCK MISO MOSI SS РВ7 РВ6 РВ5 РВ4 РВ5 РВ4 РВЗ РВ2 РВ7 РВ6 РВ5 РВ4 РВ1 РВЗ РВ2 РВО РВ5 РВ4 РВЗ РВ2 РВ7 РВ6 РВ5 РВ4 РВ7 РВ6 РВ5 РВ4 РВ1 РВЗ РВ2 РВО РВ1 РВЗ РВ2 РВО РВ1 РВЗ РВ2 РВО Выход (Master)/Bxcw (Slave) тактового сигнала Вход (Master)/Bbixofl (Slave) данных Выход (Ма81ег)/вход (Slave) данных Выбор ведомого устройства Вывод ATmega8515x/8535x ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x Назначение
10.2. Функционирование модуля SPI ¦ 421 Таблица 10.2. Переназначение режима работы выводов модуля SPI Вывод MOSI MISO SCK SS Режим Master Определяется пользователем Вход Определяется пользователем Определяется пользователем Режим Slave Вход Определяется пользователем Вход Вход Как видно из таблицы, в определенных случаях пользователь должен самостоятельно задать режим работы вывода, используемого модулем SPI, в соответствии с его назначением (см. далее). При этом возможность управления внутренними подтягивающими резисторами выводов, работающих как входы, сохраняется независимо от способа управления их режимом работы. Для управления модулем SPI предназначен регистр управления SPCR. В моделях ATmega8515x/8535x, ATmegal62x и ATmega8x/16x/32x/64x/128x этот регистр располагается по адресу $0D ($2D), а в остальных моделях — по адресу $2С ($4С). Формат этого регистра приведен на Рис. 10.2, а краткое описание функций битов регистра приведено в Табл. 10.3. Подробно использование различных битов регистра будет описано далее. Таблица 10.3. Биты регистра SPCR Бит 7 6 5 4 3 2 1,0 Название SPIE SPE DORD MSTR CPOL СРНА SPR1:SPR0 Описание Разрешение прерывания от SPI Включение/выключение SPI Порядок передачи данных Выбор режима работы (Master/Slave) Полярность тактового сигнала Фаза тактового сигнала Скорость передачи Контроль состояния модуля, а также дополнительное управление скоростью обмена осуществляются с помощью регистра состояния SPSR, Рис. 10.2. Формат регистра SPCR
422 ¦ Глава 10. Последовательный периферийный интерфейс SPI расположенного по адресу $0Е ($2Е) в моделях ATmega8515x/8535x, ATmegal62x, ATmega8x/16x/32x/64x/128x и по адресу $2D ($4D) - в остальных моделях. Биты с 7-го по 1-й этого регистра доступны только для чтения, а 0-й бит — как для чтения, так и для записи. Формат этого регистра приведен на Рис. 10.3, а назначение его битов описано в Табл. 10.4. Рис. 10.3. Формат регистра SPSR Таблица 10.4. Биты регистра SPSR Бит 7 6 5...1 0 Название SPIF WCOL - SPI2X Описание Флаг прерывания от SPI. Данный флаг устанавливается в 1 по окончании передачи очередного байта. Если флаг SPIE регистра SPCR установлен в 1 и прерывания разрешены, то одновременно с установкой флага генерируется прерывание от SPI. Также флаг SPIF устанавливается в 1 при переводе_мик- роконтроллера из режима Master в режим Slave посредством вывода SS (см. раздел 10.4). Флаг сбрасывается аппаратно либо при старте подпрограммы обработки прерывания, либо после чтения регистра состояния SPI с последующим обращением к регистру данных SPI (SPDR) Флаг конфликта записи. Данный флаг устанавливается в 1 при попытке записи в регистр данных (SPDR) во время передачи очередного байта. Флаг сбрасывается аппаратно после чтения регистра состояния SPI с последующим обращением к регистру данных SPI Зарезервированы, читаются как 0 Удвоение скорости обмена. При установке этого бита в 1 и работе микроконтроллера в режиме Master частота сигнала SCK удваивается 1 Передаваемые данные записываются, а принимаемые — считываются из регистра данных SPDR. В моделях ATmega8515x/8535x, ATmegal62x, ATmega8x/16x/32x/64x/128x регистр данных располагается по адресу $0F ($2F), а в остальных моделях — по адресу $2Е ($4Е). Запись в этот регистр инициирует начало передачи, а при его чтении считывается содержимое буфера сдвигового регистра. Другими словами, регистр данных служит буфером между регистровым файлом микроконтроллера и сдвиговым регистром модуля SPI. Соединение двух микроконтроллеров (ведущий—ведомый) по интерфейсу SPI показано на Рис. 10.4. Вывод SCK ведущего микроконтроллера является выходом тактового сигнала, а ведомого микроконтроллера — входом.
10.2. Функционирование модуля SPI ¦ 423 Рис. 10.4. Соединение микроконтроллеров по интерфейсу SPI Перед выполнением обмена необходимо, прежде всего, разрешить работу модуля SPI. Для этого следует установить в 1 бит SPE регистра SPCR. Режим работы определяется состоянием бита MSTR этого регистра: если бит установлен в 1, микроконтроллер работает в режиме Master, если сброшен в 0 — в режиме Slave. Передача данных осуществляется следующим образом. При записи в регистр данных SPI ведущего микроконтроллера запускается генератор тактового сигнала модуля SPI, и данные начинают побитно выдаваться на вывод MOSI и соответственно поступать на вывод MOSI ведомого микроконтроллера. Порядок передачи битов данных определяется состоянием бита DORD регистра SPCR. Если бит установлен в 1, первым передается младший бит байта, если же сброшен в 0 — старший бит. После выдачи последнего бита текущего байта генератор тактового сигнала останавливается с одновременной установкой в 1 флага «Конец передачи» (SPIF). Если прерывания от модуля SPI разрешены (флаг SPIE регистра SPCR установлен в 1), генерируется запрос на прерывание. После этого ведущий микроконтроллер может начать передачу следующего байта либо, подав на вход SS ведомого напряжение ВЫСОКОГО уровня, перевести его в состояние ожидания. Одновременно с передачей данных от ведущего к ведомому происходит передача и в обратном направлении, при условии, что на входе SS ведомого присутствует напряжение НИЗКОГО уровня. Таким образом, в каждом цикле сдвига происходит обмен данными между устройствами. Соответственно, в конце каждого цикла флаг SPIF устанавливается в 1 как в ведущем микроконтроллере, так и в ведомом. Принятые байты сохраняются в приемных буферах для дальнейшего использования. В модуле реализована одинарная буферизация при передаче и двойная — при приеме. Это означает, что готовый для передачи байт данных не может быть записан в регистр данных SPI до окончания предыдущего цикла обмена. При попытке изменить содержимое регистра данных во время передачи флаг WCOL регистра SPSR устанавливается в 1. Сбрасывается этот флаг после чтения регистра SPSR с последующим обращением к регистру данных SPI.
424 ¦ Глава 10. Последовательный периферийный интерфейс SPI Соответственно, при приеме данных принятый байт должен быть про* читан из регистра данных SPI до того, как в сдвиговый регистр поступит последний бит следующего байта. В противном случае первый байт будет потерян. 10.3. Режимы передачи данных Спецификация интерфейса SPI предусматривает 4 режима передачи данных. Эти режимы различаются соответствием между фазой (момент считывания сигнала) тактового сигнала SCK, его полярностью и передаваемыми данными. Всего существует 4 таких комбинации, определяемых состоянием битов СРНА и CPOL регистра SPCR (Табл. 10.5). Таблица 10.5. Задание режима передачи данных Бит CPOL СРНА Описание Полярность тактового сигнала. 0 — генерируются импульсы положительной полярности, при отсутствии импульсов на выводе присутствует НИЗКИЙ уровень; 1 — генерируются импульсы отрицательной полярности, при отсутствии импульсов на выводе присутствует ВЫСОКИЙ уровень Фаза тактового сигнала. 0 — обработка данных производится по переднему фронту импульсов сигнала SCK (для CPOL = 0 — по нарастающему фронту, а для CPOL = 1 — по спадающему фронту); 1 — обработка производится по заднему фронту импульсов сигнала SCK (для CPOL = 0 — по спадающему фронту, а для CPOL = 1 — по нарастающему фронту) Соответствующие этим режимам форматы обмена данными через SPI приведены на Рис. 10.5 и Рис. 10.6 (передача ведется от старшего бита к младшему). Рис. 10.5. Передача данных при СРНА = 0
10.3. Режимы передачи данных ¦ 425 Рис. 10.6. Передача данных при СРНА = 1 Частота тактового сигнала SCK и соответственно скорость передачи данных по интерфейсу определяются состоянием битов SPR1:SPR0 регистра SPCR и бита SPI2X регистра SPSR (Табл. 10.6). Разумеется, речь идет о микроконтроллере, работающем в режиме Master, так как именно он является источником тактового сигнала. Для устройства, находящегося в режиме Slave, состояние этих битов безразлично. Таблица 10.6. Задание частоты тактового сигнала SCK SPI2X 0 0 о 0 1 1 1 1 SPR1 0 0 1 1 0 0 1 1 SPR0 0 1 0 1 0 1 0 1 Частота сигнала SCK /clk/4 /clk/16 /clk/64 /clk/128 /clk/2 /clk/8 /clk/32 /clk/64 Примечание./cLK — тактовая частота микроконтроллера. Следует иметь в виду, что работа микроконтроллера в режиме Slave гарантируется только на частотах, меньших или равных /clk/4.
426 ¦ Глава 10. Последовательный периферийный интерфейс SPI 10.4. Использование вывода SS Вообще говоря, этот вывод предназначен для выбора активного ведомого устройства и в режиме Slave всегда является входом. При подаче на него напряжения НИЗКОГО уровня модуль SPI активируется и вывод MOSI переключается в режим вывода данных (если это задано пользователем). Остальные выводы модуля SPI являются в этом режиме входами. А при подаче на вывод SS напряжения ВЫСОКОГО уровня все выводы модуля SPI переключаются в режим ввода данных. При этом модуль переходит в неактивное состояние и прием данных не производится. Как правило, в этом состоянии программа изменяет содержимое регистра данных Следует помнить, что каждый раз, когда на вывод SS подается напряжение ВЫСОКОГО уровня, происходит сброс модуля SPI. Соответственно, если изменение состояния этого вывода произойдет во время передачи данных, и прием, и передача немедленно прекратятся, а передаваемый и принимаемый байты будут потеряны. Если же микроконтроллер находится в режиме Master (бит MSTR регистра SPCR установлен в 1), направление передачи данных через выво- SS определяется пользователем. Если вывод сконфигурирован как выход, он работает как линия вывода общего назначения и не влияет на работу модуля SPL Как правило, в этом случае он используется для управления выводом SS микроконтроллера, работающего в режиме Slave. Если же вывод сконфигурирован как вход, то для обеспечения нормальной работы модуля SPI на него должно быть подано напряжение ВЫСОКОГО уровня. Подача на этот вход напряжения НИЗКОГО уровня от какой-либо внешней схемы будет воспринята модулем SPI как выбор микроконтроллера в качестве ведомого (при этом ему начинают передаваться данные). Во избежание конфликта на шине модуль SPI в таких случаях выполняет следующие действия: 1. Флаг MSTR регистра SPCR сбрасывается, и микроконтроллер переключается в режим Slave. Как следствие, выводы MOSI и SCK начинают функционировать как входы. 2. Устанавливается флаг SPIF регистра SPSR, генерируя запрос на прерывание от SPI. Если прерывания от SPI разрешены и флаг I регистра SREG установлен в 1, происходит запуск подпрограммы обработки прерывания. Таким образом, если ведущий микроконтроллер использует передачу дан - ных, управляемую прерыванием, и существует вероятность подачи на вход SS напряжения НИЗКОГО уровня, в подпрограмме обработки прерывания от SPI обязательно должна осуществляться проверка состояния флага MSTR. При обнаружении сброса этого флага он должен быть программно установлен обратно в 1 для обратного перевода микроконтроллера в режим Master.
ГЛАВА 11 Двухпроводный последовательный интерфейс TWI 11.1. Общие сведения Модуль двухпроводного последовательного интерфейса (Two-Wire serial Interface — TWI) имеется практически во всех микроконтроллерах семейства Mega, за исключением моделей ATmega8515x, ATmegal62x, ATmegal65x и ATmega325x/3250x/645x/6450x. Причем, если в первых двух моделях он отсутствует как класс, то в остальных моделях в режиме двухпроводного интерфейса может работать модуль USI, которому будет посвящена следующая глава. Интерфейс TWI является полным аналогом базовой версии интерфейса 12С фирмы Philips. Он позволяет объединить вместе до 128 различных устройств с помощью двунаправленной шины, состоящей всего из двух линий: линии тактового сигнала (SCL) и линии данных (SDA). Единственными дополнительными элементами для реализации шины являются два подтягивающих резистора, по одному на каждую линию (см. Рис. 11.1). Рис, ILL Соединение устройств с помощью шины TWI Шинные формирователи всех TWI-совместимых устройств выполняются по схеме с открытым коллектором (стоком), что позволяет реализовать функцию «монтажное И». Соответственно, НИЗКИЙ уровень на линии устанавливается тогда, когда одно или более устройств выставляют на линию сигнала лог. О, а ВЫСОКИЙ уровень на линии устанавливается, когда все устройства, подключенные к ней, устанавливают свои выходы в третье состояние.
428 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI При последующем рассмотрении модуля TWI будут часто встречаться некоторые термины. Их описание приведено в Табл. 11.1. Таблица ILL Термины, используемые при описании модуля TWI 1 Термин Ведущий (Master) Ведомый (Slave) Передатчик (Transmitter) Приемник (Reciever) Описание Устройство, инициирующее и завершающее передачу данных по шине, а также генерирующее тактовый сигнал SCL Устройство, адресуемое ведущим Устройство, выдающее данные на шину Устройство, считывающее данные с шины 11.2. Принципы обмена данными по шине TWI Поскольку шина TWI является последовательной, все данные передаются по ней (по линии SDA) побитно. Каждый передаваемый бит сопровождается импульсом на линии тактового сигнала SCL. Причем сигнал на линии SDA должен быть стабильным в течение всего времени, пока на шине SCL присутствует сигнал лог. 1 (см. Рис. 11.2). Единственным исключением из этого правила являются два особых состояния шины TWI — СТАРТ и СТОП. Рис. 11.2. Корректная выдача данных на шину SDA Состояния СТАРТ и СТОП формируются ведущим соответственно в начале и в конце передачи данных. Между этими состояниями шина считается занятой, и другие ведущие не должны пытаться управлять ею. Если ведущий хочет начать передачу нового блока данных без потери/восстановления контроля над шиной, он может сформировать состояние СТАРТ до формирования состояния СТОП. Формируемое таким об-
11.2. Принципы обмена данными по шине TWI ¦ 429 разом состояние называется «повторный СТАРТ» (ПОВСТАРТ), а шина считается занятой до последующего формирования состояния СТОП. Поскольку такое поведение ничем не отличается от поведения после формирования состояния СТАРТ, в дальнейшем оба этих состояния (СТАРТ и ПОВСТАРТ) будут обозначаться как СТАРТ, кроме тех случаев, где их необходимо различать. Состояния СТАРТ и СТОП формируются путем изменения уровня сигнала на линии SDA при ВЫСОКОМ уровне на линии SCL. Состоянию СТАРТ соответствует смена уровня с 1 на 0, а состоянию СТОП — наоборот, с 0 на 1 (Рис. 11.3). Рис. 11.3. Состояния СТАРТ, СТОП и ПОВСТАРТ Заметим, что протокол интерфейса TWI позволяет подключать к шине несколько ведущих устройств (режим Multi-Master). При этом могут возникать различные проблемы, одной из которых является несовпадение частот тактовых сигналов, генерируемых разными ведущими. Задача синхронизации решается очень просто благодаря подсоединению всех устройств к линии SCL по схеме «монтажное И». В результате длительность тактовых импульсов на линии SCL определяется тактовым сигналом с наименьшей длительностью импульсов, а пауза между тактовыми импульсами, наоборот, определяется тактовым сигналом с наибольшей паузой между импульсами. Помимо этого, все ведущие контролируют уровень, присутствующий на линии SCL, и определяют момент начала отсчета импульса или паузы тактового сигнала по соответствующему изменению сигнала (Рис. 11.4). Другой задачей, которую приходится решать при подключении к шине нескольких ведущих устройств, является задача распределения приоритетов, в случае если два и более ведущих одновременно пытаются начать передачу. При возникновении такой ситуации передачу может осуществить только один ведущий, остальные же должны переключиться в режим ведомого, причем передаваемые данные во время распределения приоритетов не должны искажаться.
430 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI Рис, 11.4. Синхронизация сигнала SCL нескольких ведущих Для решения описанной задачи все ведущие устройства после выдачи данных на линию SDA контролируют ее состояние. Если состояние линии отличается от того, в которое ее переводил ведущий, он теряет приоритет (Рис. 11.5). Напоминаю, что такое возможно только в случае выдачи им сигнала ВЫСОКОГО уровня во время выдачи другими ведущими (получившими приоритет) сигнала НИЗКОГО уровня. Ведущий, потерявший приоритет, должен немедленно переключиться в режим ведомого и проверить, не был ли он адресован каким-либо из ведущих, получивших приоритет. При этом он должен продолжать удерживать на линии SDA сигнал ВЫСОКОГО уровня. Однако он может продолжать генерировать тактовый сигнал до окончания передачи текущего пакета. Рис. 11.5. Распределение приоритетов между двумя ведущими
11.2. Принципы обмена данными по шине TWI ¦ 431 Процесс распределения приоритетов продолжается до тех пор, пока на шине не останется только один ведущий. В случае если несколько ведущих пытаются адресовать одного и того же ведомого, процесс распределения приоритетов продолжается и во время передачи пакета данных. Отсюда следует, в частности, что все циклы обмена должны содержать одинаковое количество пакетов данных, в противном случае результат процесса распределения приоритетов будет неопределенным. При этом следует помнить, что процесс распределения приоритетов не должен выполняться между: • состоянием ПОВСТАРТ и передачей бита данных; • состоянием СТОП и передачей бита данных; • состоянием ПОВСТАРТ и СТОП. Предотвращать возникновение перечисленных ситуаций должно программное обеспечение устройств, подключенных к шине. При передаче данных по шине TWI вместе с ними передается определенная служебная информация. Совокупность данных и соответствующей служебной информации называется пакетом. Различают адресные пакеты и пакеты данных. Формат адресного пакета Все адресные пакеты, передаваемые по шине TWI, имеют длину 9 бит. Пакет содержит 7-битный адрес (первым передается старший бит), управляющий бит R/W и бит квитирования АСК (Рис. 11.6). Значение управляющего бита R/W определяет направление передачи данных по шине. Бит, сброшенный в 0, означает передачу данных, а установленный в 1 — запрос данных (чтение). Пакеты со сброшенным и установленным управляющим битом обозначаются соответственно SLA-W и SLA-R. При распознавании ведомым своего адреса он должен сформировать подтверждение (АСК) путем выдачи на линию SDA сигнала НИЗКОГО Рис. 11.6. Формат адресного пакета
432 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI уровня во время 9-го тактового импульса. Если ведомый по каким-либо причинам не может обслужить запрос ведущего, он должен во время 9-го тактового импульса удерживать на линии сигнал ВЫСОКОГО уровня (NACK — нет подтверждения). Ведомым устройствам могут быть назначены любые адреса, за исключением нулевого адреса и адресов из диапазона 1111000... 1111111. Нулевой адрес зарезервирован для реализации так называемых общих вызовов, а адреса формата 111 lxxx должны быть зарезервированы для использования в дальнейшем. Общий вызов используется, когда ведущий хочет передать всем ведомым, подключенным к шине, одно и то же сообщение. При приеме адресного пакета с нулевым адресом и сброшенным управляющим битом (запрос на передачу) все ведомые устройства, подключенные к шине, должны сформировать подтверждение. Исключение составляют лишь те устройства, в которых распознавание общего вызова по каким-либо причинам запрещено. Соответственно, последующие пакеты данных, посылаемые ведущим, будут получены всеми ведомыми устройствами, распознавшими адрес общего вызова. Очевидно, что общий вызов с установленным управляющим битом (запрос на чтение) не имеет смысла, поскольку различные устройства не могут одновременно осуществлять передачу данных по шине. Формат пакета данных Все пакеты данных, передаваемые по шине TWI, тоже имеют длину 9 бит. Пакет состоит из байта данных (первым передается старший бит) и бита квитирования АСК (Рис. 11.7). Генерация тактового сигнала и формирование состояний СТАРТ и СТОП осуществляются ведущим. Приемник, в свою очередь, должен после приема каждого байта формировать подтверждение (АСК) путем выдачи на линию SDA сигнала НИЗКОГО уровня во время 9-го тактового импульса. Если приемник получил последний байт или по каким-либо другим причинам не может продолжать прием данных, он должен во время 9-го тактового импульса удерживать на линии сигнал ВЫСОКОГО уровня (NACK). Не получив подтверждения от приемника, ведущий может прекратить передачу данных, сформировав состояние СТОП. На практике каждый цикл обмена по шине TWI состоит из следующих этапов (Рис. 11.8): 1. Формирование состояния СТАРТ. 2. Передача адресного пакета SLA+R/W. 3. Передача одного или нескольких пакетов данных. 4. Формирование состояния СТОП.
11.3. Обзор модуля TWI ш 433 Рис. 11.7. Формат пакета данных Рис. 11.8. Типичный цикл обмена Скорость обмена по шине TWI задается ведущим, так как именно он генерирует тактовые импульсы. Однако, если ведомый не может принимать данные с такой скоростью или ему просто требуется время на обработку данных между приемом пакетов, он может увеличить паузу между тактовыми импульсами, удерживая на линии SCL сигнал НИЗКОГО уровня. На длительность тактовых импульсов это не влияет. 11.3. Обзор модуля TWI Структурная схема модуля TWI приведена на Рис. 11.9. Как видно из рисунка, модуль состоит из нескольких блоков, каждый из которых выполняет определенные функции. Взаимодействие программы с модулем TWI осуществляется посредством пяти (в новых моделях — шести) регистров ввода/вывода. Названия и назначение этих регистров, а также их положение в адресном пространстве ввода/вывода всех моделей приведено в Табл. 11.2.
434 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI Рис. 11.9. Структурная схема модуля TWI Таблица 11.2. Регистры ввода/вывода модуля TWI Регистр TWBR TWSR TWAR TWDR TWCR TWAMR ATmega8535x $00($20) $01 ($21) $02 ($22) $03 ($23) $36 ($56) - ATmega8x/16x/32x $00($20) $01 ($21) $02 ($22) $03($23) $36($56) - ATmega64x/128x ($70) ($71) ($72) ($73) ($74) - ATmega48x/88x/168x ($B8) ($B9) ($ВА) ($ВВ) ($ВС) ($BD) ATmegal64x/324x/644x ($В8) ($В9) ($ВА) ($ВВ) ($ВС) ($BD) ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x ($B8) ($B9) ($ВА) ($ВВ) ($ВС) ($BD) Назначение Регистр скорости передачи Регистр состояния Регистр адреса Регистр данных Регистр управления Регистр маски адреса Рассмотрим подробнее составные части модуля TWI.
11.3. Обзор модуля TWI ш 435 Выводы SCL и SDA Используются для подключения модуля к одноименным линиям шины TWI. В соответствии со спецификацией интерфейса TWI выходные каскады, подключенные к выводам, содержат ограничители скорости нарастания сигнала, а входные каскады содержат фильтр, подавляющий паразитные импульсы длительностью менее 50 не. Оба вывода являются линиями портов ввода/вывода микроконтроллеров (Табл. 11.3). Таблица 11.3. Выводы микроконтроллеров, используемые модулем TWI Название SDA SCL ATmega8x РС4 РС5 ATmegal6x/32x PCI РСО ATmega64x/128x PD1 PDO ATmega48x/88x/168x PC4 PC5 ATmegal64x/324x/644x PCI PCO ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x PD1 PDO Назначение Линия данных Линия тактового сигнала При использовании указанных выводов микроконтроллера модулем TWI к ним, как и при обычном их использовании, можно подключить внутренние подтягивающие резисторы. Это позволит в ряде случаев обойтись без внешних подтягивающих резисторов, требуемых спецификацией интерфейса TWI. Контроллер скорости передачи (Bit Rate Generator) Этот блок задает период следования импульсов на линии SCL при работе микроконтроллера в режиме ведущего. Для управления скоростью передачи (частотой сигнала SCL) используется регистр TWBR совместно с двумя младшими битами (TWPS1:TWPS0) регистра TWSR. Соответственно, частота формируемого сигнала SCL определяется выражением г _ /clk 16 + 2- TWBR-A1WF* где/CLK — тактовая частота процессора; TWBR — значение, записанное в регистре TWBR; TWPS - значение битов TWPS1:TWPS0 регистра TWSR.
436 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI И регистр TWBR, и биты TWPS1:TWPS0 регистра TWSR доступны как для чтения, так и для записи в любой момент времени. Для обеспечения корректной работы модуля в качестве ведущего содержимое регистра TWBR в этом режиме должно быть больше 10. При работе в режиме ведомого содержимое указанных битов безразлично, однако тактовая частота микроконтроллера в этом режиме должна быть, как минимум, в 16 раз выше частоты сигнала SCL. Напоминаю, что любое устройство, подключенное к шине TWI, може увеличивать длительность паузы между тактовыми импульсами, снижая, таким образом, скорость передачи данных по шине. Блок шинного интерфейса (Bus Interface Unit) В состав этого блока входят два узла: • контроллер состояний СТАРТ/СТОП — формирует и обнаруживает состояния СТАРТ, ПОВСТАРТ и СТОП. Мониторинг состояния шины ведется даже при нахождении микроконтроллера в «спящем» режиме. Благодаря этому обеспечивается, при необходимости, выход микроконтроллера из «спящего» режима при адресации его каким-либо ведущим; • контроллер арбитража — определяет наличие конфликтов на шине при работе микроконтроллера в режиме ведущего. В случае потери устройством приоритета контроллер информирует об этом блок управления, который производит необходимые действия и формирует соответствующие коды состояния. Кроме того, в состав блока входит сдвиговый регистр адреса/данных TWDR, который содержит данные передаваемого или принимаемого пакета. Одновременно с выдвиганием содержимого регистра на шину данные с нее вдвигаются в этот регистр. Таким образом, почти всегда, за исключением момента выхода микроконтроллера из «спящего» режима, в регистре TWDR содержится последний байт, имевшийся на шине. При включении питания все биты этого регистра устанавливаются в 1. При этом инициализация регистра пользователем может быть осуществлена только после генерации первого прерывания. Помимо регистра TWDR в составе блока имеется специальный регистр, один из битов которого содержит значение переданного или принятого бита подтверждения. При приеме состояние этого бита задается одним из битов регистра управления TWCR, а при передаче состояние полученного бита подтверждения может быть определено по коду, находящемуся в регистре состояния TWSR.
113. Обзор модуля TWI ш 437 Блок контроля адреса (Address Match Unit) Блок контроля адреса проверяет принятый адрес на соответствие значению, находящемуся в старших семи битах регистра адреса TWAR. Также он проверяет наличие общих вызовов, если разрешено их распознавание. При обнаружении корректного адреса он информирует об этом блок управления, который формирует или не формирует подтверждение получения адресного пакета. Контроль адресных пакетов осуществляется блоком даже при нахождении микроконтроллера в «спящем» режиме, что позволяет перевести микроконтроллер в рабочий режим в случае адресации его ведущим устройством. Формат регистра TWAR показан на Рис. 11.10, а описание его битов приведено в Табл. 11.4. Рис. 11.10. Формат регистра TWAR Таблица 11.4. Биты регистра адреса TWAR Бит 7...1 0 Название TWA6...TWA0 TWGCE Описание Адрес устройства. В этих битах содержится адрес, на который устройство будет отзываться при работе в режиме ведомого. При работе устройства в режиме ведущего содержимое этих битов безразлично Разрешение распознавания общих вызовов. Если этот бит установлен в 1, устройство будет отзываться на общие вызовы (пакеты с адресом $00) так же, как и на вызовы с адресом, находящимся в битах TWA6...0 регистра. Если бит сброшен в 0, распознавание общих вызовов запрещено В моделях ATmega48x/88x/168x, ATmegal64x/324x/644x, ATmega640x и ATmegal280x/1281x/2560x/2561x помимо регистра адреса TWAR имеется дополнительный регистр маски адреса. При установке какого-либо бита регистра TWAMR в 1 он будет маскировать (аннулировать) значение соответствующего бита регистра адреса TWAR. Другими словами, если бит регистра маски установлен в 1, то сравнение между соответствующими битами содержимого регистра TWAR и принятого адреса не производится. Формат регистра TWAMR приведен на Рис. 11.11, а упрощенная структурная схема блока контроля адреса рассматриваемых моделей приведена на Рис. 11.12.
438 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI Рис. 11.11. Формат регистра TWAMR Рис. 11.12. Структурная схема блока контроля адреса Блок управления (Control Unit) Этот блок осуществляет управление всем модулем TWI в соответствии с установками регистра управления TWCR и информацией, поступающей ему от остальных блоков модуля. При наступлении определенных событий, указанных ниже, блок управления формирует в регистре состояния TWSR код статуса, соответствующий событию, и устанавливает флаг запроса на прерывание TWINT регистра TWCR. До момента сброса этого флага на линии SCL удерживается НИЗКИЙ уровень, приостанавливая тем самым передачу данных по шине. Формирование запроса на прерывание осуществляется при возникновении следующих событий: • окончание формирования состояния СТАРТ/ПОВСТАРТ; • окончание передачи адресного пакета (SLA+R/W); • окончание передачи байта адреса; • потеря устройством приоритета; • адресация устройства или наличие общего вызова; • окончание приема байта данных; • возникновение ошибок на шине, обусловленных недопустимыми условиями формирования состояний СТАРТ/СТОП.
11.3. Обзор модуля TWI ш 439 Формат регистра TWCR показан на Рис. 11.13, а описание его битов приведено в Табл. 11.5. Формат регистра TWSR показан на Рис. 11.14, а описание его битов приведено в Табл. 11.6. Таблица 11.5. Биты регистра управления TWCR Бит 7 6 5 4 3 2 1 0 > Название TWINT TWEA TWSTA TWSTO TWWC TWEN - TW1E Описание Флаг прерывания от модуля TWI. Этот флаг устанавливается аппаратно после выполнения очередной операции, когда модуль ожидает отклика со стороны программы. Если установлены флаги I регистра SREG и TWIE регистра TWCR, генерируется прерывание и осуществляется вызов соответствующего обработчика. Пока флаг TWINT установлен, на линии SCL удерживается сигнал НИЗКОГО уровня. Сброс флага может быть осуществлен только записью в него лог. 1 Разрешение бита подтверждения. Бит TWEA управляет формированием бита подтверждения. Если этот бит установлен в 1, то устройство формирует сигнал подтверждения, когда это необходимо. При сбросе бита в 0, устройство виртуально отключается от шины TWI, т. е. бит подтверждения не формируется Флаг состояния СТАРТ. При записи в бит TWSTA лог. 1 модуль проверяет состояние шины TWI и, если шина свободна, формирует состояние СТАРТ Если шина занята, модуль TWI ожидает появления состояния СТОП и только после этого формирует состояние СТАРТ. Флаг должен сбрасываться программно по окончании формирования состояния СТАРТ Флаг состояния СТОП. В режиме ведущего установка флага TWSTO в 1 приводит к формированию на шине состояния СТОП. Флаг сбрасывается аппаратно по окончании формирования состояния СТОП. Установка флага TWSTO в режиме ведомого может использоваться для выхода из ошибочных ситуаций. После записи в этот бит лог. 1 модуль TWI возвращается в режим неадресованного ведомого, а выводы SCL и SDA устанавливаются в третье состояние. Состояние СТОП, естественно, не формируется Флаг конфликта записи. Флаг устанавливается в 1 при попытке записи в регистр TWDR, когда флаг прерывания TWINT сброшен. Флаг сбрасывается при записи в регистр TWDR, когда флаг прерывания TWINT установлен Разрешение работы модуля TWI. Бит TWEN управляет работой модуля TWI. При записи в этот бит лог. 1 модуль TWI включается и берет на себя управление контактами ввода/вывода микроконтроллера, соответствующих выводам SCL и SDA. При сбросе бита TWEN в 0 модуль TWI выключается Зарезервирован, читается как 0 Разрешение прерывания от модуля TWI. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то прерывание от модуля TWI разрешено Рис. 11.13. Формат регистра TWCR
440 ¦ Глава П. Двухпроводный последовательный интерфейс TWI Таблица 11.6. Биты регистра состояния TWSR Бит 7...3 2 1,0 Название TWS7...TWS3 - TWPS1:TWPS0 Описание Состояние модуля TWI. Значение, содержащееся в этих битах, отражает состояние узлов модуля и шины TWI. Возможные коды статуса 1 будут описаны при дальнейшем рассмотрении модуля TWI. Биты TWS7...3 доступны только для чтения Зарезервирован, читается как 0 Коэффициент деления предделителя контроллера скорости передачи. Состояние этих битов определяет коэффициент деления предделителя контроллера скорости передачи, управляя частотой генерируемого сигнала SCL (см. описание контроллера скорости передачи в начале раздела) 11.4. Взаимодействие прикладной программы с модулем TWI Взаимодействие прикладных программ с модулем TWI базируется на использовании прерывания от модуля, которое возникает после каждого события, произошедшего на шине (прием байта, формирование состояний СТАРТ/СТОП и т. п.). Соответственно, во время передачи данных по шине программа может выполнять другие задачи. Если прерывание от модуля TWI по каким-либо причинам использовать нельзя, его можно запретить. В этом случае программа должна будет постоянно следить за состоянием флага TWINT для реагирования на события, происходящие на шине. Установка флага TWINT регистра TWCR означает, что модуль TWI закончил выполнение очередной операции и ожидает реакции программы. В старших пяти битах (TWS7...0) регистра TWSR при этом формируется некоторое значение, характеризующее текущее состояние шины TWI. Соответственно, программа должна проанализировать это значение и задать дальнейшее поведение модуля TWI, манипулируя содержимым регистров TWCR и TWDR. На Рис. 11.15 показано взаимодействие прикладной программы с модулем TWI на простейшем примере передачи одного байта данных от ведущего к ведомому.
11.4. Взаимодействие прикладной программы с модулем TWI ¦ 441 Рис. 11.15, Пример взаимодействия программы с модулем TWI Передача данных происходит в следующей последовательности: 1. Первой операцией при передаче данных по шине TWI является формирование состояния СТАРТ. Для этого следует записать определенное значение в регистр TWCR, в соответствии с которым модуль TWI сформирует на шине состояние СТАРТ. При этом бит записываемого значения, соответствующий флагу TWINT, должен быть установлен в 1 (для сброса этого флага). Формирование состояния СТАРТ начнется сразу же после сброса флага TW1NT 2. После формирования состояния СТАРТ устанавливается флаг TWINT Число, находящееся в регистре состояния TWSR, индицирует результат выполнения этой операции. 3. Необходимо удостовериться в успешном формировании состояния СТАРТ, проверив содержимое регистра TWSR. Если код статуса соответствует ожидаемому, следует загрузить в регистр TWDR содержимое пакета SLA+W и сформировать в регистре TWCR команду на передачу пакета (не забывая сбросить при этом флаг TWINT). Передача адресного пакета начнется сразу же после сброса флага. 4. По окончании передачи адресного пакета устанавливается флаг TWINT Код статуса, находящийся в регистре TWCR, позволяет определить, была ли передача пакета успешной, а также было ли получено подтверждение от ведомого устройства. 5. Необходимо удостовериться в успешной передаче пакета и получении подтверждения, проверив содержимое регистра TWSR. Если код статуса соответствует ожидаемому, следует загрузить данные в регистр TWDR, а затем сформировать в регистре TWCR команду на передачу пакета (не забывая сбросить при этом флаг TWINT). Передача пакета данных начнется сразу же после сброса флага.
442 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI 6. По окончании передачи пакета данных устанавливается флаг TW1NT. Код статуса, находящийся в регистре TWCR, позволяет определить, была ли передача пакета успешной, а также было ли получено подтверждение от ведомого устройства. 7. Необходимо удостовериться в успешной передаче пакета и получении подтверждения, проверив содержимое регистра TWSR. Если код статуса соответствует ожидаемому, следует записать в регистр TWCR значение (не забывая сбросить при этом флаг TWINT), в соответствии с которым модуль TWI сформирует на шине состояние СТОП. Формирование состояния СТОП начнется сразу же после сброса флага TWINT Из сказанного выше видно, что любой этап взаимодействия прикладной программы с модулем TWI состоит из трех частей: 1. После завершения модулем выполнения какой-либо операции он устанавливает флаг TWINT регистра TWCR и ожидает реакции программы. Пока флаг установлен в 1, на линии SCL удерживается НИЗКИЙ уровень. 2. После установки флага TWINT пользователь должен занести в регистры модуля значения, соответствующие следующему этапу обмена. 3. После обновления содержимого регистров модуля пользователь должен сформировать в регистре TWCR команду на выполнение следующего этапа обмена. При загрузке в регистр нового значения необходимо сбросить флаг TWINT, записав в него лог. 1. После сброса флага модуль начнет выполнение операции, определяемой содержимым регистра TWCR. Возможные значения кодов статуса, о которых упоминается в примере, будут приведены далее при описании конкретных режимов работы модуля TWI. Кроме того, имеется два кода состояния ($F8 и $00), не связанные с каким-либо режимом работы (Табл. 11.7). Таблица 11.7. Коды статуса общего назначения Код статуса $F8 $00 Состояние шины и модуля TWI Нет информации; TWINT = 0 Ошибка на шине в результате некорректного формирования состояния СТАРТ или СТОП Действия программы Чтение/запись в регистр TWDR Нет действий Нет действий Запись в регистр TWCR STA STO TWINT TWEA Нет действий 0 1 1 X Следующее действие, выполняемое модулем TWI Ждать установки флага TWINT I Все действия выполняются аппаратно. Шина освобождается, а флаг TWSTO сбрасывается в 0
11.5. Режимы работы модуля TWI ¦ 443 Состояние с кодом $F8 является промежуточным. Наличие этого кода означает отсутствие какой-либо информации в связи с тем, что флаг TWINT не установлен. Код статуса $00 сигнализирует об ошибке на шине. Такая ошибка возникает при формировании ведущим состояний СТАРТ или СТОП в неположенном месте, например во время передачи байта адреса, байта данных или бита подтверждения. Для выхода из таких ситуаций необходимо записать лог. 1 в биты TWSTO и TWINT В результате модуль перейдет в режим неадресованного ведущего, освободит линии SDA и SCL и сбросит флаг TWSTO. Состояние СТОП в этой ситуации сформировано не будет. 11.5. Режимы работы модуля TWI Модуль TWI, реализованный в микроконтроллерах семейства Mega, может работать в следующих режимах: • ведущий-передатчик (Master Transmitter); • ведущий-приемник (Master Receiver); • ведомый-передатчик (Slave Transmitter); • ведомый-приемник (Slave Receiver). Выбор конкретного режима определяется логикой работы программы и соответственно выполняемыми действиями. 11.5.1. Режим «Ведущий-передатчик» В режиме «Ведущий-передатчик» (Master Transmitter) осуществляется передача данных от ведущего устройства к ведомому. Для переключения устройства в режим ведущего модуль TW1 должен сформировать на шине состояние СТАРТ. Формат передаваемого затем адресного пакета определяет, в каком из режимов будет работать ведущий. При передаче пакета SLA+W модуль переходит в режим «Ведущий-передатчик», а при передаче пакета SLA+R — в режим «Ведущий-приемник». Формирование состояния СТАРТ начнется после записи в регистр TWCR следующего значения: В результате записи указанного значения модуль TWI начнет контролировать состояние шины и сформирует состояние СТАРТ сразу же, как только она станет свободной.
444 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI По окончании формирования состояния СТАРТ устанавливается флаг TWINT; код статуса должен при этом иметь значение, равное $08 (см. Табл. 11.7). Для переключения модуля в режим «Ведущий-передатчик» необходимо передать по шине пакет SLA+W. Для этого содержимое пакета загружается в регистр TWDR, а в регистр TWCR заносится следующее значение: После передачи адресного пакета и приема бита подтверждения флаг TWINT снова устанавливается в 1. Код статуса на этом этапе может иметь одно из следующих значений: $18, $20 или $38. Какие действия необходимо предпринять при обнаружении того или иного кода, подробно рассмотрено в Табл. 11.8. После передачи адресного пакета должны быть переданы пакеты данных. Значение байта данных загружается в регистр TWDR. Передача пакета данных начинается после записи в регистр TWCR следующего значения: Описанная процедура используется для передачи всех пакетов данных. После передачи последнего байта данных ведущий должен сформировать на шине состояние СТОП или ПОВСТАРТ Формирование состояния СТОП начнется после записи в регистр TWCR следующего значения: А для формирования состояния ПОВСТАРТ в регистр TWCR необходимо занести значение:
11.5. Режимы работы модуля TW1 ¦ 445 Таблица 11.8. Коды статуса для режима «Ведущий-передатчик» Код статуса $08 $10 $18 $20 Состояние шины и модуля TWI Было сформировано состояние СТАРТ Было сформировано состояние ПОВСТАРТ Был передан пакет SLA+W и принято подтверждение (АСК) Был передан пакет SLA+W, а подтверждение не было принято (NACK) Действия программы Чтение/запись в регистр TWDR Загрузить SLA+W Загрузить SLA+W Загрузить SLA+R Загрузить данные Нет действий Нет действий Нет действий Загрузить данные Нет действий Нет действий Нет действий Запись в регистр TWCR STA 0 0 0 0 1 0 1 0 1 0 1 STO 0 0 0 0 0 1 1 0 0 1 1 TWINT TWEA X X X X X X X X X X X Следующее действие, выполняемое модулем TWI Будет передан SLA+W; будет получен АСК или NACK Будет передан SLA+W; будет получен АСК или NACK Будет передан SLA+R; модуль переключится в режим «Ведущий-приемник» Будет передан байт данных; будет получен АСК или NACK Будет сформировано состояние ПОВСТАРТ Будет сформировано состояние СТОП (флаг TWSTO будет сброшен) Будет сформировано состояние СТОП, а затем состояние СТАРТ (флаг TWSTO будет сброшен) Будет передан байт данных; будет получен АСК или NACK Будет сформировано состояние ПОВСТАРТ Будет сформировано состояние СТОП (флаг TWSTO будет сброшен) Будет сформировано состояние СТОП, а затем состояние СТАРТ (флаг TWSTO будет сброшен)
446 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI (продолжение) Код статуса $28 $30 $38 Состояние шины и модуля TWI Был передан пакет данных и принято подтверждение (АСК) Был передан пакет данных, а подтверждение не было принято (NACK) Потеря приоритета при передаче пакета адреса или данных Действия программы Чтение/запись в регистр TWDR Загрузить данные Нет действий Нет действий Нет действий Загрузить данные Нет действий Нет действий Нет действий Нет действий Нет действий Запись в регистр TWCR STA 0 1 0 1 0 1 0 1 0 1 STO 0 0 1 1 0 0 1 1 0 0 TWINT 1 1 1 1 1 1 1 1 1 1 TWEA X X X X X X X X X X Следующее действие, выполняемое модулем TWI Будет передан байт данных; будет получен АСК или NACK | Будет сформировано состояние ПОВСТАРТ Будет сформировано состояние СТОП (флаг TWSTO будет сброшен) Будет сформировано состояние СТОП, а затем состояние СТАРТ (флаг TWSTO будет сброшен) Будет передан байт данных; будет получен АСК или NACK Будет сформировано состояние ПОВСТАРТ Будет сформировано состояние СТОП (флаг TWSTO будет сброшен) Будет сформировано состояние СТОП, а затем состояние СТАРТ (флаг TWSTO будет сброшен) Устройство освободит шину и перейдет в режим неадре- сованного ведомого После освобождения шины будет сформировано состояние СТАРТ
11.5. Режимы работы модуля TWI ш 447 После формирования на шине состояния ПОВСТАРТ (код статуса $10) ведущий может адресовать того же или другого ведомого, не формируя состояния СТОП. Другими словами, использование состояния ПОВСТАРТ позволяет осуществлять смену ведомых устройств, а также переключаться между режимами «Ведущий-передатчик» и «Ведущий-приемник» без потери контроля над шиной. Все возможные состояния модуля TWI в режиме «Ведущий-передатчик» приведены на Рис. 11.16. Рис, 11,16. Состояния модуля TWI в режиме «Ведущий-передатчик»
448 ¦ Глава П. Двухпроводный последовательный интерфейс TWI 11.5.2. Режим «Ведущий-приемник» В режиме «Ведущий-приемник» ведущий осуществляет прием данных от ведомого устройства. Как обычно, для переключения устройства в режим ведущего модуль TWI должен сформировать на шине состояние СТАРТ. Формат адресного пакета, передаваемого следом, определяет, в каком из режимов будет работать ведущий. При передаче пакета SLA+W модуль переходит в режим «Ведущий-передатчик», а при передаче пакета SLA+R — в режим «Ведущий-приемник». Формирование состояния СТАРТ начинается после записи в регистр TWCR следующего значения: В результате записи указанного значения модуль TWI начнет контролировать состояние шины и сформирует состояние СТАРТ сразу же, как только она станет свободной. По окончании формирования состояния СТАРТ устанавливается флаг TWINT; код статуса должен при этом иметь значение, равное $08 (Табл. 11.9). Для переключения модуля в режим «Ведущий-передатчик» необходимо передать по шине пакет SLA+R. Для этого содержимое пакета загружается в регистр TWDR, а в регистр TWCR заносится следующее значение: После передачи адресного пакета и приема бита подтверждения флаг TWINT снова устанавливается в 1. Код статуса на этом этапе может иметь одно из следующих значений: $38, $40 или $48. Какие действия необходимо предпринять при обнаружении того или иного кода, подробно рассмотрено в Табл. 11.9. Полученный от ведомого устройства байт данных можно будет затем считать из регистра TWDR после последующей установки фла - га TWINT. Описанная процедура используется для приема всех пакетов данных. После приема последнего байта данных ведущий должен проинформиро-
11.5. Режимы работы модуля TWI ш 449 вать об этом ведомого-передатчика, послав сигнал неподтверждения (NACK). Затем ведущий должен сформировать на шине состояние СТОП или ПОВСТАРТ. Формирование состояния СТОП начнется после записи в регистр TWCR следующего значения: Разрешить работу модуля TWI Сформировать состояние СТОП Сбросить флаг TWI NT Для формирования состояния ПОВСТАРТ в регистр TWCR необходимо занести следующее значение: Таблица 11.9. Коды статуса для режима Код статуса $08 $10 $38 Состояние шины и модуля TWI Было сформировано состояние СТАРТ Было сформировано состояние ПОВСТАРТ Потеря приоритета при передаче пакета адреса или данных «Ведущий -приемник» Действия программы Чтение/запись в регистр TWDR Загрузить SLA+R Загрузить SLA+R Загрузить SLA+W Нет действий Нет действий Запись в регистр TWCR STA 0 0 0 0 1 STO 0 0 0 0 0 TWINT TWEA X X X X X Следующее действие, выполняемое модулем TWI Будет передан SLA+R, будет получен АСК или NACK Будет передан SLA+R, будет получен АСК или NACK, Будет передан SLA+W, модуль переключится в режим «Ведущий-приемник» Устройство освободит шину и перейдет в режим неадресо- ванного ведомого После освобождения шины будет сформировано состояние СТАРТ
450 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI (продолжение) Код статуса $40 $48 $50 $58 Состояние шины и модуля TWI Был передан пакет SLA+R и принято подтверждение (АСК) Был передан пакет SLA+R и принято неподтверждение (NACK) Был принят байт данных и передано подтверждение (АСК) Был принят байт данных и передано неподтверждение (NACK) Действия программы Чтение/запись в регистр TWDR Нет действий Нет действий Нет действий Нет действий Нет действий Считать данные Считать данные Считать данные Считать данные Считать данные Запись в регистр TWCR STA 0 0 1 0 1 0 0 1 0 1 STO 0 0 0 1 1 0 0 0 1 1 TWINT TWEA 0 1 X X X 0 1 X X X Следующее действие, выполняемое модулем TWI Будет принят байт данных и передано неподтверждение (NACK) Будет принят байт данных и передано подтверждение (АСК) Будет сформировано состояние ПОВСТАРТ Будет сформировано состояние СТОП (флаг TWSTO будет сброшен) Будет сформировано состояние СТОП, а затем состояние СТАРТ (флаг TWSTO будет сброшен) Будет принят байт данных и передано неподтверждение (NACK) Будет принят байт данных и передано подтверждение (АСК) Будет сформировано состояние ПОВСТАРТ Будет сформировано состояние СТОП (флаг TWSTO будет сброшен) Будет сформировано состояние СТОП, а затем состояние СТАРТ (флаг TWSTO будет сброшен) Как уже было сказано, после формирования на шине состояния ПОВСТАРТ (код статуса $10) ведущий может адресовать того же или другого ведомого, не формируя состояния СТОП. Другими словами, использование состояния ПОВСТАРТ позволяет осуществлять смену ведомых уст-
11.5. Режимы работы модуля TWI ¦ 451 ройств, а также переключаться между режимами «Ведущий-передатчик» и «Ведущий-приемник» без потери контроля над шиной. Все возможные состояния модуля TWI в режиме «Ведущий-приемник» приведены на Рис. 11.17. Рис. 11.17. Состояния модуля TWI в режиме «Ведущий-приемник»
452 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI 11.5.3. Режим «Ведомый-приемник» В режиме «Ведомый-приемник» устройство осуществляет прием данных от ведущего. Перед тем как переключить модуль в режим «Ведомый-приемник», следует занести в старшие биты регистра TWAR адрес устройства и, в соответствии с логикой работы программы, установить или сбросить младший бит регистра (TWGCE). Затем необходимо записать в регистр TWCR следующее значение: После инициализации регистров TWAR и TWCR модуль будет ожидать адресного пакета с адресом, указанным в регистре TWAR, или общего вызова (если его распознавание разрешено). Значение следующего за адресом бита направления определит режим, в который переключится модуль. Если этот бит будет сброшен в 0 (запись), модуль TWI переключится в режим «Ведомый-приемник». В противном случае модуль переключится в режим «Ведомый-передатчик». Напоминаю, что устройство также может самостоятельно переключиться в режим «Ведомый-приемник» из режима ведущего при потере приоритета (см. описание кодов статуса $68 и $78 в Табл. 11.10). После приема пакета SLA+W установится флаг TWINT, и состояние обмена по шине можно будет, как обычно, определить по коду статуса. Возможные действия со стороны программы, соответствующие тому или иному коду статуса, указаны в Табл. 11.10. Таблица 11.10. Коды статуса для режима «Ведомый-приемник» Код статуса $60 Состояние шины и модуля TWI Был принят SLA+W с собственным адресом и послано подтверждение (АСК) Действия программы Чтение/запись в регистр TWDR Нет действий Нет действий Запись в регистр TWCR STA X X STO 0 0 TWINT 1 1 TWEA 0 1 Следующее действие, выполняемое модулем TWI • Будет принят байт данных и передано неподтверждение (NACK) J Будет принят байт данных и передано подтверждение (АСК) -л
11.5. Режимы работы модуля TWI ш 453 (продолжение) Код статуса $68 $70 $78 $80 $88 Состояние шины и модуля TWI Потеря приоритета в режиме ведущего во время передачи SLA+R/W; был принят SLA+W с собственным адресом и послано подтверждение (АСК) Был принят общий вызови послано подтверждение (АСК) Потеря приоритета в режиме ведущего во время передачи SLA+R/W; был принят общий вызов и послано подтверждение (АСК) Устройство уже адресовано: был принят байт данных и послано подтверждение (АСК) Устройство уже адресовано: был принят байт данных и послано неподтверждение (NACK) Действия программы Чтение/запись в регистр TWDR Нет действий Нет действий Нет действий Нет действий Нет действий Нет действий Считать данные Считать данные Считать данные Считать данные Запись в регистр TWCR STA X X X X X X X X 0 0 STO 0 0 0 0 0 0 0 0 0 0 TWINT 1 1 1 1 1 1 1 1 1 1 TWEA 0 1 0 1 0 1 0 1 0 1 Следующее действие, выполняемое модулем TWI Будет принят байт данных и передано неподтверждение (NACK) I Будет принят байт данных и передано подтверждение (АСК) Будет принят байт данных и передано неподтверждение (NACK) | Будет принят байт данных и передано подтверждение (АСК) Будет принят байт данных и передано неподтверждение (NACK) Будет принят байт данных и передано подтверждение (АСК) Будет принят байт данных и передано неподтверждение (NACK) Будет принят байт данных и передано подтверждение (АСК) Переключение в режим неадресованного ведомого; распознавание любых адресов отключено Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1
454 ¦ Глава 77. Двухпроводный последовательный интерфейс TWI (продолжение) Код статуса $88 $90 $98 Состояние шины и модуля TWI Устройство уже адресовано: был принят байт данных и послано неподтверждение (NACK) Устройство уже адресовано (общий вызов): был принят байт данных и послано подтверждение (АС К) Устройство уже адресовано (общий вызов): был принят байт данных и послано неподтверждение (NACK) Действия программы Чтение/запись в регистр TWDR Считать данные Считать данные Считать данные Считать данные Считать данные Считать данные Считать данные Запись в регистр TWCR STA 1 1 X X 0 0 1 STO 0 0 0 0 0 0 0 TWINT 1 1 1 1 1 1 1 TWEA 0 1 0 1 0 1 0 Следующее действие, выполняемое модулем TWI Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено; после освобождения шины будет сформировано состояние СТАРТ Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1; после освобождения шины будет сформировано состояние СТАРТ Будет принят байт данных и передано неподтверждение (NACK) Будет принят байт данных и передано подтверждение (АСК) Переключение в режим неадресованного ведомого; распознавание любых вызовов отключено Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1 Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено; после освобождения шины будет сформировано состояние СТАРТ
11.5. Режимы работы модуля TWI ¦ 455 (продолжение) Код статуса $98 $А0 Состояние шины и модуля TWI Устройство уже адресовано (общий вызов): был принят байт данных и послано неподтверждение (NACK) Было обнаружено состояние СТАРТ или ПОВСТАРТ в то время, когда устройство было адресовано в качестве ведомого Действия программы Чтение/запись в регистр TWDR Считать данные Нет действий Нет действий Нет действий Нет действий Запись в регистр TWCR STA 1 0 0 1 1 STO 0 0 0 0 0 TWINT 1 1 1 1 1 TWEA 1 0 1 0 1 Следующее действие, выполняемое модулем TWI Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1; после освобождения шины будет сформировано состояние СТАРТ Переключение в режим неадресованного ведомого; распознавание любых вызовов отключено Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1 Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено; после освобождения шины будет сформировано состояние СТАРТ Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1; после освобождения шины будет сформировано состояние СТАРТ Чтобы прервать поток данных, следует сбросить бит TWEA регистра TWCR в 0 (это можно сделать и во время обмена, т. е. при сброшенном флаге TWINT). В результате после передачи следующего байта на линию SDA будет выдан сигнал неподтверждения, сигнализирующий ведущему о том,
456 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI что ведомый не может больше осуществлять прием данных. Обработка адресных пакетов при сброшенном бите TWEA прекращается, но может быть возобновлена в любой момент времени повторной установкой этого бита. Если адресация устройства произойдет при нахождении микроконтроллера в «спящем» режиме и бит TWEA будет при этом установлен, то модуль TWI переведет микроконтроллер в рабочий режим. При этом до сброса флага TWINT на линии SCL будет удерживаться НИЗКИЙ уровень. Все возможные состояния модуля TWI в режиме «Ведомый-приемник» приведены на Рис. 11.18. Рис, 11.18. Состояния модуля TWI в режиме «Ведомый-приемник»
11.5. Режимы работы модуля TWI ¦ 457 11.5.4. Режим «Ведомый-передатчик» В режиме «Ведомый-передатчик» устройство осуществляет передачу данных ведущему, который в этом случае является приемником. Перед тем как переключить модуль в этот режим, следует занести в старшие биты регистра TWAR адрес устройства и, в соответствии с логикой работы программы, установить или сбросить младший бит регистра (TWGCE). Затем необходимо записать в регистр TWCR следующее значение: После инициализации регистров TWAR и TWCR модуль будет ожидать адресного пакета с адресом, указанным в регистре TWAR, или общего вызова (если его распознавание разрешено). Значение следующего за адресом бита направления определит режим, в который переключится модуль. Если этот бит будет установлен в 1 (чтение), модуль TWI переключится в режим «Ведомый-передатчик». В противном случае модуль переключится в режим «Ведомый-приемник». Следует помнить, что устройство также может автоматически переключиться в режим «Ведомый-приемник» из режима ведущего при потере приоритета (см. описание кода статуса $В0 в Табл. 11.11). После приема пакета SLA+R установится флаг TWINT, и состояние обмена можно будет, как обычно, определить по коду статуса. Возможные действия со стороны программы, соответствующие тому или иному коду статуса, указаны в Табл. 11.11. Таблица 11.11. Коды статуса для режима «Ведомый-передатчик» Код статуса $А8 Состояние шины и модуля TWI Был принят SLA+W с собственным адресом и послано подтверждение (АСК) Действия программы Чтение/запись в регистр TWDR Загрузить данные Загрузить данные Запись в регистр TWCR STA X X STO 0 0 TWINT 1 1 TWEA 0 1 Следующее действие, выполняемое модулем TWI Будет передан последний байт данных, должно быть получено неподтверждение (NACK) Будет передан очередной байт данных, должно быть получено подтверждение (АСК)
458 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI (продолжение) Код статуса $В0 $В8 $С0 $С0 Состояние шины и модуля TWI Потеря приоритета в режиме ведущего во время передачи SLA+R/W; был принят SLA+W с собственным адресом и послано подтверждение (АСК) Был передан байт данных и получено подтверждение (АСК) Был передан байт данных и получено неподтверждение (NACK) Был передан байт данных и получено неподтверждение (NACK) Действия программы Чтение/запись в регистр TWDR Загрузить данные Загрузить данные Загрузить данные Загрузить данные Нет действий Нет действий Нет действий Запись в регистр TWCR STA X X X X 0 0 1 STO 0 0 0 0 0 0 0 TWINT 1 1 1 1 1 1 1 TWEA 0 1 0 1 0 1 0 Следующее действие, выполняемое модулем TWJ Будет передан последний байт данных; должно быть получено неподтверждение (NACK) Будет передан очередной байт данных; должно быть получено подтверждение (АСК) Будет передан последний байт данных; должно быть получено неподтверждение (NACK) Будет передан очередной байт данных; должно быть получено подтверждение (АСК) Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE=1 Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено; после освобождения шины будет сформировано состояние СТАРТ
11.5. Режимы работы модуля TWI ш 459 дстату 1 $С8 Состояние шины и модуля TWI Был передан последний байт данных и получено подтверждение (АСК) Действия программы Чтение/запись в регистр TWDR Нет действий Нет действий Нет действий Нет действий Нет действий Запись в регистр TWCR STA STO TWINT TWEA 1 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 (продолжение) Следующее действие, выполняемое модулем TWI 1 Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE=1; после освобождения шины будет сформировано состояние СТАРТ Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE=1 Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено; после освобождения шины будет сформировано состояние СТАРТ Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE=1; после освобождения шины будет сформировано состояние СТАРТ
460 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI При передаче последнего байта данных необходимо сбросить бит TWEA в 0. После этого модуль перейдет в состояние с кодом статуса $С0 или $С8, в зависимости от того, какой сигнал (АСК или NACK) передаст ведущий в ответ. В состояние с кодом статуса $С8 модуль TWI перейдет в случае, если ведущий затребовал дополнительные данные, передав подтверждение (АСК), несмотря на то, что ведомый передал последний байт и ожидал сигнала NACK. После перехода в любое из указанных состояний модуль TWI будет игнорировать обращения к нему ведущего. Соответственно, если ведущий будет продолжать обмен по шине, он будет постоянно принимать 1. Обработка адресных пакетов при сброшенном бите TWEA также прекращается, но может быть возобновлена в любой момент времени повторной установкой этого бита. Все возможные состояния модуля TWI в режиме «Ведомый-передатчик» приведены на Рис. 11.19. Рис. 11.19. Состояния модуля TWI в режиме «Ведомый-передатчик»
11.5. Режимы работы модуля TWI «461 11.5.5. Комбинирование различных режимов На практике, для выполнения какой-либо операции по шине TWI каждому устройству приходится использовать несколько режимов, переключаясь между ними при необходимости. В качестве примера рассмотрим операцию чтения данных из внешнего EEPROM. Все операции такого рода можно разбить на четыре этапа: 1. Инициирование обмена. 2. Передача адреса, по которому требуется прочитать данные. 3. Выполнение чтения. 4. Завершение передачи. Из сказанного видно, что при выполнении операции происходит передача информации как от ведущего к ведомому, так и наоборот. После инициирования обмена по шине ведущий должен находиться в режиме «Ведущий-передатчик», чтобы сообщить ведомому адрес, по которому он намеревается осуществить чтение. Для выполнения следующего этапа операции (чтение данных) ведущий должен переключиться в режим «Ведущий-приемник». При этом он должен сохранять контроль над шиной во время выполнения всех этапов операции. Для этого используется состояние ПОВСТАРТ. В рассматриваемом случае ведущий формирует это состояние между передачей адреса и приемом данных, как показано на Рис. 11.20. Рис, 11.20. Пример обращения к внешнему EEPROM 11.5.6. Арбитраж В случае присутствия на шине нескольких ведущих возможна ситуация, при которой несколько ведущих одновременно начнут процесс обмена. Для таких случаев спецификацией TWI предусмотрен процесс распределения приоритетов (арбитраж), в результате выполнения которого на шине остается только одно ведущее устройство. Принципы этого процесса были рассмотрены в разделе 2.2, однако его выполнение может развиваться по различным сценариям (Рис. 11.21): 1. Два или более ведущих осуществляют однотипный обмен с одним и тем же ведомым. В этом случае никто из них не сможет распознать конфликт на шине.
462 ¦ Глава 11. Двухпроводный последовательный интерфейс TWI 2. Два или более ведущих обращаются к одному и тому же ведомому с различными данными или различными типами обмена (чтение/запись). В этом случае распределение приоритетов произойдет во время передачи битов данных или бита направления. Ведущий, потерявший приоритет, может либо переключиться в режим неадресованного ведомого, либо дождаться освобождения шины и сформировать состояние СТАРТ для ее захвата. 3. Два или более ведущих обращаются к различным ведомым. В этом случае распределение приоритетов начнется во время передачи битов адресного пакета. Ведущий, потерявший приоритет, переключится в режим ведомого для проверки, не был ли он адресован ведущим. Если бывший ведущий был адресован, он переключится в режим «Ведомый-передатчик» или «Ведомый-приемник», в зависимости от значения бита направления. Если же он не был адресован, он переключится в режим неадресованного ведомого либо дождется освобождения шины и сформирует новое состояние СТАРТ. Рис. 11.21. Состояния модуля TWI во время арбитража
11.6. Параметры интерфейса TWI ¦ 463 11.6. Параметры интерфейса TWI Требования, предъявляемые к устройствам, которые подключаются к шине TWI, приведены в Табл. 11.12. Разумеется, модуль TWI микроконтроллеров семейства Mega полностью им удовлетворяет. Временные диаграммы сигналов, формируемых на шине TWI, приведены на Рис. 11.22. Таблица 11.12. Требования шины TWI Параметр 1 ,L \Vm kvs kL г >0F ksp /, \Q /SCL k 'HD.STA 'LOW Входное напряжение НИЗКОГО уровня Входное напряжение ВЫСОКОГО уровня Гистерезис входных каскадов Выходное напряжение НИЗКОГО уровня Время нарастания сигнала Длительность спада сигнала с PjHmin до К,Lmax Длительность импульсов, подавляемых входным фильтром Входной ток по каждому выводу Емкость каждого вывода Тактовая частота шины Сопротивление подтягивающего резистора Время удержания состояния СТАРТ Длительность паузы между тактовыми импульсами Условия - - - - - 10пФ<Сь<400пФ (Сь — емкость одной линии) - 0.1Kcc<K<0.9Kcc - /cK>max{16/scL; 250 кГц} /scl^IOOkIU /sclMOOkIU fSCL^ ЮОкГц /scL>iooicm /5а.<Ю0кГц /sclMOOkIu min -0.5 0.7FCC 0.05KCC 0 20 + 0.1Cb 20 + 0.1Q, 0 -10 - 0 KCC-0,4K 3mA Vcc-OAV 3mA 4.0 0.6 4.7!> U1* max 0.3 Fee Kcc + 0.5 - 0.4 300 250 50 10 10 400 1000 не 300 нс Cb - - - - Единицы измерения В В в в НС НС НС мкА пФ кГц Ом Ом МКС МКС МКС МКС
464 ¦ Глава П. Двухпроводный последовательный интерфейс TWJ (продолжение) Параметр 'high 'SU.STA 'hd.dat 'SU.DAT 'SU,SA0 'buf Длительность тактовых импульсов Задержка формирования состояния ПОВСТАРТ Время удержания данных Задержка выдачи данных Задержка формирования состояния СТОП Длительность нахождения шины в незанятом состоянии между состояниями СТОП и СТАРТ Условия /SCL<iooKm /scL>iooKm /scl^IOOkTu /scL>100Kru /зсь^ЮОкГц ЛС1>Ю0кГц /scl^IOOkIu /scl>100kiu /SCL<iooKm /sclMOOkIu /SCL<100Krn /SCL>100Kru min 4.0 0.6 4.7 0.6 0 0 250 100 4.0 0.6 4.7 1.3 max - - - - 3.45 0.9 - - - - - - Единицы измерения МКС МКС МКС МКС МКС МКС НС НС МКС МКС МКС МКС l) Действительная величина паузы между тактовыми импульсами, формируемыми модулем TWI, равна (l//scL-2/fcK). J Рис. 11.22. Временные диаграммы сигналов шины TW1
ГЛАВА 12 Универсальный последовательный интерфейс USI 12.1. Общие сведения Модуль универсального последовательного интерфейса (Universal Serial Interface — USI) реализован только в моделях ATmegal65x и ATmega325x/3250x/645x/6450x. Этот модуль является своего рода «полуфабрикатом», предоставляющим базовые аппаратные ресурсы, необходимые для осуществления обмена по последовательному каналу. Используя данный модуль, можно достичь гораздо большей скорости передачи и получить более компактный код, нежели при чисто программной реализации различных протоколов обмена. Обращаю ваше внимание на то, что в данной главе мы будем рассматривать собственно модуль USI. Принципы обмена по трехпроводной (SPI) и двухпроводной (TWI) шинам были подробно рассмотрены в двух предыдущих главах. Упрощенная структурная схема модуля USI приведена на Рис. 12.1. В общей сложности модуль USI задействует три линии ввода/вывода микроконтроллера: • РЕ6 — выход данных (DO). Используется в трехпроводном режиме (SPI); • РЕ5 — вход данных @1)/линия данных (SDA); • РЕ4 — вход/выход тактового сигнала (ШСК)/линия тактового сигнала (SCL). В 8-битном сдвиговом регистре содержатся входящие и исходящие данные. Старший бит сдвигового регистра подключается, в зависимости от режима работы, к одной из двух линий данных модуля. Входящие биты всегда считываются с вывода DI, независимо от конфигурации модуля. Четырехбитный счетчик, показанный на Рис. 12.1, доступен как для чтения, так и для записи. Кроме того, при его переполнении может генерироваться прерывание. Поскольку сдвиговый регистр и счетчик используют один и тот же тактовый сигнал, счетчик может считать число переданных или принятых битов и сгенерировать прерывание по окончании процесса обмена. Обратите внимание, что при использовании внешнего тактового сигнала изменение состояния счетчика происходит по каждому фронту сигнала, т. е. счетчик считает количество фронтов, а не битов. Тактовый
466 ¦ Глава 12. Универсальный последовательный интерфейс US1 Рис, 12.1. Структурная схема модуля USI сигнал может сниматься с входа USCK, с выхода блока сравнения таймера/счетчика ТО или формироваться программно. Блок управления тактовым сигналом используется в двухпроводном режиме и может генерировать прерывание при обнаружении на шине состояния СТАРТ. Кроме того, он может формировать на шине циклы ожидания, удерживая на линии SCL НИЗКИЙ уровень после обнаружения состояния СТАРТ или после переполнения счетчика. 12.2. Использование модуля USI Взаимодействие с модулем USI осуществляется посредством трех регистров ввода/вывода: регистра данных USIDR, расположенного по адресу ($ВА), регистра состояния USISR, расположенного по адресу ($В9), и регистра управления USICR, расположенного по адресу ($В8). При обращении к регистру данных USIDR осуществляется доступ непосредственно к сдвиговому регистру модуля. Тактовый сигнал, используемый для тактирования сдвигового регистра, определяется состоянием битов USICS1:0 регистра USICR. Старший бит регистра данных подключается к используемому выходному контакту модуля (DO или SDA) через триггер-защелку. При использовании внешнего тактового сигнала (USICS1 = 1) защелка открыта в первом полупериоде тактового сигнала, а
722 Использование модуля USI ¦ 467 при использовании внутреннего тактового сигнала (USICS1 = 0) защелка открыта постоянно. Применение триггера-защелки гарантирует, что считывание данных с входа и выдача их на выход будут осуществляться по противоположным фронтам тактового сигнала. Формат регистра управления USICR показан на Рис. 12.2, а описание его битов приведено в Табл. 12.1. Рис. 12.2. Формат регистра USICR Таблица 12.1. Биты регистра USICR Бит 7 6 5 4 3 2 1 0 Название USISIE USIOIE USIWM1 USIWM0 USICS1 USICS0 USICLK USITC Описание Разрешение прерывания при обнаружении состояния СТАРТ. Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то прерывание от детектора состояния СТАРТ разрешено Разрешение прерывания при переполнении счетчика. Если в этом бите записана 1 лог. 1 и флаг I регистра SREG также установлен в 1, то прерывание от счетчика разрешено Режим работы модуля USI. Эти биты определяют функционирование выходных 1 контактов модуля согласно Табл. 12.2. Эти биты не влияют на входы тактового сигнала и данных, поэтому прием данных, а также тактирование сдвигового регистра и счетчика внешним тактовым сигналом могут осуществляться, даже если выходы модуля отключены от контактов ввода/вывода микроконтроллера Выбор тактового сигнала. Эти биты определяют источник тактового сигнала для сдвигового регистра и счетчика модуля согласно Табл. 12.3 Строб тактового сигнала. Назначение этого бита зависит от установок битов 1 USICS1:0 (см. Табл. 12.3). Если выбран режим программного формирования тактового сигнала (USICS1:0 = 00), то установка данного бита в 1 вызывает сдвиг содержимого сдвигового регистра и инкрементирование счетчика. Сразу же после установки строба (в том же такте) изменяется состояние выхо+да модуля. В сдвиговый регистр вдвигается значение, считанное в предыдущем такте. При чтении бита возвращается 0. Если используется внешний тактовый сигнал (USICS1 = 1), то бит USICLK используется в качестве селектора — при установке его в 1 тактирование счетчика осуществляется при помощи бита USITC Переключение состояния вывода тактового сигнала. При записи в этот бит лог. 1 состояние линии USCK/SCL меняется на противоположное. Если формируемый сигнал необходимо вывести наружу, бит DDB4 регистра DDRE должен быть установлен в 1. При чтении бита USITC возвращается 0. Если используется внешний тактовый сигнал (USICS1 = 1) и бит USICLK установлен в 1, то запись лог. 1 в бит USITC вызывает инкрементирование счетчика. Благодаря этому обеспечивается раннее обнаружение завершения обмена при работе модуля в качестве ведущего
468 ¦ Глава 12. Универсальный последовательный интерфейс USI Таблица 12.2. Задание режима работы модуля USI USIWMl 0 0 1 1 USIWMO 0 1 0 1 Описание Выходы модуля и детектор состояния СТАРТ отключены. Выводы РЕ4...РЕ6 работа^] ют как линии ввода/вывода общего назначения Трехпроводный режим. Используются выводы DO, DI и USCK. Значение на выходе данных (DO) замещает значение соответствующего бита регистра порта. При этом направление передачи данных все равно определяется регистром DDRE. Если линия порта настроена на вход, управление подтяжкой осуществляется соответствующим битом регистра PORTE. Вход данных (DI) и линия тактового сигнала (USCK) не влияют на нормальное функционирование порта микроконтроллера. При работе в качестве ведущего генерация тактовых импульсов осуществляется переключением состояния бита регистра PORTE (для этого можно использовать бит USITC регистра USICR). При этом вывод микроконтроллера должен быть выходом (DDB4 = 1) Двухпроводным режим. Используются выводы SDA и SCL. Оба вывода являются двунаправленными и подключены к выходным драйверам с открытым стоком. Эти драйверы включаются установкой в 1 соответственно битов DDB5 и DDB4 регистра DDRE. После включения драйвер линии SDA формирует на ней НИЗКИЙ уровень, если на выходе сдвигового регистра или в бите PORTE5 присутствует 0. В противном случае линия высвобождается. Аналогично, драйвер линии SCL формирует на ней НИЗКИЙ уровень либо по сигналу от детектора состояния СТАРТ (для высвобождения линии следует сбросить флаг USISIF регистра USISR), либо если бит PORTE4 сброшен в 0. Таким образом, внутренние подтягивающие резисторы на линиях РЕ4 и РЕ5 в этом режиме отключены. Состояние контактов, соответствующих линиям SDA и SCL, может быть считано обычным образом Двухпроводным режим. Используются выводы SDA и SCL. Этот режим аналогичен предыдущему, за исключением того, что НИЗКИЙ уровень на линию SCL также выдается при переполнении счетчика. В этом состоянии линия удерживается до сброса флага переполнения USIOIF регистра USISR Таблица 12.3. Выбор тактовых сигналов модуля USI USICSl 0 0 0 1 1 1 1 USICSO 0 0 1 0 1 0 1 USICLK 0 1 X 0 0 1 1 Источник тактовых импульсов сдвигового регистра Тактовый сигнал отсутствует Программный строб (USICLK) Блок сравнения таймера/счетчика ТО Внешний сигнал, нарастающий фронт Внешний сигнал, спадающий фронт Внешний сигнал, нарастающий фронт Внешний сигнал, спадающий фронт Источник тактовых импульсов 4-битного счетчика Тактовый сигнал отсутствует Программный строб (USICLK) Блок сравнения таймера/счетчика ТО Внешний сигнал, оба фронта Внешний сигнал, оба фронта Программный строб (USITC) Программный строб (USITC)
12.2. Использование модуля USI ¦ 469 Формат регистра состояния USISR показан на Рис. 12.3, а описание его битов приведено в Табл. 12.4. Рис. 12.3. Формат регистра USISR Таблица 12.4. Биты регистра USISR Бит 7 6 5 4 3 2 1 0 Название USISIF USIOIF USIPF USIDC USICNT3 USICNT2 USICNT1 USICNT0 Описание Флаг прерывания по обнаружению состояния СТАРТ. В двухпроводном режиме этот флаг устанавливается в 1 при обнаружении на шине состояния СТАРТ. В остальных режимах флаг устанавливается при инкрементирова- нии 4-битного счетчика. Если бит USISIE регистра USICR и флаг I регистра SREG установлены, то при установке данного флага генерируется прерывание (это прерывание выводит микроконтроллер из любого «спящего» режима). Флаг сбрасывается программно записью в него лог. 1. Одновременно со сбросом флага высвобождается линия SCL Флаг прерывания по переполнению счетчика. Этот флаг устанавливается в 1 при переполнении 4-битного счетчика (при переходе от 15 к 0). Если бит USIOIE регистра USICR и флаг I регистра SREG установлены, то при установке данного флага генерируется прерывание, которое может использоваться для вывода микроконтроллера из «спящего» режима Idle. Флаг сбрасывается программно записью в него лог. 1. Одновременно со сбросом флага высвобождается линия SCL Флаг обнаружения состояния СТОП. В двухпроводном режиме этот флаг устанавливается в 1 при обнаружении на шине состояния СТОП. Флаг сбрасывается программно записью в него лог. 1 Флаг коллизии при выводе данных. Этот флаг устанавливается в 1, если значение 7-го бита сдвигового регистра отличается от состояния вывода микроконтроллера (действительно только в двухпроводном режиме). Данный флаг используется для реализации арбитража 4-битный счетчик. Эти биты отображают текущее значение счетчика. Это значение можно считывать и изменять в любой момент времени. Инкре- ментирование счетчика производится по каждому импульсу, формируемому либо аппаратно (детектором фронтов внешнего сигнала или выходом блока совпадения таймера/счетчика ТО), либо программно (с помощью битов USICLK или USITC регистра USISR). Источник тактового сигнала определяется состоянием битов USICS1:0 и USICLK регистра управления USICR (см. Табл. 12.3)
470 ¦ Глава 12. Универсальный последовательный интерфейс USI 12.3. Режимы работы модуля USI Как уже говорилось, модуль USI имеет два основных режима работы: • трехпроводный режим; • двухпроводный режим. Кроме того, отдельные узлы модуля могут использоваться и для других целей, не обязательно связанных с передачей данных. 12.3.1. Трехпроводный режим В трехпроводном режиме модуль USI может использоваться для обмена по шине SPI (режимы 0 или 1). Принципы работы этой шины были подробно рассмотрены в главе 10. Основное отличие модуля USI от стан- дартного модуля SPI заключается в отсутствии в модуле USI входа SS для выбора ведомого устройства. Однако при необходимости поддержка этого сигнала может быть легко реализована программно. Структура модулей USI при работе в трехпроводном режиме показана на Рис. 12.4. Рис. 12.4. Модули USI в трехпроводном режиме Сдвиговые регистры обоих модулей (ведущего и ведомого) соединяются между собой таким образом, чтобы после восьми импульсов на линии USCK содержимое сдвигового регистра ведущего оказалось в сдвиговом регистре ведомого, и наоборот. По этому же тактовому сигналу инкремен- тируется 4-битный счетчик модуля USI. Соответственно для определения момента завершения обмена можно использовать флаг прерывания по переполнению счетчика (USIOF). Тактовый сигнал формируется ведущим
12.3. Режимы работы модуля USI ¦ 471 устройством. Состояние вывода USCK изменяется переключением бита PORTE4 или же посредством записи лог. 1 в бит USITC регистра USICR. Временные диаграммы обмена в трехпроводном режиме представлены на Рис. 12.5. Рис. 12.5. Временные диаграммы обмена в трехпроводном режиме Верхний график сигнала USCK соответствует 0-му режиму внешнего тактового сигнала (USICS0 = 0). В этом режиме данные, поступающие на вход D1, считываются по нарастающему фронту сигнала USCK, а изменение состояния выхода DO (сдвиг содержимого сдвигового регистра) производится по спадающему фронту. Нижний график сигнала USCK соответствует 1-му режиму внешнего тактового сигнала (US1CS0 = 1). В этом режиме назначения фронтов тактового сигнала меняются на противоположные: входные данные считываются по спадающему фронту, а выходные данные выводятся по нарастающему фронту. Указанные режимы соответствуют 0-му и 1-му режимам SPI. Таким образом, обмен в режиме SPI выполняется в несколько этапов: 1. Оба устройства подготавливают выходные данные, включают выходные драйверы и сбрасывают содержимое своих 4-битных счетчиков (точки А и В на Рис. 12.5). Подготовка данных заключается в загрузке их в сдвиговый регистр, а выходные драйверы включаются установкой соответствующего бита регистра направления передачи данных. Порядок событий А и В может быть любым, важно только, чтобы интервал между последним из событий и началом считывания данных был не меньше половины периода сигнала USCK. 2. Ведущий формирует импульсы тактового сигнала, программно изменяя состояние линии USCK (точки С и D на Рис. 12.5). Значение бита данных на входах (DI) ведущего и ведомого устройства считы- вается по первому фронту сигнала USCK (точка С), а состояние выхода (DO) изменяется по противоположному фронту (точка D). Ин- крементирование счетчика производится по каждому фронту.
472 ¦ Глава 12. Универсальный последовательный интерфейс USI 3. Для передачи байта 2-й этап повторяется 8 раз. 4. После 8-го импульса тактового сигнала происходит переполнение счетчика, указывающее на завершение обмена, при этом принятый байт находится в регистре данных USIDR. В заключение приведем примеры трех подпрограмм, демонстрирующих использование модуля USI в трехпроводном режиме. Первая подпрограмма реализует передачу одного байта данных ведущим устройством. Передаваемый байт содержится в регистре R16, по окончании обмена в этом же регистре находится принятый байт. Предполагается, что выводы DO и USCK уже настроены на выход. SPITransfer: sts USIDR,rl6 ; Загружаем сдвиговый регистр ldi rl6, A«USI0IF) ; Сбрасываем флаг прерывания sts USISR,rl6 ; и счетчик SPITransfer_loop: ldi rl6, A«USIWM0) I A«USICS1) I A«USICLK) I A«USITC) sts USICR,rl6 ; Задаем режим и переключаем USCK Ids rl6,USISR sbrs rl6,USI0IF ; Проверяем флаг переполнения rjmp SPITransfer_loop Ids rl6,USIDR ; Запоминаем принятый байт ret Вторая подпрограмма выполняет те же самые функции, но при этом обеспечивается максимально возможная скорость передачи (fSCK =/ск/4). SPITransfer_Fast: sts USIDR,rl6 ldi rl6, A«USIWM0) I A«USICS0) I A«USITC) ldi rl7, A«USIWM0) I A«USICS1) I A«USITC) I A«USICLK) sts USICR,rl6 ; MSB sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR/rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 sts USICR,rl7 sts USICR,rl6 ; LSB sts USICR,rl7 Ids rl6,USIDR ret
12.3. Режимы работы модуля USI ¦ 473 Третья подпрограмма демонстрирует работу модуля USI в качестве ведомого SPI-устройства: init: ldi rl6, A«USIWM0) I A«USICS1) sts USICR,rl6 ; Выполняется только один раз SlaveSPITransfer: sts USIDR,rl6 ldi rl6, A«USI0IF) sts USISR,rl6 SlaveSPITransfer_loop: Ids rl6#USISR sbrs rl6,USIOIF rjmp SlaveSPITransfer_loop Ids rl6,USIDR ret Как и в первой подпрограмме, предполагается, что выводы DO и USCK уже настроены на выход. Передаваемый байт содержится в регистре R16, по окончании обмена в этом же регистре находится байт, посланный ведущим. 12.3.2. Двухпроводный режим В двухпроводном режиме модуль USI может использоваться для обмена по шине TWI A2С), принципы работы и протокол которой были подробно рассмотрены в главе 11. В отличие от стандартных приемо-передат- чиков TWI, в модуле USI отсутствует ограничение скорости нарастания выходных и фильтрация входных сигналов. Структура модулей USI при работе в двухпроводном режиме показана на Рис. 12.6. Основное отличие между ведущим и ведомым устройствами заключается в том, что тактовый сигнал генерируется ведущим устройством, а блок управления тактовым сигналом задействован только в ведомом. Формирование импульсов тактового сигнала осуществляется программным изменением бита PORTE4 регистра PORTE, в то время как сдвиг содержимого сдвигового регистра осуществляется аппаратно в обоих устройствах (в двухпроводном режиме эта операция выполняется только по спадающему фронту тактового сигнала). Поскольку ведомое устройство может формировать циклы ожидания, удерживая на линии SCL НИЗКИЙ уровень, ведущее устройство всегда должно контролировать состояние линии SCL после формирования нарастающего фронта. Завершение цикла обмена можно определить по переполнению 4-битного счетчика модуля. Обратите внимание, что модули USI реализуют обмен только на физическом уровне, а для формирования потока данных необходимо использовать протокол, подобный рассмотренному в главе 11.
474 ¦ Глава 12. Универсальный последовательный интерфейс USI Рис, 12.6. Модули USI в двухпроводном режиме Временные диаграммы обмена в двухпроводном режиме представлены на Рис. 12.7. Рис. 12.7. Временные диаграммы обмена в двухпроводном режиме Обмен в режиме TWI выполняется в несколько этапов: 1. Ведущее устройство формирует на шине состояние СТАРТ, выдавая на линию SDA НИЗКИЙ уровень при ВЫСОКОМ уровне на линии SCL (точка А на Рис. 12.7). Выдача на линию SDA НИЗКОГО уровня может быть осуществлена либо записью в сдвиговый регистр значения со сброшенным 7-м битом, либо сбросом 5-го бита регистра PORTE. Разумеется, бит DDE7 регистра DDRE при этом должен быть установлен в 1. Это состояние детектируется схемой обнаружения состояния СТАРТ ведомого модуля (Рис. 12.8), в результате чего устанавливается флаг USISIF и, при необходимости, генерируется прерывание.
12.3. Режимы работы модуля USI ¦ 475 2. Помимо установки флага, схема обнаружения состояния СТАРТ удерживает на линии SCL НИЗКИЙ уровень после формирования на ней ведущим спадающего фронта (точка В). Это позволяет выполнить ведомому выход из «спящего» режима или завершить выполнение других операций перед инициализацией сдвигового регистра для приема адреса, которая заключается в сбросе флага USISIF и счетчика. 3. Ведущий выдает на линию SDA первый бит байта и высвобождает линию SCL, формируя на ней нарастающий фронт (точка С). По этому фронту ведомое устройство считывает значение бита и помещает его в сдвиговый регистр. 4. После передачи восьми битов (адрес ведомого устройства плюс бит направления передачи данных) происходит переполнение счетчика ведомого устройства, в результате чего последнее выставляет на линию SCL НИЗКИЙ уровень (точка D). Если адрес, посланный ведущим, не совпадает с адресом ведомого, то ведомый высвобождает линию SCL и переходит к ожиданию появления на шине нового состояния СТАРТ. 5. Если же ведомый распознает свой адрес, то во время передачи бита квитирования он выставляет на линию SDA НИЗКИЙ уровень, после чего снова удерживает на линии SCL напряжение НИЗКОГО уровня (т. е. перед высвобождением линии SCL в момент D необходимо записать в счетчик значение 14). В зависимости от значения бита направления передачи данных либо ведущее, либо ведомое устройство включает выходные буферы. Если данный бит установлен, выполняется операция чтения (линией SDA управляет ведомое устройство). После выдачи подтверждения ведомое устройство снова может выставить на линии SCL НИЗКИЙ уровень (точка Е). 6. Далее выполняется пересылка в заданном направлении требуемого числа байтов данных до тех пор, пока ведущее устройство не сформирует на шине состояние СТОП или ПОВСТАРТ Если по каким-либо причинам модуль не может продолжать прием данных, то после приема последнего байта он формирует неподтверждение (NACK), выдавая НИЗКИЙ уровень на линию SDA во время передачи бита квитирования. На Рис. 12.8 приведена принципиальная схема узла обнаружения состояния СТАРТ модуля USI. Поскольку этот узел является асинхронным, он может использоваться для вывода микроконтроллера из «спящих» режимов, таких как Power Down. Единственное, на что нужно обратить внимание, — время запуска тактового генератора не должно превышать максимально возможную длительность сигнала НИЗКОГО уровня на линии SCL, если эта величина нормируется в используемом протоколе. XI
476 ¦ Глава 12. Универсальный последовательный интерфейс USI Рис. 12.8. Схема обнаружения состояния СТАРТ 12.3.3. Альтернативное использование модуля USI Как уже упоминалось, модуль USI может использоваться не только для организации обмена по двух- или трехпроводной линии. Ниже перечислены варианты альтернативного использования узлов модуля USI. • Полудуплексный асинхронный приемо-передатчик Используя сдвиговый регистр модуля в трехпроводном режиме, можно реализовать дополнительный модуль UART, более компактный и более быстродействующий, нежели при чисто программной его реализации. • 4-битный счетчик Встроенный 4-битный счетчик модуля USI можно использовать как автономный счетчик с возможностью генерации прерывания по переполнению. • 12-битный таймер/счетчик Объединив 4-битный счетчик модуля USI с таймером/счетчиком ТО, получим 12-битный счетчик. • Формирование внешнего прерывания по фронту При записи в счетчик максимального значения ($0F) он может использоваться для генерации внешнего прерывания. Этот режим работы задается установкой бита USICS1 регистра USICR в 1. • Формирование программного прерывания Прерывание по переполнению 4-битного счетчика можно использовать в качестве программного прерывания, формируемого стробом тактового сигнала.
Универсальный синхронный/асинхронный приемо-передатчик 13.1. Общие сведения Все без исключения микроконтроллеры семейства Mega имеют в своем составе от одного до четырех модулей универсального синхронно/асинхронного приемо-передатчика (USART). Более того, в некоторых новых моделях модули USART могут использоваться в качестве ведущего шины SPI. Какие именно модули реализованы в отдельных микроконтроллерах, можно определить по Табл. 13.1. Таблица 13.1. Модули USART в микроконтроллерах семейства Mega Модуль приемо-передатчика USART0 USART1 USART2 USART3 ATmega8515x/8535x • ATmega8x/16x/32x • ATmega64x/128x • • ATmega48x/88x/168x • h ATmegal62x • • ATmegal64x/324x/644x • >) • ¦> ATmegal65x, ATmega325x/350x, ATmega645x/6450x • ATmega640x/1280x/1281x • » • »> • ') • » ATmega2560x/2561x * *" !) Может работать в режиме SPL Все модули приемо-передатчиков обеспечивают полнодуплексный обмен по последовательному каналу, при этом скорость передачи данных может варьироваться в довольно широких пределах. Длина посылки может составлять от 5 до 9 битов. Во всех модулях в обязательном порядке присутствуют схемы контроля и формирования бита четности. Модули USART, реализованные в микроконтроллерах семейства, могут обнаруживать следующие внештатные ситуации: • переполнение; • ошибка кадрирования; • неверный старт-бит. ГЛАВА 13
478 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчык Для уменьшения вероятности сбоев в модулях также реализована такая полезная функция, как фильтрация помех. Для взаимодействия с программой предусмотрены три прерывания, запрос на генерацию которых формируется при наступлении следующих событий: «передача завершена», «регистр данных передатчика пуст» и «прием завершен». Как обычно, выводы микроконтроллера, используемые модулями USART, являются линиями портов ввода/вывода общего назначения. Все выводы микроконтроллеров, используемые модулями, приведены в Табл. 13.2. Там же указаны функции этих выводов. Таблица 13.2, Выводы, используемые модулями USART Название * L* *-< ГО «Л Ю X §f §> $ ЬШ|1 RXD RXDO TXD TXDO XCK XCKO RXD1 TXD1 XCK1 RXD2 TXD2 XCK2 RXD3 TXD3 XCK3 PDO - PD1 - PD4 - - - - - PDO - PD1 - PBO - - - - - PDO - PD1 - PD4 - - - - - OO VA * 2 > <g<g X \ "^ ^^ X OO X <** «^^ гч <s oo ^ rr> ^° \ \ \ X ^ x'^X* X X X ГЧ \ **t W) tn in VO 4f OO V© V© v© f4 -ЧГ ^n vo 4t *-< ^ nrivO CQ 1 Св Св Л Л 1 Л Л Л cj a a о v 1 й> 4> о> PDO - PD1 - PBO - - - - - - PEO - PE1 - PE2 PD2 PD3 PD5 - PDO - PD1 - PD4 - - - - - - PDO - PD1 PD4 - PB2 PB3 PD2 - - PDO - PD1 - PBO PD2 PD3 PD4 - PEO - PE1 - PE2 - - - - - X о VO m о 00 «4 X о тг VO 03 W) a» i - PEO - PE1 - PE2 PD2 PD3 PD5 PHO PHI PH2 PJO PJ1 PJ2 X VO IT) So 03 CUD 1 - PEO - PE1 - PE2 PD2 PD3 PD5 - - - - - - Описание Вход USARTO Выход USARTO Вход/выход вне- 1 шнего тактового сигнала USARTO | Вход USART1 Выход USART1 Вход/выход вне- 1 шнего тактового сигнала USART 1 Вход USART2 Выход USART2 J Вход/выход внешнего тактового сигнала USART2 Вход USART3 Выход USART3 Вход/выход внешнего тактового сигнала USART3
13.2. Использование модулей USART ¦ 479 13.2. Использование модулей USART Упрощенная структурная схема одного модуля USART приведена на Рис. 13.1. Рис. 13.1. Структурная схема модуля USART Как показано на рисунке, модуль состоит из трех основных частей: блока тактирования, блока передатчика и блока приемника. Блок тактирования модулей USART содержит схему синхронизации, которая используется при работе в синхронном режиме, и контроллер скорости передачи. Блок передатчика включает одноуровневый буфер, сдвиговый регистр, схему формирования бита четности и схему управления. Блок приемника, в свою очередь, содержит схемы восстановления тактового сигнала и дан-
480 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик ных, схему контроля четности, двухуровневый буфер, сдвиговый регистр, а также схему управления. Буферные регистры приемника и передатчика располагаются по одному адресу пространства ввода/вывода и обозначаются как регистр данных UDR (UDRfl). В этом регистре хранятся младшие 8 битов принимаемых и передаваемых данных. При чтении регистра UDR выполняется обращение к буферному регистру приемника, при записи — к буферному регистру передатчика. Размещение регистров данных UDR для различных моделей микроконтроллеров приведено в Табл. 13.3. Таблица 133. Размещение регистров данных модулей USART Регистр UDR UDR0 UDR1 UDR2 UDR3 Адрес $0С ($2С) ($С6) $0С ДОС) ($С6) $03 ($23) ДОС) ($СЕ) ($D6) ($136) ATmega8515x/8535x • ATmega8x/16x/32x • ATmega64x/128x • • ATmega48x/88x/168x • ATmegal62x • • ATmegal64x/324x/644x • • ATmegal65x, ATmega325x/3250x, ATmega645x/6450x • ATmega640x/1280x/2560x • • • • ATmegal281x/2561x • • Описание Регистр данных USART Регистр данных USARTO Регистр данных USART1 Регистр данных USART2 Регистр данных USART3 В модулях USART буфер приемника является двухуровневым (FIFO-буфер), изменение состояния которого происходит при любом обращении к регистру UDR. В связи с этим не следует использовать регистр UDR в качестве операндов команд типа «чтение/модификация/запись» (SBI и CBI) Кроме того, следует быть очень аккуратными при использо-
13.2. Использование модулей USART ¦ 481 вании команд проверки SBIC и SBIS, поскольку они также изменяют состояние буфера приемника. Для управления модулями USART используются три регистра: UCSRA (UCSRM), UCSRB (UCSR/iB) и UCSRC (UCSR/*C). Адреса этих регистров указаны в Табл. 13.4. Таблица 13.4. Регистры управления и состояния модулей USART Регистр UCSRA UCSRB UCSRC UCSR0A UCSR0B UCSR0C UCSR1A UCSR1B Адрес $0В ($2В) $0А ($2А) $20 ($40) $0В ($2В) ($С0) $0А ($2А) ($С1) $20 ($40) ($95) ($С2) $02 ($22) ($9В) ($С8) $01 ($21) ($9А) ($С9) ATmega8515x/8535x • • • ATmega8x/16x/32x • • • ATmega64x/128x • • • • • ATmega48x/88x/168x • • • ATmegal62x • • • • • ATmegal64x/324x/644x • • • • • ATmegal65x, ATmega325x/3250x, ATmega645x/6450x • • • ATmega640x/1280x/2560x • • • • • ATmegal281x/2561x • • • • • Описание Регистр управления А Регистр управления В Регистр управления С Регистр А управления USART0 Регистр В управления USART0 Регистр С управления USART0 Регистр А управления USART1 Регистр В управления USART1
482 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик (продолжение) Регистр UCSR1C UCSR2A UCSR2B UCSR2C UCSR3A UCSR3B UCSR3C Адрес $ЗС ($5С) ($9D) ($СА) ($D0) ($D1) ($D2) ($130) ($131) ($132) ATmega8515x/8535x Alhiega8x/16x/32x ATmega64x/128x • ATmega48x/88x/168x ATmegal62x • ATmegal64x/324x/644x • ATmegal65x, ATmega325x/3250x, ATmega645x/6450x ATmega640x/1280x/2560x • • • • • • • ATmegal281x/2561x • Описание Регистр С управления USART1 Регистр А управления USART2 ] Регистр В управления USART2 Регистр С управления USART2 Регистр А управления USART3 Регистр В управления USART3 Регистр С управления USART3 Формат регистров UCSRA (UCSRaiA), UCSRB (UCSR/jB) и UCSRC (UCSRajC) приведен на Рис. 13.2...13.4, а значение битов этих регистров описано в Табл. 13.5...13.7 соответственно. Рис. 13.2. Формат регистров UCSRA(UCSR/*A)
13.2. Использование модулей USART ¦ 483 Таблица 13.5. Биты регистров UCSRA (UCSR/iA) [ Бит 7 6 5 4 3 2 1 0 Название RXC (RXOj) ТХС (ТХСл) UDRE (UDREw) FE (FE/i) DOR (DORrt) UPE (UPE/i) U2X (U2X/i) MPCM (МРСМл) Описание Флаг завершения приема. Флаг устанавливается в 1 при наличии непрочитанных данных в буфере приемника (регистр данных UDR). Сбрасывается флаг аппаратно после опустошения буфера. Если бит RXCIE (RXCIErt) регистра UCSRB (UCSR/jB) установлен, то при установке флага генерируется запрос на прерывание «прием завершен» Флаг завершения передачи. Флаг устанавливается в 1 после передачи всех битов посылки из сдвигового регистра передатчика при условии, что в регистр данных UDR не было загружено новое значение. Если бит TXCIE (ТХСШл) регистра UCSRB (UCSR/?B) установлен, то при установке флага генерируется прерывание «передача завершена». Флаг сбрасывается аппаратно при выполнении подпрограммы обработки прерывания или программно, записью в него лог. 1 Флаг опустошения регистра данных. Данный флаг устанавливается в 1 при пустом буфере передатчика (после пересылки байта из регистра данных UDR в сдвиговый регистр передатчика). Установленный флаг означает, что в регистр данных можно загружать новое значение. Если бит UDRIE (UDRIErt) регистра UCSRB (UCSR/iB) установлен, генерируется запрос на прерывание «регистр данных пуст». Флаг сбрасывается аппаратно, при записи в регистр данных Флаг ошибки кадрирования. Флаг устанавливается в 1 при обнаружении ошибки кадрирования, т. е. если первый стоп-бит принятой посылки равен 0. Флаг сбрасывается при приеме стоп-бита, равного 1 Флаг переполнения. Флаг устанавливается в 1, если в момент обнаружения нового старт-бита в сдвиговом регистре приемника находится последнее принятое слово, а буфер приемника полон (содержит два байта). Флаг сбрасывается при пересылке принятых данных из сдвигового регистра приемника в буфер Флаг ошибки контроля четности. Флаг устанавливается в 1, если в данных, находящихся в буфере приемника, выявлена ошибка контроля четности. При отключенном контроле четности этот бит постоянно сброшен в 0 Удвоение скорости обмена. Если этот бит установлен в 1, то коэффициент деления предделителя контроллера скорости передачи уменьшается с 16 до 8, удваивая тем самым скорость асинхронного обмена по последовательному каналу. Этот бит используется только при асинхронном режиме работы и в синхронном режиме должен быть сброшен Режим мультипроцессорного обмена. Если этот бит установлен в 1, ведомый микроконтроллер ожидает приема кадра, содержащего адрес. Кадры, не содержащие адреса устройства, игнорируются Примечание, п = 0,1,2 или 3.
484 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик Рис. 13.3. Формат регистров UCSRB (UCSRaB) Таблица 13.6. Биты регистров UCSRB (UCSR/iB) Бит 7 6 5 4 3 2 1 0 Название RXCIE (RXCIEw) TXCIE (ТХС1Ел) UDRIE (UDRIE/i) RXEN (RXENa?) TXEN (TXEN/i) UCSZ2 (UCSZ«2) RXB8 (RXB8aj) TXB8 (ТХВ8л) Описание Разрешение прерывания по завершении приема. Если данный бит установлен в 1, то при установке флага RXC (RXO) регистра UCSRA (UCSRM) генерируется прерывание «прием завершен» (если флаг I регистра SREG установлен в1) Разрешение прерывания по завершении передачи. Если данный бит установлен в 1, то при установке флага ТХС (ТХСл) регистра UCSRA (UCSR/iA) генерируется прерывание «передача завершена» (если флаг 1 регистра SREG установлен в 1) Разрешение прерывания при очистке регистра данных UART. Если данный бит установлен в 1, то при установке флага UDRE (UDREa?) регистра UCSRA (UCSR/jA) генерируется прерывание «регистр данных пуст» (если флаг I регистра SREG установлен в 1) Разрешение приема. При установке этого бита в 1 разрешается работа приемника USART и переопределяется функционирование вывода RXD (RXDrt). При сбросе бита RXEN (RXENw) работа приемника запрещается, а его буфер сбрасывается. Значения флагов ТХС(ТХСя), DOR (DOR/i) и FE (FE«) при этом становятся недействительными Разрешение передачи. При установке этого бита в 1 разрешается работа передатчика UART и переопределяется функционирование вывода TXD (TXDaj). Если бит сбрасывается в 0 во время передачи, то выключение передатчика произойдет только после завершения передачи данных, находящихся в сдвиговом регистре и буфере передатчика Формат посылок. Этот бит совместно с битами UCSZ1:0 (UCSZwl:0) регистра UCSRC (UCSR/?C) используется для задания размера слов данных, передаваемых по последовательному каналу 8-й бит принимаемых данных. При использовании 9-битных слов данных этот бит содержит значение старшего бита принятого слова. Содержимое этого бита должно быть считано до прочтения регистра данных UDR 8-й бит передаваемых данных. При использовании 9-битных слов данных содержимое этого бита является старшим битом передаваемого слова. Требуемое значение должно быть занесено в этот бит до загрузки байта данных в регистр UDR Примечание, п = 0,1, 2 или 3.
13.2. Использование модулей USART ¦ 485 Рис. 13.4. Формат регистров UCSRC (UCSRaiC) Таблица 13.7. Биты регистров UCSRC (UCSR/iC) Бит 7 6 5 4 3 2 1 Название UMSEbil URSEL0 (URSEL/i) UMSEL (UMSELaj) UMSEL/iO UPM1 (UPM/il) UPMO (UPMaiO) USBS (USBSai) UCSZ1 (UCSZwl) ucszo (UCSZajO) Описание Режим работы USART (модели 48х/88х/168х, 164х/324х/644х и 640х/1280х/1281х/2560х/2561х). Совместно с битом UMSEb/O определяет режим работы модуля USART Выбор регистра. Этот бит определяет, в какой из регистров модуля производится запись. Если бит установлен в 1, обращение производится к регистру UCSRC (UCSR/jC). Если же бит сброшен в 0, обращение производится к регистру UBRRH (UBRR/jH). Подробнее — см. следующий подраздел Режим работы USART. Если бит сброшен в 0, то модуль работает в асинхронном режиме. Если бит установлен в 1, то модуль работает в синхронном режиме Режим работы USART (модели 48х/88х/168х, 164х/324х/644х и 640х/1280х/1281х/2560х/2561х). Совместно с битом UMSEbil определяет режим работы модуля USART Режим работы схемы контроля и формирования бита четности. Эти биты определяют функционирование схем контроля и формирования бита четности (см. подраздел 13.2.2) Количество стоп-битов. Этот бит определяет количество стоп-битов, посылаемых передатчиком. Если бит сброшен в 0, передатчик посылает 1 стоп-бит, если установлен в 1, то 2 стоп-бита. Для приемника содержимое этого бита безразлично Формат посылок. Совместно с битом UCSZ2 (UCSZw2) регистра UCSRB (UCSR/jB) эти биты определяют количество битов данных в посылках (размер слова)
486 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик (продолжение) Бит 0 Название UCPOL (UCPOL/i) Описание Полярность тактового сигнала. Значение этого бита определяет момент выдачи и считывания данных на выводах модуля. Бит используется только при работе в синхронном режиме. При работе в асинхронном режиме он должен быть сброшен в 0. UCPOL (UCPOLw) 0 1 Выдача данных на вывод TXD (ТХЛл) Спадающий фронт ХСК (ХСКл) Нарастающий фронт ХСК (ХСКл) Считывание данных с вывода RXD(RXDw) Нарастающий фронт ХСК (ХСКл) Спадающий фронт ХСК (ХСКл) 0 Зарезервирован в моделях ATmega64x/128x. Примечание, п = 0,1,2 или 3. Обратите внимание на то, что в моделях ATmega48x/88x/168x, ATmegal64x/324x/644x и ATmega640x/1280x/1281x/2560x/2561x для задания режима работы используется не один бит регистра UCSRaC, а два — UMSELfll:0. Зависимость режима работы модуля USART от установок этих битов приведена в Табл. 13.8. Таблица 13.8. Управление режимом работы модулей USART моделей ATtaega48x/88x/168x,AThiegal64x/324x/644x HATVnega640x/1280x/1281x/2560x/2561x UMSEbil 0 0 1 1 UMSEL/iO 0 1 0 1 Режим работы Асинхронный USART Синхронный USART Зарезервировано Ведущий шины SPI 13.2.1. Скорость приема/передачи В асинхронном режиме, а также в синхронном режиме при работе в качестве ведущего скорость приема и передачи данных задается контроллером скорости передачи, работающим как делитель системного тактового сигнала с программируемым коэффициентом деления. Коэффициент определяется содержимым регистра контроллера UBRR (UBRR/*). В блок приемника сформированный сигнал поступает напрямую, а в блок передатчика — через дополнительный делитель, коэффициент деления которого B, 8 или 16) зависит от режима работы модуля USART.
13.2. Использование модулей USART ¦ 487 Регистр UBRR является 12-битным и физически размещается в двух регистрах ввода/вывода. Адреса и названия этих регистров для различных моделей микроконтроллеров приведены в Табл. 13.9. Таблица 13.9. Размещение регистров контроллера скорости передачи Модель \к1ш$&5\5х/Ъ5Ш" ATmega8x/16x/32x ° ATmega64x/128x ATmega48x/88x/168x ATmegal62x !) ATmegal64x/324x/644x ATmega 165x/325x/3250x/645x/6450x ATmega640x/1280x/2560x ATmegal281x/2561x Регистры UBRRH:UBRRL UBRRH:UBRRL UBRR0H:UBRR0L UBRR1H:UBRR1L UBRR0H:UBRR0L UBRR0H:UBRR0L UBRR1H:UBRR1L UBRR0H:UBRR0L UBRR1H:UBRR1L UBRR0H:UBRR0L UBRR0H:UBRR0L UBRR1H:UBRR1L UBRR2H:UBRR2L UBRR3H:UBRR3L UBRR0H:UBRR0L UBRR1H:UBRR1L Адрес $20 ($40):$09 ($29) $20 ($40):$09 ($29) ($90):$09 ($29) ($98):($99) ($C5):($C4) $20 ($40):$09 ($29) $3C ($5C):$00 ($20) ($C5):($C4) ($CD):($CC) ($C5):($C4) ($C5):($C4) ($CD):($CC) ($D5):($D4) ($135):($134) ($C5):($C4) ($CD):($CC) X) В этих моделях регистр UBRRH (UBRR/jH) размещается по тому же адресу, что и регистр UCSRC (UCSR/jC). Обратите внимание на то, что в моделях ATmega8515x/8535x, ATmega8x/16x/32x и ATmegal62x регистр UBRRH размещается по тому же адресу, что и регистр управления UCSRC. Поэтому при обращении по этим адресам необходимо выполнить ряд дополнительных действий для выбора конкретного регистра. При записи регистр определяется состоянием старшего бита записываемого значения URSEL. Если этот бит сброшен в 0, изменяется содержимое регистра UBRRH. Если же старший бит значения установлен в 1, изменяется содержимое регистра управления UCSRC. Приведенные ниже фрагменты программ иллюстрируют сказанное:
488 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик Пример на ассемблере ; Записать 2 в UBRRH ldi г16,0х02 out UBRRH,rl6 ; Установить биты USBS и UCSZ1 регистра UCSRC ldi rl6(l«URSEL) I A«USBS) I A«UCSZ1) out UCSRC,rl6 Пример на Си /* Записать 2 в UBRRH */ UBRRH = 0x02; /* Установить биты USBS и UCSZ1 регистра UCSRC */ UCSRC = A«URSEL) I A«USBS) I A«UCSZ1) ; Для выбора регистра при чтении используется временная последовательность. При первом обращении по указанным адресам возвращается значение регистра UBRRH (UBRRH/?). При повторном обращении по этим адресам в следующем такте возвращается значение регистра UCSRC (UCSRflC), как показано в приведенных ниже примерах. Прерывания при выполнении этой последовательности команд должны быть запрещены. Пример на ассемблере USART_ReadUCSRC: ; Прочитать регистр UCSRC in r16,UBRRH in r16,UCSRC ret ; Значение регистра UCSRC возвращается ; в регистре г1б Пример на Си unsigned char USART_ReadUCSRC(void) { unsigned char ucsrc; ucsrc = UBRRH; ucsrc = UCSRC; return ucsrc; } При работе в асинхронном режиме скорость обмена определяется не только содержимым регистра UBRR, но и состоянием бита U2X (ШХя)
13.2. Использование модулей USART ¦ 489 Это ограничение связано с тем, что сигнал с вывода ХСК (ХСКя) сначала синхронизируется с тактовой частотой микроконтроллера, а затем проходит через детектор фронтов. Задержка сигнала при прохождении этих узлов равна двум тактам. регистра UCSRA (UCSR/zA). Если этот бит установлен в 1, коэффициент деления предделителя уменьшается в два раза, а скорость обмена соответственно удваивается. При работе в синхронном режиме этот бит должен быть сброшен. Итак, скорость обмена определяется следующим образом: • асинхронный режим (обычный, \J2Xn = 0) • асинхронный режим (ускоренный, ШХл = 1) • синхронный режим ведущего где BAUD — скорость передачи, бит/с; Уск — тактовая частота микроконтроллера; UBRR — содержимое регистра контроллера скорости передачи @...4095). В качестве примера в Табл. 13.10 приведены значения регистра UBRR, позволяющие получить стандартные для асинхронного режима скорости передачи при использовании различных резонаторов, а также величины ошибок получаемых значений относительно стандартных. Значения регистра UBRR, при которых получаемая скорость передачи отличается от требуемого значения меньше чем на 0.5%, выделены в таблице жирным шрифтом. Значения, дающие бблыиую ошибку, также можно использовать, однако следует иметь в виду, что при этом снижается помехозащищенность линии передачи. При работе в синхронном режиме в качестве ведомого скорость приема и передачи определяется частотой сигнала, поступающего на вывод ХСК (ХСКя). Частота этого сигнала должна удовлетворять условию
Таблица 13.10. Пример установок регистра UBRR
(продолжение)
492 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик 13.2.2. Формат кадра Под кадром в данном случае понимается совокупность одного слова данных и сопутствующей информации (см. Рис. 13.5). Кадр начинается со старт-бита, за которым следует младший бит слова данных. После старшего бита слова данных следует один или два стоп-бита. Если включена схема формирования бита четности, он включается между старшим битом слова данных и первым стоп-битом. Рис. 13.5. Формат кадра Формат кадра определяется различными битами регистров UCSRB (UCSRuB) и UCSRC (UCSR//C). В частности, размер слова данных определяется битами UCSZ2...UCSZ0 (UCSZrt2...UCSZflO) в соответствии с Табл. 13.11. Таблица 13.11. Определение размера слова данных UCSZ2 (UCSZw2) 0 0 0 0 1 1 1 1 UCSZ1 (UCSZwl) 0 0 1 1 0 0 1 1 ucszo (UCSZwO) 0 1 0 1 0 1 0 1 Размер слова данных 5 бит 6 бит 7 бит 8 бит Зарезервировано Зарезервировано Зарезервировано 9 бит
13.2. Использование модулей USART ¦ 493 Выбор количества стоп-битов осуществляется с помощью бита USBS (USBSfl) регистра UCSRC (UCSR^C). Если этот бит сброшен в 0, блок передатчика формирует 1 стоп-бит в конце посылки. В противном случае, если бит установлен в 1, блок передатчика формирует 2 стоп-бита. Следует отметить, что приемником второй стоп-бит игнорируется, и соответственно ошибки кадрирования выявляются только для первого стоп-бита. Биты UPM1:UPM0 (UPM/il:UPM/iO) регистра UCSRC (UCSRa/C) определяют функционирование схемы контроля четности модулей USART согласно Табл. 13.12. Таблица 13.12. Управление контролем четности UPM1 (UPM/il) 0 0 1 1 UPMO (UPMwO) 0 1 0 1 Режим работы схемы Выключена Зарезервировано Включена, проверка на четность (even parity) Включена, проверка на нечетность (odd parity) Если контроль четности включен, бит четности, как уже было сказано, вставляется передатчиком между старшим битом передаваемых данных и первым стоп-битом. 13.2.3. Передача данных Работа передатчика разрешается установкой в 1 бита TXEN (TXENfl) регистра UCSRB (UCSRrtB). При установке бита вывод TXD (TXDn) подключается к передатчику USART и начинает функционировать как выход независимо от установок регистров управления портом. Если используется синхронный режим работы, то переопределяется также функционирование вывода ХСК (ХСКл). Передача инициируется записью передаваемых данных в буферный регистр передатчика — регистр данных UDR (UDRa). После этого данные пересылаются из регистра UDR (UDR/?) в сдвиговый регистр передатчика. Одновременно, если используются 9-битные данные, значение бита ТХВ8 Значение бита четности получается путем выполнения операции «Исключающее ИЛИ» над всеми битами передаваемого слова данных. Если используется проверка на нечетность (odd parity), полученный результат инвертируется:
494 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик (ТХВ8л) регистра UCSRB (UCSR/iB) копируется в 9-й бит сдвигового регистра. При этом возможны два варианта: • запись в регистр UDR осуществляется в тот момент, когда передатчик находится в состоянии ожидания (предыдущие данные уже переданы). В этом случае данные пересылаются в сдвиговый регистр сразу же после записи в регистр UDR; • запись в регистр UDR осуществляется во время передачи. В этом случае данные пересылаются в сдвиговый регистр после передачи последнего стоп-бита текущего кадра. Очевидно, что 9-й бит данных должен быть загружен в бит ТХВ8 (ТХВ8я) до записи младшего байта слова в регистр данных. После пересылки слова данных в сдвиговый регистр флаг UDRE (UDREfl) регистра UCSRA (UCSR/jA) устанавливается в 1, что означает готовность передатчика к получению нового слова данных. В этом состоянии флаг остается до следующей записи в буфер Одновременно с пересылкой в регистре формируется служебная информация — старт-бит, возможный бит четности, а также один или два стоп-бита. После загрузки сдвигового регистра его содержимое начинает сдвигаться вправо и поступать на вывод TXD (TXDn) в порядке, рассмотренном в подразделе 13.2.3. Скорость сдвига определяется настройками контроллера тактовых сигналов. В синхронном режиме изменение состояния вывода TXD (TXDn) происходит по одному из фронтов сигнала ХСК (ХСКп). Если бит UCPOL (UCPOLaj) регистра UCSRC (UCSRazC) сброшен в 0, изменение состояния вывода происходит по нарастающему фронту сигнала, если же установлен в 1 — по спадающему фронту, как показано на Рис. 13.6. Рис. 13.6, Временные диаграммы для синхронного режима работы USART Если во время передачи в регистр UDR было записано новое слово данных, то после передачи последнего стоп-бита оно автоматически пересылается в сдвиговый регистр. Если же к моменту окончания передачи
13.2. Использование модулей USART ¦ 495 кадра буфер передатчика будет пуст, устанавливается флаг прерывания «передача завершена» ТХС (ТХСл) регистра UCSRA (UCSRaiA). Сброс флага осуществляется аппаратно при входе в подпрограмму обработки соответствующего прерывания или программно, записью в этот бит лог. 1. Выключение передатчика осуществляется сбросом бита TXEN (TXENa) регистра UCSRB (UCSR/iB). Если в момент выполнения этой команды осуществлялась передача, сброс бита произойдет только после завершения текущей и отложенной передач, т. е. после очистки сдвигового и буферного регистров передатчика. При выключенном передатчике вывод TXD (TXDaj) может использоваться как контакт ввода/вывода общего назначения. Ниже приведен простейший пример подпрограммы передачи по интерфейсу USART. Эта подпрограмма ждет очистки буфера передатчика, а затем загружает в него новое значение. Пример на ассемблере USARTJTransmit: ; Ждать очистки буфера передатчика sbis UCSRA,UDRE rjmp USART_Transmit ; Скопировать 9-й бит данных из г17 в ТХВ8 cbi UCSRB,TXB8 sbrc rl7,0 sbi UCSRB,TXB8 ; Загрузить младший байт данных в буфер, начать передачу out UDR,rl6 ret Пример на Си void USART_Transmit(unsigned int data) { /* Ждать очистки буфера передатчика */ while ( !( UCSRA & A«UDRE))) /* Скопировать 9-й бит данных из г17 в ТХВ8 */ UCSRB &= ~A«ТХВ8) ; if (data & 0x100) UCSRB |= A«TXB8) ; /* Загрузить младший байт данных в буфер, начать передачу */ UDR = data } 13.2.4. Прием данных Работа приемника разрешается установкой бита RXEN (RXEN/i) регистра UCSRB (UCSR/iB). При установке бита вывод RXD (RXDai) подключается к приемнику USART и начинает функционировать как вход не-
496 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик зависимо от установок регистров управления портом. Если используется синхронный режим работы, переопределяется также функционирование вывода ХСК (ХСКл). Прием данных начинается сразу же после обнаружения приемником корректного старт-бита. Каждый бит содержимого кадра затем считывает- ся с частотой, определяемой установками контроллера скорости передачи или тактовым сигналом ХСК (ХСКл). Считанные биты данных последовательно помещаются в сдвиговый регистр приемника до обнаружения первого стоп-бита кадра. После этого содержимое сдвигового регистра пересылается в буфер приемника, из которого принятое значение может быть получено путем чтения регистра данных модуля. При использовании 9-битных слов данных значение старшего бита может быть определено по состоянию флага RX8 (RX8aj) регистра UCSRB (UCSRaB). Причем содержимое старшего бита данных должно быть считано до обращения к регистру данных. Это связано с тем, что флаг RX8 (RX8aj) отображает значение старшего бита слова данных кадра, находящегося на верхнем уровне буфера приемника, состояние которого при чтении регистра данных изменится. Если во время приема кадра была включена схема контроля четности, она вычисляет бит четности для всех битов принятого слова данных и сравнивает его с принятым битом четности. Результат проверки запоминается в буфере приемника вместе с принятым словом данных и стоп-бита- ми. Наличие или отсутствие ошибки контроля четности может быть затем определено по состоянию флага UPE (UPEai). Этот флаг устанавливается в 1, если следующее слово, которое может быть прочитано из буфера, имеет ошибку контроля четности. При выключенном контроле четности флаг UPE (UPE«) всегда читается как 0. Блок приемника модулей USART имеет еще два флага, показывающих состояние обмена, — флаг ошибки кадрирования FE (FErt) и флаг переполнения DOR (DOR/г). Флаг FE (FEaj) устанавливается в 1, если значение первого стоп-бита принятого кадра не соответствует требуемому, т. е. равно 0. Флаг DOR (DOR/2) индицирует потерю данных из-за переполнения буфера приемника. Этот флаг устанавливается в 1 в случае приема старт-бита нового кадра при заполненных буфере и сдвиговом регистре приемника. Установленный флаг DOR (DORa?) означает, что между прошлым байтом, считанным из регистра UDR, и байтом, считанным в данный момент, произошла потеря одного или нескольких кадров. Обратите внимание на то, что все флаги ошибок буферизуются вместе со словом данных, т. е. соответствующие биты регистра UCSRA (UCSR/jA) относятся к кадру, слово данных которого будет прочитано при следующем обращении к регистру данных UDR (UDRrt). Поэтому состояние этих флагов должно быть считано перед обращением к регистру данных. Кроме того, для совместимости с будущими устройствами рекомендуется при за-
13.2. Использование модулей USART ¦ 497 писи в регистр UCSRA (UCSR/*A) сбрасывать соответствующие этим флагам биты записываемого значения в 0. Для индикации состояния приемника в модулях USART используется флаг прерывания «прием завершен» RXC (RXCw) регистра UCSRA (UCSR/zA). Этот флаг устанавливается в 1 при наличии в буфере приемника непрочитанных данных и сбрасывается в 0 при опустошении буфера (после считывания всех находящихся в нем данных). Выключение приемника осуществляется сбросом бита RXEN (RXENa) регистра UCSRB (UCSRrtB). В отличие от передатчика, приемник выключается сразу же после сброса бита, а значит, кадр, принимаемый в этот момент, теряется. Кроме того, при выключении приемника очищается его буфер, т. е. теряются также все непрочитанные данные. При выключенном приемнике вывод RXD (RXD«) может использоваться как контакт ввода/вывода общего назначения. Пример подпрограммы приема по интерфейсу USART приведен ниже. Как и в предыдущем примере, здесь используется опрос флага прерывания. Пример на ассемблере USART_Receive: ; Ждать загрузки данных в буфер приемника sbis UCSRA,RXC rjmp USART_Receive ; Прочитать 9-й бит данных и флаги состояния in rl8,UCSRA in rl7,UCSRB ; Прочитать младший байт данных in rl6,UDR ; В случае ошибки вернуть -1 andi rl8, A«FE) I (l«DOR) I A«UPE) breq no_error ldi rl7,HIGH(-l) ldi rl8,LOW(-l) no_error: ; Выделить 9-й бит данных lsr rl7 andi rl7,0x01 ret Пример на Си unsigned int USART_Receive(void) { unsigned char status, resh, resl /* Ждать заполнения буфера приемника */ while (! (UCSRA & A«RXC))) /* Прочитать 9-й бит данных и флаги состояния */
498 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик status = UCSRA; resh = UCSRB; /* Прочитать младший байт данных */ resl = UDR; /* В случае ошибки вернуть -1*/ if (status & A«FE) I A«D0R) I A«UPE) ) return -1; /* Выделить 9-й бит данных */ resh = (resh»l) & 0x01; return ((resh«8) I resl); } Собственно прием всех битов кадра осуществляется по-разному, в зависимости от режима работы модуля. При работе модуля USART в синхронном режиме состояние вывода RXD (RXDaj) считывается по одному из фронтов сигнала ХСК (ХСКл). Если бит UCPOL (UCPOL/i) регистра UCSRC (UCSR/zC) сброшен в 0, считывание состояния вывода происходит по спадающему фронту сигнала ХСК (ХСКл), если же установлен в 1 — по нарастающему фронту сигнала. Другими словами, считывание данных с вывода RXD (RXDrt) и их выдача на вывод TXD (TXDaj) происходят по противоположным фронтам (см. Рис. 13.6). Для обеспечения приема в асинхронном режиме работы используются схемы восстановления тактового сигнала и данных. Схема восстановления тактового сигнала предназначена для синхронизации внутреннего тактового сигнала, формируемого контроллером скорости передачи, и кадров, поступающих на вывод RXD (RXDaj) микроконтроллера. Схема восстановления данных осуществляет считывание и фильтрацию каждого бита принимаемого кадра. Схема восстановления тактового сигнала осуществляет опрос входа приемника с целью определения старт-бита кадра. Частота опроса зависит от состояния бита U2X (ШХл) регистра UCSRA (UCSR/jA). В обычном режиме (при ШХя = 0) частота опроса в 16 раз превышает скорость передачи данных, а в ускоренном режиме (при U2X = 1) — в 8 раз. Обнаружение изменения сигнала на выводе RXD (RXDaj) с лог. 1 (режим ожидания) на лог. 0 интерпретируется как возможное появление переднего фронта старт-бита. После этого в нормальном режиме проверяется значение 8-й, 9-й и 10-й выборок входного сигнала, а в ускоренном режиме — 4-й, 5-й и 6-й выборок (Рис. 13.7, а). Если значение хотя бы двух выборок из указанных равно лог. 1, старт-бит считается ложным (помеха), а приемник переходит к ожиданию следующего изменения входного сигнала с лог. 1 на лог. 0. В противном случае считается, что обнаружен старт-бит новой последовательности, с которым синхронизируется внутренний тактовый сигнал приемника. После этого начинает работать схема восстановления данных.
13.2. Использование модулей USART ¦ 499 Решение о значении принятого бита принимается также по результатам 8-й, 9-й и 10-й D-й, 5-й и 6-й) выборок входного сигнала (Рис. 13.7, б). Состоянием бита считается логическое значение, которое было получено, по меньшей мере, в двух из трех выборок. Процесс распознавания повторяется для всех битов принимаемого кадра, включая первый стоп-бит. Рис. 13.7. Распознавание битов кадра: а — старт-бит; б — остальные биты Из сказанного следует, что старт-бит нового кадра может передаваться сразу же после последней выборки, используемой для определения значения бита. В обычном режиме работы формирование старт-бита может начаться в момент А, а в ускоренном режиме — в момент В (Рис. 13.8). Момент С, обозначенный на рисунке, определяет максимальную длительность стоп-бита. Рис. 13.8. Распознавание стоп-бита и последующего старт-бита
500 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик 13.3. Мультипроцессорный режим работы Режим мультипроцессорного обмена позволяет осуществлять связь между несколькими ведомыми микроконтроллерами и одним ведущим. В этом режиме каждый ведомый микроконтроллер имеет свой уникальный адрес. Если ведущий микроконтроллер хочет что-либо передать, он посылает адресный байт, определяющий, к какому из микроконтроллеров ведущий собирается обратиться. Если какой-либо из ведомых микроконтроллеров распознал свой адрес, он переходит в режим приема данных и соответственно принимает последующие байты как данные. Остальные ведомые микроконтроллеры игнорируют принимаемые байты до посылки ведущим нового адресного байта. Включение режима фильтрации принимаемых кадров, не содержащих адреса, осуществляется установкой в 1 бита МРСМ (МРСМл) регистра UCSRA (UCSRM). В микроконтроллере, выполняющем роль ведущего, должен быть установлен режим передачи 9-битных данных. При передаче адресного байта старший бит должен устанавливаться в 1, а при передаче байтов данных он должен сбрасываться в 0. В ведомых микроконтроллерах механизм приема зависит от режима работы приемника. Если приемник настроен на прием 5...8-битных данных, то идентификация содержимого кадра (адрес/данные) осуществляется по 1-му стоп-биту. При приеме 9-битных данных идентификация содержимого кадра осуществляется по старшему биту слова данных. Если указанные биты установлены в 1, значит, кадр содержит адрес, в противном случае — данные. Для осуществления обмена данными в мультипроцессорном режиме необходимо действовать следующим образом: 1. Все ведомые микроконтроллеры переключаются в режим мультипроцессорного обмена установкой в 1 бита МРСМ (МРСМя) регистра UCSRA (UCSR/jA). 2. Ведущий микроконтроллер посылает адресный кадр, а все ведомые микроконтроллеры его принимают. Соответственно в каждом из ведомых микроконтроллеров устанавливается флаг RXC (КХСп) регистра UCSRA (UCSRajA). 3. Каждый из ведомых микроконтроллеров считывает содержимое регистра данных. Микроконтроллер, адрес которого совпал с адресом, посланным ведущим, сбрасывает в 0 бит МРСМ (МРСМл). Адресованный микроконтроллер начинает принимать кадры, содержащие данные. Если приемник ведомого микроконтроллера настроен на прием 5...8-битных данных, будет генерироваться ошибка кадрирования, поскольку первый стоп-бит будет равен 0 (этого можно избежать, исполь-
13.4. Модуль USARTв режиме MS PI ¦ 501 зуя два стоп-бита). В остальных ведомых микроконтроллерах бит МРСМ (МРСМя) установлен в 1, поэтому кадры данных будут игнорироваться. После приема последнего байта данных адресованный микроконтроллер устанавливает бит МРСМ (МРСМя) в 1 и снова ожидает приход кадра с адресом. Процесс повторяется со 2-го пункта. 13.4. Модуль USART в режиме MSPI В ряде новых моделей микроконтроллеров, а именно в ATmega48x/88x/168x, ATmegal64x/324x/644x и ATmega640x/1280x/1281x/ 2560х/2561х, модули USART могут работать в качестве ведущего шины SPI. В этом режиме, который называется MSPI (Master SPI Mode), модули USART поддерживают все четыре режима SPI @, 1, 2 и 3). При этом доступны как двойная буферизация данных при приеме и передаче, так и большинство прерываний модуля. Функции выводов модуля USART в режиме MSPI указаны в Табл. 13.13. Таблица 13.13. Выводы USART в режиме MSPI USART TXDai RXDfl ХСКл - SPI MOSI MISO SCK ss Описание Только выход ведущего Только вход ведущего Выход тактового сигнала Не поддерживается ' Обратите внимание, что направление передачи данных вывода ХСКл необходимо задавать вручную (соответствующий бит регистра DDRjc должен быть установлен в 1). Причем конфигурирование вывода желательно выполнять до разрешения работы приемника и передатчика USART. 13.4.1. Управление модулем USART в режиме MSPI Управление модулями USART в режиме MSPI осуществляется посредством тех же регистров UCSR/jA, UCSR/jB и UCSRaC, что и в обычном режиме, изменяется только назначение (и название) некоторых битов регистров UCSR/fC. Биты этих регистров, используемые в режиме MSPI, приведены на Рис. 13.9...13.11, а их описание — в Табл. 13.14...13.16 соответственно.
502 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик Таблица 13.14. Биты регистров UCSR/iA в режиме MSPI Бит 7 6 5 4...0 Название ККСп ТХСп UDREai - Описание Флаг завершения приема. Флаг устанавливается в 1 при наличии непрочитанных данных в буфере приемника. После опустошения буфера флаг аппаратно сбрасывается. Если бит RXCIEw регистра UCSR/iB установлен, то при установке флага генерируется запрос на прерывание «прием завершен» Флаг завершения передачи. Флаг устанавливается в 1 после передачи всех битов из сдвигового регистра передатчика, при условии, что в регистр данных UDR/7 не было загружено нового значения. Если бит TXCIEw регистра UCSRajB установлен, то при установке флага генерируется прерывание «передача завершена». Флаг сбрасывается аппаратно при выполнении подпрограммы обработки прерывания или программно, записью в него лог. 1 Флаг опустошения регистра данных. Данный флаг устанавливается в 1 при пустом буфере передатчика (после пересылки байта из регистра данных UDR в сдвиговый регистр передатчика). Установленный флаг означает, что в регистр данных можно загружать новое значение. Если бит UDRIE/7 регистра UCSR/fB установлен, генерируется запрос на прерывание «регистр данных пуст». Флаг сбрасывается аппаратно, при записи в регистр данных Не используются Примечание, п = 0,1,2 или 3. Рис. 13.10. Регистры UCSR/jB в режиме MSPI Таблица 13.15. Биты регистров UCSR/iB в режиме MSPI Бит 7 6 5 Название RXCIEaj ТХС1Ел UDRIEw Описание Разрешение прерывания по завершении приема. Если данный бит установлен в 1,1 то при установке флага RXCw регистра UCSRM генерируется прерывание «прием завершен» (если флаг I регистра SREG установлен в 1) | Разрешение прерывания по завершении передачи. Если данный бит установлен 1 в 1, то при установке флага ТХСл регистра UCSRwA генерируется прерывание «передача завершена» (если флаг I регистра SREG установлен в 1) Разрешение прерывания при очистке регистра данных USART. Если данный бит установлен в 1, то при установке флага UDREw регистра UCSR/jA генерируется прерывание «регистр данных пуст» (если флаг I регистра SREG установлен в 1) Рис. 13.9. Регистры UCSR/jA в режиме MSPI
13.4. Модуль USART в режиме MSPI ¦ 503 (продолжение) Бит 4 3 2...0 Название RXEN/7 TXEN/i - Описание Разрешение приема. При установке этого бита в 1 разрешается работа приемника USART и переопределяется функционирование вывода RXD/i. При сбросе бита RXENw работа приемника запрещается, а его буфер сбрасывается. Включение одного приемника в режиме MSPI не имеет смысла, поскольку тактовый сигнал формируется передатчиком Разрешение передачи. При установке этого бита в 1 разрешается работа передатчика USART и переопределяется функционирование вывода TXD//. Если бит сбрасывается в 0 во время передачи, выключение передатчика произойдет только после завершения передачи данных, находящихся в сдвиговом регистре и буфере передатчика | Не используются 1 Примечание, п = 0,1,2 или 3. Рис. 13.11. Регистры UCSRwC в режиме MSPI Таблица 13.16. Биты регистров UCSR/iC в режиме MSPI I Бит t Название I Описание UMSEL/jI Режим работы USART. Эти биты определяют режим работы модуля USART: UMSELaiO UMSELnl 0 0 1 1 UMSELnO 0 1 0 1 Режим работы Асинхронный USART Синхронный USART Зарезервировано MSPI 5...3 Не используются UDORDaj Формат передачи данных. Если этот бит установлен в 1, данные передаются от младшего бита к старшему. Если бит сброшен в 0, порядок передачи битов меняется на противоположный — от старшего бита к младшему UCPHA/i Фаза тактового сигнала. Если этот бит сброшен в 0, данные с входа RxD/? считы- ваются по переднему фронту импульсов тактового сигнала (нарастающий фронт при UCPOLw = 0 и спадающий при UCPOL/i =1). Если же этот бит установлен в 1, данные с входа RxD/i считываются по заднему фронту импульсов тактового сигнала (спадающий фронт при UCPOLaj = 0 и нарастающий при UCPOLa? = 1) UCPOLn Полярность тактового сигнала. Значение этого бита определяет состояние линии SCK в режиме ожидания. Если бит сброшен в 0, генерируются импульсы положительной полярности, а в режиме ожидания на выводе ХСКя формируется НИЗКИЙ уровень. Если бит установлен в 1, генерируются импульсы отрицательной полярности, а в режиме ожидания на выводе ХСКл формируется ВЫСОКИЙ уровень Примечание, п = 0,1,2 или 3.
504 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик Как видно из Табл. 13.16, переключение модуля USART в режим MSPI осуществляется установкой в 1 обоих битов UMSELrtl и UMSEL^O регистра UCSR/iC. Формирование тактового сигнала в режиме MSPI осуществляется аналогично синхронному режиму USART. Таким образом, скорость передачи в режиме MSPI определяется выражением где BAUD — скорость передачи, бит/с; /ск — тактовая частота микроконтроллера; UBRR — содержимое регистра контроллера скорости передачи @...4095). Как было сказано выше, модуль USART поддерживает все четыре режима SPI, различающихся фазой и полярностью тактового сигнала ХСКл (SCK) относительно последовательных данных. В данном случае фаза тактового сигнала определяется битом UCPHAa, а полярность — битом UCPOLaj регистра UCSR/?C. Соответствие между состоянием этих битов и реализуемым режимом SPI указано в Табл. 13.17. Временные диаграммы передачи данных для всех четырех режимов приведены на Рис. 13.12. Таблица 13.17. Режимы SPI и биты UCPHAn UCPOIvi 0 0 1 1 UCPHAn 0 1 0 1 Режим SPI 0 1 2 3 Передний фронт Считывание данных (нарастающий фронт) Установка данных (нарастающий фронт) Считывание данных (спадающий фронт) Установка данных (спадающий фронт) Задний фронт Установка данных (спадающий фронт) Считывание данных (спадающий фронт) Установка данных (нарастающий фронт) Считывание данных (нарастающий фронт) Рис. 13.12. Передача данных в режиме MSPI
13.4. Модуль USARTв режиме MSPI ¦ 505 Формат передачи 8-битных данных, а именно порядок передачи битов, определяется состоянием бита UDORDa регистра UCSRajC. Если этот бит сброшен в 0, первым передается старший бит содержимого сдвигового регистра передатчика, а если установлен в 1 — младший бит. Благодаря двойной буферизации данных в модуле USART, можно легко осуществить передачу и 16-битных данных, записывая оба байта подряд в регистр данных UDR/i. Окончание передачи 16-битного значения можно будет определить по установке флага прерывания «передача завершена». 13.4.2. Инициализация режима MSPI Наверное, излишним будет говорить, что инициализация режима MSPI модуля USART должна быть выполнена до начала обмена по шине. Собственно инициализация заключается в задании требуемой скорости передачи, перевода вывода ХСКл в режим выхода, установки формата передачи данных, а также включения передатчика и приемника USART (если не требуется прием данных от ведомых устройств, то приемник можно и не включать). Если при обработке USART используются прерывания, то во время инициализации все прерывания должны быть запрещены (флаг I регистра SREG должен быть сброшен в 0). Обратите внимание, что включение передатчика USART необходимо выполнять при сброшенном регистре контроллера скорости передачи UBRR/j. Соответственно запись в регистр UBBR/7 требуемого значения следует производить после разрешения передатчика, но до начала обмена по шине. При реинициализации модуля (изменении скорости передачи, режима работы или формата данных), прежде чем изменять содержимое регистров, необходимо убедиться, что все данные переданы, проконтролировав состояние флагов ТХСя и RXO/. Ниже приведен простой пример подпрограммы инициализации (используется опрос флагов прерываний). Параметром подпрограммы является значение скорости передачи, передаваемое (в примере на ассемблере) в регистровой паре г17:г16. Пример на ассемблере USART_MSPIM_Init: clr rl8 out UBRRnH,rl8 out UBRRnL,rl8 ; Переключаем ХСКл на выход Sbi XCKn_DDR,XCKn ; Переключаемся в режим MSPI @-й режим SPI) ldi rl8, (l«UMSELnl) I (l«UMSELnO) I @«UCPHAn) I @«UCPOLn) out UCSRnC,rl8
506 ¦ Глава 13. Универсальный синхронный/асинхронный приемо-передатчик ; Включаем приемник и передатчик ldi rl8, (l«RXENn) I A«ТХЕЫл) out UCSRnB,rl8 ; Устанавливаем скорость передачи out UBRRnH,rl7 out UBRRnL,rl6 ret Пример на Си void USART_MSPIM_Init(unsigned int baud) { UBRRn = 0; /* Переключаем ХСКл на выход */ XCKn_DDR 1= A«ХСКл); /* Переключаемся в режим MSPI @-й режим SPI) */ UCSRnC = (l«UMSELnl) I (l«UMSELnO) I @«иСРНАл) I @«иСРОЬл) ; /* Включаем приемник и передатчик */ UCSRflB = (l«RXENn) I A«ТХЕЫл) ; /* Устанавливаем скорость передачи */ UBRRn = baud; } 13.4.3. Передача данных в режиме MSPI Для передачи данных в режиме MSPI необходимо разрешить работу передатчика USART, т. е. должен быть установлен бит ТХЕл регистра UCSR/7B. Если предполагается прием данных от ведомых устройств, то следует включить и приемник, установив флаг ККЕп регистра UCSR/tB. Процесс обмена инициируется записью байта в регистр данных UDR/7. Причем это относится как к приему, так и к передаче данных, поскольку тактовый сигнал формируется передатчиком. Данные, записанные в регистр UDR/7, перегружаются из буфера передатчика в сдвиговый регистр при его готовности к посылке следующего кадра. Обратите внимание на то, что для каждого переданного байта регистр данных UDRrt должен быть прочитан только один раз. Входной буфер USART в режиме MSPI функционирует точно так же, как и в обычном режиме, т. е. при переполнении теряется последний принятый байт, а не первый. Ниже приведен простейший пример подпрограммы передачи данных в режиме MSPI, использующей опрос флагов прерываний UDREai и RXCaj. Эта подпрограмма ждет очистки буфера передатчика, загружает в него новое значение, после чего ожидает заполнения буфера приемника. Пример на ассемблере USART_MSPIM_Transfег: ; Ждем очистки буфера передатчика sbis 1К^лА,1ЛЖЕл
13.4. Модуль USART в режиме MSPI ¦ 507 rjmp USART_MSPIM_Transfer ; Загружаем данные в буфер, инициируя передачу out UDRn,rl6 ; Ждем приема данных USART_MSPIM_Wait_RX: sbis UCSRnA,RXCn rjmp USART_MSPIM_Wait_RX ; Считываем принятое значение из буфера in rl6,UDRn ret Пример на Си unsigned char USART_MSPIM_Transfer (unsigned char data) { /* Ждем очистки буфера передатчика */ while (! (UCSRnA & (l«UDREn))) /* Загружаем данные в буфер, инициируя передачу */ UDRn = data; /* Ждем приема данных */ while (! (UCSRnA & (l«RXCn))) /* Считываем принятое значение из буфера и возвращаем его*/ return UDRn;
ГЛАВА 14 Программирование микроконтроллеров AVR семейства Меда 14.1. Общие сведения В общей сложности микроконтроллеры семейства Mega поддерживают следующие режимы программирования: • режим последовательного программирования (по интерфейсу SPI); • режим параллельного программирования при высоком напряжении; • режим программирования через интерфейс JTAG. Под «высоким» напряжением здесь понимается управляющее напряжение A2 В), подаваемое на вывод RESET микроконтроллера для перевода последнего в режим программирования. Какие из режимов поддерживает конкретный микроконтроллер, можно узнать, обратившись к Табл. 14.1. Таблица 14.1. Режимы программирования микроконтроллеров семейства Mega 1.Последовательное, | | | | |Л| 1 • 1 • по интерфейсу SPI 2. Параллельное, при высоком напряжении 3. По интерфейсу JTAG • • • • • • t • Кроме того, микроконтроллеры семейства Mega имеют возможность самопрограммирования. Под этим термином понимается изменение содержимого памяти программ, управляемое самим микроконтроллером. Режим программирования ATmega8515x/8535x I ATmega8x ATmegal6x/32x ATmega64x/128x ATmega48x/88x/168x ATmegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2561x
14.1. Общие сведения ¦ 509 В процессе программирования могут выполняться следующие операции: • стирание кристалла (chip erase); • чтение/запись FLASH-памяти программ; • чтение/запись EEPROM-памяти данных; • чтение/запись конфигурационных ячеек; • чтение/запись ячеек защиты; • чтение ячеек идентификатора; • чтение калибровочного байта. Все модели микроконтроллеров поставляются со стертой памятью программ и памятью данных (во всех ячейках находится число $FF) и пригодны к немедленному программированию. 14.1.1. Защита кода и данных Содержимое FLASH-памяти программ, а также содержимое EEPROM-памяти данных может быть защищено от записи и/или чтения посредством программирования ячеек защиты (Lock Bits) LB1 и LB2. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в Табл. 14.2. Таблица 14.2. Режимы защиты № режима 1 2 3 Ячейки защиты LB1 1 0 0 LB2 1 1 0 Описание Защита кода и данных отключена Запись FLASH и EEPROM запрещена Запрещены запись и чтение FLASH и EEPROM В режимах 2 и 3 запрещается также изменение конфигурационных ячеек (см. далее). Поэтому включение защиты следует выполнять в самую последнюю очередь, после программирования остальных областей памяти микроконтроллера. Во всех микроконтроллерах семейства, кроме ATmega48x, имеется четыре дополнительные ячейки защиты — BLB02, BLB01, BLB12 и BLB11. Ячейки BLB02:BLB01 определяют уровень доступа из секции загрузчика к коду, расположенному в секции прикладной программы, а ячейки BLB12:BLB11, наоборот, определяют уровень доступа из секции прикладной программы к коду, расположенному в секции загрузчика. Отсутствие указанных ячеек в модели ATmega48x обусловлено отсутствием у последней выделенной секции загрузчика. Возможные режимы защиты, соответствующие различным состояниям этих ячеек, приведены в Табл. 14.3 и Табл. 14.4 соответственно.
510 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Таблица 14.3. Режимы защиты секции прикладной программы № режима 1 2 3 4 Ячейки защиты BLB02 1 1 0 0 BLB01 1 0 0 1 Описание Нет никаких ограничений по доступу к коду, расположенному в секции прикладной программы Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы Команда SРМ не может осуществлять запись по адресам, находящимся в пределах секции прикладной программы, и команда LPM (ELPM), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы. Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены Команда LPM (ELPM), вызываемая из секции загрузчика, не может осуществлять чтение из секции прикладной программы. Если таблица векторов прерываний расположена в секции загрузчика, то при выполнении кода из секции прикладной программы прерывания запрещены Таблица 14.4. Режимы защиты секции загрузчика № режима 1 2 3 4 Ячейки защиты BLB12 1 1 0 0 BLB11 1 0 0 1 Описание Нет никаких ограничений по доступу к коду, расположенному в секции загрузчика Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика Команда SPM не может осуществлять запись по адресам, находящимся в пределах секции загрузчика, и команда LPM (ELPM), вызываемая из секции прикладной программы, не может осуществлять чтение из секции загрузчика. Если таблица векторов прерываний расположена в секции прикладной программы, то при выполнении кода из секции загрузчика прерывания запрещены Команда LPM (ELPM), вызываемая из секции прикладной программы, не может осуществлять чтение из секции загрузчика. Если таблица векторов прерываний расположена в секции прикладной программы, то при выполнении кода из секции загрузчика прерывания запрещены
14.1. Общие сведения ¦ 511 Все перечисленные ячейки защиты сгруппированы в одном байте. Расположение ячеек защиты в нем для разных моделей приведено на Рил 14 1 Рис. 14.1. Байт ячеек защиты В исходном (^запрограммированном) состоянии во всех ячейках защиты содержится 1, после программирования — 0. Стирание ячеек (запись в них лог. 1) может быть произведено только при выполнении команды «Стирание кристалла», уничтожающей также содержимое FLASH- и EEPROM-памяти. 14.1.2. Конфигурационные ячейки Как следует из названия, конфигурационные ячейки (Fuse Bits) определяют различные параметры конфигурации микроконтроллера. Эти ячейки расположены в отдельном адресном пространстве, доступном только при программировании. Все конфигурационные ячейки сгруппированы в несколько байтов, а состав этих ячеек зависит от конкретной модели микроконтроллера. Наличие тех или иных ячеек в конкретном микроконтроллере можно определить по Табл. 14.5, где в столбцах, отмеченных «звездочкой», указаны состояния конфигурационных ячеек по умолчанию. Краткое назначение всех конфигурационных ячеек приведено в Табл. 14.6. Подробное описание их назначений было приведено в соответствующих главах книги. Для изменения содержимого конфигурационных ячеек используются специальные команды программирования. Команда «Стирание кристалла» на состояние этих ячеек не влияет. Напоминаю, что при запрограммированной ячейке защиты LB1 конфигурационные ячейки блокируются. Поэтому конфигурацию микроконтроллера необходимо задавать до программирования ячеек защиты.
512 ¦ Глава 14. Программирование микроконтроллеров A VR семейства Mega Таблица 14.5. Конфигурационные ячейки микроконтроллеров семейства Бит ATmega8515x Название * Almega8535x Название * ATmega8x Название * ATmegal6x/32x Название * ATmega64x/ 128x Название * ATmega48x Название * Младший конфигурационный байт Г_ lL ПГ lL 3 2 1 0 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0 1 1 1 0 0 0 0 1 BODLEVEL BODEN SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 1 1 1 0 0 0 0 1 BODLEVEL BODEN SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 1 1 1 0 0 0 0 1 BODLEVEL BODEN SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 1 1 1 0 0 0 0 1 BODLEVEL BODEN SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 1 1 1 0 0 0 0 1 CKDIV8 CKOUT SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 0 1 1 0 0 0 1 0 Старший конфигурационный байт 17 6 5 4 3 2 1 |о S8515C WDTON SPIEN СКОРТ EESAVE BOOTSZ1 BOOTSZ0 BOOTRST 1 1 0 1 1 0 0 1 S8535C WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 1 0 1 1 0 0 1 RSTDISBL WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 1 0 1 1 0 0 1 OCDEN JTAGEN SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 0 0 1 1 0 0 I OCDEN JTAGEN SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 0 0 1 1 0 0 1 RSTDISBL DWEN SPIEN WDTON EESAVE BODLEVEL2 BODLEVEL1 BODLEVELO 0 Дополнительный конфигурационный байт \Т Гб" [7 [7 [7 Ll [7 [7 - - - - - - - M103C WDTON 1 1 1 1 1 1 0 1 - - ' - - - - - SELFPRGEN * Значение бита.
14.1. Общие сведения ¦ 513 (продолжение) Бит П ATtaega88x/ 168х Название * ATmegal62x Название * ATmegal64x/ 324x/644x Название • ATmegal65x Название * ATtaega325x/ 3250x, AThiega645x/ 6450x Название * ATmega640x, 1280x/1281x, AThiega2560x/ 2561x Название * Младший конфигурационный байт LL ПГ [Г [т [Г г" [г [о" CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0 0 1 1 0 0 0 1 0 CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0 0 1 1 0 0 0 1 0 CKDIV8 CKOUT SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 0 1 1 0 0 0 1 0 CKDIV8 CKOUT SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 0 1 1 0 0 0 1 0 CKDIV8 CKOUT SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 0 1 1 0 0 0 1 0 CKDIV8 CKOUT SUT1 SUTO CKSEL3 CKSEL2 CKSEL1 CKSELO 0 1 1 0 0 0 1 0 Старший конфигурационный байт Г 6 5 4 3 2 1 0 RSTDISBL DWEN SPIEN WDTON EESAVE BODLEVEL2 BODLEVEL1 BODLEVEL0 1 1 0 1 1 1 1 1 OCDEN JTAGEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZ0 BOOTRST 1 0 0 1 1 0 0 1 OCDEN JTAGEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 0 0 1 1 0 0 1 OCDEN JTAGEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 0 0 1 1 0 0 1 OCDEN JTAGEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 0 0 1 1 0 0 1 OCDEN JTAGEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZO BOOTRST 1 0 0 1 1 0 0 1 Дополнительный конфигурационный байт 7 6 5 4 3 2 1 0 - - - - - BOOTSZ1 BOOTSZ0 BOOTRST 1 1 1 1 1 0 0 1 - - - М161С BODLEVEL2 BODLEVEL1 BODLEVELO - 1 1 1 1 1 1 1 1 - - - - - BODLEVEL2 BODLEVEL1 BODLEVELO 1 1 1 1 1 1 1 1 - - - - BODLEVEL2 BODLEVEL1 BODLEVELO RESERVED 1 1 1 1 1 1 1 1 - - - - - BODLEVEL1 BODLEVELO RSTDISBL 1 1 1 1 1 1 1 1 - - - - - BODLEVEL2 BODLEVEL1 BODLEVELO 1 1 1 1 1 1 1 1 * Значение бита.
514 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Таблица 14.6. Назначение конфигурационных ячеек Название RSTDISBL CKSEL BODLEVEL BODEN SPIEN1* SUT WDTON СКОРТ EESAVE2* BOOTSZ BOOTRST DWEN ATmega8515x | ATmega8535x I ATmega8x I • ATmegal6x/32x 1 ATmega64x/128x 1 ATmega48x/88x/168x 1 • • ATmegal62x 1 ATmegal64x/324x/644x 1 ATmegal65x 1 ATmega325x/3250x, 1 ATmega645x/6450x | • ATmega640x, 1 ATmegal280x/1281x, ATmega2560x/2561x | Назначение Определяет функционирование 1 вывода микроконтроллера, совмещенного с выводом аппаратного сброса @ — контакт порта ввода/вывода, 1 — вывод сброса) Определяет режим работы так- 1 тового генератора, а также длительность задержки сброса /ТОит Определяет порог срабатывания 1 схемы BOR Разрешает/запрещает функционирование схемы BOR @ — разрешено, 1 — запрещено) Разрешает/запрещает програм- 1 мирование по интерфейсу SPI @ — разрешено, 1 — запрещено) Определяет длительность 1 задержки сброса /ТОит Определяет режим работы сторо-1 жевого таймера @ — всегда включен, 1 — может быть выключен программно) Определяет функционирование тактового генератора, действие зависит от установок ячеек CKSEL Определяет влияние команды «Стирание кристалла» на EEPROM-память @ — не стирает, 1 — стирает) Определяет размер секции 1 загрузчика Определяет положение 1 вектора сброса Разрешает/запрещает работу отладочного интерфейса debugWire @ — разрешена, 1 — запрещена)
14.1. Общие сведения ¦ 515 (продолжение) Название OCDEN JTAGEN CKDIV8 CKOUT SELFPRGEN3) S8515C S8535C М161С М103С ATmega8515x • ATmega8535x • ATmega8x ATmegal6x/32x • • ATmega64x/128x • • • ATmega48x/88x/168x • • • ATmegal62x • • • • • ATmegal64x/324x/644x • • • • ATmegal65x • • • • ATmega325x/3250x, ATmega645x/6450x • • • • ATmega640x, 1 ATmegal280x/1281x, ATmega2560x/2561x • • • • Назначение Разрешает/запрещает внутрисхемную отладку @ — разрешена, 1 — запрещена) Разрешает/запрещает использование интерфейса JTAG @ — разрешен, 1 — запрещен) Определяет начальное состояние делителя системного тактового сигнала Определяет состояние выходного буфера системного тактового сигнала @ — подключен к выводу микроконтроллера, 1 — отключен) Разрешение самопрограммирования @ — разрешено) Включает/выключает режим совместимости с микроконтроллерами AT90S4414/8515 семейства Classic @ — включен, 1 — выключен) Включает/выключает режим совместимости с микроконтроллерами AT90S8535 семейства Classic @ — включен, 1 — выключен) Включает/выключает режим совместимости с микроконтроллерами ATmega 161 х семейства Mega @ — включен, 1 — выключен) Включает/выключает режим совместимости с микроконтроллерами ATmega 103x семейства Mega @ — включен, 1 — выключен) Х) Недоступна при программировании по последовательному каналу. 2) Изменение состояния этой ячейки вступает в силу сразу же после ее программирования. 3) Только в ATmega48x.
516 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega 14.1.3. Идентификатор Все микроконтроллеры фирмы Atmel имеют три 8-битные ячейки, содержимое которых позволяет идентифицировать устройство. В первой ячейке содержится код производителя, во второй — код объема FLASH-na- мяти, а в третьей — код устройства. Как и конфигурационные ячейки, ячейки идентификатора расположены в отдельном адресном пространстве, доступ к которому возможен только в режиме программирования. Однако в отличие от конфигурационных ячеек ячейки идентификатора, по понятным причинам, доступны только для чтения. Содержимое ячеек идентификатора для всех микроконтроллеров семейства приведено в Табл. 14.7. Таблица 14.7. Ячейки идентификатора Модель ATmega8515x ATmega8535x ATmega8x ATmegal6x ATmega32x ATmega64x ATmegal28x ATmega48x ATmega88x ATmegal68x ATmegal62x ATmegal64x ATmega324x ATmega644x ATmegal65x ATmega325x ATmega3250x 1 ATmega645x 1 ATmega6450x 1 ATmega640x |ATmegal280x 1 ATmegal281x 1 ATmega2560x 1 ATmega2561x Ячейка идентификатора 1 $00 $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $1Е $01 $93 $93 $93 $94 $95 $96 $97 $92 $93 $94 $94 $94 $95 $96 $94 $95 $95 $96 $96 $96 $97 $97 $98 $98 $02 | $06 | $08 $07 $03 $02 $02 $02 $05 $0А 1 $06 $04 1 1) 1) О $07 | $05 $05' $06 $06 $08 $03 $04 $01 $02 | j) На момент написания книги значения были неизвестны I
14.1. Общие сведения ¦ 517 Как видно из таблицы, значение кода устройства (ячейка $02) у разных моделей может совпадать. Поэтому устройство следует идентифицировать только по совокупности значений ячеек $01 и $02, так как именно эта пара чисел является уникальной для каждого микроконтроллера. 14.1.4. Калибровочные ячейки В калибровочные ячейки при изготовлении микроконтроллера заносятся калибровочные константы, предназначенные для подстройки на номинальную частоту внутреннего 7?С-генератора. Количество этих ячеек зависит от того, на скольких частотах может работать внутренний ЛС-гене- ратор. В моделях ATmega8515x/8535x и ATmega8x/16x/32x/64x/128x имеется четыре 8-битных ячейки, а в остальных моделях — одна ячейка. Располагаются они в старших байтах адресного пространства ячеек идентификатора (одна ячейка — по адресу $000, четыре ячейки — по адресам $000, $001, $002 и $003 для частот 1, 2, 4 и 8 МГц соответственно). Загрузка калибровочной константы в регистр OSCCAL осуществляется аппаратно при нахождении микроконтроллера в состоянии сброса. Однако в моделях ATmega8515x/8535x и ATmega8x/16x/32x/64x/128x генератор автоматически калибруется только на частоту 1 МГц. Поэтому при использовании другой частоты ЯС-генератора его калибровку необходимо осуществлять вручную. Для этого программатор во время программирования должен прочитать содержимое калибровочной ячейки и занести его по какому-либо адресу FLASH-памяти программ. А программа должна после старта считать это значение из памяти программ и занести его в регистр OSCCAL. 14.1.5. Организация памяти программ и данных В микроконтроллерах семейства Mega используется страничная организация памяти программ. При программировании весь объем FLASH-памяти разбивается на 16-битные страницы, размер которых, а также их количество зависят от объема памяти программ микроконтроллера (Табл. 14.8). Таблица 14.8. Параметры страничной организации памяти программ Объем памяти программ [байт] Параметр Размер страницы, слов Количество страниц 4К 8К 32 32 64 128 16К 32К 64К ~64 64 Ш ~128 256 256 128К 256К ~128 П8~ ~512 1024~
518 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Соответственно, при программировании памяти программ микроконтроллеров семейства Mega данные сначала загружаются в буфер страницы и только затем заносятся непосредственно в память программ. Прошивка всех ячеек страницы при этом осуществляется одновременно. Аналогичным образом организована и EEPROM-память. Размер 8-битных страниц EEPROM-памяти, а также их количество для всех моделей микроконтроллеров приведены в Табл. 14.9. Таблица 14.9. Параметры страничной организации EEPROM-памяти Параметр Размер страницы, байт Количество страниц Объем EEPROM-памяти [байт] 256 4 64 512 4 128 1К 4 256 2К 8 256 4К 8 512 Однако следует отметить, что во многих моделях страничная организация EEPROM-памяти используется только при программировании в параллельном режиме, а программирование по последовательному каналу осуществляется побайтно. 14.2. Программирование по последовательному каналу В режиме программирования по последовательному каналу программирование памяти программ и данных осуществляется по последовательному интерфейсу SPI. Как правило, этот режим используется для программирования (перепрограммирования) микроконтроллера непосредственно в устройстве. Схема включения микросхем в режиме программирования по последовательному каналу приведена на Рис. 14.2. На этом же рисунке показано два варианта разводки колодки для подключения программатора, рекомендуемые компанией Atmel. В частности, первый вариант разводки используется в программаторе AVRISP и отладочных платах STK200/300 компании Atmel. Второй вариант разводки используется в более новых изделиях компании — программаторе AVRISP mkll и плате STK500. Однако вполне можно использовать и другую разводку. Как видно из Рис. 14.2, для обмена данными между программатором и устройством используются три линии: SCK (тактовый сигнал), MOSI (вход данных) и MISO (выход данных). Соответствие между линиями интерфейса и контактами портов ввода/вывода всех микроконтроллеров приведено в Табл. 14.10.
14.2. Программирование по последовательному каналу ¦ 519 Название линии интерфейса SCK MISO(PDO) MOSI(PDI) ATmega8515x/8535x РВ7 РВ6 РВ5 ATmega8x PB5 PB4 РВЗ Altaegal6x/32x PB7 PB6 PB5 ATmega64x/128x PB1 PE1 PEO ATmega48x/88x/168x PB5 PB4 PB3 ATmegal62x PB7 PB6 PBS ATmegal64x/324x/644x PB7 PB6 PB5 ATmegal65x, ATmega325x/3250x, ATmega645x/6450x PB1 PB3 PB2 ATmega640x/1280x/2560x PB1 PE1 PEO ATtaegal281x/2561x PB1 PB3 PB2 Назначение выводов Вход тактового сигнала Выход данных Вход данных Обратите внимание, что в моделях, выпускаемых в корпусе TQFP-64 (ATmega64x/128x и ATmegal281x/2561x), выводы, используемые для программирования, не совпадают с выводами модуля SPI. Временные диаграммы сигналов при программировании микроконтроллеров в рассматриваемом режиме представлены на Рис. 14.3, а значения параметров сигналов приведены в Табл. 14.11. Рис. 14.3. Временные диаграммы сигналов при программировании по последовательному каналу Рис. 14.2. Включение микроконтроллеров в режиме программирования по последовательному каналу Таблица 14.10. Выводы, используемые при программировании по последовательному каналу
520 ¦ Глава 14. Программирование микроконтроллеров AYR семейства Mega Таблица 14.11. Параметры сигналов при программировании по последовательному каналу Обозначение I/'CLCL 'SHSL 'SLSH 'ovsh 'shox 'SUV '\VD_ERASE >WD_FLASH '\VD_EEPROM '\VD_FUSE Параметр Частота тактового сигнала, МГц Усс = = 1.8...5.5В Усс = = 2.7...5.5В = 4.5...5.5В ATmegal62V ATmega48V/88V/168V, ATmegal64V/324V/644V, ATmega 165V/325V/3250V/645V/6450V, ATmega640V/l 280V/1281V/2560V/2561V ATmega8515L/8535L, ATmega8L/16L/32L/64L/128L, ATmega 162L, ATmegal65x/325x/3250x/645x/6450x, ATmega640x/1280x/1281x/2560x/2561x ATmega48x/88x/168x, ATmega 164x/324x/644x ATmega8515/8535, ATmega8/16/32/64/128, ATmega 162, ATmegal65/325/3250/645/6450, ATmega640/1280/1281 /2560/2561 ATmega48/88/168, ATmega 164/324/644 Длительность положительного импульса сигнала SCK, не Длительность отрицательного импульса сигнала SCK, не Задержка нарастающего фронта сигнала SCK относительно установления сигнала MOSI, не Время удержания сигнала MOSI относительно нарастающего фронта сигнала SCK, не Задержка установления сигнала MI SO относительно спадающего фронта сигнала SCK, не Период ожидания после загрузки команды «Стирание кристалла», мс Период ожидания после записи FLASH-памяти, мс Период ожидания после записи EEPROM-памяти, мс Период ожидания после записи конфигурационных ячеек или ячеек защиты, мс min 0 0 0 0 0 0 2/clcl0 2/clcl0 'dCL 2'clcl0 10 9 4.5 9 4.5 typ - - - - - - - - - - 16 - - - - max 1 4 8 10 16 20 - - - - 32 - '- - - [ ° 2>clcl при/ск < 12 МГц и 3/clcl при/ск ^ 12 МГц. Как и в рабочем режиме, при программировании по последовательному каналу микроконтроллеру требуется источник тактового сигнала. В качестве такового может использоваться любой из допустимых для микроконт-
14.2. Программирование по последовательному каналу ¦ 521 роллера источников. При этом должно выполняться следующее условие: длительность импульсов как НИЗКОГО, так и ВЫСОКОГО уровня сигнала SCK должна быть больше 2 (при/ск < 12 МГц) или 3 (при/ск > 12 МГц) периодов тактового сигнала микроконтроллера. Программирование осуществляется путем посылки 4-байтных команд на вывод MOSI микроконтроллера. Результат выполнения команд чтения снимается с вывода MISO микроконтроллера. Передача команд и выдача результатов их выполнения осуществляются от старшего бита к младшему. При этом «защелкивание» входных данных выполняется по нарастающему фронту сигнала SCK, а «защелкивание» выходных данных — по спадающему (см. Рис. 14.3 и Рис. 14.4). Рис. 14.4. Передача данных при программировании по последовательному каналу Формат всех команд, используемых для программирования микроконтроллеров семейства в этом режиме, приведен в Табл. 14.12. Таблица 14.12. Команды режима программирования по последовательному каналу Команда Разрешение программирования Стирание кристалла Чтение флага готовности RDY/BSY ° Формат команды 1-й байт $АС $АС $F0 2-й байт $53 $80 $00 3-й байт $00 $00 $00 4-й байт $00 $00 данные Описание команды Разрешает программирование микроконтроллера, пока на выводе RESET присутствует напряжение НИЗКОГО уровня Очистка содержимого FLASH - и EEPROM-памяти Если 0-й бит принятого байта сброшен в 0, то предыдущая операция программирования не завершена. Перед посылкой новой команды программирования необходимо дождаться установки этого бита в 1
522 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega (продолжение) Команда Формат команды 1-й байт 2-й байт 3-й байт 4-й байт Описание команды Команды загрузки Загрузка дополнительного байта адреса Загрузка страницы FLASH-памяти, старший байт Загрузка страницы FLASH-памяти, младший байт Загрузка страницы EEPROM-памяти (страничный доступI) $4D $48 $40 $С1 $00 $00 $00 $00 адрес адрес адрес адрес $00 старший байт младший байт данные Загрузка старшего байта адреса слова данных в моделях ATmega2560x/2561x (используется только младший бит) Запись младшего/старшего байта в буфер страницы памяти программ. Адрес является адресом слова в пределах страницы. Младший байт должен загружаться первым Запись байта в буфер страницы EEPROM-памяти. Адрес является адресом байта в пределах страницы Команды чтения Чтение FLASH-памяти, старший байт Чтение FLASH-памяти, младший байт Чтение EEPROM-памяти Чтение ячеек защиты Чтение идентификатора Чтение младшего конфигурационного байта Чтение старшего конфигурационного байта $28 $20 $А0 $58 $30 $50 $58 адрес (ст. байт) адрес (ст. байт) адрес (ст. байт) $00 $00 $00 $08 адрес (мл. байт) адрес (мл. байт) адрес (мл. байт) $00 адрес $00 $00 данные данные данные данные данные данные данные Чтение старшего/младшего байта памяти программ. Адрес является адресом слова в пределах адресного пространства памяти программ. В моделях ATmega2560x/2561x предварительно должен быть загружен старший бит адреса (команда загрузки дополнительного байта адреса) Чтение содержимого ячейки EEPROM-памяти. Адрес является адресом байта в пределах адресного пространства EEPROM Чтение байта, содержащего значение ячеек защиты Чтение байта идентификатора с заданным адресом (только в режимах защиты № 1 и №2, см. Табл. 14.2) Чтение конфигурационных ячеек. Сброшенный бит означает, что соответствующая конфигурационная ячейка запрограммирована
14.2. Программирование по последовательному каналу ¦ 523 (продолжение) Команда Чтение дополнительного конфигурационного байта Чтение калибровочной ячейки Формат команды 1-й байт $50 $38 2-й байт $08 $00 3-й байт $00 адрес 4-й байт данные данные Описание команды Чтение конфигурационных ячеек. Сброшенный бит означает, что соответствующая конфигурационная ячейка запрограммирована Чтение калибровочной константы по заданному адресу Команды записи Запись страницы FLASH-памяти Запись EEPROM-памяти Запись страницы EEPROM-памяти (страничный доступI) Запись ячеек защиты Запись младшего конфигурационного байта Запись старшего конфигурационного байта Запись дополнительного конфигурационного байта $4С $С0 $С2 $АС $АС $АС $АС адрес (ст. байт) адрес (ст. байт) адрес (ст. байт) $Е0 $А0 $А8 $А4 адрес (мл. байт) адрес (мл. байт) адрес (мл. байт) $00 $00 $00 $00 $00 данные $00 данные данные данные данные Запись страницы памяти программ по заданному адресу. Адрес представляет собой значение старших битов слов загруженной страницы (Рис. 14.5). В моделях ATmega2560x/2561x предварительно должен быть загружен старший бит адреса (команда загрузки дополнительного байта адреса) Запись значения в ячейку EEPROM-памяти по заданному адресу | Запись страницы EEPROM-памяти по заданному адресу. Адрес представляет собой номер страницы, сдвинутый влево (Рис. 14.5) Запись ячеек защиты. Для программирования ячейки соответствующий бит байта данных должен быть сброшен Запись конфигурационных ячеек. Для программирования ячейки соответствующий бит байта данных должен быть сброшен 1} В моделях ATmega48x/88x/168х, ATmega 162х, ATmega 164х/324х/644х, ATmegal65x/325x/3250x/645x/6450x и ATmega640x/1280x/1281x/2560x/2561x. J
524 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Записать страницу памяти программ/ Записать страницу EEPROM Рис. 14.5. Использование команд страничного доступа
14.2. Программирование по последовательному каналу ¦ 525 14.2.1. Переключение в режим программирования Для перевода микроконтроллера в режим программирования по последовательному каналу необходимо выполнить следующие действия: 1. Подать на микроконтроллер напряжение питания, при этом на выводах SCK и RESET должно присутствовать напряжение НИЗКОГО уровня. В некоторых случаях (если программатор не гарантирует установку сигнала SCK в 0 при подаче питания) после установки сигнала SCK в 0 необходимо подать на вывод RESET положительный импульс длительностью не менее двух периодов тактового сигнала микроконтроллера. В моделях ATmega64x/128x напряжение НИЗ- КОГО уровня можно подавать на вывод PEN вместо вывода RESET. Однако это возможно только в том случае, если программатор гарантирует удержание сигнала SCK в 0 при подаче питания. Кроме того, при использовании вывода PEN необходимо после программирования снять напряжение питания с микроконтроллера, чтобы он затем смог работать в нормальном режиме. 2. Выждать не менее 20 мс. 3. Послать на вывод MOSI команду «Разрешение программирования». Для контроля прохождения команды при посылке 3-го байта возвращается значение 2-го байта ($53). Если возвращаемое значение отлично от указанного, необходимо подать на вывод RESET положительный импульс и снова послать команду «Разрешение программирования». Причем независимо от возвращаемого значения необходимо передавать все 4 байта команды. Отсутствие возврата числа $53 после нескольких попыток указывает на отсутствие связи между программатором и микросхемой либо на неисправность микросхемы. После завершения программирования на вывод RESET можно подать напряжение ВЫСОКОГО уровня для перевода микроконтроллера в рабочий режим либо выключить его. В последнем случае необходимо выполнить следующую последовательность действий: 1. Подать на вывод XTAL1 напряжение НИЗКОГО уровня, если тактирование микроконтроллера осуществляется от внешней схемы. 2. Подать на вывод RESET напряжение ВЫСОКОГО уровня. 3. Отключить напряжение питания от микроконтроллера. 14.2.2. Управление процессом программирования FLASH-памяти Программирование памяти программ микроконтроллеров семейства Mega осуществляется постранично. Сначала содержимое страницы побайтно заносится в буфер по командам «Загрузка страницы FLASH-памяти». В каждой команде передаются младшие биты адреса изменяемой
526 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega ячейки (положение ячейки внутри страницы) и записываемое значение. Содержимое каждой ячейки должно загружаться в следующей последовательности: сначала младший байт, потом старший. Фактическое программирование страницы FLASH-памяти осуществляется после загрузки буфера страницы по команде «Запись страницы FLASH-памяти». В команде передаются старшие биты адреса ячеек (номер страницы), как показано на Рис. 14.5. В моделях с объемом памяти программ более 64 Кслов (на сегодняшний день это ATmega2560x/2561x) перед программированием страницы необходимо командой «Загрузка дополнительного байта адреса» задать старший бит номера страницы. Поскольку содержимое этого байта сохраняется до следующей команды, то ее необходимо выполнять только дважды — перед программированием первой страницы и при переходе через границу 64 Кслов. Следует помнить, что дальнейшее программирование памяти можно будет выполнять только после завершения записи страницы. Определить момент окончания записи можно тремя способами. Первый и наиболее простой способ — выдерживать между посылкой команд паузу длительностью не менее /wd_flash (Табл. 14.11). Второй способ заключается в контролировании содержимого любой из записываемых ячеек после посылки команды записи: до завершения записи ячейки при ее чтении возвращается значение $FF, а после завершения — записанное значение. Ну, а третий способ — опрос флага готовности RDY/BSYc помощью соответствующей команды и возобновление процесса программирования после установки флага в 1. 14.2.3. Управление процессом программирования EEPROM-памяти Во всех старых моделях программирование EEPROM-памяти осуществляется обычным способом — побайтно. А в новых моделях появился альтернативный способ записи EEPROM-памяти — постраничный. Содержимое страницы побайтно заносится в буфер по командам «Загрузка страницы EEPROM-памяти», а затем осуществляется фактическое программирование страницы EEPROM-памяти по команде «Запись страницы EEPROM-памяти». Значения адресов, передаваемые в этих командах, определяются так же, как и при программировании FLASH-памяти (Рис. 14.5). Для определения момента окончания записи можно использовать любой из описанных выше способов. 14.3. Параллельное программирование В режиме параллельного программирования, как следует из его названия, от программатора к микроконтроллеру передаются одновременно все биты кода команды или байта данных. Этот режим задействует большое
14.3. Параллельное программирование ¦ 527 число выводов микроконтроллера и, кроме того, требует использования дополнительного источника повышенного напряжения A2 В). Поэтому программирование в параллельном режиме осуществляется специализированными программаторами. Основное применение этого режима — «прошивка» микроконтроллеров перед установкой их на плату в условиях массового производства. Схема включения микросхем в режиме параллельного программирования приведена на Рис. 14.6. Назначение сигналов, присутствующих на выводах микроконтроллера в этом режиме, приведено в Табл. 14.13...14.15. Обратите внимание, что при последующем рассмотрении режима параллельного программирования выводы, указанные в Табл. 14.13, будут иметь те же названия, что и сигналы, присутствующие на этих выводах. Рис. 14,6. Включение микроконтроллеров в режиме параллельного программирования Таблица 14.13, Обозначение и функции выводов, используемых при программировании в параллельном режиме Сигнал RDY/BSY ОЕ WR BS1 ХАО ХА1 PAGEL BS2 DATA Вывод PD1 PD2 PD3 PD4 PD5 PD6 PD7 РАО РВ7...РВ0 Вход/Выход Выход Вход Вход Вход Вход Вход Вход Вход Вход/Выход Назначение Состояние устройства: 0 — занято (выполняется предыдущая команда); 1 — готово к приему следующей команды Управление режимом работы шины данных РВ7...РВ0: 0 — выход, 1 — вход Сигнал записи (активный уровень — лог. 0) Выбор байта (см. Табл. 14.14) Определяют действие, выполняемое по положительному импульсу на выводе XTAL1 (см. Табл. 14.15) Сигнал загрузки страницы памяти Выбор байта (см. Табл. 14.14) Двунаправленная шина данных
528 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Таблица 14.14. Функции сигналов BS1 и BS2 BS2 0 0 1 1 BS1 0 1 0 1 FLASH/EEPROM Младший байт Старший байт Дополнительный байт Зарезервировано Загрузка/чтение FLASH Младший байт Старший байт Зарезервировано Зарезервировано Программирование конфигурационных ячеек Младший байт Старший байт Дополнительный байт Зарезервировано Чтение конфигурационных ячеек и ячеек защиты Младший байт Байт ячеек защиты Дополнительный байт Старший байт Таблица 14.15. Функции сигналов ХАО и ХА1 ХА1 0 0 1 1 ХАО 0 1 0 1 Действие, выполняемое по тактовому импульсу Загрузка адреса ячейки памяти (младшего или старшего байта, в зависимости от уровня сигнала BS1) Загрузка данных (младшего или старшего байта, в зависимости от уровня сигнала BS1) Загрузка команды Нет действия, режим ожидания Временные диаграммы сигналов при программировании микроконтроллера в параллельном режиме представлены на Рис. 14.7, а значения параметров сигналов приведены в Табл. 14.16.
14.3. Параллельное программирование ¦ 529 Рис, 14.7. Временные диаграммы сигналов при программировании в параллельном режиме: а — общие требования; б — загрузка данных; в — чтение данных
530 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Таблица 14.16. Параметры сигналов при программировании в параллельном режиме Обозначение ^рр ^рр 'dvxh 'XLXH 'XHXL 'XLDX 'XLWL >XLPH 'PLXH 'BVPH >PHPL 'PLBX *WHBX *PLWL 'bVWL *RHBX 'WLWH '\VLRL '\VLRH '\VLRH_CE *XLOL 'bhdv 'OLDV A)HDZ Параметр Напряжение разрешения программирования Ток, потребляемый от источника +12 В (V??) Задержка сигнала XTAL1 относительно момента установления сигналов управления и данных Интервал между импульсами сигнала XTAL1 Длительность импульсов сигнала XTAL1 Время удержания сигналов управления и данных относительно заднего фронта сигнала XTAL1 Задержка сигнала WR относительно заднего фронта сигнала XTAL1 Задержка сигнала PAGEL относительно заднего фронта сигнала XTAL1 Задержка сигнала XTAL1 относительно заднего фронта сигнала PAGEL Задержка сигнала PAGEL относительно сигнала BS1 Длительность импульса сигнала PAGEL Время удержания сигнала BS1 относительно заднего фронта сигнала PAGEL Время удержания сигналов BS1/BS2 относительно заднего фронта сигнала WR Задержка сигнала WR относительно заднего фронта сигнала PAGEL Задержка сигнала WR относительно момента установления сигнала BS1 Время удержания сигнала BS1 относительно заднего фронта сигнала RDY/BSY Длительность импульса сигнала WR Задержка появления сигнала RDY/BSY относительно переднего фронта сигнала WR Задержка снятия сигнала RDY/BSY относительно переднего фронта сигнала WR Задержка снятия сигнала RDY/BSY относительно переднего фронта сигнала WR для команды «Стирание кристалла» Задержка сигнала ОЕ относительно заднего фронта сигнала XTAL1 Время установления сигналов данных относительно нарастающего фронта сигнала BS1 Время установления сигналов данных относительно переднего фронта сигнала ОЕ Задержка переключения шины данных в третье состояние относительно заднего фронта сигнала ОЕ min 11.5 - 67 200 150 67 0 0 150 67 150 67 67 67 67 67 150 0 3.4 7.5 0 0 - - max 12.5 250 - - - - - - - - - - - - - - - 1 4.5 9 - 250 250 250 Единицы 1 измерения В мкА 1 НС НС I НС I НС НС НС НС НС НС НС НС НС НС НС НС МКС мс мс НС НС НС НС
14.3. Параллельное программирование ¦ 531 В общих чертах процесс программирования в этом режиме состоит из многократного выполнения следующих операций: • загрузка команды; • загрузка адреса; • загрузка данных; • выполнение команды. Последовательность подачи сигналов на выводы микроконтроллера при выполнении различных базовых операций приведена в Табл. 14.17. Таблица 14,17. Базовые операции программирования в параллельном режиме № 1 2 3 4 5 Название операции Загрузка команды Загрузка адреса Загрузка данных Запись данных в буфер страницы Запись байта конфигурации Запись страницы Действия 1. Установить выводы ХА1, ХАО в состояние 10 (загрузка команды). 2. Подать на вывод BS1 напряжение лог. 0. 3. Выставить на шину DATA код команды (см. Табл. 14.18). 4. Подать на вывод XTAL1 положительный импульс. 1. Установить выводы ХА1, ХАО в состояние 00 (загрузка адреса). 2. Установить выводы BS2:BS1 в состояние 00 (загрузка младшего байта), 01 (загрузка старшего байта) или 10 (загрузка дополнительного байта). 3. Выставить на шину DATA байт адреса. 4. Подать на вывод XTAL1 положительный импульс. 1. Установить выводы ХА1, ХАО в состояние 01 (загрузка данных). 2. Подать на вывод BS1 напряжение лог. 0 (загрузка младшего байта) или лог. 1 (загрузка старшего байта). 3. Выставить на шину DATA содержимое байта данных. 4. Подать на вывод XTAL1 положительный импульс. 1. Подать на вывод BS1 напряжение лог. 1. 2. Подать на вывод PAGEL положительный импульс. 1. Установить выводы BS2:BS 1 в состояние 00 (запись младшего байта), 01 (запись старшего байта) или 10 (запись дополнительного байта). 2. Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня. 3. Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня. 1. Установить выводы BS2:BS1 в состояние 00. 2. Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня. 3. Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня. В рассматриваемом режиме используется 9 команд, коды которых при ведены в Табл. 14.18.
532 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Таблица 14.18. Команды программирования в параллельном режиме Код команды 1000 0000 0100 0000 0010 0000 0001 0000 0001 0001 0000 1000 0000 0100 00000010 00000011 Описание Стирание кристалла Запись конфигурационных ячеек Запись ячеек защиты Запись FLASH-памяти Запись EEPROM-памяти Чтение идентификатора Чтение конфигурационных ячеек и ячеек защиты Чтение FLASH-памяти Чтение EEPROM-памяти 14.3.1. Переключение в режим параллельного программирования Первой операцией при программировании микроконтроллера является его перевод в режим программирования. Для перевода микроконтроллера в режим программирования необходимо выполнить следующие действия: 1. Подать на микроконтроллер напряжение питания. 2. Подать на вывод RESET напряжение НИЗКОГО уровня и сформировать не менее трех импульсов на выводе XTAL1. 3. Подать на выводы PAGEL, XA1, XA0, BS1 напряжение НИЗКОГО уровня на время не менее 100 не. 4. Подать напряжение 11.5... 12.5 В на вывод RESET и удерживать напряжение НИЗКОГО уровня на выводах PAGEL, XA1, ХАО, BS1 в течение, как минимум, 10 мкс. Любая активность на указанных выводах в течение этого времени приведет к тому, что микроконтроллер не перейдет в режим программирования. 5. Выждать не менее 300 мкс перед посылкой следующей команды. Отдельно следует сказать о микроконтроллерах ATmega8515x/8535x, ATmega8x и ATmega48x/88x/168x, так как в этих моделях вывод сброса может быть задействован под линию ввода/вывода (если конфигурационная ячейка RSTDISBL запрограммирована). В этом случае перед выполнением действий, описанных выше, необходимо сделать следующее: 1. Подать на выводы PAGEL, XA1, ХАО, BS1 напряжение НИЗКОГО уровня. 2. Подать на микроконтроллер напряжение питания (Ксс), а на вывод RESET —напряжение 11.5...12.5 В (КРР).
14.3. Параллельное программирование ¦ 533 3. Выждать не менее 100 не. 4. Перепрограммировать ячейку RSTDISBL (если установлена защита, то сначала необходимо выполнить стирание кристалла). 5. Выйти из режима программирования (отключить питание или подать на вывод RESET напряжение ВЫСОКОГО уровня). 6. Перевести микроконтроллер в режим программирования, как было описано ранее. 14.3.2. Стирание кристалла Команда «Стирание кристалла» должна выполняться перед каждым перепрограммированием микроконтроллера. Данная команда полностью уничтожает содержимое FLASH- и EEPROM-памяти, а затем сбрасывает ячейки защиты (записывает в них 1). Однако на состояние конфигурационных ячеек данная команда не влияет. Кроме того, в ряде моделей микроконтроллеров семейства Mega можно предотвратить стирание EEPROM-памяти путем программирования конфигурационной ячейки EESAVE. Для выполнения команды «Стирание кристалла» необходимо выполнить следующие действия: 1. Загрузить команду «Стирание кристалла» (код 1000 0000). 2. Подать на вывод WR отрицательный импульс; при этом на выводе RDY/BSY появляется сигнал НИЗКОГО уровня. 3. Ждать появления на выводе RDY/BSY сигнала ВЫСОКОГО уровня. 14.3.3. Программирование FLASH-памяти Запись FLASH-памяти Запись FLASH-памяти производится в следующей последовательности (реализация каждого этапа приведена в Табл. 14.17): 1. Загрузить команду «Запись FLASH-памяти» (код 0001 0000). 2. Загрузить младший байт адреса (положение ячейки внутри страницы). 3. Загрузить младший байт данных. 4. Загрузить старший байт данных. 5. Запомнить данные в буфере. 6. Повторить пп. 2...5 до полного заполнения буфера страницы. 7. Загрузить старший байт адреса (номер страницы). 8. Загрузить дополнительный байт адреса (в моделях ATmega2560x/2561x). 9. Записать страницу. 10. Повторить пп. 2...9 для записи остальных страниц памяти программ. 11. Завершить программирование, загрузив команду «Нет операции» (код 0000 0000).
534 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Необходимо отметить, что если для адресации ячейки памяти внутри страницы требуется меньше 8 битов (при размере страницы менее 256 слов), то оставшиеся старшие биты младшего байта адреса используются для адресации страницы при выполнении команды «Запись страницы» (Рис. 14.8). Временные диаграммы, иллюстрирующие процесс записи FLASH-na- мяти, приведены на Рис. 14.9. Параметр Размер памяти программ, слов PAGEEND PCWORD Кол-во страниц PCPAGE ATmega48x 2К 32 [4:0] 64 [10:5] ATmega8515x/8535x ATmega8x ATmega88x 4К 32 [4:0] 128 [11:5] ATmega16x ATmega162x ATmega164x ATmega165x ATmega168x 8K 64 [5:0] 128 [12:61 ATmega8515x/8535x ATmega8x ATmega88x 16K 64 [5:0] 256 .113:6]. ATmega64x ATmega640x ATmega644x ATmega645x/6450x 32K 64 [6:0] 256 [14:7] ATmega128x ATmega1280x/1281x 64K 128 [6:0] 512 [15:7] ATmega2560x/2561x 128K 128 [6:0] 512 [15:7] Puc. 14.8. Адресация FLASH-памяти при программировании в параллельном режиме
14.3. Параллельное программирование ¦ 535 Рис. 14.9. Запись FLASH-памяти Чтение FLASH-памяти Для чтения FLASH-памяти необходимо выполнить следующие действия (реализация каждого этапа приведена в Табл. 14.17): 1. Загрузить команду «Чтение FLASH-памяти» (код 0000 0010). 2. Загрузить дополнительный байт адреса (в моделях ATmega2560x/2561x). 3. Загрузить старший байт адреса. 4. Загрузить младший байт адреса. 5. Установить ОЕ и BS1 в 0, после этого с шины данных DATA можно будет считать значение младшего байта содержимого ячейки памяти. 6. Установить BS1 в 1, после этого с шины данных DATA можно будет считать значение старшего байта содержимого ячейки памяти. 7. Установить ОЕ в 1. 14.3.4. Программирование EEPROM-памяти Запись EEPROM-памяти Запись EEPROM-памяти производится в следующей последовательности (реализация каждого этапа приведена в Табл. 14.17): 1. Загрузить команду «Запись EEPROM-памяти» (код 0001 0001). 2. Загрузить старший байт адреса. 3. Загрузить младший байт адреса.
536 ¦ Глава 14, Программирование микроконтроллеров AVR семейства Mega 4. Загрузить байт данных. 5. Запомнить данные в буфере. 6. Повторить пп. 3...5 до полного заполнения буфера. 7. Записать страницу. Временные диаграммы, иллюстрирующие процесс записи EEPROM-памяти, приведены на Рис. 14.10. Рис, 14.10. Запись EEPROM-памяти Чтение EEPROM-памяти Для чтения содержимого EEPROM-памяти необходимо выполнить следующие действия (реализация каждого этапа приведена в Табл. 14.17): 1. Загрузить команду «Чтение EEPROM-памяти» (код 0000 0011). 2. Загрузить старший байт адреса. 3. Загрузить младший байт адреса. 4. Установить ОЕ и BS1 в 0, после этого с шины данных DATA можно будет считать содержимое ячейки памяти. 5. Установить ОЕ в 1.
14.3. Параллельное программирование ¦ 537 14.3.5. Программирование конфигурационных ячеек Программирование байтов конфигурации микроконтроллеров семейства Mega осуществляется следующим образом. Младший конфигурационный байт: 1. Загрузить команду «Запись конфигурационных ячеек» (код 0100 0000). 2. Загрузить младший байт данных. Если бит сброшен в 0, выполняется программирование соответствующей ячейки, если установлен в 1 — ее сброс. 3. Записать младший байт конфигурации. Старший конфигурационный байт: 1. Загрузить команду «Запись конфигурационных ячеек» (код 0100 0000). 2. Загрузить младший байт данных. Если бит сброшен в 0, выполняется программирование соответствующей ячейки, если установлен в 1 — ее сброс. 3. Записать старший байт конфигурации. Дополнительный конфигурационный байт: 1. Загрузить команду «Запись конфигурационных ячеек» (код 0100 0000). 2. Загрузить младший байт данных. Если бит сброшен в 0, выполняется программирование соответствующей ячейки, если установлен в 1 — ее сброс. 3. Записать дополнительный байт конфигурации. Временные диаграммы, иллюстрирующие процесс записи конфигурационных ячеек, приведены на Рис. 14.11. Рис. 14.11. Запись конфигурационных ячеек
538 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega 14.3.6. Программирование ячеек защиты Программирование ячеек защиты выполняется аналогично программированию конфигурационных ячеек (реализация каждого этапа приведена в Табл. 14.17): 1. Загрузить команду «Запись ячеек защиты» (код 0010 0000). 2. Загрузить младший байт данных. Для программирования ячейки соответствующий бит должен быть сброшен в 0. Неиспользуемые биты должны быть всегда установлены в 1. 3. Записать младший байт конфигурации. 14.3.7. Чтение конфигурационных ячеек и ячеек защиты Чтение указанных ячеек выполняется в следующей последовательности (реализация каждого этапа приведена в Табл. 14.17): 1. Загрузить команду «Чтение конфигурационных ячеек и ячеек защиты» (код 000^0100). 2. Установить ОЕ, BS1 и BS2 в 0, после этого с шины данных DATA можно будет считать значение младшего конфигурационного байта. 3. Установить ОЕ в 0, a BS1 и BS2 — в 1. После этого с шины данных DATA можно будет считать значение старшего конфигурационного байта. 4. Установить ОЕ в 0, BS1 — в 0, a BS2 — в 1. После этого с шины данных DATA можно будет считать значение дополнительного конфи- гурационного байта. 5. Установить ОЕ в 0, BS1 — в 1, a BS2 — в 0. После этого с шины данных DATA можно будет считать значение байта защиты. 6. Установить ОЕ в 1. Соответствие сигналов BS1 и BS2 выполняемой операции чтения показано на Рис. 14.12. Рис. 14.12. Соответствие сигналов BS1 и BS2 выполняемой операции чтения в моделях с двумя байтами конфигурации (а) и в моделях с тремя байтами конфигурации (б)
14.4. Программирование по интерфейсу JTAG ¦ 539 14.3.8. Чтение ячеек идентификатора и калибровочных ячеек Чтение ячеек идентификатора осуществляется в следующей последовательности (реализация каждого этапа приведена в Табл. 14.17): 1. Загрузить команду «Чтение ячеек идентификатора» (код 0000 1000). 2. Загрузить младший байт адреса ($00...$02). 3. Установить ОЕ и BS1 в 0, после этого с шины данных DATA можно будет считать содержимое выбранной ячейки идентификатора. 4. Установить ОЕ в 1. Чтение калибровочных констант осуществляется аналогичным образом и посредством той же команды: 1. Загрузить команду «Чтение ячеек идентификатора» (код 0000 1000). 2. Загрузить младший байт адреса ($00...$03). 3. Установить ОЕ в 0, a BS1 — в 1, после этого с шины данных DATA можно будет считать значение выбранной калибровочной константы. 4. Установить ОЕ в 1. 14.4. Программирование по интерфейсу JTAG 14.4.1. Общие сведения об интерфейсе JTAG Интерфейс JTAG был разработан группой ведущих специалистов по проблемам тестирования электронных компонентов (Joint Test Action Group). В дальнейшем он был зарегистрирован в Институте инженеров по электротехнике и электронике (IEEE) в качестве промышленного стандарта IEEE Std 1149.1-1990 (IEEE Standard Test Access Port and Boundary-Scan Architecture). Встроенный в большинство микроконтроллеров семейства, интерфейс JTAG может быть использован для следующих целей: • тестирования печатных плат; • конфигурирования (программирования) кристалла; • внутрисхемной отладки. В данной книге рассматривается только один из аспектов использования интерфейса JTAG, а именно программирование микроконтроллеров. Доступ к модулю JTAG осуществляется через четыре вывода микроконтроллера, составляющих так называемый «порт тестового доступа» (Test Access Port — ТАР): TMS, TCK, TDI и TDO. Соответствие этих выводов контактам портов ввода/вывода микроконтроллера, а также их функции приведены в Табл. 14.19. Стандартная разводка 10-штырькового разъема для подключения JTAG-устройств приведена на Рис. 14.13.
540 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Рис, 14.13. Разводка разъема JTAG ТСК РС2 PF4 TMS TDO TDI РСЗ РС4 РС5 PF5 PF6 PF7 РС4 РС2 РС5 РС6 РС7 РСЗ РС4 РС5 PF4 PF4 PF4 PF5 PF6 PF7 PF5 PF6 PF7 PF5 PF6 PF7 Вход тактового сигнала Вход выбора режима Выход данных Вход данных Работой модуля JTAG управляет так называемый ТАР-контроллер, представляющий собой конечный автомат с 16 состояниями. Диаграмма состояний ТАР-контроллера приведена на Рис. 14.14. Переход между состояниями осуществляется по нарастающему фронту сигнала ТСК в соответствии с сигналом, присутствующим на выводе TMS. После включения питания контроллер находится в состоянии Test-Logic-Reset. Работа по интерфейсу JTAG осуществляется следующим образом (полагаем, что изначально ТАР-контроллер находится в состоянии Run-Test/Idle): 1. На вход TMS подается последовательность сигналов 1, 1, 0, 0, которые «защелкиваются» по нарастающему фронту сигнала ТСК. В результате ТАР-контроллер переходит в состояние Shift-IR, в котором к входу TDI подключается сдвиговый регистр команд. После этого Таблица 14.19. Выводы, используемые интерфейсом JTAG Название AThiegal6x/32x ATmega64x/128x AItaegal62x ATmegal64x/324x/644x ATmegal65x ATmega325x/3250x, ATmega645x/6450x ATmega640x, ATmegal280x/1281x, ATmega2560x/2 Описание
14.4. Программирование по интерфейсу JTAG ¦ 541 Рис. 14.14. Диаграмма состояний ТАР-контроллера на вход TDI подается, начиная с младшего бита, 4-битный код команды. Занесение битов кода в регистр команд также осуществляется по нарастающему фронту сигнала ТСК. При загрузке трех младших битов на выводе TMS должен удерживаться сигнал лог. О, чтобы ТАР-контроллер оставался в состоянии Shift-IR. Старший бит кода команды заносится в регистр при выходе контроллера из этого состояния, осуществляемого путем подачи на вход TMS лог. 1. При этом контроллер переходит в состояние Exit-IR. Во время загрузки команды на вывод TDO выдается значение $01 (начиная с младшего бита). Загруженная команда определяет, какой из регистров данных JTAG будет далее подключен между выводами TDI и TDO, а также
542 ¦ Глава 14. Программирование микроконтроллеров AYR семейства Mega управляет элементами микроконтроллера, с которыми связан этот регистр данных. 2. На вход TMS подается последовательность сигналов 1,0, в результате чего микроконтроллер возвращается в состояние Run-Test/Idle. При прохождении состояния Update-IR содержимое сдвигового регистра фиксируется на его параллельном выходе. 3. На вход TMS подается последовательность сигналов 1, 0, 0, которые «защелкиваются» по нарастающему фронту сигнала ТСК. В результате ТАР-контроллер переходит в состояние Shift-DR. В этом состоянии в регистр данных, определяемый загруженной ранее командой, заносятся необходимые данные, начиная с младшего бита. Как и в случае команд, загрузка осуществляется с вывода TDI по нарастающему фронту сигнала ТСК. При загрузке всех битов регистра, кроме самого старшего, на выводе TMS должен удерживаться сигнал лог. О, чтобы ТАР-контроллер оставался в состоянии Shift-DR. Старший бит данных заносится в регистр при выходе контроллера из этого состояния, осуществляемого путем подачи на вход TMS лог. 1. При этом контроллер переходит в состояние Exit-DR. Одновременно с загрузкой данных на вывод TDO выдается, начиная с младшего бита, содержимое регистра данных, «захваченного» в состоянии Capture-DR. 4. На вход TMS подается последовательность сигналов 1,0, в результате чего микроконтроллер вновь возвращается в состояние Run-Test/Idle. Если выбранный регистр имеет параллельный выход, то его содержимое фиксируется на нем при прохождении состояния Update-DR. Остается только добавить, что независимо от начального состояния ТАР-контроллера он всегда возвращается в состояние Test-Logic-Reset после удержания на выводе TMS сигнала лог. 1 в течение 5 периодов сигнала ТСК. 14.4.2. Использование интерфейса JTAG для программирования кристалла Разрешение/запрещение интерфейса JTAG (причем не только для программирования) осуществляется при помощи конфигурационной ячейки JTAGEN. Если она не запрограммирована A), то выводы ТАР работают как обычные контакты портов ввода/вывода, а ТАР-контроллер находится в состоянии сброса. Для включения интерфейса ячейка JTAGEN должна быть запрограммирована (состояние по умолчанию). Кроме того, должен быть сброшен бит JTD регистра MCUCSR или MCUCR (Рис. 14.15). Причем, для изменения состояния этого бита новое значение необходимо записать в него дважды в течение четырех тактов.
14.4. Программирование по интерфейсу JTAG ¦ 543 Рис. 14.15. Регистры MCUCSR/MCUCR применительно к интерфейсу JTAG Описанный механизм позволяет использовать выводы ТАР как в качестве контактов портов ввода/вывода при нормальном функционировании микроконтроллера, так и в качестве выводов собственно порта JTAG при программировании кристалла. Разумеется, этот механизм не применим в том случае, если порт JTAG используется для отладки или тестирования. 14.4.3. Команды JTAG, используемые при программировании Из 16 команд, поддерживаемых интерфейсом, при программировании используются только пять. Описания этих команд приведены ниже. AVR_RESET (код команды $0С) Эта команда предназначена для перевода микроконтроллера в состояние сброса и соответственно вывода его из этого состояния. В качестве регистра данных выбирается 1 -битный регистр сброса (Reset Register). Запись 1 в этот регистр эквивалентна подаче на вывод RESET микроконтроллера напряжения НИЗКОГО уровня. В состоянии сброса микроконтроллер будет находиться до тех пор, пока в регистр сброса не будет записан 0. Активные состояния: • Shift-DR — осуществляется загрузка регистра сброса. PROG.ENABLE (код команды $04) Эта команда предназначена для разрешения программирования кристалла через порт JTAG. В качестве регистра данных выбирается 16-битный регистр разрешения программирования (Programming Enable Register). При записи в этот регистр числа $А370 (сигнатура разрешения программирования) разрешается программирование микроконтроллера по
544 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega интерфейсу JTAG. При выходе из режима программирования этот регистр должен сбрасываться. Активные состояния: • Shift-DR — осуществляется загрузка регистра разрешения прерывания; • Update-DR — осуществляется сравнение содержимого регистра с числом $А370 и в случае совпадения — перевод микроконтроллера в режим программирования. PROG_COMMANDS (код команды $05) Эта команда предназначена для загрузки команд программирования и выдачи результатов их выполнения (если они есть). В качестве регистра данных выбирается 15-битный регистр команд (Programming Command Register). Активные состояния: • Capture-DR — результат выполнения предыдущей команды загружается в регистр; • Shift-DR — по нарастающему фронту сигнала ТСК осуществляется выдача результата с одновременной загрузкой новой команды; • Update-DR — загруженная команда подается на блок памяти микроконтроллера; • Run-Test/Idle — в ряде случаев генерируется один тактовый импульс, необходимый для выполнения команды. PROG.PAGELOAD (код команды $06) Эта команда предназначена для непосредственной загрузки страницы памяти программ через порт JTAG. Реализация этой команды зависит от модели микроконтроллера. В «старых» моделях (ATmegal6x/32x/64x/128x и ATmegal62x) в качестве регистра данных выбирается регистр загрузки виртуальной страницы (Virtual FLASH Page Load Register), размер которого равен размеру одной страницы памяти программ. Собственно сдвиговый регистр является 8-битным, а побайтная пересылка данных в буфер осуществляется автоматически. Активные состояния: • Shift-DR — осуществляется побитовая загрузка данных и побайтная их пересылка в буфер страницы FLASH-памяти. В остальных моделях в качестве регистра данных выбирается 8-битный регистр данных FLASH-памяти.
14.4. Программирование по интерфейсу JTAG ¦ 545 Активные состояния: • Shift-DR — осуществляется побитная загрузка байта данных; • Update-DR — содержимое регистра данных FLASH-памяти копируется во временный регистр в буфере страницы. Чередование старшего и младшего байта при каждом прохождении состояния Update-DR осуществляется автоматически, начиная с младшего байта при загрузке команды. PROG_PAGEREAD (код команды $07) Эта команда предназначена для считывания содержимого страницы памяти программ через порт JTAG. Реализация этой команды также зависит от модели микроконтроллера. В «старых» моделях (ATmegal6x/32x/64x/128x и ATmegal62x) в качестве регистра данных выбирается регистр чтения виртуальной страницы (Virtual FLASH Page Read Register), размер которого на 1 байт больше размера страницы памяти программ. Побайтная пересылка содержимого страницы в сдвиговый регистр осуществляется автоматически. Активные состояния: • Shift-DR — осуществляется побайтная пересылка содержимого страницы FLASH-памяти в сдвиговый регистр и побитовая его выдача на вывод TDO. Первые 8 тактов используются для первоначальной загрузки сдвигового регистра, поэтому выдаваемые в это время биты следует игнорировать. В остальных моделях в качестве регистра данных выбирается 8-битный регистр данных FLASH-памяти. Активные состояния: • Capture-DR — содержимое выбранного байта защелкивается в регистре данных FLASH-памяти. Чередование старшего и младшего байта при каждом прохождении состояния Capture-DR осуществляется автоматически, начиная с младшего байта при загрузке команды. • Shift-DR — осуществляется побитовая загрузка байта данных. 14.4.4. Алгоритм программирования В этом разделе описываются действия, которые необходимо выполнять для программирования микроконтроллеров через порт JTAG. Формат всех команд, используемых при программировании (не путать с командами JTAG), приведен в Табл. 14.20.
546 ¦ Глава 14. Программирование микроконтроллеров A VR семейства Mega Таблица 14.20. Команды программирования по интерфейсу JTAG Команда 1 2 3 а. Стирание кристалла Ь.Запрос состояния операции а. Вход в режим записи FLASH-памяти Ь. Загрузка дополнительного байта адреса с. Загрузка старшего байта адреса d. Загрузка младшего байта адреса е. Загрузка младшего байта данных f. Загрузка старшего байта данных g. Фиксация данных h. Запись страницы FLASH-памяти i. Запрос состояния операции а. Вход в режим чтения FLASH-памяти Ь. Загрузка дополнительного байта адреса с. Загрузка старшего байта адреса d. Загрузка младшего байта адреса е. Чтение младшего и старшего байтов данных TDI 0100011 10000000 0110001 10000000 0110011 10000000 0110011 10000000 0110011_10000000 0100011.00010000 0001011_сссссссс 0000111_аааааааа 000001 ljbbbbbbb 001001 ljmuii 0010111 Jiiiiiii 0110111 00000000 1110111 00000000 0110111_00000000 0110111 00000000 0110101 00000000 0110111 00000000 0110111_00000000 0110111_00000000 0100011_00000010 0001011_сссссссс 0000111_аааааааа 000001 ljbbbbbbb 0110010 00000000 0110110 00000000 0110111 00000000 ТОО ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх хххххох_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх хххххох_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_оооооооо ххххххх_оооооооо Примечание - 2 - - - - - - - - 2 - , - - - 9 8
14.4. Программирование по интерфейсу JTAG ¦ 547 (продолжение) Команда 4 5 6 а. Вход в режим записи ЕЕ PROM-памяти Ь. Загрузка старшего байта адреса с. Загрузка младшего байта адреса d. Загрузка байта данных е. Фиксация данных f. Запись страницы EEPROM-памяти g. Запрос состояния операции а. Вход в режим чтения EEPROM-памяти Ь. Загрузка старшего байта адреса с. Загрузка младшего байта адреса d. Чтение байта данных а. Вход в режим записи конфигурационных ячеек Ь. Загрузка байта данных с.Запись дополнительного конфигурационного байта d. Запрос состояния операции е. Загрузка байта данных TDI 0100011.00010001 0000111_аааааааа 000001 ljbbbbbbb 001001 ljiiiiiii 0110111 00000000 1110111 00000000 0110111 00000000 0110011 00000000 0110001 00000000 0110011 00000000 0110011_00000000 OllOOlLOOOOOOOO 010001 lJJOOOOOll 000011I_aaaaaaaa 000001 l_bbbbbbbb 0110011 bbbbbbbb 0110010 00000000 OllOOlLOOOOOOOO 0100011JH000000 001001 ljiiiiiii 0111011 00000000 0111001 00000000 0111011 00000000 0111011JH000000 OllOlllJJOOOOOOO 001001 ljmuii TDO xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxox_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_oooooooo xxxxxxxjcxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxxx_xxxxxxxx xxxxxox_xxxxxxxx xxxxxxxxxxxxxxx Примечание - - - - - - 2 - - - - - 3,5 - 2 3,5
548 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega (продолжение) Команда 6 7 8 f. Запись старшего конфигурационного байта g. Запрос состояния операции h. Загрузка байта данных i. Запись младшего конфигурационного байта j. Запрос состояния операции а. Вход в режим записи ячеек защиты Ь. Загрузка байта данных с.Запись байта защиты d. Запрос состояния операции а. Вход в режим чтения конфигурационных ячеек и ячеек защиты Ь. Чтение дополнительного конфигурационного байта с. Чтение старшего конфигурационного байта d. Чтение младшего конфигурационного байта е. Чтение байта защиты TDI 0110111 00000000 0110101 00000000 0110111 00000000 0110111 00000000 0110111_00000000 0010011 iiiiiiii 0110011 00000000 0110001 00000000 0110011 00000000 OllOOllJOOOOOOO 0110011_00000000 0100011_00100000 001001 ljliiiiii 0110011 00000000 0110001 00000000 0110011 00000000 0110011_00000000 0110011.00000000 0100011_00000100 0111010 00000000 0111011_00000000 ОПИЮ 00000000 0111111_00000000 0110010 00000000 0110011_00000000 0110110 00000000 0110111_00000000 TDO ххххххх_хххххххх ххххххххххххххх ххххххх_хххххххх ххххххххххххххх хххххох_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххххххххххх хххххох_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_хххххххх хххххох_хххххххх ххххххх_хххххххх ххххххх_хххххххх ххххххх_оооооооо ххххххх_хххххххх ххххххх_оооооооо ххххххх_хххххххх ххххххх_оооооооо ххххххх_хххххххх ххххххх_ххоооооо Примечание - 2 3,5 - 2 - 3,6 - 2 - 5 5 5 4,6
14.4. Программирование по интерфейсу JTAG ¦ 549 (продолжение) Команда 8 9 10 11 f. Чтение конфигурационных ячеек и ячеек защиты а. Вход в режим чтения ячеек идентификатора Ь. Загрузка байта адреса с. Чтение байта идентификатора а. Вход в режим чтения калибровочной ячейки Ь. Загрузка байта адреса с. Чтение калибровочной константы а. Загрузка команды «Нет операции» TDI 0111010 00000000 0111110 00000000 0110010 00000000 0110110 00000000 0110111_00000000 0100011 00001000 000001 ljbbbbbbb 0110010 00000000 0110011_00000000 0100011_00001000 000001 ljbbbbbbb 0110110 00000000 0110111_00000000 0100011 00000000 0110011_00000000 TDO ххххххх_хххххххх ххххххх_оооооооо ххххххх_оооооооо ххххххх_оооооооо ххххххх_ххоооооо ххххххх_хххххххх ххххххх_хххххххх ххххххххххххххх ххххххх_оооооооо ххххххх_хххххххх ххххххх_хххххххх ххххххххххххххх хххххххоооооооо ххххххх_хххххххх ххххххх_хххххххх Примечание 4 4,7 1 4,8 4,9 4,10 - - - - - - - Примечания: 1. Условные обозначения, используемые в таблице: а — биты старшего байта адреса; b — биты младшего байта адреса; i — посылаемые в микроконтроллер данные; о — считываемые из микроконтроллера данные; х — состояние бита безразлично. 2. Повторять до тех пор, пока о = 1. 3. Для программирования ячейки соответствующий ей бит должен быть сброшен, для стирания — установлен. 4.0 — ячейка запрограммирована, 1 — не запрограммирована. 5. Соответствие битов конфигурационным ячейкам — см. Табл. 14.5. 6. Соответствие битов ячейкам защиты — см. Рис. 14.1. 1 7. Дополнительный байт. 8. Старший байт. 9. Младший байт. 10. Байт защиты.
550 ¦ Глава 14. Программирование микроконтроллеров Л VR семейства Mega Ниже приведен порядок выполнения 12 операций программирования (номера команд в соответствии с Табл. 14.20). Операция «Вход в режим программирования»: 1. Загрузить команду AVR_RESET и занести 1 в регистр сброса. 2. Загрузить команду PROG_ENABLE и занести в регистр разрешения программирования значение 1010_0011_0111_0000 ($А370). Операция «Выход из режима программирования»: 1. Загрузить команду PROG_COMMANDS. 2. Запретить выполнение всех команд программирования, запустив команду «Нет операции» (п.11а). 3. Загрузить команду PROG_ENABLE и занести в регистр разрешения программирования значение 0000_0000_0000_0000. 4. Загрузить команду AVR_RESET и занести 0 в регистр сброса. Операция «Стирание кристалла»: 1. Загрузить команду PROG_COMMANDS. 2. Начать стирание кристалла, запустив команду 1а. 3. Дождаться окончания выполнения этой операции, контролируя значение, возвращаемое командой lb. В качестве альтернативы можно просто выждать время /wlrh_ce (cm- Табл. 14.16). Операция «Программирование FLASH-памяти»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим программирования FLASH-памяти (команда 2а). 3. Загрузить дополнительный байт адреса (команда 2Ь). 4. Загрузить старший байт адреса (команда 2с). 5. Загрузить младший байт адреса (команда 2d). 6. Загрузить данные (команды 2е, 2f и 2g). 7. Повторить пп. 5 и 6 для каждой ячейки страницы памяти программ. 8. Записать страницу (команда 2h). 9. Дождаться окончания выполнения этой операции, контролируя значение, возвращаемое командой 2h. В качестве альтернативы можно просто выждать время /wlrh (см- Табл. 14.16). 10. Повторить пп. 3...9 для программирования остальных страниц памяти программ. Существует также другой, более эффективный способ загрузки данных в микроконтроллер, основанный на использовании команды PROG_PAGELOAD. 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим программирования FLASH-памяти (команда 2а).
14.4. Программирование по интерфейсу JTAG ¦ 551 3. Загрузить адрес страницы, используя команды 2Ь и 2с. 4. Загрузить команду PROG_PAGELOAD. 5. Загрузить содержимое страницы, начиная с LSB первой ячейки на странице и заканчивая MSB последней ячейки. В ряде моделей после загрузки каждого байта необходимо переводить ТАР-контроллер в состояние Update-DR для копирования содержимого регистра данных в буфер страницы (см. описание команды PROG_PAGELOAD). 6. Загрузить команду prog_commands. 7. Записать страницу (команда 2g). 8. Дождаться окончания выполнения этой операции, контролируя значение, возвращаемое командой 2h. В качестве альтернативы можно просто выждать время /wlrh (cm- Табл. 14.16). 9. Повторить пп. 3...8 для программирования остальных страниц памяти программ. Операция «Чтение FLASH-памяти»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим чтения FLASH-памяти (команда За). 3. Загрузить адрес ячейки памяти (команды ЗЬ, Зс и 3d). 4. Считать содержимое ячейки (команда Зе). 5. Повторить пп. 3 и 4 для чтения остальных ячеек памяти программ. Для выполнения рассматриваемой операции можно также воспользоваться командой PROG_PAGEREAD: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим чтения FLASH-памяти (команда За). 3. Загрузить адрес страницы памяти программ (команды ЗЬ и Зс). Биты PCWORD (см. Рис. 4.4) должны быть равны 0. 4. Загрузить команду PROG_PAGEREAD. 5. Считать содержимое страницы, начиная с LSB первой ячейки на странице и заканчивая MSB последней ячейки. Напоминаем, что в «старых» моделях первые 8 битов необходимо игнорировать. В остальных моделях содержимое FLASH-памяти защелкивается в регистре данных при прохождении состояния Capture-DR. Поскольку оно проходится раньше состояния Shift-DR, первый байт будет содержать корректные данные (см. описание команды PROG_P AGERE ad). 6. Загрузить команду PROG_COMMANDS. 7. Повторить пп. 3...6 для чтения остальных страниц памяти программ.
552 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Операция «Программирование EEPROM-памяти»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим программирования EEPROM-памяти (команда 4а). 3. Загрузить старший байт адреса (команда 4Ь). 4. Загрузить младший байт адреса (команда 4с). 5. Загрузить данные (команды 4d и 4е). 6. Повторить пп. 4 и 5 для всех ячеек страницы. 7. Записать страницу (команда 40- 8. Дождаться окончания выполнения этой операции, контролируя значение, возвращаемое командой 4g. В качестве альтернативы можно просто выждать время /wlrh (cm- Табл. 14.16). 9. Повторить пп. 3...8 для программирования остальных страниц EEPROM-памяти. Операция «Чтение EEPROM-памяти»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим чтения EEPROM-памяти (команда 5а). 3. Загрузить адрес ячейки памяти (команды 5Ь и 5с). 4. Считать содержимое ячейки (команда 5d). 5. Повторить пп. 3 и 4 для чтения остальных ячеек EEPROM-памяти. Операция «Программирование конфигурационных ячеек»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим программирования конфигурационных ячеек (команда 6а). 3. Загрузить байт данных (команда 6Ь). 4. Записать дополнительный байт конфигурации (команда 6с). 5. Дождаться окончания выполнения этой операции, контролируя значение, возвращаемое командой 6d. В качестве альтернативы можно просто выждать время /wlrh (cm- Табл. 14.16). 6. Загрузить байт данных (команда бе). 7. Записать старший байт конфигурации (команда 60- 8. Дождаться окончания выполнения этой операции, контролируй значение, возвращаемое командой 6g. В качестве альтернативы можно просто выждать время /wlrh (cm- Табл. 14.16). 9. Загрузить байт данных (команда 6h). 10. Записать младший байт конфигурации (команда 6i). 11. Дождаться окончания выполнения этой операции, контролируя значение, возвращаемое командой 6j. В качестве альтернативы можно поосто выждать время /wlrh (cm- Табл. 14.16).
14.4. Программирование по интерфейсу JTAG ¦ 553 Операция «Программирование ячеек защиты»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим программирования ячеек защиты (команда 7а). 3. Загрузить байт данных (команда 7Ь). 4. Записать байт защиты (команда 7с). 5. Дождаться окончания выполнения этой операции, контролируя значение, возвращаемое командой 7d. В качестве альтернативы можно просто выждать время /wlrh (cm- Табл. 14.16). Операция «Чтение конфигурационных ячеек и ячеек защиты»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим чтения конфигурационных ячеек и ячеек защиты (команда 8а). 3. Для чтения всех ячеек выполнить команду 8f. 4. Для чтения только дополнительного байта конфигурации выполнить команду 8Ь. 5. Для чтения только старшего байта конфигурации выполнить команду 8с. 6. Для чтения только младшего байта конфигурации выполнить команду 8d. 7. Для чтения только байта защиты выполнить команду 8е. Операция «Чтение ячеек идентификатора»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим чтения ячеек идентификатора (команда 9а). 3. Загрузить адрес $00, используя команду 9Ь. 4. Прочитать первый байт идентификатора (команда 9с). 5. Повторить пп. 3 и 4 для чтения второго (адрес $01) и третьего (адрес $02) байта идентификатора. Операция «Чтение калибровочных ячеек»: 1. Загрузить команду PROG_COMMANDS. 2. Войти в режим чтения калибровочных ячеек (команда 10а). 3. Загрузить адрес ячейки (команда 10Ь). 4. Считать значение калибровочной константы (команда Юс).
554 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega 14.5. Самопрограммирование микроконтроллеров семейства Меда 14.5.1. Общие сведения Все микроконтроллеры семейства имеют возможность самопрограммирования, т. е. самостоятельного изменения содержимого своей памяти программ. Эта особенность позволяет создавать на их основе очень гибкие системы, алгоритм работы которых будет меняться самим микроконтроллером в зависимости от каких-либо внутренних условий или внешних событий. Во всех микроконтроллерах семейства, за исключением модели ATmega48x, вся область памяти программ логически разделена на две секции — секцию прикладной программы (Application Section) и секцию загрузчика (Boot Loader Section). Изменение памяти программ осуществляется программой-загрузчиком, расположенной в одноименной секции. Для загрузки нового содержимого памяти программ, а также для выгрузки старого программа-загрузчик может использовать любой интерфейс передачи данных (USART, SPI, TWI), имеющийся в составе конкретного микроконтроллера. Сразу отмечу, что загрузчик может изменять содержимое обеих секций. Это позволяет ему модифицировать собственный код и даже удалять себя из памяти, если надобность в нем отпадет. Уровень доступа (чтение/запись) к каждой из секций задается пользователем с помощью ячеек защиты BLB02:BLB01 и BLB12:BLB11, описанных в подразделе 14.1.1 этой главы (см. Табл. 14.3 и Табл. 14.4). В модели же ATmega48x изменение содержимого памяти программ может быть осуществлено из любого ее места, т. е. секцией загрузчика, по сути дела, является вся память программ. Переход к программе-загрузчику может осуществляться различным образом. В частности, она может быть вызвана из основной программы командами CALL/JMP. Другим способом является перемещение вектора сброса в начало секции загрузчика. В этом случае запуск программы-загрузчика будет осуществляться автоматически после каждого сброса микроконтроллера. Положение вектора сброса определяется состоянием конфигурационной ячейки BOOTRST. Если в ней содержится 1, вектор сброса располагается в начале памяти программ, по адресу $0000. При запрограм- мированнной ячейке @) вектор сброса располагается в начале секции загрузчика (адреса — см. Табл. 14.21). Размер секции загрузчика и соответственно размер секции прикладной программы практически во всех микроконтроллерах задается с помощью двух конфигурационных ячеек — BOOTSZ1 :BOOTSZ0. Исключение составляют лишь модели ATmega48x, в которых разделение на секции отсутствует как таковое. Возможные конфигурации памяти программ всех микроконтроллеров семейства, кроме указанных моделей, приведены в Табл. 14.21.
14.5. Самопрограммирование микроконтроллеров семейства Mega ¦ 555 Таблица 14.21. Конфигурация памяти программ Модель ATmega8515x/8535x, ATmega8x, ATmega88x ATmegal6x, ATmegal62x, ATmegal64x, ATmegal65x, ATmegal68x ATmega32x, ATmega324x, ATmega325x/3250x ATmega64x, ATmega640x, ATmega645x/6450x ATmegal28x, ATmegal280x/1281x ATmega2560x/2561x BOOTSZ1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 BOOTSZO 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 Размер загрузчика [слов] 128 256 512 1024 128 256 512 1024 256 512 1024 2048 512 1024 2048 4096 512 1024 2048 4096 512 1024 2048 4096 Кол-во страниц 4 8 16 32 2 4 8 16 4 8 16 32 4 8 16 32 4 8 16 32 4 8 16 32 Секция прикладной программы $000...$F7F $000...$EFF $000...$DFF $000...$BFF $0000...$ 1F7F $0000...$ 1EFF $0000...$ 1DFF $0000...$1BFF $0000...$3EFF $0000...$3DFF $0000...$3BFF $0000...$37FF $0000...$7DFF $0000...$7BFF $0000...$77FF $0000...$6FFF $0000...$FDFF $0000...$FBFF $0000...$F7FF $0000...$EFFF $0000...$1FDFF $0000...$1FBFF $0000...$1F7FF $0000...$1EFFF Секция загрузчика $F80...$FFF $F00...$FFF $E00...$FFF $C00...$FFF $1F80...$1FFF $1F00...$1FFF $1E00...$1FFF $1C00...$1FFF $3F00...$3FFF $3E00...$3FFF $3COO...$3FFF $3800...$3FFF $7E00...$7FFF $7C00...$7FFF $7800...$7FFF $7000...$7FFF $FE00...$FFFF $FC00...$FFFF $F800...$FFFF $F000...$FFFF $1FE00...$FFFF $1FC00...$FFFF $1F800...$FFFF $1F000...$FFFF 14.5.2. Области RWWm NRWW Помимо разбиения памяти программ на секции, имеется (опять же, кроме моделей ATmega48x) и другое разделение памяти программ. Вся память программ разбита на две области фиксированного размера, называемые «чтение при записи» (Read-While-Write — RWW) и «нет чтения при записи» (No Read-While-Write — NRWW). Размеры этих областей для всех микроконтроллеров семейства приведены в Табл. 14.22.
556 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Таблица 14.22. Области RWWm NRWW Модель ATmega8515x/8535x, ATmega8x, ATmega88x ATmegal6x, 162x, ATmegal64x, ATmegal65x, ATmegal68x ATmega32x, ATmega324x, ATmega325x/3250x ATmega64x, ATmega640x, ATmega645x/6450x ATmegal28x, ATmegal280x/1281x ATmega2560x/2561x Область RWW Кол-во страниц 96 112 224 224 480 992 Адреса $000...$BFF $0000...$ 1BFF $0000...$37FF $0000...$6FFF $0000...$EFFF $0000...$1EFFF Область NRWW | Кол-во страниц 32 16 32 32 32 32 Адреса $C00...$FFF $1C00...$1FFF $3800...$3FFF $7000...$7FFF $F000...$FFFF $1F000...$1FFFF Отличие между этими областями заключается в различном поведении центрального процессора при изменении расположенных в них данных: • во время выполнения операции стирания или записи страницы памяти программ, расположенной в области RWW, процессор может осуществлять чтение из области NRWW; • во время выполнения операции стирания или записи страницы памяти программ, расположенной в области NRWW, процессор останавливается до окончания этой операции. Таким образом, во время изменения содержимого страницы памяти программ, расположенной в области RWW, чтение этой области запрещено. Попытка обратиться во время программирования к коду, находящемуся в области RWW (в результате выполнения команд CALL/JMP/LPM или в результате прерывания), может привести к непредсказуемым последствиям. Во избежание этого следует либо запретить прерывания, либо перенести таблицу векторов прерываний в секцию загрузчика, которая всегда находится в области NRWW. Для определения, разрешено чтение из области RWWitrm нет, предназначен флаг RWWSB регистра SPMCR (см. ниже). Флаг, установленный в 1, означает, что область RWW заблокирована для чтения. По окончании операции программирования флаг RWWSB должен быть сброшен программно (см. описание регистра SPMCR). Напротив, код, расположенный в области NRWW, может быть считан во время изменения страницы памяти программ, расположенной в облас-
14.5. Самопрограммирование микроконтроллеров семейства Mega ¦ 557 ти RWW, а при изменении содержимого области NRWW процессор останавливается до завершения операции. Сказанное выше проиллюстрировано на Рис. 14.16. Рис. 14.16. Отличие между областями RWW и NRWW 14.5.3. Функционирование загрузчика Управление процессом самопрограммирования Изменение содержимого памяти программ и ячеек защиты загрузчика осуществляется с помощью команды SPM (Store Program Memory). Параметрами этой команды являются адрес области памяти, загружаемый предварительно в индексный регистр Z, и, при необходимости, данные, находящиеся в регистровой паре R1:R0. Управление процессом программирования и, в частности, определение операции, выполняемой при вызове команды SPM, осуществляется с помощью регистра ввода/вывода SPMCR (модели ATmega8515x/8535x, ATmega8x/16x/32x/64x/128x и ATmegal62x) или SPMCSR (в остальных моделях). Во всех микроконтроллерах, за исключением моделей ATmega64x/128x, этот регистр расположен по адресу $37 ($57). В моделях же ATmega64x/128x этот регистр расположен в пространстве дополнительных регистров ввода/вывода по адресу ($68). Формат этих регистров для различных моделей семейства показан на Рис. 14.17, а описание его битов приведено в Табл. 14.23.
558 ¦ Глава 14. Программирование микроконтроллеров A VR семейства Mega Рис. 14.17. Формат регистра SPMCR/SPMCSR Таблица 14.23. Биты регистра SPMCR/SPMCSR Бит 7 6 5 4 3 Название SPMIE RWWSB - RWWSRE BLBSET Описание Разрешение прерывания «Готовность SPM». Если в этом бите записана лог. 1 и флаг I регистра SREG также установлен в 1, то разрешается прерывание «Готовность SPM» Прерывание генерируется все время, пока бит SPM EN регистра сброшен в 0 Запрещен доступ к области RWW. Этот флаг показывает возможность обращения по адресам, расположенным в области RWW. Если флаг установлен в 1, доступ к области RWW запрещен, если сброшен в 0 — разрешен. Установка этого флага осуществляется аппаратно при выполнении операций записи или стирания страницы памяти. Сброс флага осуществляется либо программно, записью лог. 1 в бит RWWSRE по окончании операции, либо аппаратно, при запуске операции загрузки страницы Зарезервировано, читается как 0 Чтение области RWW разрешено. Одновременная установка этого бита и бита SPMEN позволяет разрешить доступ к области RWW. Разрешение доступа к этой области осуществляется запуском команды SPM в течение 4 тактов после установки указанных битов. Разрешение доступа к области RWW может осуществляться только после завершения операции программирования (после сброса флага SPMEN) Изменение ячеек защиты загрузчика. При одновременной установке этого бита и бита SPMEN команда SPM, запущенная в течение последующих 4 тактов, осуществит установку защитных ячеек загрузчика в соответствии с содержимым регистра R0. Сброс бита BLBSET осуществляется аппаратно после установки ячеек защиты либо по истечении указанного времени. По команде (E)LPM, запущенной в течение 3 тактов после установки указанных битов, будет осуществлено чтение либо конфигурационных ячеек, либо ячеек защиты (зависит от значения бита Z0 регистра Z)
14.5. Самопрограммирование микроконтроллеров семейства Mega ¦ 559 (продолжение) Бит 2 1 0 Название PGWRT PGERS SPMEN (SELFPRGEN2)) Описание Запись страницы. При одновременной установке этого бита и бита SPMEN команда SPM, запущенная в течение последующих 4 тактов, осуществит запись страницы памяти программ из временного буфера. Адрес страницы должен быть загружен в старший байт регистра Z (R31). Сброс бита PGWRT осуществляется аппаратно по окончании записи страницы либо по истечении указанного времени. При записи в секцию NRWW центральный процессор останавливается на время выполнения операции1* Стирание страницы. При одновременной установке этого бита и бита SPMEN команда SPM, запущенная в течение последующих 4 тактов, осуществит стирание страницы памяти программ. Адрес страницы должен быть загружен в старший байт регистра Z (R31). Сброс бита PGERS осуществляется аппаратно по окончании стирания страницы либо по истечении указанного времени. При записи в секцию NRWW центральный процессор останавливается на время выполнения операции!) Разрешение выполнения команды SPM. Установка этого бита разрешает запуск команды SPM в течение последующих 4 тактов. Если бит SPMEN устанавливается одновременно с одним из битов RWWSRE, BLBSET, PGWRT или PGERS, выполняется операция, определяемая этим битом (см. описание битов). Если устанавливается только бит SPMEN, осуществляется сохранение содержимого регистров Rl :R0 во временном буфере по адресу, находящемуся в регистре Z (LSB регистра игнорируется). Сброс бита SPMEN осуществляется аппаратно после завершения операции либо по истечении указанного времени 1) В моделях ATmega48x процессор останавливается при обращении к любому адресу. 2) В моделях ATmega48x/88x/168x. Обратите внимание на то, что во время записи в EEPROM-память изменение регистра SPMCR невозможно. Поэтому перед тем как записать какое-либо значение в регистр SPMCR, рекомендуется дождаться сброса флага EEWE регистра EECR. Для адресации памяти программ при использовании команды SPM используется индексный регистр Z, получаемый объединением двух регистров общего назначения — R30 (младший байт) и R31 (старший байт), а в моделях с объемом памяти программ более 64 Кбайт — еще и регистр ввода/вывода RAMPZ. Поскольку память программ в микроконтроллерах семейства имеет страничную организацию, счетчик команд можно условно разбить на две части. Первая часть (младшие биты) адресует ячейку на странице, а вторая часть определяет страницу (Рис. 14.18). После запуска операции программирования содержимое регистра Z фиксируется и его можно использовать для других целей.
560 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Рис. 14.18. Адресация памяти программ при использовании команды SPM Изменение памяти программ Изменение содержимого памяти программ осуществляется в следующей последовательности: 1. Заполнение временного буфера страницы новым содержимым. 2. Стирание страницы. 3. Перенос содержимого буфера в память программ. Следует заметить, что стирание страницы может выполняться как после заполнения буфера, так и перед его заполнением. Однако, если необходимо изменить только часть страницы, приведенный порядок действий
14.5. Самопрограммирование микроконтроллеров семейства Mega ¦ 561 является, по понятным причинам, единственно возможным. В этом случае содержимое ячеек, не требующих изменения, сохраняется в буфере перед очисткой страницы. Для определения момента окончания выполнения операций можно либо опрашивать состояние флага SPMEN регистра SPMCR, дожидаясь его сброса, либо воспользоваться прерыванием «Готовность SPM». Это прерывание генерируется все время, пока флаг SPMEN сброшен. В последнем случае таблица векторов прерываний должна находиться в секции загрузчика, а это прерывание должно быть разрешено установкой флага SPMIE регистра SPMCR. Для стирания страницы памяти программ необходимо занести адрес страницы в регистр Z (секция PCPAGE), записать значение xOOOOOl 1 в регистр SPMCR и в течение последующих четырех тактов выполнить команду SPM. Содержимое регистров R1 и R0 при этом игнорируется. Для занесения слова команды в буфер следует загрузить адрес ячейки в регистр Z (секция PCWORD), а код операции — в регистры R1:R0. После этого необходимо записать значение xOOOOOl 1 в регистр SPMCR и в течение последующих четырех тактов выполнить команду SPM. Очистка буфера осуществляется автоматически, по окончании записи страницы, либо вручную, записью лог. 1 в бит RWWSRE регистра SPMCR. Следует заметить, что запись по одному и тому же адресу в буфере невозможна без его очистки. Запись содержимого буфера в память программ осуществляется аналогично. В регистр Z (секция PCPAGE) заносится адрес страницы, в регистр SPMCR записывается значение xOOOOlOl, и в течение последующих четырех тактов выполняется команда SPM. Содержимое регистров R1 и R0 при этом игнорируется. Изменение ячеек защиты загрузчика Изменение ячеек защиты загрузчика BLB12:BLB11 и BLB02:BLB01 также осуществляется командой SPM. Для этого необходимо загрузить в регистр R0 требуемое значение в соответствии с Рис. 14.19 (сброшенный бит означает программирование соответствующей ячейки). Рис, 14.19. Содержимое R0 при изменении ячеек защиты загрузчика После этого необходимо записать значение xOOOlOOl в регистр SPMCR и в течение последующих четырех тактов выполнить команду SPM. Содержимое регистра Z при этом игнорируется, однако для совместимости с будущими устройствами рекомендуется записывать в него значение $0001. Во время программирования ячеек защиты можно обращаться к любой области памяти программ.
562 ¦ Глава 14. Программирование микроконтроллеров AVR семейства Mega Чтение конфигурационных ячеек и ячеек защиты Помимо программирования микроконтроллера, загрузчик может также считывать содержимое конфигурационных ячеек и ячеек защиты. Так, для чтения байта защиты следует загрузить в регистр Z число $0001, записать в регистр SPMCR значение хООО 1001 и в течение трех последующих тактов выполнить команду lpm. В результате содержимое байта защиты будет занесено в заданный регистр общего назначения. Соответствие битов регистра ячейкам приведено на Рис. 14.1. Чтение конфигурационных байтов осуществляется аналогично. В регистр Z загружается адрес байта ($0000 — младший байт, $0003 — старший байт, $0002 — дополнительный байт), после чего в регистр SPMCR следует записать значение хООО 1001 и в течение трех последующих тактов выполнить команду LPM. В результате выполнения команды содержимое выбранного байта конфигурации будет занесено в регистр общего назначения. Соответствие битов регистра конфигурационным ячейкам — см. Табл. 14.5. Пример реализации программы-загрузчика Ниже приведен пример реализации программы-загрузчика, осуществляющей простое копирование страницы памяти программ из ОЗУ в FLASH-память. Этот пример предназначен исключительно для иллюстрации возможностей самопрограммирования микроконтроллеров семейства, поэтому в нем отсутствуют некоторые элементы, обязательные в реальной программе. В частности, отсутствует такая важная вещь, как обработка ошибок. Кроме того, предполагается, что прерывания запрещены или что таблица векторов размещена в секции загрузчика. ; Адрес 1-го байта в ОЗУ передается в указателе Y ; Адрес 1-го байта в FLASH-памяти передается в указателе Z .equ PAGESIZEB = PAGESIZE*2 ; Размер страницы в байтах .org SMALLBOOTSTART Write_page: ; Стереть страницу ldi spmcrval, A«PGERS) I A«SPMEN) ; Разрешить адресацию области RWW ldi spmcrval, A«RWWSRE) I A«SPMEN) call Do_spm ; Передать данные из ОЗУ в буфер страницы ldi looplo,low(PAGESIZEB) ; Инициализировали счетчик байтов ldi loophi,high(PAGESIZEB) Wrloop: Id r0,Y+ Id rl,Y+ ldi spmcrval, A«SPMEN) call Do_spm
14.5. Самопрограммирование микроконтроллеров семейства Mega ¦ 563 sbiw loophi:looplo,2 brne Wrloop ; Записать страницу subi ZL,low(PAGESIZEB) ; Восстановили указатель subci ZH,high(PAGESIZEB) ldi spmcrval, A«PGWRT) I A«SPMEN) call Do_spm ; Разрешить адресацию области RWW ldi spmcrval, A«RWWSRE) I A«SPMEN) call Do_spm ; Проконтролировать записанные данные ldi looplo,low(PAGESIZEB) ; Инициализировали счетчик байтов ldi loophi,high(PAGESIZEB) subi YL,low(PAGESIZEB) ; Восстановили указатель sbci YH,high(PAGESIZEB) Rdloop: elpm rO,Z+ Id rl,Y+ cpse rO,rl jmp Error sbiw loophi:looplo,1 brne Rdloop ; Возврат в секцию прикладной программы Return: in tempi,SPMCSR sbrs tempi,RWWSB ; Если RWWSB установлен, доступ в секцию RWW ; запрещен ret ; Разрешить адресацию области RWW ldi spmcrval, A«RWWSRE) I A«SPMEN) call Do_spm rjmp Return Do_spm: ; Операция определяется содержимым spmcrval ; Проверить завершение предыдущей операции Wait_spm: in tempi,SPMCSR sbrc templ,SPMEN rjmp Wait_spm ; Запретить прерывания, сохранить регистр статуса in temp2,SREG cli ; Убедиться в отсутствии записи в EEPROM Wait_ee: sbic EECR,EEWE rjmp Wait_ee out SPMCSR,spmcrval spm ; Восстановить регистр SREG (для повторного разрешения прерываний) out SREG,temp2 ret
Приложения Приложение 1. Сводная таблица микроконтроллеров |ATmega8515L-8Pw ATmega8515L-8Aw ATmega8515L-8Mw ATmega8515L-8Jw |ATmega8515-16Pw ATmega8515-l6Aw ATmega8515-16Mw |ATmega8515-16Jw ATmega8535L-8Pw ATmega8535L-8Aw ATmega8535L-8Mw J ATmega8535L-8Jw ATmega8535-16Pw ATmega8535-16Aw ATmega8535-l6Mw |ATmega8535-16Jw ATmega8L-8Pw I ATmega8L-8Aw | ATmega8L-8Mw 8 8 8 8 8 512 512 512 512 512 512 512 512 512 IK • • - - - 130 130 130 130 130 35 35 32 32 23 16 16 20 20 18 3 3 3 3 2 1 1 8 2 2 1 1 1 1 1 • • • • • - - • • • Обозначение1* Память данных [байт] Память программ (FLASH) [Кбайт] EEPROM SRAM Внешнее ОЗУ Кол-во команд Кол-во линий ввода/вывода Всего векторов Кол-во источников внешних прерываний 8-битные 16-битные сторожевой Часы реального времени (RTC) Прерывания Таймеры
AVR семейства Mega Интерфейсы 0...8 0...16 0...8 0...16 0...8 Напряжение питания [В] 2.7...5.5 4.5.-5.5 2.7...5.5 4.5...5.5 2J...5.5 Корпус Тип DIP-40 TQFP-44 MLF-44 PLCC-44 DIP-40 TQFP-44 MLF-44 PLCC-44 DIP-40 TQFP-44 MLF-44 PLCC-44 DIP-40 TQFP-44 MLF-44 PLCC-44 DIP-28 TQFP-32 MLF-32 |шим SPI USART Аналоговый компаратор АЦП A0-битный) [каналов] Встроенный ЛС-генератор Схема BOD Возможность внутрисхемного программирования и самопрограммирования Рабочая частота [МГц] № Рис. (Прил. 2)
566 ¦ Приложения ATmega8-16Pw ATmega8-16Aw ATmega8-16Mw ATmegal6L-8Pw ATmegal6L-8Aw ATmegal6L-8Mw ATmegal6-16Pw ATmegal6-16Aw ATmegal6-16Mw ATmega32L-8Pw ATmega32L-8Aw ATmega32L-8Mw ATmega32-16Pw ATmega32-16Aw ATmega32-16Mw ATmega64L-8Aw ATmega64L-8Mw ATmega64-16Aw ATmega64-16Mw 'ATmegal28L-8Aw ATmegal28L-8Mw ATmegal28-16Aw ATmegal28-16Mw ATmega48V-10Px ATmega48V-10Ax ATmega48V-10Mx ATmega48-20Px ATmega48-20Ax ATmega48-20Mx 8 16 16 32 32 64 64 128 128 4 4 512 512 512 IK IK 2K 2K 4K 4K 256 256 IK IK IK 2K 2K 4K 4K 4K 4K 512 512 - - - - - • • • • - - 130 131 131 131 131 130 130 130 130 131 131 23 32 32 32 32 53 53 53 53 23 23 18 20 20 20 20 34 34 34 34 25 25 2 3 3 3 3 8 8 8 8 25 25 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 2 2 2 2 1 1 • • • • • • • • • • • • • • • • • • • • • • Обозначение1* [Память дан-] ных[байт] Память программ (FLASH) [Кбайт] EEPROM SRAM Внешнее ОЗУ Кол-во команд Кол-во линий ввода/вывода Всего векторов Кол-во источников внешних прерываний 8-битные 16-битные сторожевой Часы реального времени (RTC)
Приложение 1 ¦ 567 (продолжение) Интерфейсы Напряжение питания [В] Корпус Тип DIP-28 TQFP-32 MLF-32 DIP-40 TQFP-44 MLF-44 DIP-40 TQFP-44 MLF-44 DIP-40 TQFP-44 MLF-44 DIP-40 TQFP-44 MLF-44 TQFP-64 MLF-64 TQFP-64 MLF-64 TQFP-64 MLF-64 TQFP-64 MLF-64 DIP-28 TQFP-32 MLF-32 DIP-28 TQFP-32 MLF-32 Аналоговый компаратор АЦП A0-разр.) [каналов] Встроенный /гС-генератор Схема BOD Возможность внутрисхемного программирования и самопрограммирования Рабочая частота [МГц] ШИМ SPI USART № Рис. (Прил. 2)
568 ¦ Приложения Обозначение1* Память данных [байт] Прерывания Таймеры ATmega88V-10Px ATmega88V-10Ax ATmega88V-10Mx ATmega88-20Px ATmega88-20Ax ATmega88-20Mx ATmegal68V-10Px ATmegal68V-10Ax ATmegal68V-10Mx ATmegal68-20Px ATmegal68-20Ax ATmegal68-20Mx ATmegal62V-8Px ATmegal62V-8Ax ATmegal62V-8Mx ATmegal62-16Px ATmegal62-16Ax ATmegal62-16Mx ATmegal64V-10Px ATmegal64V-10Ax ATmegal64V-10Mx ATmegal64-20Px ATmegal64-20Ax ATmegal64-20Mx ATmega324V-10Px ATmega324V-10Ax ATmega324V-10Mx ATmega324-20Px ATmega324-20Ax ATmega324-20Mx Память программ (FLASH) [Кбайт] EEPROM SRAM Внешнее ОЗУ Кол-во команд Кол-во линий ввода/вывода Всего векторов Кол-во источников внешних прерываний 8-битные 16-битные сторожевой 1 ¦ Часы реального времени (RTQ
Приложение 1 ¦ 569 (продолжение) 6 6 6 6 6 6 6 6 6 6 1+USART 1+USART 1+USART 1+USART 1 1 1+USART 1+USART 1+USART 1+USART 1 1 1 1 2 2 2 2 2 2 1 1 1 1 - - 1 1 1 1 • • • • • • • • • • 8 8 8 8 - - 8 8 8 8 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 0...10 0...20 0...10 0...20 0...8 0...16 0...10 0...20 0...10 0...20 1.8...5.5 2J...5.5 1.8...5.5 2J...5.5 1.8...5.5 2.7...S.5 1.8...5.5 2J...5.5 1.8...5.5 2J...5.5 DIP-28 TQFP-32 MLF-32 DIP-28 TQFP-32 MLF-32 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 DIP-40 TQFP-44 MLF-44 DIP-40 TQFP-44 MLF-44 DIP-40 TQFP-44 MLF-44 1 3 7 1 3 7 1 3 7 1 3 7 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 2 4 8 1 ШИМ SPI USART Аналоговый компаратор АЦП A0-разр.) [каналов] Встроенный /ЗС-генератор Схема BOD Возможность внутрисхемного I программирования и самопрограммирования Рабочая частота [МГЦ] Интерфейсы Напряжение питания [В] Корпус Тип № Рис. (Прил. 2)
570 ¦ Приложения Обозначение1* Память данных [байт] Прерывания Таймеры ATmega644V-10Px ATmega644V-10Ax ATmega644V-10Mx ATmega644-20Px ATmega644-20Ax ATmega644-20Mx ATmegal65V-8Ax ATmegal65V-8Mx ATmegal65-16Ax ATmegal65-16Mx ATmega325V-8Ax ATmega325V-8Mx ATmega325-16Ax ATmega325-16Mx ATmega3250V-8Ax ATmega3250-16Ax ATmega645V-8Ax ATmega645V-8Mx ATmega645-16Ax ATmega645-16Mx ATmega6450V-8Ax ATmega6450-16Ax ATmega640V-8Ax ATmega640-16Ax ATmegal280V-8Ax ATmegal280-16Ax ATmegal281V-8Ax ATmegal281V-8Mx Память программ (FLASH) [Кбайт] EEPROM SRAM Внешнее ОЗУ Кол-во команд Кол-во линий ввода/вывода Всего векторов Кол-во источников внешних прерываний 8-битные 16-битные сторожевой Часы реального времени (RTQ
Приложение 7 ¦ 571 (продолжение) Интерфейсы Напряжение питания [В] Корпус Тип DIP-40 шим SPI | TWI USART Аналоговый компаратор I АЦП A0-разр.) [каналов] Встроенный Ж'-генератор I Схема BOD Возможность внутрисхемного программирования и самопрограммирования Рабочая частота [МГц]
572 ¦ Приложения Обозначение0 Память данных [байт] Прерывания Таймеры ATmegal281-16Ax ATmegal281-16Mx 128 4К 8К 135 54 47 24 ATmega2560V-8Ax 256 4К 8К 135 86 56 32 ATmega2560-16Ax 256 4К 8К 135 86 56 32 ATmega2561V-8Ax ATmega2561V-8Mx 256 4К 8К 135 54 47 24 ATmega2561-16Ax ATmega2561-16Mx 256 4К 8К 135 54 47 24 О Система обозначений: ATmega1281 V-8P w/x Память программ (FLASH) [Кбайт] EEPROM SRAM Внешнее ОЗУ Кол-во команд Кол-во линий ввода/вывода Всего векторов Кол-во источников внешних прерываний 8-битные 16-битные сторожевой Часы реального времени (RTQ
Приложение 1 ¦ 573 Продолжение Интерфейсы Напряжение питания [В] Корпус Тип 10 1+USART 16 0...16 2.7...5.5 TQFP-64 MLF-64 16] |1б| 1+US ART 16 0...8 1.8...5.5 TQFP-100 1+USART 16 0...16 2J...5.5 TQFP-100 10 10 1+USART 16 0...8 1.8...5.5 TQFP-64 MLF-64 1+USART 16 0...16 2.7...S.5 TQFP-64 MLF-64 Аналоговый компаратор АЦП A0-разр.) [каналов] Встроенный /йС-генератор Схема BOD Возможность внутрисхемного программирования и самопрограммирования Рабочая частота [МПд] ШИМ SPI TWI USART
574 ¦ Приложения Приложение 2. Чертежи корпусов микроконтроллеров AVR семейства Меда
Приложение 2 ¦ 575
576 ¦ Приложения
Приложение 3 ¦ 577 Приложение 3. Параметры микроконтроллеров AVR семейства Меда Максимально допустимые значения Параметр Рабочая температура Температура хранения Напряжение на любом выводе (кроме вывода RESET) относительно вывода GND Напряжение на выводе RESET относительно вывода GND Напряжение питания Максимальный ток линии ввода/вывода Максимальный ток по выводам VCC и GND Значение -55...+ 125°С -65...+150°С -0.5...КСС + 0.5В -0.5...+13.0В 6.0 В 40мА 200 мА Статические параметры (DC) Параметр VlL vm v]U Vim Входное напряжение НИЗКОГО уровня (кроме выводов XTAL1 и RESET) Входное напряжение ВЫСОКОГО уровня (кроме выводов XTAL1 и RESET) Входное напряжение НИЗКОГО уровня на выводе XTAL1 Входное напряжение ВЫСОКОГО уровня на выводе XTAL1 Условия Ксс= 1.8...2.4В КСС = 2.4...5.5В КСС = 2.7...5.5В КСС=1.8...2.4В КСС = 2.4...5.5В КСС = 2.7...5.5В Ксс= 1.8...5.5В КСС=1.8...2.4В КСС = 2.4...5.5В КСС = 2.7...5.5В min -0.5 -0.5 -0.5 0.7 Ксс 0.6 Ксс 0.6 Ксс -0.5 0.8 Ксс 0.7 Ксс 0.7 Ксс typ - - - - - - - - - - max 0.2 Ксс 0.3 Ксс 0.2 Ксс ^сс + 0.5 Ксс+ 0.5 Ксс+ 0.5 0.1 Ксс Ксс+ 0.5 Ксс+ 0.5 Ксс+ 0.5 Ед. изм. В В В в
578 ¦ Приложения (продолжение) Параметр VXu Vm Vox. Vo* hi /fh ^RST R\/o ^ACIO Входное напряжение НИЗКОГО уровня на выводе RESET Входное напряжение ВЫСОКОГО уровня на выводе RESET Выходное напряжение НИЗКОГО уровня на линиях портов ввода/вывода Выходное напряжение ВЫСОКОГО уровня на линиях портов ввода/вывода Ток утечки по входу Ток утечки по входу Сопротивление подтягивающего резистора в цепи сброса Сопротивление подтягивающего резистора линии порта ввода/вывода Напряжение входного смещения аналогового компаратора Условия КСС=1.8...5.5В Ксс=1.8...5.5В /ol = 20mA, Kcc = 5B /ol=10mA, КСС = ЗВ /Ol = -20mA, Vcc = 5B /ol = -10mA,KCc = 3B VqQ - 5.5 В, на выводе — 0 Vqq = 5.5 В, на выводе — 1 - - Гсс = 5В,^п=Ксс/2 min -0.5 0.9 Ксс - - 4.2 2.3 - - 30 20 - typ - - - - - - - - - - - max 0.1 Ксс Ксс + 0.5 0.7 0.5 - - 1 1 60 50 40 ~ЁдП изм. В В В в мкА мкА кОм кОм мВ
Приложение 3 ¦ 579 (продолжение) Параметр (\CLK 'acpd AlC Ток утечки на входе аналогового компаратора Задержка распространения сигнала в аналоговом компараторе Ток потребления Условия КСС = 5В, Vn=Vcc/2 КСС = 2.7В КСС = 4.0В Рабочий режим, КСС = 2В, /=1МГц Рабочий режим, *сс = ЗВ, / = 4МГц Рабочий режим, КСС = 5В, / = 8МГц Режим Idle, КСС = 2В, /=1МГц ATmega48/88/168V ATmega 162 V ATmega 164/324/644V ATmega 165 V ATmega325/3250/645/6450V ATmega640/1280/1281/2560/2561V ATmega8515/8535L ATmega8/16/32/64/128L ATmega48/88/168x ATmega 162x ATmegal64/324/644x ATmega 165x ATmega325/3250/645/6450x ATmega640/1280/1281/2560/2561x ATmega8515x ATmega8535x ATmega8/16/32x ATmega64/128x ATmega48/88/168x ATmega 162x ATmega 164/324/644 ATmega 165/325/3250/645/6450x ATmega640/1280/1281 /2560/2561 x ATmega48/88/168V ATmega 162 V ATmega 164/324/644V ATmega 165 V ATmega325/3250/645/6450V ATmega640/1280/1281/2560/2561V min -50 - - - - - typ - 750 500 - - - 0.25 0.4 0.4 max 50 - 0.55 0.8 0.8 0.44 0.55 0.8 4 5 3.5 5 5 2.5 2.5 5 12 14 15 20 12 16 16 9 18 0.5 0.3 0.75 0.2 0.2 0.75 Ед. ИЗМ. нА HC mA mA
580 ¦ Приложения (продолжение) Параметр Л:с Ток потребления Условия Режим Idle, ^сс = ЗВ, / = 4МГц Ppvmx/i ГСАИМ Idle, КСС = 5В, /= 8 МГц Режим Power Down, WDT- вкл., КСС = ЗВ Режим Power Down, WDT- выкл., КСС = ЗВ ATmega8515L ATmega8535L ATmega8/16/32/64/128L ATmega48/88/168x ATmegal62x ATmegal64/324/644x ATmegal65/325/3250/645/6450x ATmega640/l 280/1281/2560/2561 x ATmega8515x ATmega8535x ATmega8/16/32x ATmega64/128x ATmega48/88/168x ATmegal62x ATmegal64/324/644x ATmegal65/325/3250/645/6450x ATmega640/1280/1281/2560/2561x ATmega8515x ATmega8535x ATmega8x ATmegal6/32x ATmega64/128x ATmega48/88/168x ATmegal62x ATmegal64/324/644x ATmegal65/325/3250/645/6450x ATmega640/l 280/1281/2560/256 lx ATmega8515x ATmega8535x ATmega8x ATmegal6/32x ATmega64/128x ATmega48/88/168x ATmegal62x ATmegal64/324/644x ATmegal65/325/3250/645/6450x ATmega640/l 280/1281/2560/256 lx min — typ - 1.2 - — — — — 5.5 — — i- — - — — — <8 <15 <8 <10 <10 <8 <10 — — — <1 <5 <1 <1.5 <1 <1 <1 max 1.5 3 2.5 1.5 2 2.2 0.85 2.2 5 10 8 12 5.5 8 8 3.3 8 13 10 28 15 25 15 14 20 12 20 2 3 3 7 10 2 2 3 5 3 Ел. ИЗМ. мА mkA
Приложение 3 ¦ 581 Зависимость максимальной рабочей частоты моделей, имеющих низковольтное (V) исполнение, от напряжения питания
Предметный указатель А ACBG — 398 ACD — 398 ACI — 398 ACIC — 398 ACIE — 398 ACIS1:ACIS0 —ЛЮ АСО — 397 ACSR — 397 ADATE — 405 ADC — 186 ADC Noise Reduction — 266 ADC0D...ADC7D — 413 ADC8D...ADC15D — 413 ADCH:ADCL — 415 ADCSR — 404 ADCSRA — 404 ADCSRB — 399, 405 ADD — 187 ADEN — 405 ADFR — 405 ADIE — 407 ADIF — 407 ADIW — 187 ADLAR — 415 ADMUX — 404 ADPS2...ADPS0 — 407 ADSC — 406 ADTS2...ADTS0 — 406 AINOD — 396 AIN1D — 396 AND — 187 ANDI — 188 ASO — 361 AS2 — 361 ASR — 188 ASSR — 360 В BCLR — 189 BLD — 189 BODEN — 279 BODLEVEL — 280 BOOTRST — 273 BOOTSZ1:BOOTSZO — 274, 554 BORF — 276 BRBC — 190 BRBS — 190 BRCC — 191 BRCS — 191 BREAK — 192 BREQ — 192 BRGE — 193 BRHC — /Pi BRHS — 194 BRID — 194 BRIE — 795 BRLO — 195 BRLT — 796 BRMI — 796 BRNE — 797 BRPL — 797 BRSH — 198 BRTC — 198 BRTS — 799 BRVC — 799 BRVS — 200 BSET — 200 BST — 201
Предметный указатель ¦ 583 С CALL — 201 CBI — 202 CBR — 202 CKDIV8 — 262 СКРОТ — 254 CKSEL3...0 — 254 CLC — 202 CLH — 203 CU — 203 CLKPR — 261 CLKPS3...0 — 261 CLN — 205 CLR — 204 CLS — 204 CLT — ЯИ CLV — 205 CLZ — 205 СОМ — 205 COMOLCOMOO — 349, 350 СОМ21:СОМ20 — 349, 350 СР — 206 СРС — 206 СРСЕ — 261 СРНА — 424 CPI — 207 CPOL — 42* CPSE — 207 CS02:CS00 — 349, 350, 352 CS12:CS10 — 371, 373 CS22:CS20 — 349, 350, 352 CS32:CS30 — 371, 373 CS42:CS40 — 373 CS52:CS50 — 373 CTCO — 349, 350 CTC2 — 349, 350 D DDRA...DDRL — 321 DEC — 208 DIDRO — 413 DIDR1 — 396 DIDR3 — 413 DOR (DORai,) — 483, 496 DORD — 423 EICALL — 208 EICRA — 315 EICRB — 315 EIFR — 309 EIJMP — 209 EIMSK — 309 ELPM — 2/0 EMCUCR — 145, 263, 315 EOR — 211 Extended Standby — 267 EXTRF — 276 F FE (FEai; — 483, 496 FMUL — 211 FMULS — 272 FMULSU — 212 FOCO — 349, 350 FOC1A — 372 FOC1B — 372 FOC1C — 372 FOC2 — 349, 350 FOC3A — 372 FOC3B — 372 FOC3C — 372 G GICR — 292, 309 GIFR — 509 I ICALL — 213 ICES1 —368,371 ICES3 — 55<?, 577 ICES4 — 368 ICES5 — 368 ICF1 — JJ5 ICNC1 — 368, 371 ICNC3 — 368, 371 ICNC4 — 55* ICNC5 — 368 ICR1 — 367 ICR3 — 557 ICR4 — 367 ICR5 — 567 Idle — 265
584 ¦ Предметный указатель IJMP — 213 IN — 214 INC — 214 INTO — 311 INT1 — 311 INT2 — 311 INT3 — 311 INT4 — 311 INT5 — J/7 INT6 — 311 INT7 — 311 INTFO — J/4 INTF1 — 314 INTF2 — J/4 INTF3 — 314 INTF4 — 314 INTF5 — J/4 INTF6 — 314 INTF7 — J/4 ISC2 — 319 ISOilrlSOiO — 318 IVCE — 292 IVSEL — 292 J JTAGEN — 542 JTD — 542 JTRF — 276 L LD — 2/9 LDD — 220 LDI — 221 LDS — 22/ LPM — 223 LSL — 22J LSR — 224 M MCUCR — 145, 263, 292, 315, 325 MCUCSR — 263, 274, 315, 542 MCUSR — 274 MOV — 224 MOVW — 225 MPCM (MFCMn) — 483, 500 MUL — 225 MULS — 225 MULSU — 226 MUX5...MUX0 — 407 N< NEG — 226 NOP — 226 О OCFO — 336 OCF1A — 336 OCF1B — 336 OCF2 — 336 OCIEO — JJ4 OCIE1A — 334 OCIE1B — 334 OCIE2 — 334 OCRO — 348 OCR0A/OCR0B — 348 OCROUB — 361 OCR1A/OCR1B/OCR1C — 367 OCR2 — 348 OCR2A/OCR2B — 348 OCR2UB — 361 OCR3A/OCR3B/OCR3C — 367 OCR4A/OCR4B/OCR4C — 367 OCR5A/OCR5B/OCR5C — 367 OR — 227 ORI — 227 OSCCAL — 258 OUT — 228 P PCICR — 309 PCIEO — 311 PCIE1 — 311 PCIE2 — 311 PCIE3 — 311 PCIFO — 314 PCIF1 — 314 PCIF2 — 314 PCIF3 — 314 PCIFR — 309 PCINTxx — 319 PCMSKO — 315 PCMSK1 — 315 PCMSK2 — 315 PCMSK3 — 315
Предметный указатель ш 585 PINA....PINL — 321 POP — 228 PORF — 276 PORTA...PORTL — 321 Power Down — 266 Power Save — 267 PRADC — 270 PRR — 269 PRRO — 269 PRR1 — 269 PRSPI — 270 PRTIMO — 270 PRTIM1 —270 PRTIM2 — 270 PRTIM3 — 271 PRTIM4 — 271 PRTIM5 — 271 PRTWI — 270 PRUSARTO — 270 PRUSART1 — 271 PRUSART2 — 271 PRUSART3 — 271 PSRjc — 340 PUD — 325 PUSH — 229 PWMO — 349, 350 PWM2 — 349, 350 R RAMPZ — 104 RCALL — 229 REFS1:REFS0 — 413 RET — 230 RETI — 230 RJMP — 275, 231 ROL — 2J7 ROR — 232 RXB8 (RXB8«; — 484 RXC (RXCai; — 4&?, 497, 502 RXCIE (RXCIE«; — 484, 502 RXEN (RXEN/i; — 484, 495, 502 s SBC — 232 SBCI — 2tf SBI — 233 SBIC — 234 SBIS — 2W SBIW — 235 SBR — 2J5 SBRC — 236 SBRS — 236 SE — 254 SEC — 237 SEH — 2J7 SEI — 237 SEN — 238 SER — 23<? SES — 239 SET — 2JP SEV — 239 SEZ — 240 SFIOR — 747, J25, 339, 399, 405 SLEEP — 240 SM2...0 — 254 SPCR — 427 SPDR — 422 SPE — 423 SPI — 419 SPIE — 42J SPIF — 422, 423 SPM — 247 SPMCR — 557 SPR1:SPR0 — 425 SPSR — 42i SREG — 141 ST — 246 Standby — 267 STD — 246, 247 STS — 247 SUB — 248 SUBI — 248 SUT1...0 — 282 SWAP — 249 T TCCRO — J4tf TCCROA/TCCROB — 348 TCCR1A/TCCR1B/TCCR1C — 369 TCCR2 — 348 TCCR2AACCR2B — 348 TCCR3A/TCCR3B/TCCR3C — 369
586 ¦ Предметный указатель TCCR4A/TCCR4B/TCCR4C — 369 TCCR5A/TCCR5B/TCCR5C — 369 TCNOUB — 361 TCN2UB — 361 TCNTO — 347 TCNT1 — 367 TCNT2 — 347 TCNT3 — 367 TCNT4 — 367 TCNT5 — 367 TCROUB — 361 TCR2UB — 361 TICIE1 — 334 TOIE0 — 334 T0IE1 — 334 T0IE2 — 334 TOV0 — 336 T0V1 — 336 T0V2 — 336 TSM — 340 TST — 249 TWA6:TWA0 — 437 TWAR — 437 TWBR — 435 TWCR — 439 TWEA — 439 TWEN — 439 TWGCE — 437 TWIE — 439 TWINT — 439 TWPS1:TWPS0 — 435, 440 TWS7:TWS3 — 440 TWSR — 435, 439 TWSTA — 439 TWSTO — 439 TWWC — 439 TXB8 (ТХВ8л; — 484 TXC (ТХСл; — <Ш, 495, 502 TXCIE (TXCIE/?; — 484, 502 TXEN (TXEN«; — 484, 493, 502 и U2X (U2Xn) — 4&?, <Ш UBRR — 487 UCPHA/i — 503, 504 UCPOL (UCPOL/*; — 4*5, 494 UCPOLaj — 503, 504 UCSRA(UCSR/jA) — 481 UCSRB (UCSR/iB) — 481 UCSRC (UCSR/iC) — 481 UCSZ1:0(UCSZ«1:0) — 485 13CSZ2 (UCSZn2) — 484 UCSZ2:0 (UCSZ«2:0) — 492 • UDORD/i — 503, 505 UDR(UDRn) —480 UDRE (UDREai; — 483, 494, 502 UDRIE (UDRIE«; — 484, 502 UMSELOJMSEL/?; — 485 UMSELnl.O — 485, 503 UPE (UPEa*; — 483, 496 UPM1:0 (UPM«1:0) — 485, 493 URSEL (URSEL/*; — 485, 487 USBS (USBSa?; — 485, 493 USICLK — 467 USICNT3:USICNT0 — 469 USICR — 466 USICS1:USICS0 — 467 USIDC — 469 USIDR — 466 USIOIE — 467 USIOIF — 469 USIPF — 469 USISIE — 467 USISIF — 469 USISR — 466 USITC — 467 USIWMl:USIWM0--467 w WCOL — 422 WDCE — 389, 392 WDE — 388, 389, 392 WDIE — 392 WDIF — JP2 WDP2:WDP0 — 388, 389, 391 WDP3:WDP0 — 392, 393 WDR — 250 WDRF — 276 WDTCR — 388, 389 WDTCSR — 391 WDTOE — 388 WDTON — 390
Предметный указатель ¦ 587 WGMOl.'WGMOO — 349, 350, 353 WGM13:WGM12 — 371 WGM21:WGM20 — 349, 350, 353 WGM33:WGM32 — 371 X XDIV — 260 XDIV6...0 — 260 XDIVEN — 260 XMCRA — 145 XMCRB — 147 A Адресация косвенная относительная — 158 простая — 158 с постинкрементом —~ 159 с преддекре ментом — 159 Адресация прямая ОЗУ — 157 РВВ — 156 РОН — 155 Аналого-цифровой преобразователь — 401 В Вызов подпрограмм абсолютный — /70 косвенный — 170 относительный — 170 д Двухпроводный последовательный интерфейс — 427, 465 3 Защита — 509 И Идентификация — 516 К Конфигурационные ячейки BODEN — 279 BODLEVEL — 280 BODLEVEL1...0 — 280 BODLEVEL2...0 — 280, 281 BOOTRST — 273 BOOTSZl:BOOTSZ2 — 274 CKDIV8 — 262 СКРОТ — 254 SKSEL3...0 — 254 SUT1...0 — 282 WDTON — 390 Конфигурация — 511 Корпуса (размеры) — 574 М Маркировка — 565 П Параметры электрические — 577 Переход абсолютный — 168 косвенный — 169 относительный — 168 Порты ввода/вывода — 320 Последовательный интерфейс (SPI) — 419 Последовательный порт (UART/USART) — 477 Программирование — 518, 526 Р Регистровый файл — 107 С Сброс — 273 Спящий режим ADC Noise Reduction — 266 Extended Standby — 267 Idle — 265 Power Down — 266 Power Save — 267 Standby — 267 Стек — 171 Сторожевой таймер — 386 T Таймеры/счетчики ТО и Т2 — 342 Т1 и ТЗ — 363 Ц Цоколевка — 13
Книги Издательского дома «Додэка-ХХ1» Мартин Т. Микроконтроллеры ARM7. Семейство LPC2000 компании Philips. Вводный курс (+ CD) Пер. с англ. Год издания: 2006 Объем: 240 с. Серия «Мировая электроника» Эта книга — введение в архитектуру процессора ARM7 TDMI и микроконтроллеров семейства LPC2000. Она основана на материалах однодневных семинаров, которые проводятся для профессиональных инженеров, заинтересованных в быстром изучении микроконтроллеров семейства LPC2000. В ней рассматриваются следующие вопросы: введение в процессор ARM7, средства разработки программного обеспечения, системная архитектура LPC2000, периферийные устройства LPC2000. Кроме того, в книгу включено полное учебное пособие, где на практических примерах закрепляются вопросы, изложенные в основном тексте. Изучая теоретический материал и выполняя сопутствующие упражнения, вы быстро освоите процессор ARM7 и микроконтроллеры семейства LPC2000. На компакт-диске, прилагающемся к книге, имеются ознакомительные версии популярной интегральной среды разработки pVISION и компилятора Си от компании Keil Elektronik, а также исходный код для всех упражнений как в версии для компилятора Keil, так и в версии для компилятора GCC. На диске также содержатся руководства пользователя по ядру ARM7, микроконтроллерам семейства LPC2000, различные спецификации и другие материалы. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов и радиолюбителей. МортонДж. Микроконтроллеры AVR. Вводный курс Пер. с англ. Год издания: 2006 Объем: 272 с. Серия «Мировая электроника» Данное издание представляет собой практическое руководство, с помощью которого вы сможете изучить, а впоследствии и использовать микроконтроллеры AVR компании Atmel. Неважно, студент ли вы, собирающийся использовать микроконтроллер AVR в своем проекте или же опытный разработчик встраиваемых систем, впервые столкнувшийся с AVR, — если вам нужно быстро разобраться в этих популярных микроконтроллерах, то эта книга для вас. Для демонстрации различных возможностей AVR Джон Мортон использует простые устройства и программы. В отличие от книг, в которых излагается голая теория либо просто воспроизводится фирменная техническая документация, такой подход (обучение в процессе использования) предлагает быстрое и интуитивное изучение возможностей микроконтроллеров AVR. В общей сложности, в книге рассмотрены 16 проектов, охватывающих все наиболее популярные микроконтроллеры AVR, включая модели семейства Tiny. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов и радиолюбителей.
Книги Издательского дома «Додэка-ХХ1» Редькин П. П. Прецизионные системы сбора данных семейства MSC12xx фирмы Texas Instruments: архитектура, программирование, разработка приложений (+ CD) Год издания: 2006 Объем: 608 с. Серия «Мировая электроника» Книга представляет собой практическое руководство и справочное пособие для изучения микросхем семейства MSC12xx и создания на их основе пользовательских проектов. Материалы по семейству MSC12xx в таком объеме на русском языке издаются впервые. Часть I содержит достаточно полную справочную информацию о семействе MSC12xx, включая перечень типовых технических характеристик микросхем семейства MSC12xx, описание их архитектуры, программной модели, аппаратного построения и программирования периферийных модулей семейства MSC12xx (каждый периферийный модуль описан в отдельной главе), а также рекомендации производителя по программированию и применению отдельных узлов MSC12xx. Описание работы периферийных узлов и вычислительного ядра MSC12xx сопровождается примерами программных фрагментов на языках ассемблера и Си, предоставленными фирмой-производителем. Часть II содержит информацию о способах и средствах разработки-отладки приложений на основе устройств MSC12xx. В приложениях приведены спецификации параметров и типовые характеристики устройств MSC12xx и другие справочные материалы. К книге прилагается CD, содержащий проекты управляющих программ для MSC12xx, справочную информацию производителей, а также демоверсии программных пакетов разработки-отладки. Книга предназначена для разработчиков радиоэлектронной аппаратуры и студентов радиотехнических специальностей. Она, несомненно, будет полезна радиолюбителям, использующим микроконтроллеры в своей практике. Вальпа О. Д. Полезные схемы с применением микроконтроллеров и ПЛИС (+CD) Год издания: 2006 Объем: 416 с. Серия «Программируемые системы» Книга является практическим руководством по самостоятельному изучению и применению на практике различных микроконтроллеров, цифровых адаптеров для ПК типа IBM PC и других полезных в практике разработчика устройств. Она содержит описание различных цифровых электронных устройств и программ, разработанных и испытанных автором этой книги в течение нескольких лет. Множество устройств разработано с применением программируемых логических интегральных схем (ПЛИС). В книге даны советы по программированию и отладке описываемых устройств. Книга включает в себя, кроме электрических принципиальных схем, прошивки и исходные тексты программ, а также описывает технологию программирования. Материал книги послужит хорошим наглядным пособием для изучения некоторых типов микроконтроллеров, адаптеров различного назначения и рабочих программ для их функционирования. На диске записаны прошивки и исходные тексты некоторых программ, приведенных в книге, и исполняемые файлы тестовых и инструментальных программ автора, а также файлы с топологией печатных плат для их изготовления.
В серии « Программируемые системы» готовятся к выходу: ЕвстифеевА.В. Микроконтроллеры AVR семейства Tiny. Руководство пользователя Год издания: 2007 Книга посвящена однокристальным микроконтроллерам AVR семейства Меда фирмы ATMEL Рассмотрена архитектура микроконтроллеров AVR, ее особенности, приведены основные электрические параметры. Подробно описано внутреннее устройство микроконтроллеров, система команд, периферия, а также способы программирования. Основой данного издания послужила популярная книга «Микроконтроллеры AVR семейств Tiny и Меда», материал которой был существенно переработан и дополнен описаниями новых моделей. Предназначена для разработчиков радиоэлектронной аппаратуры, инженеров, студентов технических вузов. Редькин П. П. Микроконтроллеры ARM7 семейств LPC2000. Руководство пользователя (+CD) Год издания: 2007 Данная книга предназначена для специалистов в области разработки электронной аппаратуры, студентов соответствующих специальностей и радиолюбителей, желающих иметь как подробное справочное пособие по микроконтроллерам семейства LPC2000 компании NXP Semiconductors (ранее Philips Semiconductors), так и практическое руководство по их программированию и использованию для решения широкого круга задач по проектированию электронной аппаратуры. Книга состоит из трех частей. Первая часть представляет собой подробное и полное описание микроконтроллеров семейства LPC2000, в том числе архитектуры ядра ARM7TDMI-S, системы команд, регистровой структуры и аппаратного построения основных и периферийных модулей LPC2000, а также содержит рекомендации производителей по программированию и применению отдельных узлов этих микроконтроллеров. Вторая часть книги содержит подробные описания программной среды разработки-отладки приложений IDE IAR Embedded Workbench и программы-загрузчика Flash-памяти LPC2000 Flasf Utility с примерами, поясняющими возможности их практического применения. В третьей части книги приведены примеры алгоритмов и исходных текстов управляющих программ на языке Си, демонстрирующих пользователю «в железе» работу ядра и периферийных узлов микроконтроллера LPC2129. Все представленные программы написаны или протестированы лично автором книги, снабжены описаниями и комментариями, содержат драйверы периферийных устройств и могут использоваться в пользовательских приложениях на базе микроконтроллеров семейства LPC2000 компании NXP Semiconductors.
В серии « Программируемые системы» готовятся к выходу: Иди Фред Сетевой и межсетевой обмен данными с микроконтроллерами (+ CD) Год издания: 2007 Книга посвящена вопросам создания успешно работающих сетевых устройств на базе микроконтроллеров. Из нее вы узнаете все об интеграции RS-232,12C и Ethernet в сетевое устройство, предназначенное для организации связи по локальным (LAN) или глобальным (WAN) сетям или через Интернет. Кроме того, вы будете иметь полное представление о том, как программируются такие устройства. Сетевые устройства создавались на базе популярных микроконтроллеров Atmel и Microchip. При программировании микроконтроллеров Atmel использовался компилятор ICCAVR Pro, a при программировании микроконтроллеров PIC — компилятор CCS PIC. На прилагаемом компакт-диске представлены все исходные коды и откомпилированные программы. Кроме этого, компакт-диск содержит схемы устройств Easy Ethernet в PDF-формате, а также схемы печатных плат. Книга рассчитана на инженеров, программистов и студентов, изучающих микроконтроллерную технику, а также будет представлять интерес для всех желающих самостоятельно разобраться в этой области. Хелибайк Чак Программирование PIC-микроконтроллеров на PicBasic Год издания: 2007 Книга представляет собой практическое руководство по программированию микроконтроллеров семейства PIC. Причем, от вас не требуется никаких предварительных знаний о языке PicBasic. Начиная с азов программирования, вы постепенно изучите такие важные для практического использования PIC-микроконтроллеров вопросы, как: • ключевые различия между стандартным компилятором PicBasic и компилятором PicBasic Pro; • основные характеристики 12-, 14- и 16-битных PIC-микроконтроллеров; • набор команд и архитектура широко используемых PIC-микроконтроллеров, таких как 15F84 и 16F876; • обработка прерываний и исключительных ситуаций; • команды ветвления и перехода; • прямой доступ к входам/выходам и регистрам специальных функций; • организация связи между РЮ-микроконтроллерами. Отдельная глава посвящена ставшей весьма популярной в последнее время робототехнике. В книге вы найдете многочисленные примеры программ для реализации различных функций PIC-микроконтроллеров с использованием языка PicBasic. Исходные тексты всех примеров приведены на прилагаемом компакт-диске. Книга будет полезна начинающим разработчикам, инженерам, студентам радиотехнических специальностей, а также широкому кругу читателей, интересующихся электроникой и программированием.
«Дока-букс» — это динамично развивающаяся компания, занимающаяся распространением технической литературы в России и ближнем зарубежье. Фирма основана группой компаний «Симметрон» на базе книготоргового отдела Издательского дома «Додэка-XXI» в начале 2006 г. и является эксклюзивным представителем данного издательства. В ассортименте «Дока-букс» книги более 80 издательств. Приглашаем к сотрудничеству книготорговые компании и издательства. Интернет-магазин — www.dokabooks.ru тел./факс: +7D95) 366-2429,366-0922 e-mail: books@dodeca.ru Издательский дом «Додэка-XXI» Подробности — www.dodeca.ru приглашает к сотрудничестЕ авторов, переводчиков, редакторов УМНЫЕ КНИГИ
КОМПОНЕНТЫ www.efo.ru ЭЛЕКТРОННЫЕ КОМПОНЕНТЫ ЭЛЕКТРОМЕХАНИЧЕСКИЕ КОМПОНЕНТЫ СИСТЕМЫ ПРОМЫШЛЕННОЙ АВТОМАТИКИ КОМПЛЕКТУЮЩИЕ ДЛЯ ВОЛС КОМПОНЕНТЫ ДЛЯ БЕСПРОВОДНОЙ СВЯЗИ ПРЯМЫЕ ДИСТРИБЬЮТОРСКИЕ И ПАРТНЕРСКИЕ ОТНОШЕНИЯ ВПЕРВЫЕ В РОССИИ ВСЯ ИНФОРМАЦИЯ ПО ПРОДУКЦИИ КОРПОРАЦИИ ATMEL НА ОДНОМ DVD-ДИСКЕ ЗВОНИТЕ И ЗАКАЗЫВАЙТЕ! ВЕДУЩИЕ ПОЗИЦИИ СРЕДИ ПОСТАВЩИКОВ ЭЛЕКТРОННЫХ КОМПОНЕНТОВ РОССИИ ОПТИМАЛЬНЫЕ УСЛОВИЯ ДЛЯ СОТРУДНИЧЕСТВА КВАЛИФИЦИРОВАННАЯ ТЕХНИЧЕСКАЯ ПОДДЕРЖКА САНКТ-ПЕТЕРБУРГ: Т.:(812K27-8654, Ф.: (812) 320-1819 E-MAIL: ZAV@EFO.RU МОСКВА: D95) 933-0743 MOSCOW@EFO.RU КАЗАНЬ: (843M18-7920 KAZAN@EFO.RU ЕКАТЕРИНБУРГ: C43K78-4122 URAL@EFO.RU РОСТОВ-НА-ДОНУ: (863) 220-3679 ROSTOV@EFO.RU ПЕРМЬ: C42J20-1944 PERM@EFO.RU Система менеджмента качества сертифицирована по ГОСТ Р ИСО 9001-2001, МС ИСО 9001:2000 и СРПП ВТ в системах «Военный Регистр» и «Оборонсертифика». ЭЛЕКТРОННЫЕ КОМПОНЕНТЫ ПРОМЫШЛЕННАЯ АВТОМАТИКА ДЛЯ ТВОРЧЕСТВА 000 «ЭФО» ПОСТАВКА ПРОДУКЦИИ И ТЕХНИЧЕСКАЯ ПОДДЕРЖКА