Новые микроконтроллеры AVR от Microchip – преемники Mega
29 декабря 2020
Александр Белов (КОМПЭЛ)
В начале года Microchip анонсировал выход новой линейки 8-битных микроконтроллеров AVR, которая придет на смену контроллерам высокой и средний производительности ATmega. На данный момент в линейку входят серии AVR-DA, AVR-DB и AVR-DD. В статье разобраны отличия новой линейки от ее предшественницы, рассмотрены характеристики новых серий и проведено их сравнение между собой.
Семейство 8-битных микроконтроллеров AVR было создано компанией Atmel в 1996 году. Данные МК имеют гарвардскую архитектуру, то есть исполняемый код и данные находятся в разных адресных пространствах, и систему команд, близкую к идеологии RISC.
В 2016 году компания Microchip – американский производитель электроники, — приобрела компанию Atmel и пополнила свое портфолио 8-битных микроконтроллеров, представленное устройствами с ядром PIC, микроконтроллерами с архитектурой AVR.
Исторически микроконтроллеры с архитектурой AVR делились на три линейки:
ATtiny – это контроллеры начального уровня с небольшим объемом памяти программ – до 32 кбайт в компактных корпусах (до 32-х выводов).
ATmega – контроллеры средней и высокой производительности с объем памяти до 256 кбайт в корпусах до 100 выводов. Последним пополнением этой линейки стала серия ATmega-0 (ее флагман – ATmega4809), выпущенная в 2018 году. Обновление линейки не планируется, дальнейшим развитием линейки ATmega стала новая линейка AVR, с одноименной архитектурой.
ATxmega – устройства с максимальной производительность, до 384 кбайт памяти программ. Последней выпущенной серией стала E5, увидевшая свет в 2013 году. Развитие этой линейки остановлено, поскольку нишу производительных контроллеров заняли 32-битные микроконтроллеры на базе ядер группы ARM Cortex-M.
В начале 2020 года Microchip анонсировал три серии микроконтроллеров, принадлежащих к новой линейке AVR:
Вместе с названием линейки изменилось и обозначение устройств. Маркировка теперь имеет вид «AVRXXYYZZ», где:
- XX – объем памяти в килобайтах;
- YY – семейство;
- ZZ – количество выводов корпуса.
Серия AVR-DA
Серия AVR-DA состоит из 11 устройств с вариантами выбора объема памяти от 32 до 128 кбайт в корпусах 28…64 вывода. Эта серия была выпущена первой, все ее представители уже доступны для заказа. В таблице 1 указан состав серии и параметры микроконтроллеров.
Таблица 1. Состав и характеристики серии AVR-DA
Наименование | Частота ядра, МГц | Flash, кбайт | SRAM, кбайт | EEPROM, байт | Вы- воды |
12 бит АЦП | 10 бит ЦАП | Компара- торы |
PTC | ZCD | USART/SPI/I2C | Таймеры | Корпуса |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AVR128DA28 | 24 | 128 | 16 | 512 | 28 | 1 | 1 | 3 | 1 | 1 | 3/2/1 | 5 | SPDIP, SOIC, SSOP |
AVR128DA32 | 24 | 128 | 16 | 512 | 32 | 1 | 1 | 3 | 1 | 1 | 3/2/2 | 5 | TQFP, VQFN |
AVR128DA48 | 24 | 128 | 16 | 512 | 48 | 1 | 1 | 3 | 1 | 2 | 5/2/2 | 7 | TQFP, VQFN |
AVR128DA64 | 24 | 128 | 16 | 512 | 64 | 1 | 1 | 3 | 1 | 3 | 6/2/2 | 8 | TQFP, VQFN |
AVR64DA28 | 24 | 64 | 8 | 512 | 28 | 1 | 1 | 3 | 1 | 1 | 3/2/1 | 5 | SPDIP, SOIC, SSOP |
AVR64DA32 | 24 | 64 | 8 | 512 | 32 | 1 | 1 | 3 | 1 | 1 | 3/2/2 | 5 | TQFP, VQFN |
AVR64DA48 | 24 | 64 | 8 | 512 | 48 | 1 | 1 | 3 | 1 | 2 | 5/2/2 | 7 | TQFP, VQFN |
AVR64DA64 | 24 | 64 | 8 | 512 | 64 | 1 | 1 | 3 | 1 | 3 | 6/2/2 | 8 | TQFP, VQFN |
AVR32DA28 | 24 | 32 | 4 | 512 | 28 | 1 | 1 | 3 | 1 | 1 | 3/2/1 | 5 | SPDIP, SOIC, SSOP |
AVR32DA32 | 24 | 32 | 4 | 512 | 32 | 1 | 1 | 3 | 1 | 1 | 3/2/2 | 5 | TQFP, VQFN |
AVR32DA48 | 24 | 32 | 512 | 4 | 48 | 1 | 1 | 3 | 1 | 2 | 5/2/2 | 6 | TQFP, VQFN |
Изменения коснулись ядра и его системы питания: ядро может функционировать на увеличенной максимальной частоте 24 МГц во всем диапазоне питающего напряжения 1,8…5,5 В.
Впервые в устройствах AVR появился модуль Zero Cross Detector – детектор пересечения переменным током нулевого уровня. Раньше это была периферия, свойственная только PIC-контроллерам.
АЦП было обновлено: новая версия обеспечивает оцифровку аналогового напряжения с частотой до 130 Гц и разрешением 12-бит с возможностью включения дифференциального режима работы. Аккумулятор был увеличен до 128 семплов. Как и в предыдущей версии, поддерживаются следующие режимы работы:
- единичное преобразование;
- режим непрерывного преобразования;
- режим накопления;
- режим сравнения с порогом;
- режим запуска по событию;
- режим измерения температуры (от встроенного датчика температуры).
В устройствах новой линейки появился модуль ЦАП. Напомним, что контроллеры Mega такового не имели. Преобразователь работает на скорости 140 ksps и имеет разрешение 10 бит.
По сравнению с линейкой ATmega, было увеличено количество следующих модулей периферии:
- количество модулей USART увеличено до шести;
- количество аналоговых компараторов увеличено до трех.
Обратим внимание на наличие специфической периферии – Peripheral Touch Controller, сенсорного контроллера, позволяющего реализовать емкостные сенсорные элементы управления – кнопки, слайдеры, спиннеры и 2D-поверхности. Благодаря библиотеке QTouch Library настройка этого модуля сводится к нескольким кликам мыши.
Структурная схема устройств серии AVR-DA изображена на рисунке 1.
Рис. 1. Блок-схема устройств семейства AVR-DA
Для оценки возможностей новой серии и быстрого прототипирования устройств на ее базе компания Microchip выпустила отладочную плату AVR128DA48 Curiosity Nano Evaluation kit, которая изображена на рисунке 2.
Линейка отладочных плат Curiosity Nano – это самые простые отладочные платы производства Microchip. Платы линейки Curiosity Nano содержат стандартный набор компонентов:
- одну пользовательскую кнопку;
- один пользовательский светодиод;
- встроенный программатор/дебаггер с USB-портом.
Данная плата, в дополнение к стандартному набору компонентов, имеет распаянный часовой кварц.
Рис. 2. Отладочная плата AVR128DA48 Curiosity Nano Evaluation kit
Платы Curiosity Nano могут подключаться в качестве процессорного модуля в базовую плату Curiosity Nano Base, которая содержит три порта расширения microBUS, используемые для подключения модулей расширения Click Boards производства MikroElektronika, и один порт расширения Xplained Pro для подключения одноименных модулей расширения Microchip. Базовая плата изображена на рисунке 3.
Рис. 3. Плата Curiosity Nano Base
Серия AVR-DB
Серия AVR-DB состоит из 11 устройств с объемом памяти 32…128 кбайт в корпусах, имеющих 28…64 вывода. На момент написания статьи эта серия выпущена частично. Для заказа доступны устройства с 128 кбайт Flash-памяти. Состав серии и основные характеристики указаны в таблице 2.
Таблица 2. Состав и характеристики серии AVR-DB
Наименование | Частота ядра, МГц | Flash, кбайт | SRAM, кбайт | EEPROM, байт | Вы- воды |
12 бит АЦП | 10 бит ЦАП | Компа-раторы | Опер. усил-ли | Вы- воды MVIO |
ZCD | USART/SPI/I2C | Таймеры | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AVR128DB28 | 24 | 128 | 16 | 512 | 28 | 1 | 1 | 3 | 2 | 8 | 1 | 3/2/1 | 5 | SPDIP, SOIC, SSOP |
AVR128DB32 | 24 | 128 | 16 | 512 | 32 | 1 | 1 | 3 | 2 | 8 | 1 | 3/2/2 | 5 | TQFP, VQFN |
AVR128DB48 | 24 | 128 | 16 | 512 | 48 | 1 | 1 | 3 | 3 | 8 | 2 | 5/2/2 | 7 | TQFP, VQFN |
AVR128DB64 | 24 | 128 | 16 | 512 | 64 | 1 | 1 | 3 | 3 | 8 | 3 | 6/2/2 | 8 | TQFP, VQFN |
AVR64DB28 | 24 | 64 | 8 | 512 | 28 | 1 | 1 | 3 | 2 | 8 | 1 | 3/2/1 | 5 | SPDIP, SOIC, SSOP |
AVR64DB32 | 24 | 64 | 8 | 512 | 32 | 1 | 1 | 3 | 2 | 8 | 1 | 3/2/2 | 5 | TQFP, VQFN |
AVR64DB48 | 24 | 64 | 8 | 512 | 48 | 1 | 1 | 3 | 3 | 8 | 2 | 5/2/2 | 7 | TQFP, VQFN |
AVR64DB64 | 24 | 64 | 8 | 512 | 64 | 1 | 1 | 3 | 3 | 8 | 3 | 6/2/2 | 8 | TQFP, VQFN |
AVR32DB28 | 24 | 32 | 4 | 512 | 28 | 1 | 1 | 3 | 2 | 8 | 1 | 3/2/1 | 5 | SPDIP, SOIC, SSOP |
AVR32DB32 | 24 | 32 | 4 | 512 | 32 | 1 | 1 | 3 | 2 | 8 | 1 | 3/2/2 | 5 | TQFP, VQFN |
AVR32DB48 | 24 | 32 | 4 | 512 | 48 | 1 (18) | 1 (1) | 3 | 3 | 8 | 2 | 5/2/2 | 5 | TQFP, VQFN |
Серия DB очень похожа на уже рассмотренную серию: те же объемы памяти и корпуса, частота ядра и напряжение питания, схожий набор периферии. Однако есть и различия.
В наборе периферии произошла замена – Peripheral Touch Controller серии DA заменили на операционные усилители. Каждый операционный усилитель имеет в петле обратной связи резистивный делитель с настраиваемым соотношением сопротивлений, позволяющий настроить коэффициент усиления без использования внешних элементов. Для повышения коэффициента усиления операционные усилители могут соединяться каскадом.
Следующее отличие от серии DA – поддержка инновационной технологии MVIO, суть которой заключается в том, что Port C получил независимое питание VDDIO2, что позволяет последовательным интерфейсам, выведенным на этот порт, коммуницировать со внешними устройствами, запитанными от напряжения, отличного от питания микроконтроллера. Структурная схема питания изображена на рисунке 4.
Рис. 4. Домены питания в AVR-DB
Модификации подвергся Clock Controller, поддерживающий не только внешний часовой кварц, но и высокочастотные кварцевые резонаторы с частотой до 32 МГц. Обобщенная структурная схема контроллера тактовой частоты изображена на рисунке 5.
Рис. 5. Блок-схема генератора частоты
Для серии ABR-DB доступна отладочная плата AVR128DB48 Curiosity Nano Evaluation kit. На плату добавили кварц 16 МГц и нераспаянный разъем для подключения отдельного питания для Port C. Общий вид платы изображен на рисунке 6.
Рис. 6. Отладочная плата AVR128DB48 Curiosity Nano Evaluation kit
Серия AVR-DD
Данная серия включает в себя 12 устройств с объемами памяти 16…64 кбайт в корпусах с 14….32 выводами. Выпуск серии запланирован на второй квартал 2021 года. Характеристики устройств, входящих в серию, указаны в таблице 3.
Таблица 3. Состав и характеристики серии AVR-DD
Наименование | Частота ядра, МГц | Flash, кбайт | SRAM, кбайт | EEPROM, байт | Вы- воды |
12 бит АЦП | 10 бит ЦАП | Компара- торы |
Выводы MVIO | ZCD | USART/SPI/I2C | Таймеры | Корпуса |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AVR64DD14 | 24 | 64 | 8 | 256 | 14 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 4 | SOIC |
AVR64DD20 | 24 | 64 | 8 | 256 | 20 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 4 | SOIC, VQFN |
AVR64DD28 | 24 | 64 | 8 | 256 | 28 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 5 | SPDIP, SOIC, SSOP |
AVR64DD32 | 24 | 64 | 8 | 256 | 32 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 5 | TQFP, VQFN |
AVR32DD14 | 24 | 32 | 4 | 256 | 14 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 4 | SOIC |
AVR32DD20 | 24 | 32 | 4 | 256 | 20 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 4 | SOIC, VQFN |
AVR32DD28 | 24 | 32 | 4 | 256 | 28 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 5 | SPDIP, SOIC, SSOP |
AVR32DD32 | 24 | 32 | 4 | 256 | 32 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 5 | TQFP, VQFN |
AVR16DD14 | 24 | 16 | 2 | 256 | 14 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 4 | SOIC |
AVR16DD20 | 24 | 16 | 2 | 256 | 20 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 4 | SOIC, VQFN |
AVR16DD28 | 24 | 16 | 2 | 256 | 28 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 5 | SPDIP, SOIC, SSOP |
AVR16DD32 | 24 | 16 | 2 | 256 | 32 | 1 | 1 | 1 | 8 | 1 | 2/1/1 | 5 | TQFP, VQFN |
Серия AVR-DD занимает нишу более компактных устройств с уменьшенным объемом памяти. В ней набор периферии больше не содержит таких специфических модулей, как Peripheral Touch Controller или операционные усилители. В остальном качественный состав периферии не изменился, но количество модулей было уменьшено:
- один модуль Zero Cross Detector;
- один компаратор;
- шесть каналов системы событий;
- два модуля USART, один SPI и один I2C.
Серию DD c серией DB объединяет поддержка технологии MVIO на Port C и поддержка внешнего кварца высокой частоты.
Сравнение серий DA, DB и DD
Рассмотренные серии поддерживают максимальную частоту ядра 24 МГц во всем диапазоне питающего напряжения 1,8…5,5 В. Таблица 4 позволяет наглядно сравнить характеристики рассмотренных серий.
Таблица 4. Сравнение серий DA, DB и DD
Наименование | AVR-DA | AVR-DB | AVR-DD |
---|---|---|---|
Максимальная частота ядра, МГц | 24 | 24 | 24 |
Flash-память, кбайт | 32… 128 | 32… 128 | 16…64 |
Память SRAM, кбайт | 4…16 | 4…16 | 2…8 |
Память EEPROM, байт | 512 | 512 | 256 |
Выводы | 28…64 | 28…64 | 14…32 |
Выводы I/O | 22…54 | 22…54 | 11…27 |
12 бит АЦП (каналы) | 1 (10…22) | 1 (9…22) | 1 (7…23) |
10 бит ЦАП (выходы) | 1 (1) | 1 (1) | 1 (1) |
Компараторы | 3 | 3 | 1 |
Сенсорный контроллер (PTC) | 1 | – | – |
Операционные усилители | – | 2…3 | – |
Выводы MVIO | – | – | 8 |
Детектор перенесения нуля (ZCD) | 1…3 | 1…3 | 1 |
Система событий, каналы | 8…10 | 8…10 | 6 |
Оконный сторожевой таймер (WWDT) | 1 | 1 | 1 |
Конфигурируемая логика (CCL), LUT | 1(4-6) | 1(4-6) | 1(4) |
USART/SPI/I2C | (3/5/6)/2/(1/2) | (3/5/6)/2/(1/2) | 2/1/1 |
Таймер 16 бит | 4/6/7 | 4/6/7 | 3/4 |
Таймер 12 бит | 1 | 1 | 1 |
Диапазон рабочих температур, °C | I = 85, E = 125 | I = 85, E = 125 | I = 85, E = 125 |
AVR-DA и DB занимают нишу производительных 8-битных контролеров с обширным набором периферии. Основное различие в том, что серия DA имеет Peripheral Touch Controller, а серия DB — операционные усилители.
Серия DD занимает нишу более компактных, но менее производительных устройств с урезанным набором периферии. Серии DB и DD схожи в том, что имеют поддержку технологии MVIO и внешнего кварца высокой частоты.
В новых сериях применены и другие проверенные технологии Microchip, повышающие надежность, гибкость системы и уменьшающие энергопотребление:
- Core Independent Peripherals – независимая от ядра периферия, способная продолжить работу даже при переходе контроллера в энергосберегающий режим и отключении ядра;
- Cyclic Redundancy Check Memory Scan – модуль, позволяющий выявить повреждение кода программы, хранящейся во Flash-памяти;
- Configurable Custom Logic – модуль настраиваемой пользовательской логики, дающий возможность реализовать несложные цифровые устройства, функционирующие без привлечения процессора;
- Event System – система событий, позволяющая модулям периферии взаимодействовать друг с другом без участия процессора, в том числе и в спящем режиме.
Средства разработки
Поддержка новых серий включена в интегрированные среды разработки от Microchip:
- Atmel Studio (сейчас — Microchip Studio) – родная среда разработки для микроконтроллеров AVR. Поддержка новых устройств доступна после установки пакета поддержки устройств (Device Family Pack) AVR-Dx_DFP.
- MPLAB X IDE – изначально среда разработки для микроконтроллеров PIC. В данный момент поддерживаются как PIC-микроконтроллеры, так и AVR, включая последние серии. Плагин MPLAB Code Configurator позволяет графическое конфигурирование устройства и генерацию оптимизированного кода.
- Atmel START – облачная онлайн-среда разработки, которая, как и MPLAB Code Configurator, имеет удобные графические средства для настройки модулей периферии и системы в целом. Отметим, что данная среда не поддерживает PIC-микроконтроллеры.
Применения
Рассмотренные серии относятся к контроллерам широкого спектра применений и могут использоваться в различных отраслях, требующих автоматического управления в реальном времени: в бытовой электронике, медицине, промышленной электронике и устройствах интернета вещей в качестве основного вычислителя или вспомогательного устройства.
Новые серии отмечены знаком Functional Safety Ready, что означает, что они могут применяться в приложениях, критичных к отказам: автомобильной и промышленной электронике. По запросу заказчика предоставляется отчет со статистикой отказа контроллера и руководство по обеспечению требований стандартов безопасности.
Обширная экосистема, включающая в себя средства разработки, отладочные платы, техническую документацию и примеры проектов позволяет сократить время, требуемое на проектирование и вывод на рынок нового устройства.
•••
Наши информационные каналы
Страница не найдена
Тактовая частота, МГцот
до
Блок арифметики с плавающей точкой (FPU) не важно да нет
Поддержка DSP-инструкций не важно да нет
Графический ускоритель, аппаратное декодирование видео не важно да нет
Блок управления памятью (MMU) не важно да нет
Каналы DMAот
до
Блок защиты памяти (MPU) не важно да нет
Аппаратный блок шифрования не важно да нет
AVR Studio: как написать обработчик прерывания | avr
Микроконтроллеры без использования прерываний практически ничего не стоят. Прерывание (interrupt) получило свое название из того факта, что при срабатывании прерывания по какому-нибудь событию нормальное выполнение программы прерывается, и выполняется особый код — код обработчика прерывания (interrupt handler). Прерывания можно рассматривать просто как подпрограммы, которые приостанавливают нормальный процесс выполнения программы до тех пор, пока код подпрограммы обработчика прерывания не будет завершен. После того, как обработчик прерывания завершит свою работу, ядро микроконтроллера вернется к исполнению основной программы точно в той точке, где она была прервана прерыванием. События прерывания обычно происходят от каких-то внешних асинхронных воздействий на микроконтроллер — например, переключение логического уровня на внешнем выводе порта, либо переполнение регистра таймера, что означает истечение заданного интервала времени, и т. д.
Почему же прерывания так важны? Например, мы могли бы обойтись без прерываний, в бесконечном цикле опрашивая возникновение интересующих нас событий. Такое функционирование программы называется опросом (polling). Но опрос имеет много недостатков и неудобств — к примеру, программа будет тратить на циклы ресурс ядра, который мог быть потрачен на выполнение других действий. Это одна из причин, почему у микроконтроллера есть много источников прерывания, которые могут использоваться при необходимости. Вместо проверки событий на возникновение микроконтроллер имеет возможность прервать нормальный поток программы при возникновении события и переключиться на действия обработчика события прерывания (ISR, interrupt service routine), затем вернуться обратно и продолжить выполнение основной программы.
[Векторы прерывания]
Векторами прерывания называют адреса перехода на обработчик прерывания. Список таких адресов называется таблицей векторов прерываний, и он находится в памяти программ по заранее известному адресу. У микроконтроллеров AVR таблица векторов прерываний находится в самом начале памяти программ FLASH по адресу 0. Содержимое таблицы векторов прерываний определяет программист, когда ему нужно реализовать обработку прерываний.
Каждый вектор прерывания AVR занимает в памяти 2 байта (1 слово кода инструкций AVR), и представляет из себя команду rjmp относительный_адрес. Вот так, например, выглядит на языке ассемблера полностью заполненная таблица прерываний микроконтроллера ATmega16:
$000 rjmp RESET ;сброс (начало программы)
$001 rjmp INT0_vect ;внешнее прерывание 0
$002 rjmp INT1_vect ;внешнее прерывание 1
$003 rjmp TIMER2_COMP_vect ;прерывание совпадения сравнения таймера 2
$004 rjmp TIMER2_OVF_vect ;прерывание переполнения таймера 2
$005 rjmp TIMER1_CAPT_vect ;прерывание события захвата таймера 1
$006 rjmp TIMER1_COMPA_vect ;прерывание совпадения сравнения A таймера 1
$007 rjmp TIMER1_COMPB_vect ;прерывание совпадения сравнения B таймера 1
$008 rjmp TIMER1_OVF_vect ;прерывание переполнения таймера 1
$009 rjmp TIMER0_OVF_vect ;прерывание переполнения таймера 0
$00A rjmp SPI_STC_vect ;прерывание завершения передачи SPI
$00B rjmp USART_RXC_vect ;прерывание завершения приема байта UART
$00C rjmp USART_UDRE_vect ;прерывание опустошения регистра передачи UART
$00D rjmp USART_TXC_vect ;прерывание завершения передачи байта UART
$00E rjmp ADC_vect ;прерывание завершения преобразования АЦП
$00F rjmp EE_RDY_vect ;прерывание готовности EEPROM
$010 rjmp ANA_COMP_vect ;прерывание изменения сигнала на выходе компаратора
$011 rjmp TWI_vect ;прерывание двухпроводного интерфейса TWI (I2C)
$012 rjmp INT2_vect ;внешнее прерывание 2
$013 rjmp TIMER0_COMP_vect ;прерывание совпадения сравнения таймера 0
$014 rjmp SPM_RDY_vect ;прерывание готовности к записи памяти программ
Такая полностью заполненная векторами таблица никогда не применяется. На практике обычно используется только 1..4 прерывания, в этом случае не используемые адреса векторов могут остаться не инициализированными. Обратите внимание, что в левом столбце метками обозначены шестнадцатеричные адреса инструкций, соответствующие байтовые адреса будут в 2 раза больше (потому что инструкция rjmp занимает 2 байта).
В этой статье на примере обработчика прерывания таймера 1 для ATmega16 рассказывается, как организовать обработчик прерывания в проекте GCC. Показаны два варианта реализации — на языке C и ассемблера. В примерах алгоритм работы таймера отличается, но это не важно для рассмотрения методов организации обработчика прерывания.
[Обработчик прерывания на C]
Это самый простой вариант. В данном примере используется следующий алгоритм — основная программа настраивает таймер 1 и запускает обработчик прерывания. Этот обработчик срабатывает раз в секунду и заботится о себе сам, подстраивая величину счетчика TCNT1 (чтобы прерывания происходили точно раз в секунду). Обработчик раз в секунду также декрементирует счетчик времени timer, который устанавливается и отслеживается в основной программе. Прерывание таймера разрешено постоянно (разрешается при старте программы). Таким образом, основная программа может получить любую задержку времени в интервале от 1 до 255 секунд.
Процесс по шагам:
1. Настраиваем таймер и разрешаем прерывание для него. Этот код должен вызываться однократно, при старте программы. Для этого можно написать отдельную процедуру, например:
#include <avr/io.h> .. void SetupTIMER1 (void){ //На частоте тактов 16 МГц прерывание переполнения T/C1 // произойдет через (счет до 65535): // 1 << CS10 4096 mkS (нет прескалера Fclk) // 1 << CS11 32.768 mS (Fclk/8) // (1 << CS11)|(1 << CS10) 262.144 mS (Fclk/64) // 1 << CS12 1048.576 mS (Fclk/256) TCCR1B = (1 << CS12); TCNT1 = 65536-62439; //коррекция счетчика, чтобы время было ровно 1 секунда /* Разрешение прерывания overflow таймера 1. */ TIMSK = (1 << TOIE1);}
2. В любом из модулей проекта (можно в общем, где функция main, а можно в отдельном, например timer.c) пишем код обработчика прерывания таймера. Вот пример такого кода:
#include <avr/interrupt.h>#include <avr/io.h> .. u8 timer; ISR (TIMER1_OVF_vect){ //теперь прерывание будет происходить через 62439 тиков // таймера 1, что на частоте 16 МГц составит 1 сек. TCNT1 = 65536-62439; //Далее идет код, который будет работать каждую секунду. //Желательно, чтобы этот код был короче. if (timer) timer--;}
3. В нужном месте разрешаем прерывания программы. Это делается также однократно, после того как сделаны все приготовления:
sei();
[Обработчик прерывания на ASM]
Этот вариант не многим сложнее, просто организован по-другому. Я его сделал на основе отдельного файла, который содержит только код на языке ассемблера. Алгоритм тут тоже другой — обработчик прерывания срабатывает раз в секунду и сам себя запрещает. Основная программа отслеживает это событие и меняет секундные счетчики (выполняет все действия, которые нужно выполнять раз в секунду), и нова разрешает прерывание. Такой алгоритм позволяет ускорить обработку прерывания, что может быть критично для некоторых задач (например, только так можно организовать точный отсчет времени при использовании библиотеки V-USB). Процесс по шагам:
1. Настраиваем таймер. Это может делать код на C. Все точно так же, как и с обработчиком прерывания на C (см. шаг 1).
2. Готовим файл с нашим кодом обработчика на языке ассемблера. Вот пример кода:
#include <avr/io.h> .text .global TIMER1_OVF_vect TIMER1_OVF_vect: push R24 ldi R24, 0 out _SFR_IO_ADDR(TIMSK), R24 pop R24 reti
Этот код будет работать очень быстро, поскольку короткий. Он почти ничего не делает, только запрещает прерывание от таймера 1 (в регистре TIMSK сбрасываются все флаги, в том числе и нужный нам флаг TOIE1). Запускать прерывание будет основная программа, как только обнаружит, что прерывание запрещено (путем анализа состояния флага TOIE1).
3. В нужном месте разрешаем прерывания программы. Это делается также однократно, после того как сделаны все приготовления:
sei();
4. В основной программе, в главном цикле main, должен максимально часто вызываться следующий код:
..void main (void){ .. while (1) { .. if (0==(TIMSK & (1 << TOIE1))) { TCNT1 = ONE_SECOND; TIMSK = (1 << TOIE1); //далее действия, которые будут происходить // раз в секунду .. } .. }}
[Общие замечания]
Можно заметить, что в обоих примерах использовалась именованная константа TIMER1_OVF_vect, которая задает адрес вектора прерывания таймера 1. Имена констант можно узнать во включаемом файле процессора. Для ATmega16, например, это будет файл c:\WinAVR-20080610\avr\include\avr\iom16.h. Чтобы имена стали доступны, не нужно добавлять именно этот файл в проект директивой #include, достаточно добавить #include <avr/io.h> и задать макроопределение, задающее тип процессора (например, MCU = atmega16. Это можно сделать либо в Makefile, либо в свойствах проекта).
При использовании одновременно нескольких прерываний в AVR важно помнить, что прерывания имеют фиксированный, ненастраиваемый приоритет. Чем меньше адрес вектора прерывания, тем приоритет у прерывания выше. Этот приоритет срабатывает, если при выходе из прерывания имеется несколько необработанных флагов прерывания. Прерывание с более высоким приоритетом НЕ может временно приостановить уже работающий обработчик прерывания с меньшим приоритетом, чтобы немедленно выполнить свой код. Работает система примерно так:
— когда общие прерывания разрешены (установлен бит I в регистре SREG, этот бит называют Global Interrupt Enable), то может быть вызвано любое разрешенное прерывание с любым приоритетом. Бит Global Interrupt Enable может быть принудительно сброшен или установлен командами CLI или SEI соответственно.
— для того, чтобы прерывание могло сработать и вызвать свой обработчик, кроме установки бита Global Interrupt Enable необходимо также установить бит разрешения соответствующего прерывания. Для таймеров-счетчиков это биты регистра TIMSK, для интерфейса SPI — бит SPIE в регистре SPCR, и т. д.
— когда срабатывает любое прерывание, то сразу очищается флаг I (Global Interrupt Enable), и автоматически запрещаются все прерывания, пока не произойдет выход из обработчика прерывания. Если во время работы обработчика прерывания возникали условия, при которых должны были сработать другие прерывания, то эти другие прерывания не вызываются, а просто запоминаются соответствующие им флаги (прерывания «откладываются» на будущее). При выходе из обработчика прерывания запомненные флаги прерывания запустят нужный обработчик прерывания в соответствии с назначенным ему приоритетом (если на данный момент имеется несколько отложенных прерываний).
— разработчик может в обработчике прерывания вызвать команду SEI (которая установит флаг Global Interrupt Enable), тем самым разрешив выполнение других прерываний во время работы этого обработчика прерывания. Тогда, если произойдет новое другое прерывание до завершения текущего обработчика (в котором уже была вызвана команда SEI), текущий обработчик прерывания будет приостановлен, адрес возврата в него будет сохранен в стеке и будет вызвано новое прерывание. Таким способом можно обеспечить некое подобие соблюдения приоритета — в низкоприоритетных обработчиках прерывания должна первой стоять команда SEI, а в высокоприоритетных обработчиках команда SEI должна отсутствовать, что обеспечит выполнение этого обработчика полностью.
Отсутствие возможности четко настроить приоритет — довольно серьезный недостаток платформы AVR.
[Ссылки]
1. Как комбинировать программу на Си (C) с кодом ассемблера (ASM).
8-разрядные микроконтроллеры AVR корпорации Atmel: новинки и тенденции развития — Компоненты и технологии
Рис. 1. Спектр предлагаемых микроконтроллеров корпорации Atmel
Встатье рассмотрены новые технологии,
применяемые при производстве микроконтроллеров AVR (picoPower, обновление этой технологии), сплавы, используемые для финишного покрытия выводов,
новинки микроконтроллеров и отладочных
средств.
Технология picoPower
В последние годы усилия фирмы Atmel по
развитию архитектуры AVR были сконцентрированы на мероприятиях по снижению
энергопотребления кристаллов. Разработанные технологии были объединены под общим названием picoPower, а в обозначении
микросхем появился суффикс “P” (например,
ATmega169P).
Оптимизация энергопотребления в энергосберегающих режимах была выбрана приоритетным направлением. Можно выделить
следующее:
- Снижены токи утечки за счет оптимизации технологического процесса производства кристаллов.
- Расширен диапазон питающего напряжения микроконтроллеров. Нижний порог питающих напряжений снижен с 2,7 до 1,8 В
и составляет теперь 1,8–5,5 В. Память (Flash,
EEPROM, ОЗУ) и периферийные узлы,
в том числе и аналоговая часть, работают
при напряжении питания от 1,8 В, что позволяет снизить энергопотребление. - На кристалл интегрирован низкочастотный тактовый генератор 32 кГц, потребление которого незначительно по сравнению
с суммарным энергопотреблением в режиме Power-Save. - Предусмотрена возможность отключения
блока контроля питания (Brown-out Detection,
BOD) при переходе в режим энергосбережения.
Совершенствование технологического процесса при производстве кристаллов и расширение функциональных возможностей позволили заметно снизить энергопотребление
микроконтроллеров AVR и в активном режиме работы. Из реализованных компанией
Atmel механизмов можно выделить:
- Отключение тактового сигнала (Clock gating):
- Возможность останова каждого отдельного периферийного блока микроконтроллера благодаря регистрам снижения
энергопотребления (Power Reduction
Register, PRR), обеспечивающим отключение тактового сигнала от периферийных узлов. - Содержимое регистров обновляется
только при изменении входных данных.
- Возможность останова каждого отдельного периферийного блока микроконтроллера благодаря регистрам снижения
- Питание Flash-памяти включается только
на время выборки команды (Flash sampling). - Добавлены регистры запрещения буфера
цифрового ввода для линий ввода/вывода
общего назначения (Digital Input Disable
Registers, DIDR).
Обновленный
технологический процесс
В 2008 году были представлены новые версии микроконтроллеров с улучшенными показателями энергопотребления, которые получены за счет дополнительного усовершенствования технологического процесса производства микросхем. Обновленный технологический процесс будет использоваться:
- В микроконтроллерах, выпускаемых по технологии picoPower (в наименовании суффикс “P” будет заменен на суффикс “PA”,
например, ATmega324PA). Новые версии
микроконтроллеров будут иметь меньший
ток потребления: в активном режиме на
30–45% и в энергосберегающих режимах на
42–54% (пример приведен в таблице 1). - В микроконтроллерах, выпускаемых ранее
без применения технологии picoPower
(в наименовании прибавится суффикс “А”,
например, ATtiny13A). У новых версий
этих микроконтроллеров ток потребления
уменьшится: в активном режиме на 12–45%,
а в энергосберегающих режимах — на
13–90% (пример приведен в таблице 2). - В новых сериях микроконтроллеров (суффикс “A” в наименовании использоваться
не будет, например, ATtiny48/88).
Таблица 1. Сравнение энергопотребления
ATmega324P и ATmega324PA
Режим | Условия | ATmega324P | ATmega324PA | Изменение |
Active | VCC = 2 В, f = 1 МГц | 0,42 мА | 0,3 мА | –29% |
VCC = 3 В, f = 4 МГц | 2,4 мА | 1,5 мА | –38% | |
VCC = 5 В, f = 8 МГц | 8,0 мА | 5,2 мА | –35% | |
Idle | VCC = 2 В, f = 1 МГц |
0,13 мА | 0,06 мА | –54% |
VCC = 3 В, f = 4 МГц |
0,6 мА | 0,35 мА | –42% | |
VCC = 5 В, f = 8 МГц |
2,3 мА | 1,3 мА | –43% |
Таблица 2. Сравнение энергопотребления
ATtiny13 и ATtiny13A
Режим | Условия | ATtiny13 | ATtiny13A | Изменение |
Active | VCC = 1,8 В, f = 1 МГц | 240 мкА | 190 мкА | –20% |
VCC = 5,5 В, f = 20 МГц | 13 мА | 8,8 мА | –30% | |
Idle | VCC = 1,8 В, f = 1 МГц | 220 мкА | 24 мкА | –90% |
VCC = 5,5 В, f = 20 МГц | 4,0 мА | 1,7 мА | –60% | |
Reset | VCC = 1,8 В, f = 1 МГц | 7 мкА | 5 мкА | –30% |
VCC = 5,5 В, f = 20 МГц | 2,9 мА | 1,25 мА | –60% |
Для микроконтроллеров, выпускаемых по
обновленному технологическому процессу,
будет использоваться унифицированное наименование. Микроконтроллеры, которые
ранее выходили в двух вариантах исполнения (с диапазоном напряжения питания
4,5–5,5 В и 1,8–5,5 В), теперь имеют один код
для заказа и расширенный диапазон питания
1,8–5,5 В. При этом рекомендуемая рабочая
частота при напряжении питания 1,8 В не
должна превышать 4 МГц. Пример формирования нового унифицированного наименования для ATmega48 приведен в таблице 3.
Таблица 3. Унифицированное наименование
для новой версии микроконтроллера ATmega48
Старые версии | Обновленная технология picoPower |
ATmega48-20xU (4,5–5,5 В, 0–20 МГц) |
ATmega48PA-xU (1,8–5,5 В, 0–20 МГц) |
ATmega48P-20xU (4,5–5,5 В, 0–20 МГц) |
|
ATmega48V-10xU (1,8–5,5 В, 0–10 МГц) |
|
ATmega48PV-10xU (1,8–5,5 В, 0–10 МГц ) |
Все микроконтроллеры, которые производятся с применением новых технологий, повыводно и функционально совместимы
с предыдущими версиями. Выпускаются специальные руководства по применению, описывающие различия в кристаллах. Старые
версии микроконтроллеров будут постепенно сниматься с производства. Приведем список анонсированных на середину 2009 года
микроконтроллеров, которые будут выпускаться по обновленной технологии:
- ATtiny48;
- ATtiny88;
- ATtiny13A;
- ATtiny24A;
- ATtiny44A;
- ATtiny861A;
- ATmega48PA;
- ATmega88PA;
- ATmega16A;
- ATmega32A;
- ATmega16U2;
- AT90USB162A;
- ATmega168PA;
- ATxmega164A;
- ATmega165PA;
- ATmega169PA;
- ATmega324PA;
- ATmega328P;
- ATmega128A;
- ATmega1284P;
- ATmega64A.
Финишное покрытие выводов
Еще одна тенденция, которую можно отметить, это все большее использование для
финишного покрытия выводов состава
NiPdAu (никель-палладий-золото). NiPdAu
позволяет уменьшить вероятность возникновения дефекта кристаллических образований («усов») и, соответственно, предохраняет от возникновения короткого замыкания
при использовании микросхем с малым шагом выводов.
Благодаря высокому качеству финишного
покрытия NiPdAu, его использование становится общей тенденцией не только у корпорации Atmel, но и у других производителей. Корпуса с финишным покрытием выводов NiPdAu
полностью соответствуют стандарту RoHS.
Описание химического состава и финишного покрытия выводов в процентном соотношении для различных корпусов микросхем
Atmel можно найти по ссылке: http://www.atmel.com/green/pmdds.asp#NiPdAuPlating.
Условия хранения и пайки микросхем,
включая микросхемы с финишным покрытием NiPdAu, регулируются стандартом JEDEC:
документы J-STD-020D [1] и J-STD-033B.
Наиболее распространенным на данный момент у корпорации Atmel является финишное
покрытие Matte Sn (чистое олово). Поскольку термопрофили, используемые для монтажа компонентов с финишными покрытиями
NiPdAu и Matte Sn, одинаковы, неудобства
при монтаже с переходом на другое финишное покрытие не возникнет.
Финишное покрытие выводов NiPdAu в наименовании микросхемы будет обозначаться
буквой H (для индустриального диапазона), например ATTiny13A-SH вместо ATTiny13A-SU.
Новые микроконтроллеры AVR
в 2009 году
Корпорация Atmel анонсировала в этом году 3 принципиально новых линейки микроконтроллеров в семействе tiny (табл. 4)
Таблица 4. Новые микроконтроллеры AVR
Наименование | Flash, кбайт | RAM, байт | EEPROM, байт | VCC, В | Корпус | Особенности |
ATtiny23U/43U | 2/4 | 128/256 | 64 | 0,7–5,5 | SOIC20, QFN20 | Низкопотребляющий (питание от одной батареи ААА) |
ATtiny48/88 | 4/8 | 256/512 | 64 | 1,8–5,5 | PDIP28, TQFP32, MLF32, MLF28 | Упрощенная версия mega48/88 |
ATtiny10 | 1 | 32 | – | 1,8–5,5 | SOT23-6 | Миниатюрный, для бюджетных приложений, альтернатива tiny11 |
Новые микроконтроллеры ATtiny48/88
призваны заполнить промежуток между семействами tiny иmega и представляют собой
упрощенную версию ATmega48/88. Это микроконтроллер в корпусе с 32 выводами, он
содержит интерфейсы TWI (I2C), SPI, 28 линий ввода/вывода общего назначения, 10-разрядный АЦП. Как и все новые микроконтроллеры, он выпускается с использованием
технологии picoPower и содержит регистры
PRR и DIDR, BOD с возможностью отключения в спящем режиме.
Новые микроконтроллеры AVR ATtiny23U/
43U имеют ультранизкий порог питающего
напряжения. Благодаря встроенному импульсному повышающему преобразователю,
они могут работать от 0,7 В, идеально подходят для приложений с батарейным питанием и могут получать питание, например,
от одной батареи типа ААА. Микроконтроллеры ATtiny23U/43U содержат 2K/4K Flashпамяти, 64 байт EEPROM, 128/256 байт ОЗУ,
два 8-разрядных таймера/счетчика, сторожевой таймер, аналоговый компаратор, BOD,
датчик температуры, 10-разрядный АЦП, интерфейсы SPI, USI. Отладка приложений
и программирование (за исключением fuse-
битов) может осуществляться по интерфейсу debugWire.
Новый кристалл AVR ATtiny10 является
первым микроконтроллером, выпущенным
корпорацией Atmel в миниатюрном корпусе
SOT23-6 размером 2,9×1,6 мм, который имеет
всего 6 выводов. Микроконтроллер предназначен для бюджетных приложений и может
служить альтернативой снятому с производства ATtiny11. ATtiny10 содержит 1 кбайт
Flash-памяти программ, 32 байт SRAM, 8-разрядный АЦП, аналоговый компаратор,
16-разрядный таймер/счетчик с ШИМ, сторожевой таймер. Напряжение питания составляет 1,8–5,5 В, максимальная рабочая частота — 12 МГц.
ATtiny10 совместим повыводно с микроконтроллерами семейства PIC10F компании
Microchip. По сравнению с PIC10F, ATtiny10
имеет более высокую степень интеграции
(16-разрядный таймер/счетчик с ШИМ, наличие АЦП и аналогового компаратора, больший объем памяти SRAM), более высокую
производительность.
Программирование микроконтроллера
ATtiny10 осуществляется по 3-проводному
интерфейсу TPI (Tiny Programming Interface)
с помощью стартового набора ATSTK600
и интегрированной среды разработки AVR
Studio (начиная с версии 4.16 и старше). Программатор ATAVRISP2 и внутрисхемный эмулятор ATJTAGICE2 фирмы Atmel не поддерживают интерфейс TPI.
ATtiny10 не является в прямом смысле внутрисхемно-программируемым, тем не менее,
программирование в системе (in-system) возможно. Для программирования по интерфейсу TPI необходимо напряжение 5 В. Если устройство работает от 1,8 В, для программирования необходимо увеличивать это напряжение
до 5 В. Также следует учесть, что при программировании используются 2 линии ввода/вывода и вывод RESET (интерфейс TPI). Внешний программатор должен иметь возможность использовать эти выводы, при том, что
линий ввода/вывода у этого микроконтроллера всего четыре. То есть программирование в системе возможно, но не очень удобно.
В настоящее время Atmel не предлагает своего внешнего программатора для ATtiny10,
программировать микросхему можно только установкой ATtiny10 на плату стартового
набора STK600.
Для серийного производства есть еще один
вариант программирования ATtiny10 — запись прошивки в микроконтроллер ATtiny10
на фабрике Atmel. Такую услугу оказывают
для партий объемом не менее 200 тысяч штук.
Отладочные средства
Стартовый набор STK600Стартовый набор STK600 может служить
основой для разработчика при работе с 32-разрядными микроконтроллерами UC3A/UC3B
и 8-разрядными AVR (tiny/mega/XMEGA). Он
построен аналогично STK500 для AVR: базовая плата + мезонинный модуль. Базовая
плата содержит: разъемы RS-232, JTAG, USB
(device), mini-USB (OTG), преобразователи
физического уровня CAN и LIN, 8 светодиодов, 8 кнопок, память DataFlash 2 Mбит. Все
порты микроконтроллеров выведены на отдельные разъемы на плате (рис. 2).
Рис. 2. Отладочная плата STK600
Мезонинные платы содержат панели с нулевым усилием (ZIF) для установки микроконтроллера. Для поддержки разных микроконтроллеров в одинаковых корпусах, но с различным расположением выводов, мезонины
устанавливаются в базовую плату через переходные платы (рис. 3).
Рис. 3. Примеры наборов мезонинных плат для STK600
В штатной комплектации (код для заказа
ATSTK600) поставляется базовая плата с мезонинной платой, на которой распаян микроконтроллер ATmega2560 (STK600-ATMEGA2560).
Мезонинные модули для других микроконтроллеров (укомплектованные переходными
платами) заказываются отдельно. Доступные
на момент написания статьи варианты наборов мезонинных плат приведены в таблице 5.
Таблица 5. Варианты мезонинных наборов для STK600
Наименование мезонинной платы |
ZIF-панель для корпуса |
Управляющая программа |
Поддержи- ваемые микро- контроллеры |
STK600-DIP | универсальная DIP | AVR Studio | AVR (tiny, mega) |
STK600-TQFP32 | TQFP32 | AVR Studio | AVR (tiny, mega) |
STK600-TQFP44 | TQFP44 | AVR Studio | AVR (tiny, mega, XMEGA) |
STK600-TQFP48 | TQFP48 | AVR32 Studio |
UC3B/L |
STK600-TQFP64 | TQFP64 | AVR Studio | AVR (tiny, mega, XMEGA) |
STK600-TQFP64-2 | TQFP64 | AVR32 Studio |
UC3B |
STK600-TQFP100 | TQFP100 | AVR Studio | AVR (tiny, mega, XMEGA) |
STK600-TQFP144 | TQFP144 | AVR32 Studio |
UC3A |
STK600-SOIC | SOIC20, SOIC24, SOIC32 |
AVR Studio | AVR (tiny, mega) |
STK600-UC3144 | TQFP144 | AVR32 Studio |
UC3A |
STK600-SSOP44 | TSSOP44 | AVR Studio | ATmega32HVB |
STK600-UC3-144 | TQFP144 | AVR32 Studio |
UC3A |
STK600-MLF64 | MLF64 | AVR Studio | ATXMEGA256A3B |
STK600-ATTINY10 | SOT23-6 | AVR Studio | ATtiny10 |
STK600-tinyX3U | * | AVR Studio | ATtiny43U |
STK600-ATMEGA2560 | * | AVR Studio | ATmega2560 |
Примечание. * — микроконтроллер распаян на плате. |
STK600 позволяет осуществлять как последовательное внутрисхемное, так и параллельное высоковольтное программирование.
Последнее доступно для микроконтроллеров,
установленных в STK600. Последовательное
внутрисхемное программирование осуществляется для микроконтроллеров, как установленных в STK600, так и на целевой плате.
Интерфейсы программирования: SPI, TPI,
JTAG или PDI.
Универсальный внутрисхемный эмулятор
AVRONEKIT (рис. 4) предназначен для всех
микроконтроллеров AVR и AVR32: он поддерживает программирование по интерфейсам
SPI, JTAG, PDI и внутрисхемную отладку по
интерфейсам JTAG, debugWire, PDI и Nexus.
Рис. 4. Внутрисхемный эмулятор AVRONEKIT
В отличие от JTAGICE2 и AVRDragon,
AVRONEKIT содержит буфер трассировки
128 Мбайт и поддерживает высокоскоростное
потоковое или буферизируемое считывание
трассы по интерфейсу Nexus. AVRONEKIT
также позволяет осуществлять запись трассы в момент выполнения программы. Анализ трассы при отладке сегмента кода позволяет в дальнейшем оценить поведение кристалла в реальной системе на максимальных
предусмотренных скоростях.
AVRONEKIT поддерживает функцию Live
debug, позволяющую входить в режим отладки выполняющегося на микроконтроллере
XMEGA приложения (не генерируя RESET
и не меняя содержимого регистров и памяти).
Заключение
Популярная линейка 8-разрядных микроконтроллеров AVR продолжает активно развиваться и усовершенствоваться: снижается
энергопотребление кристаллов, появляются
микроконтроллеры с новыми возможностями и новым функционалом, выпускаются
новые отладочные средства и программные
средства.
Литература
- http://www.jedec.org/download/search/JSTD020D-01
- Микроконтроллеры AVR и AVR32: перспективные новинки. ООО «ЭФО», 2009.
Векторное имя |
Старое векторное имя |
Описание |
Применим для устройства |
ADC_vect |
SIG_ADC |
аналого-цифровое преобразование завершено |
AT90S2333, AT90S4433, AT90S4434, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny13, ATtiny15, ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
ANALOG_COMP_0_vect |
SIG_COMPARATOR0 |
Аналоговый компаратор 0 |
AT90PWM3, AT90PWM2, AT90PWM1 |
ANALOG_COMP_1_vect |
SIG_COMPARATOR1 |
Аналоговый компаратор 1 |
AT90PWM3, AT90PWM2, AT90PWM1 |
ANALOG_COMP_2_vect |
SIG_COMPARATOR2 |
Аналоговый компаратор 2 |
AT90PWM3, AT90PWM2, AT90PWM1 |
ANALOG_COMP_vect |
SIG_COMPARATOR |
Аналоговый компаратор |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
ANA_COMP_vect |
SIG_COMPARATOR |
Аналоговый компаратор |
AT90S1200, AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny2313, ATtiny26, ATtiny28, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861 |
CANIT_vect |
SIG_CAN_INTERRUPT1 |
CAN Передача завершена или ошибка |
AT90CAN128, AT90CAN32, AT90CAN64 |
EEPROM_READY_vect |
SIG_EEPROM_READY, SIG_EE_READY |
|
ATtiny2313 |
EE_RDY_vect |
SIG_EEPROM_READY |
EEPROM Готовый |
AT90S2333, AT90S4433, AT90S4434, AT90S8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535, ATtiny12, ATtiny13, ATtiny15, ATtiny26, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861 |
EE_READY_vect |
SIG_EEPROM_READY |
EEPROM Готовый |
AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
EXT_INT0_vect |
SIG_INTERRUPT0 |
Внешний Запрос на прерывание 0 |
ATtiny24, ATtiny44, ATtiny84 |
INT0_vect |
SIG_INTERRUPT0 |
Внешнее Прерывание 0 |
AT90S1200, AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny2313, ATtiny26, ATtiny28, ATtiny45, ATtiny25, ATtiny85, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT1_vect |
SIG_INTERRUPT1 |
Внешний Запрос на прерывание 1 |
AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega32, ATmega323, ATmega406, ATmega64, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny28, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT2_vect |
SIG_INTERRUPT2 |
Внешний Запрос на прерывание 2 |
AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega32, ATmega323, ATmega406, ATmega64, ATmega8515, ATmega8535, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT3_vect |
SIG_INTERRUPT3 |
Внешний Запрос на прерывание 3 |
AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega406, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT4_vect |
SIG_INTERRUPT4 |
Внешний Запрос на прерывание 4 |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT5_vect |
SIG_INTERRUPT5 |
Внешний Запрос на прерывание 5 |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT6_vect |
SIG_INTERRUPT6 |
Внешний Запрос на прерывание 6 |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
INT7_vect |
SIG_INTERRUPT7 |
Внешний Запрос на прерывание 7 |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
IO_PINS_vect |
SIG_PIN, SIG_PIN_CHANGE |
Внешний Запрос на прерывание 0 |
ATtiny11, ATtiny12, ATtiny15, ATtiny26 |
LCD_vect |
SIG_LCD |
LCD Начало Фрейма |
ATmega169, ATmega169P, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega649, ATmega6490 |
LOWLEVEL_IO_PINS_vect |
SIG_PIN |
Ввод низкого уровня на Порту B |
ATtiny28 |
OVRIT_vect |
SIG_CAN_OVERFLOW1 |
CAN Переполненный Таймер |
AT90CAN128, AT90CAN32, AT90CAN64 |
PCINT0_vect |
SIG_PIN_CHANGE0 |
прерывание по изменению уровня на выводе параллельного порта 0 |
ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
PCINT1_vect |
SIG_PIN_CHANGE1 |
прерывание по изменению уровня на выводе параллельного порта 1 |
ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny24, ATtiny44, ATtiny84, AT90USB162, AT90USB82 |
PCINT2_vect |
SIG_PIN_CHANGE2 |
прерывание по изменению уровня на выводе параллельного порта 2 |
ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
PCINT3_vect |
SIG_PIN_CHANGE3 |
прерывание по изменению уровня на выводе параллельного порта 3 |
ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
PCINT_vect |
SIG_PIN_CHANGE, SIG_PCINT |
|
ATtiny2313, ATtiny261, ATtiny461, ATtiny861 |
PSC0_CAPT_vect |
SIG_PSC0_CAPTURE |
PSC0 Случай захвата |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC0_EC_vect |
SIG_PSC0_END_CYCLE |
PSC0 Конечный Цикл |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC1_CAPT_vect |
SIG_PSC1_CAPTURE |
PSC1 Случай захвата |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC1_EC_vect |
SIG_PSC1_END_CYCLE |
PSC1 Конечный Цикл |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC2_CAPT_vect |
SIG_PSC2_CAPTURE |
PSC2 Случай захвата |
AT90PWM3, AT90PWM2, AT90PWM1 |
PSC2_EC_vect |
SIG_PSC2_END_CYCLE |
PSC2 Конечный Цикл |
AT90PWM3, AT90PWM2, AT90PWM1 |
SPI_STC_vect |
SIG_SPI |
прерывание от SPI |
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
SPM_RDY_vect |
SIG_SPM_READY |
память программ готова |
ATmega16, ATmega162, ATmega32, ATmega323, ATmega8, ATmega8515, ATmega8535 |
SPM_READY_vect |
SIG_SPM_READY |
память программ готова |
AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega406, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIM0_COMPA_vect |
SIG_OUTPUT_COMPARE0A |
Таймер/Счетчик Совпадение A |
ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM0_COMPB_vect |
SIG_OUTPUT_COMPARE0B |
Таймер/Счетчик Совпадение B |
ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM0_OVF_vect |
SIG_OVERFLOW0 |
Таймер/Счетчик 0 Переполнение |
ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM1_CAPT_vect |
SIG_INPUT_CAPTURE1 |
Таймер/Счетчик 1 Захват |
ATtiny24, ATtiny44, ATtiny84 |
TIM1_COMPA_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик 1 Совпадение A |
ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM1_COMPB_vect |
SIG_OUTPUT_COMPARE1B |
Таймер/Счетчик 1 Совпадение B |
ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIM1_OVF_vect |
SIG_OVERFLOW1 |
Таймер/Счетчик 1 Переполнение |
ATtiny24, ATtiny44, ATtiny84, ATtiny45, ATtiny25, ATtiny85 |
TIMER0_CAPT_vect |
SIG_INPUT_CAPTURE0 |
прерывание по захвату на входе |
ATtiny261, ATtiny461, ATtiny861 |
TIMER0_COMPA_vect |
SIG_OUTPUT_COMPARE0A |
Таймер/Счетчик 0 Совпадение A |
ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER0_COMPB_vect |
SIG_OUTPUT_COMPARE0B, SIG_OUTPUT_COMPARE0_B |
Таймер/Счетчик 0 Совпадение B |
AT90PWM3, AT90PWM2, AT90PWM1, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER0_COMP_A_vect |
SIG_OUTPUT_COMPARE0A, SIG_OUTPUT_COMPARE0_A |
Таймер/Счетчик 0 Совпадение A |
AT90PWM3, AT90PWM2, AT90PWM1 |
TIMER0_COMP_vect |
SIG_OUTPUT_COMPARE0 |
Таймер/Счетчик 0 Совпадение |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8515, ATmega8535 |
TIMER0_OVF0_vect |
SIG_OVERFLOW0 |
Таймер/Счетчик 0 Переполнение |
AT90S2313, AT90S2323, AT90S2343, ATtiny22, ATtiny26 |
TIMER0_OVF_vect |
SIG_OVERFLOW0 |
Таймер/Счетчик 0 Переполнение |
AT90S1200, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny11, ATtiny12, ATtiny15, ATtiny2313, ATtiny28, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_CAPT1_vect |
SIG_INPUT_CAPTURE1 |
Таймер/Счетчик 1 Захват |
AT90S2313 |
TIMER1_CAPT_vect |
SIG_INPUT_CAPTURE1 |
Таймер/Счетчик 1 Захват |
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_CMPA_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик 1 совпадение A |
ATtiny26 |
TIMER1_CMPB_vect |
SIG_OUTPUT_COMPARE1B |
Таймер/Счетчик 1 совпадение B |
ATtiny26 |
TIMER1_COMP1_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик 1 совпадение A |
AT90S2313 |
TIMER1_COMPA_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик1 Совпадение A |
AT90S4414, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_COMPB_vect |
SIG_OUTPUT_COMPARE1B |
Таймер/Счетчик1 Совпадение B |
AT90S4414, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_COMPC_vect |
SIG_OUTPUT_COMPARE1C |
Таймер/Счетчик 1 Совпадение C |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER1_COMPD_vect |
SIG_OUTPUT_COMPARE0D |
Таймер/Счетчик 1 Совпадение D |
ATtiny261, ATtiny461, ATtiny861 |
TIMER1_COMP_vect |
SIG_OUTPUT_COMPARE1A |
Таймер/Счетчик 1 Совпадение A |
AT90S2333, AT90S4433, ATtiny15 |
TIMER1_OVF1_vect |
SIG_OVERFLOW1 |
Таймер/Счетчик 1 Переполнение |
AT90S2313, ATtiny26 |
TIMER1_OVF_vect |
SIG_OVERFLOW1 |
Таймер/Счетчик 1 Переполнение |
AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90PWM3, AT90PWM2, AT90PWM1, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8515, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, ATtiny15, ATtiny2313, ATtiny261, ATtiny461, ATtiny861, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER2_COMPA_vect |
SIG_OUTPUT_COMPARE2A |
Таймер/Счетчик 2 Совпадение A |
ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER2_COMPB_vect |
SIG_OUTPUT_COMPARE2B |
Таймер/Счетчик 2 Совпадение A |
ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER2_COMP_vect |
SIG_OUTPUT_COMPARE2 |
Таймер/Счетчик 2 Совпадение |
AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535 |
TIMER2_OVF_vect |
SIG_OVERFLOW2 |
Таймер/Счетчик 2 Переполнение |
AT90S4434, AT90S8535, AT90CAN128, AT90CAN32, AT90CAN64, ATmega103, ATmega128, ATmega16, ATmega161, ATmega162, ATmega163, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER3_CAPT_vect |
SIG_INPUT_CAPTURE3 |
Таймер/Счетчик 3 Захват |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER3_COMPA_vect |
SIG_OUTPUT_COMPARE3A |
Таймер/Счетчик 3 Совпадение A |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER3_COMPB_vect |
SIG_OUTPUT_COMPARE3B |
Таймер/Счетчик 3 Совпадение B |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER3_COMPC_vect |
SIG_OUTPUT_COMPARE3C |
Таймер/Счетчик 3 Совпадение C |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER3_OVF_vect |
SIG_OVERFLOW3 |
Таймер/Счетчик 3 Переполнение |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TIMER4_CAPT_vect |
SIG_INPUT_CAPTURE4 |
Таймер/Счетчик 4 Захват |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_COMPA_vect |
SIG_OUTPUT_COMPARE4A |
Таймер/Счетчик 4 Совпадение A |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_COMPB_vect |
SIG_OUTPUT_COMPARE4B |
Таймер/Счетчик 4 Совпадение B |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_COMPC_vect |
SIG_OUTPUT_COMPARE4C |
Таймер/Счетчик 4 Совпадение C |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER4_OVF_vect |
SIG_OVERFLOW4 |
Таймер/Счетчик 4 Переполнение |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_CAPT_vect |
SIG_INPUT_CAPTURE5 |
Таймер/Счетчик 5 Совпадение |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_COMPA_vect |
SIG_OUTPUT_COMPARE5A |
Таймер/Счетчик 5 Совпадение A |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_COMPB_vect |
SIG_OUTPUT_COMPARE5B |
Таймер/Счетчик 5 Совпадение B |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_COMPC_vect |
SIG_OUTPUT_COMPARE5C |
Таймер/Счетчик 5 Совпадение C |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TIMER5_OVF_vect |
SIG_OVERFLOW5 |
Таймер/Счетчик 5 Переполнение |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
TWI_vect |
SIG_2WIRE_SERIAL |
2-проводный последовательный интерфейс (I2C) |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega16, ATmega163, ATmega32, ATmega323, ATmega406, ATmega64, ATmega8, ATmega8535, ATmega168, ATmega48, ATmega88, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
TXDONE_vect |
SIG_TXDONE |
Transmission Done, Bit Timer Flag 2 Interrupt |
AT86RF401 |
TXEMPTY_vect |
SIG_TXBE |
Transmit Buffer Empty, Bit Itmer Flag 0 Interrupt |
AT86RF401 |
UART0_RX_vect |
SIG_UART0_RECV |
UART0, Приём закончен |
ATmega161 |
UART0_TX_vect |
SIG_UART0_TRANS |
UART0, Передача закончена |
ATmega161 |
UART0_UDRE_vect |
SIG_UART0_DATA |
UART0 опустошение регистра данных |
ATmega161 |
UART1_RX_vect |
SIG_UART1_RECV |
UART1, Приём закончен |
ATmega161 |
UART1_TX_vect |
SIG_UART1_TRANS |
UART1, Передача закончена |
ATmega161 |
UART1_UDRE_vect |
SIG_UART1_DATA |
UART1 опустошение регистра данных |
ATmega161 |
UART_RX_vect |
SIG_UART_RECV |
UART, Приём закончен |
AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515 |
UART_TX_vect |
SIG_UART_TRANS |
UART, Передача закончена |
AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515 |
UART_UDRE_vect |
SIG_UART_DATA |
UART опустошение регистра данных |
AT90S2313, AT90S2333, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, ATmega103, ATmega163, ATmega8515 |
USART0_RXC_vect |
SIG_USART0_RECV |
USART0, Приём закончен |
ATmega162 |
USART0_RX_vect |
SIG_UART0_RECV |
USART0, Приём закончен |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega329, ATmega329P, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
USART0_TXC_vect |
SIG_USART0_TRANS |
USART0, Передача закончена |
ATmega162 |
USART0_TX_vect |
SIG_UART0_TRANS |
USART0, Передача закончена |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega3250, ATmega329, ATmega329P, ATmega3290, ATmega3290P, ATmega64, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
USART0_UDRE_vect |
SIG_UART0_DATA |
USART0 опустошение регистра данных |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega165, ATmega165P, ATmega169, ATmega169P, ATmega325, ATmega329, ATmega329P, ATmega64, ATmega645, ATmega649, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644 |
USART1_RXC_vect |
SIG_USART1_RECV |
USART1, Приём завершен |
ATmega162 |
USART1_RX_vect |
SIG_UART1_RECV |
USART1, Приём завершен |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
USART1_TXC_vect |
SIG_USART1_TRANS |
USART1, Передача закончена |
ATmega162 |
USART1_TX_vect |
SIG_UART1_TRANS |
USART1, Передача закончена |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
USART1_UDRE_vect |
SIG_UART1_DATA |
USART1, опустошение регистра данных |
AT90CAN128, AT90CAN32, AT90CAN64, ATmega128, ATmega162, ATmega64, ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega324P, ATmega164P, ATmega644P, ATmega644, AT90USB162, AT90USB82, AT90USB1287, AT90USB1286, AT90USB647, AT90USB646 |
USART2_RX_vect |
SIG_USART2_RECV |
USART2, Приём завершен |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART2_TX_vect |
SIG_USART2_TRANS |
USART2, Передача закончена |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART2_UDRE_vect |
SIG_USART2_DATA |
USART2 опустошение регистра данных |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART3_RX_vect |
SIG_USART3_RECV |
USART3, Приём завершен |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART3_TX_vect |
SIG_USART3_TRANS |
USART3, Передача закончена |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART3_UDRE_vect |
SIG_USART3_DATA |
USART3 опустошение регистра данных |
ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561 |
USART_RXC_vect |
SIG_USART_RECV, SIG_UART_RECV |
USART, Приём завершен |
ATmega16, ATmega32, ATmega323, ATmega8 |
USART_RX_vect |
SIG_USART_RECV, SIG_UART_RECV |
USART, Приём завершен |
AT90PWM3, AT90PWM2, AT90PWM1, ATmega3250, ATmega3290, ATmega3290P, ATmega6450, ATmega6490, ATmega8535, ATmega168, ATmega48, ATmega88, ATtiny2313 |
USART_TXC_vect |
SIG_US |
|
|
Управление флагом глобального разрешения прерываний |
|
||
Флаг глобального разрешения прерываний расположен в регистре состояния (SREG). |
|
||
#define |
sei() |
|
|
#define |
cli() |
|
|
Макроопределения для написания функций обработки прерываний |
|
||
|
|
||
#define |
ISR(vector) |
|
|
#define |
SIGNAL(vector) |
|
|
#define |
EMPTY_INTERRUPT(vector) |
|
|
#define |
ISR_ALIAS(vector, target_vector) |
|
|
Микроконтроллеры AVR: Прерывания
Прерывания прекращают работу основной программ для того чтобы выполнить более приоритетную, определяемую внутренними или внешними событиями, влияющими на работу микроконтроллера. При этом в стек записывается содержимое счетчика команд, а в сам счетчик записывается вектор прерывания, по которому находится команда безусловного перехода к подпрограмме обработки прерывания. После выполнения подпрограммы обработки прерывания, в счетчик команд загружается сохраненное значение из стека и выполнение основной программы продолжается с того места, где оно остановилось.Таблица векторов прерывания располагается в памяти программ, начиная с адреса 0x0002, либо в области загрузчика. Приоритет прерывания зависит также от его расположения в таблице векторов прерывания: чем меньше адрес, тем выше приоритет прерывания.
Регистр MCUCR:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
— | BODS | — | IVSEL | IVCE |
Бит IVCEL (1) указывает где будет располагаться таблица векторов прерывания:
- 0 — по адресу 0x0002
- 1 — по адресу начала загрузчика + 0x0002 (подробнее тут)
Бит IVCE (0) разрешает изменение бита IVCEL в течении 4 машинных циклов после установки его в 1.
Разрешение обработки прерываний осуществляется установкой 1 в бит I (7) регистра SREG:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
I | T | V | Z | C |
Таблица векторов прерывания микроконтроллера ATmega328 выглядит следующим образом:
- 0x0000 RESET — сброс
- 0x0002 INT0 — внешнее прерывание 0
- 0x0004 INT1 — внешнее прерывание 0
- 0x0006 PCINT0 — прерывание по изменению состояния нулевой группы выводов
- 0x0008 PCINT1 — прерывание по изменению состояния первой группы выводов
- 0x000A PCINT2 — прерывание по изменению состояния второй группы выводов
- 0x000C WDT — прерывание от сторожевого таймера
- 0x000E TIMER2 COMPA — прерывание от таймера/счетчика T2 при совпадении с A
- 0x0010 TIMER2 COMPB — прерывание от таймера/счетчика T2 при совпадении с B
- 0x0012 TIMER2 OVF — прерывание по переполнению таймера/счетчика T2
- 0x0014 TIMER1 CAPT — прерывание от таймера/счетчика T1 по записи
- 0x0016 TIMER1 COMPA — прерывание от таймера/счетчика T1 при совпадении с A
- 0x0018 TIMER1 COMPB — прерывание от таймера/счетчика T2 при совпадении с B
- 0x001A TIMER1 OVF — прерывание по переполнению таймера/счетчика T1
- 0x001C TIMER0 COMPA — прерывание от таймера/счетчика T0 при совпадении с A
- 0x001E TIMER0 COMPB — прерывание от таймера/счетчика T0 при совпадении с B
- 0x0020 TIMER0 OVF — прерывание по переполнению таймера/счетчика T0
- 0x0022 SPI, STC — прерывание по окончанию передачи модуля SPI
- 0x0024 USART, RX — прерыванию по окончанию приема модуля USART
- 0x0026 USART, UDRE — прерывание по опустошению регистра данных модуля USART
- 0x0028 USART, TX — прерывание по окончанию приема модуля USART
- 0x002A ADC — прерывание по завершению преобразования АЦП
- 0x002C EE READY — прерывание по готовности памяти EEPROM
- 0x002E ANALOG COMP — прерывание от аналогового компаратора
- 0x0030 TWI — прерывание от модуля I2C (TWI)
- 0x0032 SPM READY — прерывание по готовности flash памяти
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Криптография с открытым ключом на основе эллиптических кривых для AVRСодержание: Общая информацияCRS-AVR010X-ECC криптографическое программное обеспечение реализует цифровую подпись ECDSA и алгоритм ECDH.Поддерживает 8-битные микроконтроллеры AVR производства пользователя Atmel. Поскольку требуются сложные вычисления, мы настоятельно рекомендуем использовать ПО только для микроконтроллеров ATmega. Кроме того, программное обеспечение предлагает реализацию CRS-AVR020X-RBG генератор случайных битов, основанный на свойствах аналого-цифрового Конвертер. Следовательно, функциональность программного обеспечения является полной только при использовании вместе с микроконтроллеры со встроенным преобразователем. В зависимости от конфигурации для реализации CRS-AVR010X-ECC требуется от 5 до 8 Кбайт флэш-памяти микроконтроллера и от 750 до 900 Байт памяти SRAM. Уровень криптографической защитыПрограммное обеспечение доступно в четырех версиях, каждая из которых предлагает разный уровень криптографическая защита. В таблице ниже представлена взаимосвязь между реализованными область эллиптической кривой и уровень обеспечиваемой защиты. Каждая строка таблицы соответствует равному уровню защиты. Например: криптографическая мощь домена secp160r1 равна мощности 80-битного ключевого симметричного шифра, а мощность 1024-битного ключа RSA.
Используемые криптографические домены широко известны и были опубликованы в Стандарт SEC 2. Однако выбор наиболее подходящего домена для конкретного приложения не является легкое задание. В первую очередь следует решить, отдавать ли приоритет скорости или до уровня безопасности. Домен secp160r1 является самым быстрым, но обеспечивает более низкую уровень защиты по сравнению с secp192r1, secp224r1 и secp256r1. Таблица ниже представлены прогнозы, сделанные Национальным институтом стандартов и технологий. (NIST) относительно периода времени, до которого Ожидается, что определенные домены обеспечат безопасность.
Время выполнения отдельных операций доступно в разделе под названием часов работы . Время действияВ таблице ниже представлено время работы для определенных доменов.
Работа подписи ECDSA может быть ускорена за счет использования дополнительных объем памяти. В таблице ниже представлены необходимые объем памяти и время работы для завершение подписи для определенных доменов.
сборка — Почему компоновщик ассемблера AVR считает, что моя таблица данных находится по неправильному адресу? MCU: ATmega1284 У меня во флеш-памяти есть постоянная таблица данных.Компоновщик думает, что он расположен по адресу 0x0090, поэтому, когда я пишу инструкции по сборке, чтобы попытаться загрузить адрес таблицы, они загружают 0x0090. Проблема в том, что таблица на самом деле находится по адресу 0x0120. Поэтому, когда я пытаюсь получить доступ к таблице, я получаю мусор. Почему компоновщик думает, что таблица данных расположена по адресу, отличному от того, по которому она фактически программируется? Вот определение таблицы.
Я хочу получить доступ к таблице с помощью инструкции AVR ELPM, как показано ниже…
Проблема в том, что когда я пытаюсь загрузить в регистр Z адрес lcd_init_table, я получаю значение 0x0090. Файл карты подтверждает, что 0x0090 — это то место, где компоновщик считает, что таблица расположена.
Проблема в том, что стол на самом деле не находится там. Шестнадцатеричный файл показывает, что на самом деле он находится по адресу 0x0120.Программирование MCU и просмотр флэш-памяти с помощью окна памяти подтверждает, что таблица действительно находится на 0x0120.
Если я жестко закодирую загрузку адреса в зависимости от местоположения в шестнадцатеричном файле, то код будет работать, как задумано. Проблема в том, что я не могу этого сделать, поскольку таблица может перемещаться, когда я добавляю / удаляю код. Я мог бы найти таблицу по явному адресу с помощью директивы .org, но это всего лишь пластырь, и я хотел бы решить настоящую проблему.
Настройки программатора устройства следующие.
Параметры компилятора следующие. Учебные пособия поAVR — Работа с SRAMКак мы видели в предыдущем руководстве, стандартные регистры ввода-вывода имеют специальный набор инструкций для доступа к ним. Однако при доступе к расширенным регистрам ввода-вывода и SRAM необходимо использовать более общий набор инструкций, показанный в таблице ниже.
Выделение места в SRAMПространство может быть выделено директивой.byte, за которым следует количество выделяемых байтов, например
Чтобы выделить место в SRAM, необходимо использовать директиву .dseg, чтобы указать сегмент данных . Например, 2 байта на кусок могут быть выделены в начале SRAM для меток var1 и var2 следующим образом
Выше директива.org используется для установки местоположения .dseg в SRAM_START, адрес, определенный во включаемом файле. Метки var1 и var2 затем используются для обозначения адреса памяти данных, по которому выделяется пространство. Обратите внимание, что мы не можем записывать значения в память данных при программировании микросхемы, мы можем только выделить для них место и инициализировать их во время выполнения. Значения могут быть записаны в SRAM без выделения места, но приведенное выше дает нам значимые метки для данных, которые мы храним, и позволяет нам отслеживать, сколько SRAM мы используем.
Прямая загрузка и хранениеПервый метод доступа к данным в расширенном вводе-выводе и SRAM называется прямой . Прямой доступ означает, что адрес, который вы хотите загрузить или сохранить, предоставляется вместе с самой инструкцией. Для прямого доступа используются следующие инструкции: lds — загрузка непосредственно из пространства данных и sts — сохранение прямо в пространство данных . lds и sts вызываются с адресом памяти данных и регистром общего назначения, например.г.
Регистр TWDR находится в режиме расширенного ввода-вывода, поэтому мы не можем использовать вход и выход для доступа к нему, как раньше. Вместо этого мы должны использовать lds и sts. Почти все регистры, управляющие периферийными устройствами (например, UART, I2C), находятся в режиме расширенного ввода-вывода, поэтому к ним можно получить доступ только с помощью этих инструкций. lds и sts поддерживают любой из 32 рабочих регистров общего назначения в качестве операндов и могут получить доступ к пространству памяти данных объемом до 64 КБ. Примечание: Использование lds и sts с r0 по r15 стоит на один такт больше и занимает больше места в программной памяти, чем использование с r16 по r31. По возможности используйте в качестве операндов от r16 до r31. lds и sts могут использоваться для записи и хранения данных, которые мы разместили в SRAM. Например,
Выше мы выделяем 2 байта для var в SRAM, инициализируем его значением 0x55AA, а затем загружаем в r1: r0.
Непрямая загрузка и хранениеДругой метод доступа к данным в расширенном вводе-выводе и SRAM называется косвенным . Косвенный доступ осуществляется за счет использования указателя . Напомним, что среди рабочих регистров общего назначения есть три специальных регистра, называемых указателями X, Y и Z. Мы можем получить доступ к памяти данных, загрузив адрес в один из этих указателей. При вызове инструкций непрямого доступа будет извлечено содержимое ячейки памяти данных , на которую указывает указатели X, Y или Z. Например, инструкции ld и st могут использоваться для доступа к данным с указателем X как
Выше младший и старший байты указателя X загружаются с адресом интересующего нас места в пространстве данных, var.Затем вызываются ld и st с указателем X в качестве операнда. То же самое можно сделать с указателем Y
И указатель Z
Пост-инкремент и пре-декрементЕсли необходимо получить доступ к последовательным байтам в памяти данных, указатели X, Y и Z могут быть автоматически увеличены после вызова инструкции путем размещения + рядом с указателем в операнде, т.е.е.
Указатели также могут быть уменьшены на перед вызовом инструкции, поместив — перед указателем в операнде, т. Е.
Эта функция чрезвычайно полезна, поскольку избавляет вас от необходимости перезагружать указатели каждый раз, когда вам нужно получить доступ к данным.Например, 4 байта могут быть сохранены в области данных, а затем считаны как
Рабочий объемУказатели Y и Z поддерживают дополнительную функцию, заключающуюся в том, что они могут быть смещены на 63 байта перед адресом, которым они инициализированы.Это делается с помощью инструкций ldd — косвенная загрузка со смещением и sts — косвенная загрузка со смещением.
Смещение полезно для доступа к последовательным ячейкам памяти данных без изменения значения, загруженного в указатель, на случай, если оно понадобится позже. Ответьте на следующие короткие вопросы о Atmel AVRРасшифрованный текст изображения: Ответьте на следующие короткие вопросы о прерываниях Atmel AVR. (Подсказка: ниже представлена информация из справочного руководства, которая поможет вам ответить на вопросы.) 1. Atmel AVR имеет несколько источников прерываний, всеми из которых можно управлять с помощью флага I в регистре кода состояния. а. Флажок I активен-высокий или активен-низкий? То есть какое состояние флага I указывает на то, что прерывания разрешены? б.Какая единственная инструкция кода операции делает активным флаг прерывания (разрешает прерывания)? (Подсказка: на основании вашего предыдущего ответа, следует ли вам УСТАНОВИТЬ или ОЧИСТИТЬ флаг I?) 2. Когда происходит прерывание, ЦП ищет местоположение подпрограммы обслуживания прерывания в таблице. (Часть таблицы скопирована ниже.) Адреса в таблицах указывают на память данных или память команд? 3. Где находится вектор прерывания для прерывания запроса внешнего прерывания 1? (Подсказка: см. Таблицу ниже.) 4.Какая инструкция должна быть в конце каждой процедуры обслуживания прерывания? 5. Какая структура данных используется для сохранения состояния процессора при приеме прерывания? 6. В системе обработки прерываний Atmel AVR состояние процессора сохраняется автоматически, или же подпрограмма обслуживания прерывания отвечает за сохранение и восстановление состояния? 7. Помимо регистров общего назначения, какой регистр необходимо сохранять и восстанавливать, чтобы прерывания не мешали нормальному выполнению основной программы? N 3 4 8 Информация из Справочного руководства Atmega 328PB: 15.1 Векторы прерывания в ATmega328PB Таблица 15-1. Векторы сброса и прерывания в векторе ATmega328PB Нет адреса программы Источник Определение прерывания 1 0x0000 Внешний вывод RESET, сброс при включении, сброс после отключения питания и сброс системы сторожевого таймера Ox0002 INTO Внешний запрос прерывания Ox0004 INT1 Внешний запрос прерывания 1 Ox0006 PCINTO Запрос прерывания изменения контакта o 5 0x0008 PCINT1 запрос прерывания смены контакта 1 6 0x000A PCINT2 запрос прерывания смены контакта 2 7 Ox0000 WDT Watchdog Time-out Interrupt 0x000E TIMER2_COMPA Timer / Counter2 Match Match A 0x0010 TIMER2_COMPB Timer / Coutner2 Compare Match B 10 Ox0012 TIMER_COMPB Timer / Coutner2 Compare Match B 10 Ox0012 TIMER_1400 Counter Timer / Counter1 Capture Event 12 0x0016 TIMER1_COMPA Timer / Counter1 Compare Match A 13 Ox0018 TIMER1_COMPB Timer / Coutner1 Compare Match B 14 0x001A TIMER1_OVF Таймер / счетчик 1 Переполнение 15 0x001C TIMERO_COMPA Timer / Countero00 Matchout 16 TIMERO_COMPA Timer / Counteror00 Matchout A Timer / Countero00 Matchout 16 TIMERO_COMPA Timer / Countero00 Matching A TIMERO_COMPA Timer / Countero00 Match 16 A TIMERO_COMPA Timer / Countero00 Matching A TIMERO_COMPA Timer / Countero00 Matching A TIMERO_COMPA Timer / Countero00 Match 16 Ox0020 TIMERO_OVF Переполнение таймера / счетчика 18 Ox0022 SPIO STC SPI1 Последовательная передача завершена 1 9 0x0024 USARTO_RX USARTO Rx Complete 20 Ox0026 USARTO_UDRE USARTO, регистр данных пуст 21 Ox0028 USARTO_TX USARTO, Tx Complete Предыдущий вопрос Следующий вопросВведение в ATmega328 — инженерные проектыВсем привет! Я надеюсь, что вы все будете в полном порядке и весело проведете время.Сегодня я собираюсь подробно рассказать о Introduction to ATmega328. ATmega328 — это микроконтроллер Advanced Virtual RISC (AVR). Он поддерживает 8-битную обработку данных. ATmega-328 имеет внутреннюю флеш-память 32 КБ. ATmega328 имеет электрически стираемую программируемую постоянную память (EEPROM) емкостью 1 КБ. Это свойство показывает, если электропитание, подаваемое на микроконтроллер, отключено, даже тогда он может хранить данные и может предоставлять результаты после подачи электропитания.Кроме того, ATmega-328 имеет 2 КБ статической оперативной памяти (SRAM). Другие характеристики будут объяснены позже. ATmega 328 имеет несколько различных функций, которые делают его самым популярным устройством на сегодняшнем рынке. Эти функции включают усовершенствованную архитектуру RISC, хорошую производительность, низкое энергопотребление, счетчик реального времени с отдельным генератором, 6 контактов PWM, программируемый последовательный USART, блокировку программирования для безопасности программного обеспечения, пропускную способность до 20 MIPS и т. Д. Более подробная информация о ATmega 328 будет приводится ниже в этом разделе. Введение в ATmega328
Контакты ATmega328
Распиновка ATmega328
Выводы ATmega328 Описание
Архитектура ATmega328
Память ATmega328
Регистры ATmega328
Пакеты ATmega328
Блок-схема ATmega328
ATmega328 Возможности
ATmega328 и Arduino
Контакты ATmega328 и Arduino
Приложения Atmega328
Как начать работать с Atmega328
Память AVR — Справка разработчикаМикроконтроллеры AVR построены с использованием модифицированной Гарвардской архитектуры. Это означает, что пространство флэш-памяти программ находится на отдельной адресной шине, чем статическая оперативная память (SRAM). Есть две шины данных, одна для доступа ко всем данным и шина ввода / вывода с ограниченным доступом к небольшому участку памяти.
Микроконтроллеры AVR содержат встроенную в систему перепрограммируемую флэш-память для хранения программ. Поскольку все инструкции AVR имеют ширину 16 или 32 бита, флэш-память организована как 32K x 16. В целях безопасности программного обеспечения пространство памяти флэш-программ разделено на две секции — секцию загрузчика и секцию прикладной программы в устройстве. Типичный срок службы флэш-памяти составляет не менее 10 000 циклов записи / стирания. Таблицы констант могут быть размещены во всем адресном пространстве памяти программ с помощью инструкции загрузки памяти программ (LPM).Существует также библиотека функций, облегчающих эту задачу. Библиотека AVR Libc .Данные электрически стираемая программируемая постоянная память (EEPROM) организована как отдельное пространство данных, в котором можно читать и записывать отдельные байты. Доступ от ЦП к EEPROM осуществляется через регистры адреса EEPROM , регистр данных EEPROM и регистр управления EEPROM . EEPROM выдерживает не менее 100 000 циклов записи / стирания. Доступ к данным можно получить через стандартную шину данных .Имеется вторичная шина ввода / вывода для быстрого прямого доступа к выбранным местам. Память данных состоит из:
Регистровое пространство — состоит из 32 рабочих 8-битных регистров общего назначения (R0-R31). Память ввода / вывода — содержит адресное пространство для периферийных функций, таких как регистры управления и другие функции ввода / вывода. Расширенная память ввода-вывода — Некоторым микроконтроллерам AVR с большим количеством периферийных устройств требуется больше места, чем может адресовать память ввода-вывода, поэтому часть SRAM используется в качестве расширенной памяти ввода-вывода для обработки дополнительных регистров управления периферийными устройствами и другого ввода-вывода. O функции. Внутренняя SRAM (память данных) — используется для временного хранения промежуточных результатов и переменных в программном приложении. Имеется пять различных режимов адресации шины данных (не вход / выход) для памяти данных:
Входная / выходная шина данныхЭта шина данных имеет прямой доступ к 64-байтовой секции памяти ввода-вывода (не расширенной) с использованием адресов от 0x00 до 0x1F. К этой памяти также можно получить доступ по стандартной шине данных, используя смещение адреса 0x20 в команде доступа. Все ячейки ввода / вывода (память ввода / вывода и расширенная память ввода / вывода) могут быть доступны инструкциям сборки LD / LDS / LDD и ST / STS / STD с использованием стандартной шины данных. Данные передаются между 32 рабочими регистрами общего назначения и пространством ввода-вывода. Регистры ввода / вывода в диапазоне адресов шины ввода / вывода 0x00-0x1F (память ввода / вывода) имеют прямой битовый доступ с использованием инструкций SBI и CBI. В этих регистрах значение отдельных битов можно проверить с помощью инструкций SBIS и SBIC. Три регистра ввода-вывода общего назначения, регистр ввода-вывода общего назначения 0/1/2 (GPIOR 0/1/2) находятся в верхней части памяти ввода-вывода (0x020-0x022). Эти регистры могут использоваться для хранения любой информации, и они особенно полезны для хранения глобальных переменных и флагов состояния.Эти регистры имеют прямой битовый доступ с использованием инструкций SBI, CBI, SBIS и SBIC через шину данных In / Out. Остальные регистры ввода-вывода начинаются после регистров ввода-вывода общего назначения. Шина данных AVR имеет ширину 8 бит, поэтому доступ к 16-битным регистрам требует атомарных операций. К этим регистрам необходимо обращаться побайтово с помощью двух операций чтения или записи. 16-битные регистры подключены к 8-битной шине, а временный регистр — через 16-битную шину. Для операции записи старший байт 16-битного регистра должен быть записан перед младшим байтом.Затем старший байт записывается во временный регистр. Когда записывается младший байт 16-битного регистра, временный регистр копируется в старший байт 16-битного регистра в том же тактовом цикле. Для операции чтения младший байт 16-битного регистра должен быть прочитан перед старшим байтом. Когда ЦП считывает младший байт регистра, старший байт 16-битного регистра копируется во временный регистр в том же тактовом цикле, что и младший байт.Когда читается старший байт, он затем читается из временного регистра. Это гарантирует, что младший и старший байты 16-битных регистров всегда доступны одновременно при чтении или записи регистра. . |