Рассмотрим внутреннюю архитектуру микроконтроллеров AVR, попробуем разобраться из каких блоков состоит кристалл микросхемы и за какие функции отвечает каждый блок, как они взаимодействуют между собою. Также будут приведены полезные сравнения и примеры, ценные заметки что помогут прояснить принципы работы микроконтроллера с внешними устройствами и периферией.
Содержание:
- AVR микроконтроллер изнутри
- Структурная схема AVR микроконтроллера
- Подробнее о внутренних блоках микроконтроллера
- Заключение
AVR микроконтроллер изнутри
Микроконтроллер изнутри — это компьютер со своим вычислительным устройством, постоянной и динамической памятью, портами ввода-вывода и разной периферией.
Рис. 1. Структура AVR микроконтроллера. Рисунок с сайта digikey.com
Внутри микроконтроллер содержит:
- Быстродействующий процессор с RISC-архитектурой;
- FLASH-память;
- EEPROM-память;
- Оперативную память RAM;
- Порты ввода/вывода;
- Периферийные и интерфейсные модули.
RISC (Reduced Instruction Set Computer) — архитектура с тщательно подобранным набором команд, которые как правило выполняются за один такт работы процессора. Современные AVR микроконтроллеры содержат около 130 команд, которые очень быстро выполняются и не требуют больших затрат как по внутри-процессорным ресурсам, так и по потребляемой мощности.
Структурная схема AVR микроконтроллера
Посмотрим на рисунок ниже и разберемся из каких блоков состоит микроконтроллер и как они связаны между собою:
Рис. 2. Структурная схема AVR микроконтроллера.
Рассмотрим кратко что изображено на блоках в схеме:
- JTAG Interface (Joint Test Action Group Interface) — интерфейс внутрисхемной отладки (4 провода);
- FLASH — перепрограммируемая память для сохранения программы;
- Serial Peripheral Interface, SPI — последовательный периферийный интерфейс (3 провода);
- EEPROM (Electrically Erasable Programmable Read-Only Memory) — перепрограммируемое ПЗУ, энергонезависимая память;
- CPU (ЦПУ) — центральный процессор управления, сердце микроконтроллера, 8-битное микропроцессорное ядро;
- ALU (АЛУ) — арифметико-логическое устройство, основа блока CPU;
- RAM (Random Access Memory) — оперативная память процессора;
- Program Counter — счетчик команд;
- 32 General Purpose Registers — 32 регистра общего назначения;
- Instruction Register — регистр команд, инструкций;
- Instruction Decoder — декодер команд;
- OCD (On-Chip Debugger) — блок внутренней отладки;
- Analog Comparator — аналоговый компаратор, блок сравнения аналоговых сигналов;
- A/D Converter (Analog/Digital converter) — аналогово-цифровой преобразователь;
- LCD Interface (Liquid-Crystal Display Interface) — интерфейс для подключения жидко-кристаллического дисплея, индикатора;
- USART (Universal Asynchronous Receiver-Transmitter), UART — универсальный асинхронный приемопередатчик;
- TWI (Two-Wire serial Interface) — последовательный интерфейс с двухпроводным подключением;
- Watchdog Timer — сторожевой или контрольный таймер;
- I/O Ports — порты вода/вывода;
- Interrupts — блок управления и реакции на прерывания;
- Timers/Counters — модули таймеров и счетчиков.
Подробнее о внутренних блоках микроконтроллера
А теперь подробно рассмотрим все блоки микроконтроллера, разберемся что и для чего нужно, приведу простые примеры доступным языком.
JTAG Interface — важный интерфейс который позволяет производить внутреннюю отладку прямо в чипе используя блок внутренней отладки (OCD), без использования эмуляторов. Можно сказать что JTAG — это интерфейс для «железной» отладки микроконтроллера. Через JTAG-адаптер микросхема напрямую подключается к программному комплексу для программирования и отладки.
Используя данный интерфейс можно в пошаговом режиме выполнять программу прямо в микроконтроллере, смотреть как изменяется содержимое регистров, как мигают индикаторы и светодиоды что подключены к микроконтроллеру после каждого шага и т.п. Для подключения к JTAG интерфейсу достаточно 4-х проводников: TDI(Test Data In), TDO(Test Data Out), TCK(Test Clock), TMS (Test Mode Select).
JTAG интерфейс доступен далеко не во всех микроконтроллерах AVR, как правило таким вкусным дополнением обладают чипы у которых 40 и более лапок, а объем памяти доступен в размере не менее 16КБ. Для серьезных задач — серьезные материалы и инструменты. )
FLASH — память программ, энергонезависимое ПЗУ(постоянное запоминающее устройство) что выполнено по технологии FLASH. Здесь хранится программа, которая будет исполняться блоком ALU микроконтроллера. Флешь-память чипа можно многократно перезаписывать, тем самым меняя или дополняя программный код для выполнения. Данный тип памяти может сохранять записанные в нее данные в течение 40 лет, а количество возможных циклов стирания/записи может достигать 10000.
В зависимости от модели микроконтроллера размер FLASH-памяти может достигать 256 KБ.
Serial Peripheral Interface, SPI — последовательный периферийный интерфейс (SPI) который зачастую применяется для обмена данными между несколькими микроконтроллерами со скоростью до нескольких MГц (нескольких миллионов тактов в секунду).
Для обмена данными по SPI интерфейсу между двумя устройствами достаточно 3-х проводников:
- MOSI (Master Output Slave Input) — Данные от ведущего к ведомому;
- MISO (Master Input Slave Output) — Данные от ведомого к ведущему;
- CLK (Clock) — тактовый сигнал.
Устройства с SPI-интерфейсом делятся на два типа: ведущий(Master) и ведомый(Slave). Если к интерфейсу подключено несколько устройств то для обмена данными между ними нужны дополнительные линии связи(проводники) чтобы мастеру можно было выбрать ведомое устройство и сделать запрос к нему.
Также SPI интерфейс используется для внутрисхемного SPI программирования, по этому интерфейсу к микроконтроллеру подключается программатор.
EEPROM — энергонезависимая память данных в которой данные будут храниться даже при отключении питания микроконтроллера. В данной памяти можно хранить настройки выполнения программы, собранные данные для статистики работы устройства и другую полезную информацию. К примеру, собрав маленькую метеостанцию на микроконтроллере, в EEPROM на каждый день можно сохранять данные о температуре воздуха, давлении, силе ветра, а потом в любой момент считать эти собранные данные и провести статистические исследования.
Для EEPROM выделено отдельное адресное пространство которое отличается от адресного пространства RAM и FLASH. Память EEPROM микроконтроллера — очень ценный ресурс, поскольку ее как правило очень мало — от 0,5 до нескольких килобайт на чип. Количество перезаписей для данного типа памяти составляет порядка 100000 что в 10 раз больше чем ресурс FLASH памяти.
ALU — Арифметико-логическое устройство, которое синхронно с тактовым сигналом и опираясь на состояние счетчика команд (Program Counter) выбирает из памяти программ (FLASH) очередную команду и производит ее выполнение.
Тактовый сигнал для микроконтроллера вырабатывается тактовым генератором, и может быть подан из нескольких доступных источников на выбор:
- внутренний RC-генератор, который можно калибровать на нужную частоту;
- керамический или кварцевый резонатор с конденсаторами (не у всех моделей);
- внешний тактовый сигнал.
Установка источника тактовых импульсов производится при помощи FUSE-битов.
FUSES (с англ.: плавление, пробка, предохранитель) — специальные 4 байта(4*8=32 бит) данных, которые настраивают некоторые глобальные параметры микроконтроллера в процессе прошивки. После прошивки данные биты нельзя изменить через внутреннюю программу что записана в МК.
Данной конфигурацией бит мы указываем микроконтроллеру вот что:
- какой использовать задающий генератор (внешний или внутренний);
- делить частоту генератора на коэффициент или нет;
- использовать ножку сброса (RESET) для сброса или же как дополнительный пин ввода-вывода;
- количество памяти для загрузчика;
- другие настройки зависимо от используемого микроконтроллера.
CPU — это мозг микроконтроллера, который содержит в себе АЛУ, регистры и оперативную память.
К ALU подключен блок из 32-х регистров общего назначения (32 General Purpose Registers — регистровая память), каждый из которых представляет собою 1 байт памяти (8 бит). Адресное пространство регистров общего назначения размещено в начале оперативной памяти (RAM) но не является ее частью. С данными что помещаются в регистры можно производить разнообразные арифметические, логические и битовые операции. Выполнение подобных операций в оперативной памяти не доступно. Для работы с данными из RAM нужно их записать в регистры, произвести в регистрах нужные операции, а потом записать результирующие данные из регистров в память или в другие регистры для выполнения каких-то действий.
RAM — оперативная память. В нее можно записывать данные из регистров, считывать данные в регистры, все операции с данными и расчеты производятся в регистрах. Для разных семейств AVR чипов размер оперативной памяти ограничен:
- ATxmega — до 32 KБ;
- ATmega — 16 Кб;
- ATtiny — 1 Кб.
Analog Comparator — данный блок сравнивает между собою два уровня сигнала и запоминает результат сравнения в определенном регистре, после чего сданный результат можно проанализировать и выполнить необходимые действия. Для примера: можно использовать этот блок как АЦП(Аналогово-Цифровой Преобразователь) и измерять напряжение батареи питания, в случае если если напряжение батареи достигло низкого уровня — произвести некоторые действия, помигать красным светодиодом и т.п. Также данный модуль можно применять для измерения длительности аналоговых сигналов, считывания установленных режимов работы устройства при помощи потенциометра и т.п.
A/D Converter — данный блок преобразовывает аналоговое значение напряжения в цифровое значение, с которым можно работать в программе и на основе которого можно выполнять определенные действия. Как правило диапазон напряжений что подаются на вход АЦП в AVR микроконтроллере находится в пределах 0-5,5 Вольт. Для данного блока очень важно чтобы микроконтроллер питался от стабильного и качественного источника питания. Во многих AVR микроконтроллерах есть специальный отдельный вывод для подачи стабильного питания на схему АЦП.
LCD Interface — интерфейс для подключения жидкокристаллического индикатора или дисплея. Применятся для отображения информации, состояния устройства и его узлов.
USART — последовательный асинхронный интерфейс для обмена данными с другими устройствами. Есть поддержка протокола RS-232, благодаря чему микроконтроллер можно соединить для обмена данными с компьютером.
Для подобной связи МК с COM-портом компьютера нужен конвертер логических уровней напряжения (+12В для COM — в +5В для микроконтроллера), или же просто RS232-TTL. Для подобных целей используют микросхемы MAX232 и им подобные.
Для подключения микроконтроллера к компьютеру через USB используя UART-интерфейс можно использовать специализированную микросхему FT232RL. Таким образом на новых компьютерах и ноутбуках можно не имея физического COM-порта привязать микроконтроллер используя USB-порт через USART интерфейс.
TWI — интерфейс для обмена данными по двухпроводной шине. К такой шине данных можно подключить до 128 различных устройств, используя две линии данных: тактовый сигнал (SCL) и сигнал данных (SDA). Интерфейс TWI является аналогом базовой версии интерфейса I2C.
В отличие от SPI интерфейса (один мастер и один/несколько ведомых) интерфейс TWI — двунаправленный, сто позволяет организовать между несколькими микроконтроллерами небольшую внутреннюю сеть.
Watchdog Timer представляет собою систему контроля зависания устройства с последующим его перезапуском. Это как автоматическая кнопка RESET для старенького компьютера с глючной ОС. ))
I/O Ports, GPIO — это набор блоков портов ввода/вывода к пинам которых можно подключить разнообразные датчики, исполняющие устройства и цепи. Количество пинов вход/выход, что идут от портов в микроконтроллере, может быть от 3 до 86.
Выходные драйверы в портах AVR микроконтроллера позволяют напрямую подключать нагрузку з потребляемым током 20 мА(максимум 40 мА) при напряжении питания 5В. Общий нагрузочный ток для одного порта не должен превышать значение в 80 мА (например на 4 пина для одного из портов повесить по светодиоду с током 15-20 мА).
Interrupts — это блок который отвечает за реакцию и запуск на выполнение определенных функций при поступлении сигнала на определенные входы микроконтроллера или же по какому-то внутреннему событию (например тиканью таймера). Под каждое прерывание разрабатывается и записывается в память отдельная подпрограмма.
Почему этот блок называется блоком прерываний? — потому что при возникновении определенного для прерывания события выполнение основной программы прерывается и происходит приоритетное выполнение подпрограммы что написана для текущего прерывания. По завершению выполнения подпрограммы происходит возвращение к выполнению основной программы с того момента где она была прервана.
Timers/Counters — набор таймеров и счетчиков. Микроконтроллер, как правило, содержит в себе от одного до четырех таймеров и счетчиков. Они могут применяться для подсчета количества внешних событий, формирования сигналов определенной длительности, вырабатывать запросы на прерывания и т.п. Разрядность таймеров и счетчиков составляет — 8 и 16 бит (смотреть в даташите для чипа).
Заключение
Вот в принципе и все что изначально полезно знать о структуре микроконтроллера AVR. Дальше, в процессе работы и программирования, у вас будет возможность на практике изучить даташиты для разных моделей AVR чипов, узнать более детально принципы работы каждого из структурных кубиков МК и изучить как они работают, поиграться с отладкой и т.п.
В следующей статье попробуем разобраться с маркировкой микроконтроллеров, поразмышляем о наиболее доступных и подходящих для начального изучения чипах.
Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.
В январе 2007 года корпорация ATMEL провела в Норвегии, на родине AVR, традиционный дистрибьюторский семинар, посвященный новым достижениям в AVR-строении. Развитие AVR-контроллеров происходит по трем основным направлениям: микросхемы для автомобильных применений, микросхемы со сверхнизким энергопотреблением (picoPower) и микросхемы, построенные на принципиально новом высокопроизводительном низкопотребляющем 32-разрядном ядре AVR32. В первой части статьи приводится обзор основных характеристик новинок. Во второй части более подробно будет рассмотрено семейство контроллеров AVR32 с Flash-ПЗУ на кристалле.
Для применения в автомобильной промышленности ATMEL разработала «высокотемпературные» версии микросхем. Следует отметить, что это не «отобранные» стандартные кристаллы, а специально разработанная топология. Особое внимание уделено модулю Flash-памяти. Известно, что время хранения информации, записанной во Flash-память, обратно пропорционально температуре кристалла. Таким образом, для микросхемы любого производителя фактический срок хранения данных в памяти при комнатной температуре и при температуре, например, +85 °C, отличается в несколько раз. Инженеры копрорации ATMEL разработали специальную топологию элемента FLASH-памяти со сниженными токами утечки. В результате гарантируется надежная работа микросхем в диапазоне температур от –40 до +125 °C. Существует четыре градации диапазонов рабочих температур для микросхем автомобильного применения:
- Grade 3, –40…+85 °C — индекс в названии микросхемы Т;
- Grade 2, –40…+105 °C — индекс в названии микросхемы Т1;
- Grade 1, –40…+125 °C — индекс в названии микросхемы Z;
- Grade 0, –40…+150 °C — индекс в названии микросхемы Т2.
Пилотной микросхемой на «автомобильный» температурный диапазон стала ATmega88.
В настоящее время список микросхем расширен, а специальная версия ATmega88-ERSAT2 может работать в диапазоне от –40 до +150 °C! Основные параметры микросхем приведены в таблице 1.
Таблица 1. Основные параметры микросхем фирмы ATMEL
Flash
кбайт |
EEPROM
байт |
SRAM
байт |
16-раз-
рядный таймер |
8-раз-
рядный таймер |
ШИМ-каналы | RTC | SPI | UART | TWI | Умно-
житель |
Преры-
вания |
Внеш-
ние преры- вания |
Тип корпуса | ||
AT90CAN128 | 128 | 4096 | 4096 | 2 | 2 | 8 | + | + | 2 | — | + | 34 | 8 | LQFP/MLF64 | |
AT90CAN32 | 32 | 1024 | 2048 | 2 | 2 | 8 | + | + | 2 | — | + | 34 | 8 | LQFP/MLF64 | |
AT90CAN64 | 64 | 2048 | 4096 | 2 | 2 | 8 | + | + | 2 | — | + | 34 | 8 | LQFP/MLF64 | |
ATtiny25 | 2 | 128 | 128 | — | 2 | 4 | — | USI | — | USI | — | 15 | 7 | Узкий SOIC 8 | |
ATtiny45 | 4 | 256 | 256 | — | 2 | 4 | — | USI | — | USI | — | 15 | 7 | Узкий SOIC 8 | |
ATtiny85 | 8 | 512 | 512 | — | 2 | 4 | — | USI | — | USI | — | 15 | 7 | Узкий SOIC 8 | |
ATmega48 | 4 | 256 | 512 | 1 | 2 | 6 | + | 1+USART | 1 | + | + | 26 | 26 | TQFP/QFN32 | |
ATmega88 | 8 | 512 | 1024 | 1 | 2 | 6 | + | 1+USART | 1 | + | + | 26 | 26 | TQFP/QFN32 | |
ATmega168 | 16 | 512 | 1024 | 1 | 2 | 6 | + | 1+USART | 1 | + | + | 26 | 26 | TQFP/QFN32 |
Еще одним интересным решением для применения в автомобильной промышленности является микросхема, содержащим в корпусе два кристалла — AVR-контроллер и модуль интерфейса LIN. Микросхема функционирует в диапазоне напряжений питания от 5 до 18 В. Типовая схема включения микросхемы приведена на рис. 1.
Рис. 1. Схема включения контроллера ATA6602/6603
К концу 2007 года будет выпущено более 10 типов микросхем с расширенным диапазоном рабочих температур (рис. 2).
Рис. 2. Программа развития микроконтролеров серии «automotive»
Технология picoPower
С момента появления на рынке в 1997 году контроллеры AVR отличались невысоким энергопотреблением. Для управления потребляемой мощностью контроллер имеет шесть режимов энергосбережения:
- Idle mode — в этом режиме блокируется подача тактовых импульсов на CPU и Flash-память.
- ADC noise reduction mode — Idle mode, плюс блокируется тактирование портов ввода–вывода.
- Extended Standby mode — ADC noise reduction mode, плюс запрещается работа АЦП и EEPROM.
- Standby mode — Extended Standby mode, плюс запрещается работа таймера 2.
- Power Down mode — Standby mode, плюс запрещается работа генератора.
- Power Save mode — самый низкопотребляющий режим, активны только асинхронные модули — прерывания и порт TWI.
В 2006 году компания анонсировала разработку новых экономичных AVR-контроллеров семейства picoPower. В этом семействе реализован ряд дополнительных мер со снижению энергопотребления как в режиме ожидания, так и в активном режиме. Ниже более подробно рассмотрены особенности нового семейства.
Питание 1,8 В для всех модулей кристалла. В отличие от микроконтроллеров прежних поколений, технология picoPower подразумевает напряжение 1,8 В для питания абсолютно всех модулей кристалла, включая аналоговые модули (АЦП, компаратор, источник опорного напряжения), а также модулей памяти (Flash-ПЗУ, EEPROM и ОЗУ).
Концепция «спящий BOD». Практически все современные микроконтроллеры имеют на кристалле модуль слежения за уровнем напряжения питания — BOD (Brown Out Detector). Есть два подхода к снижению потребления этого модуля. Первый — сделать модуль очень экономичным. Плата за экономичность — резкое, до единиц миллисекунд, снижение быстродействия. Второй — использовать быстродействующий BOD, однако отключать этот модуль на время пребывания контроллера в режиме ожидания. При этом время срабатывания модуля составляет 2 мкс. Естественно, для надежной работы контроллера модуль BOD отключается после перехода в режим ожидания, а включается до выхода из этого режима.
Ультранизкопотребляющий генератор на 32 кГц. При переходе контроллера в режим Standby существенную долю общего потребления контроллера составляют цепи генератора. Применение новой версии модуля генератора, работающего с «часовым» кварцем, позволяет получить ток не более 650 нА с учетом работающего модуля BOD. Это лучший на сегодня показатель в промышленности.
Минимизация токов утечки. Потребление тока в режимах энергосбережения в большей степени определяется токами утечки кристалла. Применение собственного процесса для изготовления кристаллов по технологии picoPower позволяет получить токи утечки в режиме Standby при напряжении питания 1,8 В не более 100 нА.
Дальнейшие меры по снижению энергопотребления относятся к работе периферийных узлов в активном режиме. Как известно, потребление КМДП-микросхем в активном режиме напрямую зависит от частоты переключения вентилей вследствие перезаряда паразитных емкостей кристалла. Таким образом, если запретить подачу тактовых импульсов на некоторые модули контроллера, можно снизить потребляемую мощность. Эта технология получила название Clock Gating. Существует три уровня работы Clock Gating. Кристалл разделен на три энергопотребителя — Analog Domain, CPU Domain и In/Out Domain. Первый уровень отвечает за тактирование каждого энергопотребителя в зависимости от текущего режима работы контроллера.
Второй уровень задается программированием специального регистра снижения потребляемой мощности (Power Reduction Register, PRR). Известно, что в конкретной программе, выполняемой контроллером, не все периферийные модули могут быть активными постоянно. Некоторые модули задействуются на определенные интервалы времени, а какие-то — вообще не используются при выполнении той или иной процедуры. Регистр PRR управляет включением-выключением периферийных модулей.
При отключении модуля его текущий статус запоминается, и все его регистры становятся недоступными для модификации. Как показывает стастистика, использование такого механизма позволяет снизить суммарную потребляемую мощность на 5–10% в активном режиме и на 10–20% в режиме Idle.
Третий уровень Clock Gating отвечает за адаптивное тактирование регистров. Известно, что не все регистры модифицируются в каждом такте. Таким образом, можно не подавать тактирующие импульсы на регистры, состояние которых не требуется модифицировать в данном цикле процессора.
Снижение потребления модуля Flash-памяти. Flash-память — это, по существу, аналоговый блок со статическим энергопотреблением. Как правило, во время работы контроллера этот блок всегда активен. Следует учесть, однако, что в ряде случаев контроллер используется не на максимальной тактовой частоте, следовательно, время выборки команды из Flash-ПЗУ меньше одного периода тактовой частоты. Когда AVR-контроллер работает на частоте не выше нескольких мегагерц, используется техника «Flash sampling» — модуль памяти активизируется только на время, необходимое для выборки команды, а затем отключается. Этот алгоритм проиллюстрирован на рис. 3.
Рис. 3. Работа системы «Flash sampling»
Снижение токов утечки по входам. Многие AVR-контроллеры имеют модуль АЦП, который использует некоторые порты как аналоговые входы (рис. 4).
Рис. 4. Структура универсального порта ввода–вывода
Мультиплексирование выводов контроллера для цифровых или аналоговых операций повышает функциональность, однако приводит к увеличению энергопотребления. Это объясняется следующим.
Входной каскад КМДП-логики состоит из двух комплементарных МДП-транзисторов. При изменении уровня входного напряжения, в моменты, когда на вход подается уровень, примерно равный половине питания, оба транзистора «приоткрыты», и через входной каскад протекает сквозной ток. Для цифровых сигналов с крутыми фронтами это время пренебрежимо мало, однако если вывод используется как вход АЦП, на нем «неудобное» напряжение может оставаться сколь угодно долгое время, что приводит к увеличению уровня потребляемого тока. Для снижения потребления нужно отключать цифровой вход на время работы АЦП. Для этого введен специальный регистр DIDR (Dedicated Input Disable Register), который выборочно запрещает цифровые входы при работе АЦП.
Также этот регистр запрещает неиспользуемые входы контроллера при переходе в ждущий режим.
Таким образом, совокупность мер по уменьшению тока потребления как в активном режиме, так и в режимах ожидания позволила создать производительный процессор, который отличается весьма малыми токами потребления.
Архитектура AVR32
Большую долю рынка 32-разрядных контроллеров в настоящее время захватили микросхемы на базе ядер ARM7, ARM9 и ARM11. ATMEL также производит контроллеры на базе ядер ARM7 и ARM9. Несмотря на это, в 2001 году корпорация начала разработку принципиально новой 32-разрядной RISC-архитектуры. Основной целью было повышение вычислительной производительности за такт процессора. Задача формулировалась как разработка процессора, который сможет решать сложные задачи цифровой обработки информации при малом потреблении энергии — требование разработчиков мобильных устройств. Ядро должно одновременно выполнять задачи MPU и DSP в рамках одной программной и инструментальной базы. В дополнение к производительному ядру контроллеры нового поколения имеют высокоскоростную периферию, в частности, два контроллера 10/100 Mbps MAC и High-Speed USB (480 Mbps). В последующих версиях контроллеров будет добавлет хост-контроллер USB (480 Mbps), поддерживающий режим OTG (On The Go).
Основные параметры микросхем приведены в таблице 2.
Таблица 2. Основные параметры микросхем AT32AP700X
SDRAM (кбайт) | DSP
инст- рук- ции |
Век-
тор- ный со- про- цес- сор |
Ether-
net 10/ 100 MAC |
USB HS Devi-
ce |
Конт-
рол- лер LCD 2048 x 2048 |
Число выво-
дов общего назна- чения |
Число DMA кана-
лов |
Интер-
фейс внеш- ней шины |
Конт-
роллер SDRAM |
AC97 | Интер-
фейс к камере |
ФАПЧ | Квар-
цевый осцил- лятор |
MMU/ MPU | Бес-свинцовый корпус | |
AT32AP7000 | 32 | + | + | 2 | 1 | 24бит | 160 | 20 | + | + | 1 | CMOS | 2 | 2 | MMU | 256 CTBGA |
AT3AP7001 | 32 | + | + | 0 | 1 | — | 90 | 20 | + | + | 1 | CMOS | 2 | 2 | MMU | 208 VQFP |
AT32AP7002 | 32 | + | + | 0 | 1 | 18бит | 85 | 20 | + | + | 1 | CMOS | 2 | 2 | MMU | 196 CTBGA |
Архитектура AVR32 разработана в норвежском городе Тронхейм, там же, где созданы 8-разрядные AVR-контроллеры. В разработке участвовала команда из двадцати инженеров и программистов. В результате 4-летней работы над такими алгоритмами, как вычисление суммы абсолютных разностей (SAD) и обратное дискретное косинусное преобразование (IDCP), был достигнут 35% прирост эффективности на один такт процессора по сравнению с ядром ARM11. Это означает возможность декодировать в реальном времени видеофрагмент MPEG-4 разрешением QVGA с частой 30 кадров в секунду при частоте ядра 100 MГц, в то время как ARM11 для решения этой задачи требуется частота 150–170 MГц.
Структурная схема первого представителя AVR32 — контроллера AT32AP7000 приведена на рис. 5.
Рис. 5. Структурная схема контроллера AT32AP7000
На ядре AVR32 разрабатывается семейство контроллеров с аббревиатурой AP (Application Processor). Микросхемы будут выпускаться в корпусах BGA и TQFP. На рис. 6. представлена программа развития этого семейства.
Рис. 6. Планы развития AVR32
Структурная схема конвейера AVR32
Основой архитектуры AVR32 является семистадийный конвейер (рис. 7), обеспечивающий высокую производительность. Семистадийный конвейер AVR32 состоит из трех модулей, подготавливающих команду и четырех модулей, производящих выполнение.
Рис. 7. Схема конвейера AVR32
На первом этапе инструкции выбираются из кэш-памяти.
На втором этапе происходит динамическое предсказание ветвления на основе предыдущего значения, далее инструкции перемещаются в буфер декодера Java или RISC команд. Механизм предсказания ветвления позволяет избегать перезагрузки конвейера при выполнении операций ветвления. При предсказании ветвления в кэш загружается следующая за ветвлением операция.
Совместно с высокой плотностью кода это позволяет снизить использование памяти и производить переходы без потери циклов.
Третий этап — декодирование команды. В зависимости от содержания команды она попадает в целочисленный модуль, который состоит из трех конвейеров:
- конвейер умножения, состоящий из двух блоков умножения;
- конвейер АЛУ, состоящий из двух блоков вычислений;
- конвейер данных, состоящий из модуля адресации и модуля доступа к данным.
Конвейер данных имеет доступ к сопроцессору для параллельного выполнения матричных и векторных операций.
Три перечисленных конвейера поддерживают одновременное исполнение независимых инструкций с изменением последовательности (рис. 8). То есть, например, пока модуль умножения в течение 32 тактов занят, в модуле АЛУ может выполняться следующая операция.
Рис. 8. Плотность кода AVR32 AP в тестах EEMBC (оптимизация по скорости)
Оптимизация доступа к памяти
Конвейеры соединены шинами, позволяющими передавать данные непосредственно от одного модуля к другому без загрузки дополнительных ресурсов. Например, результат суммирования из блока АЛУ2 сразу после завершения выполнения операции пересылается на вход модуля умножения 1, АЛУ1 и блок адресации данных (Data Address). Такой механизм позволяет экономить 3 такта, которые требуются для программной пересылки данных на вход конвейера (рис. 9).
Рис. 9. Плотность кода AVR32 AP в тестах EEMBC (оптимизация по длине)
Работа с сопроцессором реализована через конвейер данных, что минимизирует задержки во время выполнения команд сопроцессором.
Оптимизация на уровне буфера команд за счет переменной длины команд
AVR32 работает с расширенным набором RISC-команд. Команды могут иметь длину 16 или 32 бита и следовать общим потоком. В отличие от архитектуры ARM, у этого ядра нет необходимости переключаться между двумя режимами. Все команды распознаются непосредственно в конвейере.
SIMD инструкции
В набор команд AVR32 входят инструкции для операций с множественными данными (Single Instruction Multiply Data), позволяющие в четыре раза увеличить производительность некоторых DSP алгоритмов, которые требуют выполнения одинаковых операций с потоком данных. Например, при декодировании видео формата MPEG производится расчет восьмибитных сумм абсолютных разностей (SAD). Для этого четыре 8-битных пикселя загружаются из памяти одной операцией, затем выполняется пакетное вычитание беззнаковых байтов с проверкой переопустошения, сложение байтов внутри старшей и младшей пар и распаковка их в полуслова.
Затем для вычисления значения SAD все значения складываются.
Инструкции эффективного доступа к памяти
В среднем около 30% процессорного времени уходит не на обработку данных, а на инструкции чтения-записи. Архитектура AVR32 уменьшает число требуемых циклов для инструкций чтения-записи байта (8 разрядов), полуслова (16 разрядов), слова (32 разряда) и двойного слова (64 разряда), совмещая их с арифметическими операциями над указателем и ускоряя таким образом скорость доступа к данным в таблицах, структурах и случайно расположенным данных, которые потребуются в ближайших последующих циклах.
Широко применяемые алгоритмы блочного кодирования, такие как Blowfish и Triple-DES, используют таблицы подстановок, для работы с которыми в современных МК требуется большое число тактов процессора. Например, выполнение следующей операции:
result=ptr0[offset0>>24]^ptr1[(offset1>>16)&0xff]^ptr2[(offset2>>8)&0xff]^ptr3[offset3&0xff];
В основе лежат четыре операции доступа к памяти, извлекающие один из четырех байтов 32-разрядного слова. Результатом операции является адрес памяти, к которому требуется доступ.
Для выполнения этой операции на МК с традиционной RISC-архитектурой потребуется 14 тактов. AVR32 выполнит эту операцию всего за 7 тактов. Использование инструкции чтения с извлеченным индексом (extracted index) позволяет ядру AVR32 выполнить все четыре операции доступа к памяти за четыре такта, сохраняя при этом все четыре смещения в одном регистре.
За счет уменьшения числа требуемых инструкций для выполнения операций увеличивается производительность ядра AVR32.
DSP-инструкции
В набор команд входят DSP-команды, такие как битовые операции, умножение с накоплением (МАС), сдвиг на любое число битов за один такт, быстрые масочные операции с битами в слове и многое другое. Такое нововведение позволяет не только быстро выполнять операции с портами общего назначения. Появляется возможность выполнять потоковую обработку данных на кристалле, Фурье-анализ, кодирование-декодирование, распознавание образов, воспроизведение аудио и видео без использования внешних кодеков (рис. 10).
Рис. 10. Сравнительная производительность AVR32
Аппаратное выполнение Java-инструкций
В конвейере AVR32 реализована аппаратная поддержка виртуальной машины Java— то есть кроме RISC-инструкций ядро может выполнять большинство инструкций байткода Java. Использование Java увеличивает возможности по использованию существующих пользовательских приложений и позволяет сократить время на перенос существующих или разработку новых приложений.
В отличие от программной Java-машины, использование аппаратных возможностей позволяет в несколько раз повысить скорость выполнения. Вполне вероятно, что программы для контроллеров класса AVR32 через несколько лет будут разрабатываться на Java.
Разветвленная шинная топология и энергопотребление
Применение в AP7000 многослойной разветвленной архитектуры системных шин (рис. 11) позволяет распараллеливать операции передачи данных, а два независимых периферийных контроллера, работающие на разных частотах, физически разделяют высокоскоростную и медленную периферию. Таким образом, не тратится дополнительная энергия при работе медленных периферийных модулей на высокой частоте.
Рис. 11. Схема шин и периферии AP7000
Контроллер разделен на четыре домена— ядро и шинная матрица (HBUS Matrix) и два периферийных контроллера, в каждом из которых частота может быть установлена независимо.
Поддержка компиляторов и ОС
Архитектура AVR32 разрабатывалась при тесном сотрудничестве с компанией IAR, которая занимается разработкой компиляторов для микроконтроллеров. Это выразилось в более удобной для компилятора архитектуре регистров. Также на этапе разработки было заложено требование по поддержке и оптимизации на уровне архитектуры использования операцилннй системы (ОС) для AVR32. В качестве ОС выбрана Linux. Существует специальный механизм, ускоряющий переключение между процессами и выполнение некоторых часто используемых системных вызовов. Естественно, во всех микроконтроллерах семейства AP7000 присутствует модуль MMU. Разработку программного обеспечения для AVR32 можно вести с применением компилятора GCC. Также в разработке находится порт Linux под AVR32.
Таким образом, микроконтроллер AT32 AP7000, построенный на новом ядре AVR32, предоставляет возможности по высокоскоростному вводу и передаче данных, выводу информации на ЖК-дисплей, потоковой обработке. При этом AP7000 остается микроконтроллером с низким потреблением, которое на 80% связано с архитектурными особенностями семейства AVR32.
В дополнение к семейству AVR32 AP (Application Processor) будут выпущены микросхемы семейства uC (MicroController). Эти микросхемы являются упрощенной версией AP с точки зрения насыщенности интерфейсными модулями, однако они содержат на кристалле Flash-ПЗУ и ОЗУ, что позволит создавать на них компактные недорогие одноплатные решения. Об этом — вторая часть статьи.
К
началу 1990-х широко распространенное
семейство микроконтроллеров MCS51,
выпускаемое целым рядом фирм-производителей
(Intel, Philips, Temic, OKI, Siemens и др.), уже являлось
де-факто промышленным стандартом для
8-разрядных систем и прекрасно подходило
для использования в широком классе
задач, особенно если выбирались кристаллы
с дополнительными встроенными
периферийными устройствами и повышенной
тактовой частотой. Конечно, была и
оборотная сторона медали — значительное
удельное энергопотребление этих
микроконтроллеров. Тогда, если необходимо
было получить высокую производительность
кристалла при фиксированном
энергопотреблении или, наоборот, снизить
последнее не теряя производительности,
внимание разработчика, как правило,
останавливалось на микросхемах Dallas
Semiconductor, Microchip или Hitachi. Широко развитые
линии PIC-контроллеров фирмы Microchip и
микроконтроллеров H8/300 фирмы Hitachi
обеспечивают достаточно высокую
производительность при небольшом
энергопотреблении. Эффективность работы
микроконтроллеров Dallas Semiconductor, имеющих
базовую архитектуру MCS51, в среднем
превышает стандартную в 2,5 — 3 раза.
Появившиеся в последнее время новые
процессорные платформы MSP430 фирмы Texas
Instruments и XE8000 фирмы Xemics также заслуживают
самого пристального внимания, особенно
если основным критерием для конечного
приложения является минимальное
энергопотребление.
Окончательный
выбор разработчиком той или иной
микропроцессорной платформы для
реализации своей задачи зависит,
естественно, от большого числа
разнообразных факторов, включая
экономические. Но обычно первостепенным
условием остается получение максимально
выгодного соотношения «цена —
производительность — энергопотребление»,
определяемого сложностью решаемой
задачи. Видимо, это обстоятельство и
послужило толчком к разработке в середине
1990-х нового 8-разрядного микроконтроллера.
AVR,
пожалуй, одно из самых интересных
направлений, развиваемых корпорацией
Atmel. Они представляют собой мощный
инструмент для создания современных
высокопроизводительных и экономичных
многоцелевых контроллеров. На настоящий
момент соотношение «цена —
производительность — энергопотребление»
для AVR является одним из лучших на мировом
рынке 8-разрядных микроконтроллеров.
Объемы продаж AVR в мире удваиваются
ежегодно. В геометрической прогрессии
растет число сторонних фирм, разрабатывающих
и выпускающих разнообразные программные
и аппаратные средства поддержки
разработок для них. Можно считать, что
AVR постепенно становится еще одним
индустриальным стандартом среди
8-разрядных микроконтроллеров общего
назначения.
Области
применения AVR многогранны. Для семейства
«tiny» — это интеллектуальные
автомобильные датчики различного
назначения, игрушки, игровые приставки,
материнские платы персональных
компьютеров, контроллеры защиты доступа
в мобильных телефонах, зарядные
устройства, детекторы дыма и пламени,
бытовая техника, разнообразные
инфракрасные пульты дистанционного
управления. Для семейства «classic» —
это модемы различных типов, современные
зарядные устройства, изделия класса
Smart Cards и устройства чтения для них,
спутниковые навигационные системы для
определения местоположения автомобилей
на трассе, сложная бытовая техника,
пульты дистанционного управления,
сетевые карты, материнские платы
компьютеров, сотовые телефоны нового
поколения а также различные и разнообразные
промышленные системы контроля и
управления. Для «mega» AVR — это аналоговые
(NMT, ETACS, AMPS) и цифровые (GSM, CDMA) мобильные
телефоны, принтеры и ключевые контроллеры
для них, контроллеры аппаратов факсимильной
связи и ксероксов, контроллеры современных
дисковых накопителей, CD-ROM и т.д.
AVR
— это относительно молодой продукт
корпорации Atmel. В этой линии микроконтроллеров
общего назначения постоянно появляются
новые кристаллы, обновляются версии
уже существующих микросхем, совершенствуется
и расширяется программное обеспечение
поддержки. Так, первое официальное
издание — каталог Atmel, посвященный AVR —
датирован маем 1997 года. В него были
включены всего четыре первых AVR —
микроконтроллера семейства AT90S «classic».
Второе, существенно расширенное издание
каталога вышло в августе 1999 года, и в
него уже были включены три семейства
AVR — «tiny», «classic» и «mega». И
до сих пор более «свежей» версии
каталога в печатном виде не существует,
постоянно обновляются лишь технические
данные в электронном виде (Data Sheet), которые
Atmel Corp. размещает на своей информационной
странице в Интернете
www.atmel.com/atmel/products/prod23.htm.
Скорее всего, к моменту выхода этой
работы представленная информация уже
будет нуждаться в дополнениях и
коррективах..
Начнем
знакомство с аппаратных возможностей,
которые сведены для разных семейств в
таблицы «AVR-tiny»,
«AVR-classic» и «AVR-mega»
(приложение 1). В таблицах представлены
уже существующие, серийно выпускаемые
кристаллы AVR, а также планируемые к
выпуску в 2002 году. Отметим, что объемы
массивов Flash-, EEPROM и SRAM памяти, набор
периферийных узлов и построение схемы
тактирования существенно различаются
как между семействами, так и между
микроконтроллерами внутри каждого
семейства. Поэтому приведенное здесь
краткое вводное описание основных
возможностей AVR-микроконтроллеров не
будет исчерпывающим. Конкретные детали
и полные описания микроконтроллеров,
особенности построения и функционирования
всех периферийных блоков можно найти
в оригинальной технической документации
Atmel.
.Все
AVR имеют Flash-память программ, которая
может быть загружена как с помощью
обычного программатора, так и с помощью
SPI-интерфейса, в том числе непосредственно
на целевой плате. Число циклов перезаписи
— не менее 1000. Последние версии кристаллов
семейства «mega» выпуска 2001-2002 года
имеют возможность самопрограммирования.
Это означает, что микроконтроллер
способен самостоятельно, без какого-либо
внешнего программатора, изменять
содержимое ячеек памяти программ. То
есть, новые AVR могут менять алгоритмы
своего функционирования и программы,
заложенные в них, и далее работать уже
по измененному алгоритму или новой
программе. Например, Вы можете написать
и сохранить несколько рабочих
Все
AVR имеют также блок энергонезависимой
электрически стираемой памяти данных
EEPROM. Этот тип памяти, доступный программе
микроконтроллера непосредственно в
ходе ее выполнения, удобен для хранения
промежуточных данных, различных констант,
таблиц перекодировок, калибровочных
коэффициентов и т.п. EEPROM также может
быть загружена извне как через SPI
интерфейс, так и с помощью обычного
программатора. Число циклов перезаписи
— не менее 100000. Два программируемых бита
секретности позволяют защитить память
программ и энергонезависимую память
данных EEPROM от несанкционированного
считывания. Внутренняя оперативная
память SRAM имеется у всех AVR семейств
«classic» и «mega» и у одного нового
кристалла семейства «tiny» — ATtiny26/L.
Для некоторых микроконтроллеров возможна
организация подключения внешней памяти
данных объемом до 64К.
Внутренний
тактовый генератор AVR может запускаться
от нескольких источников опорной частоты
(внешний генератор, внешний кварцевый
резонатор, внутренняя или внешняя
RC-цепочка). Поскольку AVR-микроконтроллеры
полностью статические, минимальная
допустимая частота ничем не ограничена
(вплоть до пошагового режима). Максимальная
рабочая частота определяется конкретным
типом микроконтроллера. Верхние границы
частотного диапазона, указанные в
таблицах 1 – 3 (приложение 1), гарантируют
устойчивую работу микроконтроллеров
при работе во всем температурном
диапазоне (хотя, например, AT90S8515 при
комнатной температуре может быть
«разогнан» до 14 МГц). Интересную
аппаратную особенность имеет
микроконтроллер ATtiny15L. Он содержит блок
PLL для аппаратного умножения основной
тактовой частоты в 16 раз. При номинальном
значении последней 1,6 МГц получаемая
вспомогательная периферийная частота
равна 25,6 МГц. Эта частота может служить
источником для одного из таймеров/счетчиков
микроконтроллера, значительно повышая
временное разрешение его работы.
Сторожевой
(WATCHDOG) таймер предназначен для защиты
микроконтроллера от сбоев в процессе
работы. Он имеет свой собственный
RC-генератор, работающий на частоте 1
МГц. Эта частота является приближенной
и зависит прежде всего от величины
напряжения питания микроконтроллера
и от температуры. WATCHDOG-таймер снабжен
своим собственным предделителем входной
частоты с программируемым коэффициентом
деления, что позволяет подстраивать
временной интервал переполнения таймера
и сброса микроконтроллера.
Микроконтроллеры
AVR имеют в своем составе от 1 до 4
таймеров/счетчиков общего назначения
с разрядностью 8 или 16 бит, которые могут
работать и как таймеры от внутреннего
источника опорной частоты, и как счетчики
внешних событий с внешним тактированием.
Общие черты всех таймеров/счетчиков
следующие.
-
наличие
программируемого предделителя входной
частоты с различными градациями деления.
Отличительной чертой является возможность
работы таймеров/счетчиков на основной
тактовой частоте микроконтроллера без
предварительного ее понижения, что
существенно повышает точность генерации
временных интервалов системы; -
независимое
функционирование от режима работы
процессорного ядра микроконтроллера
(т.е. они могут быть как считаны, так и
загружены новым значением в любое
время); -
возможность
работы или от внутреннего источника
опорной частоты, или в качестве счетчика
событий. Верхний частотный порог
определен в этом случае как половина
основной тактовой частоты микроконтроллера.
Выбор перепада внешнего источника
(фронт или срез) программируется
пользователем; -
наличие
различных векторов прерываний для
нескольких различных событий
(переполнение, захват, сравнение).
Система
реального времени (RTC) реализована во
всех микроконтроллерах семейства
«mega»
и в двух кристаллах семейства «classic»
— AT90(L)S8535. Таймер/счетчик RTC имеет свой
собственный предделитель, который может
быть программным способом подключен
или к основному внутреннему источнику
тактовой частоты микроконтроллера, или
к дополниельному асинхронному источнику
опорной частоты (кварцевый резонатор
или внешний синхросигнал). Для этой цели
зарезервированы два внешних вывода
микроконтроллера. Внутренний осциллятор,
нагруженный на счетный вход таймера/счетчика
RTC, оптимизирован для работы с внешним
«часовым» кварцевым резонатором
32,768 кГц.
Порты
ввода/вывода AVR имеют число независимых
линий «Вход/Выход» от 3 до 53. Каждый
разряд порта может быть запрограммирован
на ввод или на вывод информации. Мощные
выходные драйверы обеспечивают токовую
нагрузочную способность 20 мА на линию
порта (втекающий ток) при максимальном
значении 40 мА, что позволяет, например,
непосредственно подключать к
микроконтроллеру светодиоды и биполярные
транзисторы. Общая токовая нагрузка на
все линии одного порта не должна превышать
80 мА.
Интересная
архитектурная особенность построения
портов ввода/вывода у AVR заключается в
том, что для каждого физического вывода
существует 3 бита контроля/управления,
а не 2, как у распространенных 8-разрядных
микроконтроллеров (Intel,
Microchip,
Motorola
и т.д.) Естественно возникает вопрос: а
зачем необходимы именно 3 бита? Дело в
том, что использование только двух бит
контроля/управления порождает ряд
проблем при операциях типа
«чтение-модификация-запись».
Например, если имеют место две
последовательные операции
«чтение-модификация-запись», то
первый результат может быть потерян
безвозвратно, если вывод порта работает
на емкостную нагрузку и требуется
некоторое время для стабилизации уровня
сигнала на внешнем выводе микросхемы.
Архитектура построения портов ввода/вывода
AVR с тремя битами контроля/управления
позволяет разработчику полностью
контролировать процесс ввода/вывода.
Если необходимо получить реальное
значение сигнала на физическом выводе
микроконтроллера — читайте содержимое
бита по адресу PINx. Если требуется обновить
выходы — прочитайте PORTx защелку и потом
модифицируйте данные. Это позволяет
избежать необходимости иметь копию
содержимого порта в памяти для безопасности
и повышает скорость работы микроконтроллера
при работе с внешними устройствами.
Особую значимость приобретает данная
возможность AVR для реализации систем,
работающих в условиях внешних электрических
помех.
Аналоговый
компаратор входит в состав большинства
микроконтроллеров AVR. Типовое напряжение
смещения равно 10 мВ, время задержки
распространения составляет 500 нс и
зависит от напряжения питания
микроконтроллера. Так, например, при
напряжении питания 2,7 Вольт оно равно
750 нс. Аналоговый компаратор имеет свой
собственный вектор прерывания в общей
системе прерываний микроконтроллера.
При этом тип перепада, вызывающий запрос
на прерывание при срабатывании
компаратора, может быть запрограммирован
пользователем как фронт, срез или
переключение. Логический выход компаратора
может быть программным образом подключен
ко входу одного из 16-разрядных
таймеров/счетчиков, работающего в режиме
захвата. Это дает возможность измерять
длительность аналоговых сигналов а
также максимально просто реализовывать
АЦП двухтактного интегрирования.
Аналого-цифровой
преобразователь (АЦП) построен по
классической схеме последовательных
приближений с устройством выборки/хранения
(УВХ). Каждый из аналоговых входов может
быть соединен со входом УВХ через
аналоговый мультиплексор. Устройство
выборки/хранения имеет свой собственный
усилитель, гарантирующий, что измеряемый
аналоговый сигнал будет стабильным в
течение всего времени преобразования.
Разрядность АЦП составляет 10 бит при
нормируемой погрешности ±2 разряда. АЦП
может работать в двух режимах — однократное
преобразование по любому выбранному
каналу и последовательный циклический
опрос всех каналов. Время преобразования
выбирается программно с помощью установки
коэффициента деления частоты специального
предделителя, входящего в состав блока
АЦП. Оно составляет 70…280 мкс для ATmega103
и 65…260 мкс для всех остальных
микроконтроллеров, имеющих в своем
составе АЦП. Важной особенностью
аналого-цифрового преобразователя
является функция подавления шума при
преобразовании. Пользователь имеет
возможность, выполнив короткий ряд
программных операций, запустить АЦП в
то время, когда центральный процессор
находится в одном из режимов пониженного
энергопотребления. При этом на точность
преобразования не будут оказывать
влияние помехи, возникающие при работе
процессорного ядра.
AVR
— микроконтроллеры могут быть переведены
программным путем в один из шести режимов
пониженного энергопотребления. Для
разных семейств AVR и разных микроконтроллеров
в пределах каждого семейства изменяются
количество и сочетание доступных режимов
пониженного энергопотребления. Подробную
информацию можно найти в оригинальной
технической документации Atmel
Corp.
-
Режим
холостого хода (IDLE), в котором прекращает
работу только процессор и фиксируется
содержимое памяти данных, а внутренний
генератор синхросигналов, таймеры,
система прерываний и WATCHDOG-таймер
продолжают функционировать. -
Режим
микропотребления (Power
Down),
в котором сохраняется содержимое
регистрового файла, но останавливается
внутренний генератор синхросигналов.
Выход из Power
Down
возможен либо по общему сбросу
микроконтроллера, либо по сигналу
(уровень) от внешнего источника
прерывания. При включенном WATCHDOG-таймере
ток потребления в этом режиме составляет
около 60…80 мкА, а при выключенном — менее
1 мкА для всех типов AVR. Вышеприведенные
значения справедливы для величины
питающего напряжения 5 В. -
Режим
сохранения энергии (Power Save), который
реализован только у тех AVR, которые
имеют в своем составе систему реального
времени. В основном, режим Power Save идентичен
Power Down, но здесь допускается независимая
работа дополнительного таймера/счетчика
RTC. Выход из режима Power Save возможен по
прерыванию, вызванному или переполнением
таймера/счетчика RTC, или срабатыванием
блока сравнения этого счетчика. Ток
потребления в этом режиме составляет
6…10 мкА при напряжении питания 5 В на
частоте 32,768 кГц. -
Режим
подавления шума при работе аналого-цифрового
преобразователя (ADC Noise Reduction). Как
уже отмечалось, в этом режиме
останавливается процессорное ядро, но
разрешена работа АЦП, двухпроводного
интерфейса I2C и сторожевого таймера. -
Основной
режим ожидания (Standby). Идентичен режиму
Power Down, но здесь работа тактового
генератора не прекращается. Это
гарантирует быстрый выход микроконтроллера
из режима ожидания всего за 6 тактов
генератора. -
Дополнительный
режим ожидания (Extended Standby). Идентичен
режиму Power Save, но здесь работа тактового
генератора тоже не прекращается. Это
гарантирует быстрый выход микроконтроллера
из режима ожидания всего за 6 тактов
генератора.
Микроконтроллеры
AVR mega64, mega103 и mega128 имеют еще одну
примечательную архитектурную особенность,
позволяющую значительно снизить
энергопотребление всего кристалла в
целом, когда в процессе работы возникают
вынужденные паузы ожидания. В этом
случае целесообразно уменьшить ток
потребления центрального процессора
и периферийных устройств как в активном
режиме, так и в режиме холостого хода,
понизив основную тактовую частоту
микроконтроллера. Для этой цели на
кристалле размещен специальный
предделитель, позволяющий делить
основную тактовую частоту на целое
число в диапазоне от 2 до 129.
Включение/выключение данной функции
осуществляется одной короткой командой
в программе.
AVR
функционируют в широком диапазоне
питающих напряжений от 1,8 до 6,0 Вольт.
Энергопотребление в активном режиме
зависит от величины напряжения питания,
от частоты, на которой работает AVR и от
конкретного типа микроконтроллера.
Подробные спецификации обычно приводятся
в оригинальной технической документации
Atmel Corp. Температурные диапазоны работы
микроконтроллеров AVR — коммерческий
(0С…70С) и индустриальный
(-40С…+85С). К сожалению, корпорация Atmel не
выпускает и не планирует выпускать AVR
для работы в автомобильном (-40С…+125С) и
военном (-55С…+125С) температурных
диапазонах.
С
точки зрения программиста AVR представляет
собой 8-разрядный RISC микроконтроллер,
имеющий быстрый Гарвардский процессор,
память программ, память данных, порты
ввода/вывода и различные интерфейсные
схемы. Структурная схема микроконтроллера
приведена на рис. 1.1. Гарвардская
архитектура AVR реализует полное логическое
и физическое разделение не только
адресных пространств, но и информационных
шин для обращения к памяти программ и
к памяти данных, причем способы адресации
и доступа к этим массивам памяти также
различны. Подобное построение уже ближе
к структуре цифровых сигнальных
процессоров и обеспечивает существенное
повышение производительности. Центральный
процессор работает одновременно как с
памятью программ, так и с памятью данных;
разрядность шины памяти программ
расширена до 16 бит.
Рисунок
1.1 Структурная схема микроконтроллеров
семейства AVR.
Следующим
шагом на пути увеличения быстродействия
AVR является использование технологии
конвейеризации, вследствие чего цикл
«выборка — исполнение» команды
заметно сокращен. Например, у
микроконтроллеров семейства MCS51 короткая
команда выполняется за 12 тактов генератора
(1 машинный цикл), в течение которого
процессор последовательно считывает
код операции и исполняет ее. В
PIC-контроллерах фирмы Microchip, где уже
реализован конвейер, короткая команда
выполняется в течение 8 периодов тактовой
частоты (2 машинных цикла). За это время
последовательно дешифрируется и
считывается код операции, исполняется
команда, фиксируется результат и
одновременно считывается код следующей
операции (одноуровневый конвейер).
Поэтому в общем потоке команд одна
короткая команда реализуется за 4 периода
тактовой частоты или за один машинный
цикл. В микроконтроллерах AVR тоже
используется одноуровневый конвейер
при обращении к памяти программ и
короткая команда в общем потоке
выполняется, как и в PIC-контроллерах, за
один машинный цикл. Главное же отличие
состоит в том, что этот цикл у AVR составляет
всего один период тактовой частоты
Следующая
отличительная черта архитектуры
микроконтроллеров AVR — регистровый файл
быстрого доступа (Рисунок 1.1). Каждый из
32-х регистров общего назначения длиной
1 байт непосредственно связан с
арифметико-логическим устройством
(ALU) процессора. Другими словами, в AVR
существует 32 регистра — аккумулятора
(сравните, например, с MCS51). Это обстоятельство
позволяет в сочетании с конвейерной
обработкой выполнять одну операцию в
ALU за один машинный цикл. Так, два операнда
извлекаются из регистрового файла,
выполняется команда и результат
записывается обратно в регистровый
файл в течение только одного машинного
цикла.
Шесть
из 32-х регистров файла могут использоваться
как три 16-разрядных указателя адреса
при косвенной адресации данных. Один
из этих указателей (Z Pointer) применяется
также для доступа к данным, записанным
в памяти программ микроконтроллера.
Использование трех 16-битных указателей
(X, Y и Z Pointers) существенно повышает скорость
пересылки данных при работе прикладной
программы.
Регистровый
файл занимает младшие 32 байта в общем
адресном пространстве SRAM AVR. Такое
архитектурное решение позволяет получать
доступ к быстрой «регистровой»
оперативной памяти микроконтроллера
двумя путями — непосредственной адресацией
в коде команды к любой ячейке и другими
способами адресации ячеек SRAM. В технической
документации фирмы Atmel это полезное
свойство носит название «быстрое
контекстное переключение» и является
еще одной отличительной особенностью
архитектуры AVR, повышающей эффективность
работы микроконтроллера и его
производительность. Особенно заметно
данное преимущество при реализации
процедур целочисленной 16-битной
арифметики, когда исключаются многократные
пересылки между различными ячейками
памяти данных при обработке арифметических
операндов в ALU.
Система
команд AVR весьма развита и насчитывает
до 133 различных инструкций. Конкретное
количество команд для каждого
микроконтроллера того или иного семейства
AVR приведено в таблицах 1 – 3 приложения
1. Почти все команды имеют фиксированную
длину в одно слово (16 бит), что позволяет
в большинстве случаев объединять в
одной команде и код операции, и операнд(ы).
Лишь немногие команды имеют размер в 2
слова (32 бит) и относятся к группе команд
вызова процедуры CALL, длинных переходов
в пределах всего адресного пространства
JMP, возврата из подпрограмм RET и команд
работы с памятью программ LPM. Различают
пять групп команд AVR: условного ветвления,
безусловного ветвления, арифметические
и логические операции, команды пересылки
данных, команды работы с битами, которые
ниже будут рассмотрены более подробно.
В последних версиях кристаллов AVR
семейства «mega» реализована функция
аппаратного умножения, что придает
новым микроконтроллерам еще больше
привлекательности с точки зрения
разработчика.
По
разнообразию и количеству реализованных
инструкций AVR больше похожи на CISC, чем
на RISC процессоры. Например, у PIC-контроллеров
система команд насчитывает до 75 различных
инструкций, а у MCS51 она составляет 111. В
целом, прогрессивная RISC архитектура
AVR в сочетании с наличием регистрового
файла и расширенной системы команд
позволяет в короткие сроки создавать
работоспособные программы с эффективным
кодом как по компактности реализации,
так и по скорости выполнения.
Корпорация
Atmel планирует дальнейшее развитие
перспективной линии AVR — микроконтроллеров.
Исключение составляет лишь семейство
«classic», развитие которого не
планируется. Считается, что это семейство
функционально сбалансировано и
разнообразно представлено. В семействе
«tiny» анонсирован очень интересный
микроконтроллер — ATtiny26, имеющий в своем
составе блок SRAM емкостью 128 байт и модуль
USI (Universal Serial Interface). Это означает, что
один и тот же периферийный узел связи
на кристалле может быть программным
образом сконфигурирован для работы в
качестве коммуникационных интерфейсов
SPI (Master/Slave) или I2C (Master/Slave). Дополнительно
USI может быть запрограммирован для
работы в качестве полудуплексного UART
или 4/12 разрядного счетчика. Но наиболее
интересные решения реализованы в
семействе «mega», где анонсирован и
начат серийный выпуск целого ряд
кристаллов, которые будут выпускаться
по технологии 0,35 мкм. Объем Flash-памяти
программ с функциями ISP и SPM у новых
«mega» будет варьироваться от 8 до
128 килобайт, а выпускаться они будут в
корпусах MLF, DIP и TQFP с количеством выводов
от 32 до 64. Все новые микроконтроллеры
семейства «mega» будут иметь JTAG —
интерфейс (за исключением mega8), аппаратный
умножитель 8х8, дающий 16-разрядный
результат, схему защиты от сбоев,
двухпроводной последовательный
интерфейс, аналого-цифровой преобразователь
(за исключением ATmega162) и ряд других
аппаратных особенностей (см. таблицу
3). Помимо этого, вдвое будет повышена
скорость работы всех периферийных узлов
(SPI, PWM, UART и др.), улучшена работа схемы
тактирования и упрощен доступ к внешней
памяти данных.
Хорошо
известно, что развитые средства поддержки
разработок при освоении и знакомстве
с любым микроконтроллерным семейством
играют не менее значимую роль, чем сами
кристаллы. Фирма Atmel уделяет этому
вопросу большое внимание. Программные
и аппаратные средства для AVR всегда
разрабатывались и разрабатываются
параллельно с самими микроконтроллерами
и включают в себя компиляторы, внутрисхемные
эмуляторы, отладчики, программаторы,
простейшие отладочные платы — конструкторы
практически на любой вкус. Немаловажную
роль играет и открытая политика Atmel
Corp. в вопросах развития и распространения
разнообразных, доступных средств
поддержки разработок. Это позволяет
разработчикам и производителям
электронной техники надеяться на
сохранение полноценной поддержки для
перспективного семейства микроконтроллеров,
закладывая AVR в свои новые изделия.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Общее устройство микроконтроллеров ATmega и ATtiny
CPU — процессорное устройство
Память
Периферийные устройства
Последовательные порты
Фирма ATMEL была создана в 1984 году, полное название – Advanced Technologi Memory and Logic.
Первый МК фирма выпустила в 1993 году.
В 1995 году была придумана новая архитектура процессорного ядра для МК, так называемое RISС-ядро. Новую архитектуру МК назвали AVR. Идея новой архитектуры ядра оказалась очень удачной, и уже с 1997 года ATMEL начала серийный выпуск МК на основе RISC-ядра. В настоящее время ATMEL выпускает в год несколько миллиардов МК разнообразных типов. Из всего этого множества выделяется два семейств восьмиразрядных МК: tinyAVR и megaAVR.
Семейство Tiny – более простые, менее навороченные и, соответственно, более дешевые.
Семейство Mega – более навороченные, но и стоят дороже.
В каждом семействе большое разнообразие различных МК, что позволяет нам выбрать для создаваемой конструкции наиболее оптимальный вариант МК как по его возможностям, так и по цене.
Краткие характеристики микроконтроллеров AVR семейства Mega и Tiny:
— тактовая частота от 0 герц до 20 мегагерц
— объем памяти программ 1-16 килобайт для семейства Tiny и 8-256 килобайт для семейства Mega
— напряжение питания от 1,8 до 5,5 вольт (для разных типов микроконтроллеров диапазон питающих напряжений разный, также встречается и от 0,7 вольт, и до 6 вольт)
— ток потребления микроконтроллером — в среднем около 5 миллиампер и сильно зависит от питающего напряжения и тактовой частоты, чем выше эти значения — тем больший ток потребления
А теперь давайте посмотрим на рисунок, где показаны все основные компоненты микроконтроллера, а потом бегло ознакомимся с каждым из них:
В этой статье мы не будем глубоко вникать в назначение и устройство каждого компонента микроконтроллера, этим мы займемся в следующих статьях по устройству микроконтроллеров AVR. Сегодня мы рассмотрим только общее устройство микроконтроллера.
CPU — процессор микроконтроллера
Его задача сформировать адрес очередной команды, выбрать команду из памяти и организовать ее выполнение.
Основные устройства CPU:
— АЛУ — арифметико-логическое устройство
— блок регистров общего назначения (РОН)
АЛУ — устройство, которое выполняет арифметические и логические операции над данными, которые поступают из регистров общего назначения.
РОН — регистры общего назначения (всего 32 РОН, от R0 до R31), основная задача которых — обмен данными между АЛУ и ячейками памяти.
Память микроконтроллера
Микроконтроллеры AVR имеют три разновидности памяти:
— FLASH
— SRAM
— EEPROM
FLASH-память — постоянное запоминающее устройство, она-же память программ. Предназначена для хранения кодов программ и констант
SRAM-память — оперативное запоминающее устройство, она-же память данных. Предназначена для хранения данных, получаемых в процессе выполнения программы (при выключении питания — данные теряются)
EEPROM-память — постоянное запоминающее устройство, она-же энергонезависимая память данных. Предназначена для хранения констант и данных, получаемых в процессе выполнения программы (при выключении питания — данные не теряются)
Периферийные устройства
«Периферийными» в микроконтроллерах называют все устройства, внешние по отношению к CPU и памяти
Порты ввода-вывода
Параллельный восьмиразрядный порт ввода-вывода предназначен для ввода и вывода данных. Количество портов — от 1 до 7 (зависит от модели микроконтроллера)и обозначаются они буквами A, B,C, D … .
Аналоговый компаратор
Присутствует во всех моделях МК
Аналоговый компаратор – устройство сравнения. Основная задача компаратора – это сравнение двух напряжений: одно из них – образцовое (с чем сравниваем), а второе – измеряемое (сравниваемое). Если сравниваемое напряжение больше образцового – компаратор вырабатывает сигнал логической единицы. Если сравниваемое напряжение меньше образцового – компаратор формирует на своем выходе логический ноль.
С помощью компаратора можно, к примеру, контролировать напряжение на заряжаемом аккумуляторе. Пока напряжение не достигнет нужного уровня, на выходе компаратора – логический ноль, как только напряжение аккумулятора достигло уровня нужного нам, компаратор вырабатывает логическую единицу, и значит можно завершить зарядку аккумулятора.
АЦП – аналого-цифровой преобразователь
Имеют не все МК
АЦП – преобразователь аналогового напряжения в цифровую форму.
Аналоговое напряжение – это напряжение которое изменяется по напряжению во времени. Например – синусоидальный сигнал с выхода генератора частоты, напряжение в бытовой розетке, звуковой сигнал на колонках.
АЦП постоянно анализирует на своем входе величину напряжения и выдает на своем выходе цифровой код, соответствующий входному напряжению.
Примеры применения:
– цифровой вольтметр или амперметр
– процессорный стабилизатор напряжения
МК, которые имеют АЦП, также имеют раздельное питание для цифровой и для аналоговой частей.
Таймер/счетчик
Присутствует во всех моделях МК, но в разных количествах – от 1 до 4, и с разными возможностями
Таймер/счетчик – это как бы два устройства в одном флаконе: таймер + счетчик.
Таймер – устройство, которое позволяет формировать временные интервалы. Таймер представляет собой цифровой счетчик который считает импульсы или от внутреннего генератора частоты, или от внешнего источника сигнала.
С помощью таймера/счетчика можно:
– отсчитывать и измерять временные интервалы
– подсчитывать количество внешних импульсов
– формировать ШИМ-сигналы
К примеру, мы хотим создать прибор позволяющий измерять частоту входного сигнала (частотомер). В этом случае мы можем использовать два счетчика/таймера. Первый будет отсчитывать временные интервалы равные 1 секунде, а второй будет считать количество импульсов за промежуток времени в 1 секунду которые отсчитывает первый таймер. Количество импульсов подсчитанное вторым таймером/счетчиком за 1 секунду будет равно частоте входного сигнала.
ШИМ— широтно-импульсный модулятор, предназначен для управления средним значением напряжения на нагрузке.
ШИМ – один из вариантов работы таймера/счетчика, позволяющий генерировать на выходе МК прямоугольное импульсное напряжение с регулируемой длительностью между импульсами (скважностью), которое применяется в различных устройствах:
– регулирование частоты вращения электродвигателя
– осветительные приборы
– нагревательные элементы
Сторожевой таймер
Есть во всех моделях МК. Может быть включен или выключен по усмотрению программиста
У сторожевого таймера только одна задача – производить сброс (перезапускать программу) МК через определенный промежуток времени.
При работе МК могут возникать различные ситуации при которых его нормальная работа будет нарушена (внешние помехи, дурацкая программа, за которую надо голову оторвать программисту). В таких случаях говорят, что МК «завис».
При нормальной работе МК и включенном сторожевом таймере, программа должна периодически производить сброс сторожевого таймера (а периодический сброс мы должны сами предусмотреть в программе) еще до того, как он должен сработать и перезапустить МК. Если программа «зависла», то сброса сторожевого таймера не будет, и через определенный промежуток времени он перезапустит МК.
Модуль прерываний
Прерывание – сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей программы приостанавливается и управление передается обработчику прерывания, который реагирует на событие и обслуживает его (выполняется программа, которую должен выполнить МК при наступлении соответствующего события – прерывания), после чего возвращается в прерванную программу.
Прерывания бывают внутренние и внешние.
Внутренние прерывания могут возникать при работе периферийных устройств МК (АЦП, компаратор, таймер и т.д.)
Внешнее прерывание – событие, которое возникает при наличии сигнала на одном из специальных входов МК (таких специальных входов для внешних прерываний у МК может быть несколько).
Пример:
Внутреннее прерывание. Собрали на МК устройство, которое еще обладает и функцией зарядки резервного источника питания. МК выполняет свою основную программу, аналоговый компаратор в это время проверяет напряжение на аккумуляторе. Как только напряжение аккумулятора снизится ниже допустимого, компаратор вырабатывает сигнал процессору – прерывание, процессор останавливает выполнение основной программы и переходит к выполнению программы прерывания, вызванного компаратором – к примеру, включает схему зарядки аккумулятора, а затем возвращается к выполнению прерванной программы.
Внешнее прерывание. Работа МК происходит также, как и при внутреннем прерывании, но вызываться оно может любым устройством, подключенным к специальному входу МК.
Последовательные порты
Последовательный периферийный интерфейс SPI
Имеется во всех моделях МК
Мы его в большинстве случаях применяем для программирования МК.
Кроме программирования МК, интерфейс SPI позволяет:
– обмениваться данными между МК и внешними устройствами
– обмениваться данными нескольким МК между собой
Универсальный приемопередатчик UART
Имеют все модели МК, но разных типов:
– USART
– UART
Предназначены для обмена данными по последовательному каналу по двухпроводным линиям связи. Прием и передача могут вестись одновременно.
Последовательный двухпроводный интерфейс TWI (I2C)
Встречается только в серии Mega.
Предназначен для обмена данными по двухпроводной линии. Всего к такой линии можно подключить до 128 устройств.
TWI является полным аналогом интерфейса I2C.
(25 голосов, оценка: 4,80 из 5)
Загрузка…
Одна из частых проблем начинающего робототехника — написание программ.
Вы можете, конечно, очень быстро изучить основы программирования, но только в одном случае, если вы проигнорируете такие аспекты, как использование заметок в каталоге, структурирование данных и, что естественно, саму работу микроконтроллера.
Мы не говорим о том, что быстрое обучение — это плохо. Напротив, это очень даже хорошо. Ведь благодаря быстрому обучению, вы сможете создать свою первую конструкцию и программу к ней, и тем самым понять, хотите ли вы заниматься робототехникой в дальнейшем. Но если вы точно знаете, что хотите связать свою жизнь с робототехникой и программированием, то вам точно стоит изучить определенный объем теоретического материала.
Вот почему мы решили написать статью, содержащую информацию об устройстве и работе микроконтроллера и обо всем, что с ним связано. Поскольку 8-битные процессоры Atmel из семейства AVR на сегодняшний день являются самыми популярными, мы на них и остановимся. Точнее на ATmega16.
Datasheet (таблицу данных) Atmega16 можно скачать с сайта производителя.
Упрощенная схема работы микроконтроллера
Чтобы микроконтроллер мог выполнять свою задачу, ему необходимо несколько основных компонентов. Самым важным из них является процессор (Central Processing Unit, сокращенно CPU). Он отвечает за выполнение написанной нами программы. Память, которая различается по емкости, скорости доступа и сохранению данных, также является важным аспектом.
Другими необходимыми элементами являются периферийные устройства. Чаще всего используются порты ввода-вывода. Связь между вышеупомянутыми элементами можно показать на простой схеме:
Как видите, путь слева ведет только в одну сторону — от процессора к целевому чипу. Это адресная шина. Справа находится шина данных, по которой данные могут передаваться в обоих направлениях.
Размер шины данных сильно влияет на скорость работы.
В AVR он 8 битный поэтому, например, число int, равное 16 битам, необходимо транспортировать дважды. Персональные компьютеры обычно имеют 32-битную или 64-битную систему. Поэтому неудивительно, что ваш компьютер может выполнять те же задачи намного быстрее.
Связь между процессором и другими системами с помощью адресной шины и шины данных очень проста. Сначала процессор выбирает необходимый в данный момент чип через адресную шину, а затем байты перемещаются к процессору или от процессора по шине. Каждый чип имеет уникальный адрес, поэтому, когда используется одно устройство, остальные не используют шину данных. Также стоит упомянуть о системе тактовых сигналов. Она отвечает за генерацию импульсов постоянной частоты.
Тактовый сигнал достигает ЦП и периферийных устройств, и все операции выполняются в его части. Это второй важный фактор, влияющий на быстродействие микроконтроллера.
Теперь перейдем к более подробному обсуждению отдельных компонентов.
Процессор (ЦП)
Процессор — это цифровая последовательная синхронизированная система. Слово цифровой означает, что процессор различает только низкое и высокое напряжение. Последовательный означает, что каждое новое состояние зависит от текущего входа и предыдущего состояния. А синхронизированный означает, что он работает в ритме тактового сигнала.
Задача процессора состоит в выполнении программы, сохраненной во FLASH-памяти. Программа разделена на команды, которые последовательно передаются и выполняются в CPU.
Центральный блок состоит из нескольких более мелких компонентов. 8-битные регистры предназначены для хранения данных, информации о состоянии, необходимых в данный момент.
К мелким компонентам относятся:
- Указатель инструкции (IP) — сохраняет в памяти адрес, с которого должна быть получена следующая команда.
- Регистр инструкций — хранит код текущей инструкции.
- Указатель стека (SP) — указывает на текущую вершину стека (о стеке будет рассказано позже).
- Регистр состояния — хранит флаги (управляющие биты), необходимые для работы программы. Большинство флагов предназначены для арифметических операций и используются только при программировании на ассемблере. Также есть глобальный флаг прерывания.
- Регистры общего назначения — в семействе AVR таких регистров 32, они называются R0, R1 и т.д. до R31. Это собственная оперативная память процессора. Операции с этими регистрами выполняются быстрее, чем с данными из ОЗУ или периферийных систем. Фактически, большинство операций состоит из чтения данных в одном из этих регистров, выполнения запрошенных операций и отправки их обратно по шине данных.
Часть процессора, отвечающая за выполнение вычислений, — это ALU (Arithmetic Logic Unit). С его помощью вы можете выполнять арифметические, логические и битовые операции с числами, хранящимися в регистрах общего назначения. Результаты этих операций также влияют на флаги в регистре состояния.
Флэш-память
Флэш-память еще называется программной памятью. Это память с наибольшей емкостью, в основном для хранения данных. С помощью нее информация не удаляется при отключении питания. Как видно на структурной схеме микроконтроллера, стрелка между FLASH-памятью и шиной данных направлена только в одном направлении. Это связано с тем, что ЦП не может записывать информацию непосредственно на нее. По этой причине использование этого типа памяти весьма ограничено. Помимо программы, она также может содержать таблицы констант и раздел загрузчика, который позволяет загружать новую программу во FLASH без использования программатора.
Программная память разделена на ячейки с определенной емкостью в зависимости от используемого микроконтроллера. Наверное, никого не удивит то, что в AVR это 8 бит. Каждой ячейке назначается шестнадцатеричный адрес. Ниже представлена карта памяти ATmega16:
Как видите, память разделена на разделы приложения и загрузчика. Размер раздела загрузчика определяется битами. После сброса, процессор последовательно считывает команды. В зависимости от настройки битов она может запускаться с начала раздела приложения или с начала загрузчика.
Мы не будем здесь разбираться с загрузчиками, потому что это тема для отдельной статьи. Кроме того, в даташите вы можете найти некоторую информацию с примерами кода. В любом случае программу можно спокойно запускать, если в разделе загрузчика ничего нет.
RAM (оперативная память)
ОЗУ, в отличие от FLASH, хранит информацию только во время работы чипа. Очищается после каждого сброса. В свою очередь, доступ к нему намного быстрее и нет ограничений на допустимые записи. Поэтому ОЗУ идеально подходит для хранения переменных.
Кроме того, ОЗУ используется как аппаратный стек. Принцип работы стека прост — на него можно накинуть больше байт данных, а потом удалить. Последний брошенный байт находится на самом верху стека, поэтому он будет привязан первым. Если мы бросим в стек еще один байт, он превзойдет предыдущий и будет первым. Стек обычно находится в конце памяти и переходит к началу. Следовательно, если мы неправильно напишем программу, значения, помещаемые в стек, в конечном итоге перезапишут другие данные в памяти.
Адресное пространство (то есть набор всех адресов, которые соответствуют какой-либо ячейке памяти) SRAM (статическое ОЗУ) в AVR также содержит адреса регистров R0-R31 и регистров управления периферийных схем. Ниже представлена карта оперативной памяти ATmega16:
Мы хотели бы указать здесь, что флэш-память и оперативная память полностью независимы друг от друга и имеют отдельные адреса, которые никак не связаны друг с другом. По такому принципу сделаны многие микроконтроллеры.
Периферийные системы
Периферийные системы — это все те полезные компоненты, которыми мы пользуемся при программировании наших роботов. Чаще всего используются стандартные параллельные порты ввода-вывода, принимающие цифровые сигналы от PIN-кодов.
Есть много других схем, которые могут быть альтернативным вводом-выводом этих портов. К ним относятся таймеры, компараторы, внешние генераторы прерываний и многое другое.
Каждая периферийная система имеет регистры конфигурации, которые определяют ее работу. Например, для стандартного порта в ATmega у нас есть три регистра:
- DDRx — определяет направление потока данных,
- PORTx — форсирует состояние выхода,
- PINx — читает статус входа.
Описание использования периферийных систем и режимов их работы — тема для целой серии статей. К счастью, есть таблицы с названиями отдельных битов, режимами работы в зависимости от настроек этих битов и подробными описаниями конфигурации.
Создание и реализация программы
Как мы уже упоминали в обсуждении программной памяти, процессор, после сброса в каждом цикле, считывает инструкцию, на которую обращает внимание указатель инструкции (IP), и выполняет ее. Во время выполнения значение IP изменяется, чтобы можно было прочитать следующую инструкцию. Значение IP не всегда нужно увеличивать на 1, поэтому программа не всегда будет выполняться в одном и том же порядке. Можно делать скачки, то есть циклы.
Программа для микроконтроллера должна состоять из части, которая инициализирует периферийные схемы, а затем переходит к бесконечному циклу. Если такой цикл не существует, процессор, после достижения последнего адреса во FLASH-памяти, возвращается к началу и повторно инициализируется. Этот процесс происходит, даже если вся память не заполнена, потому что для незапрограммированных ячеек, по умолчанию установлено значение 0xFF (255 в шестнадцатеричном формате или только единицы в двоичном формате). Это соответствует коду инструкции, которые затем выполняются для каждой инструкции до завершения памяти. Конечно, в такой программе нет смысла.
Кстати, некоторые путают машинный код с языком ассемблера.
Машинный код и язык ассемблера — это разные вещи. Машинный код имеет двоичную форму и разделен на команды. В семействе AVR каждая инструкция имеет 16 битов и содержит код операции, режим адресации и значения или адреса аргументов.
Машинный код очень трудно читать людям. А вот язык ассемблера состоит из инструкций и аргументов, состоящих из нескольких букв. Немного попрактиковавшись, вы сможете прочитать и понять его без каких-либо проблем, потому что названия инструкций представляют собой английские сокращения, например, MOV — двигаться. Одна инструкция на языке ассемблера обычно запускается за один такт и соответствует одной инструкции машинного кода.
Каждое семейство процессоров имеет собственный машинный код и язык ассемблера.
Список команд ассемблера AVR можно найти в примечании в сводке по набору инструкций. Благодаря содержащейся в ней таблице, вы можете узнать о команде на ассемблере, типах аргументов, кратком описании и количестве тактов, необходимых для ее выполнения. Также можно проверить, как долго выполняются функции.
Если мы напишем нашу программу на языке более высокого уровня, например, на C, процесс создания исполняемого файла, то есть компиляция, пройдет в несколько этапов.
После оптимизации, компилятор пишет программу на языке ассемблера, а затем переключается на машинный код.
Прерывания
Прерывания предназначены для того, чтобы вы могли остановить выполнение основного цикла программы и перейти к обработке какого-либо срочного события. Они активируются флажком в регистре статуса. Если этот флаг установлен в 1, периферийные устройства могут работать в режиме прерывания. Некоторые из них могут генерировать несколько разных прерываний. Например, коммуникационные интерфейсы имеют возможность генерировать прерывания при отправке и получении байта.
Когда процессор получает запрос прерывания, он переходит к специальному адресу памяти (вектору прерывания), где находятся инструкции по обработке каждого прерывания, и выбирает соответствующие.
Таблицу, показывающую, какой адрес в векторе соответствует какому прерыванию, конечно можно найти в примечании к каталогу. Перед переходом к прерыванию, в стек записывается IP-регистр, чтобы вы могли вернуться к основной программе в том же месте, но позже. Важно, чтобы указатель стека указывал на то же место в памяти, что и в начале прерывания, прежде чем возвращаться к основному циклу.
Очевидным преимуществом работы в режиме прерывания является немедленное получение важных данных измерений или быстрая связь. Второе преимущество — улучшение основного цикла программы. Больше нет необходимости каждый раз проверять состояние данной периферийной системы. Про нее можно полностью забыть в основном цикле и обработать только с помощью прерывания.
Поскольку прерывания мешают выполнению основной программы, очевидно, что их обработка должна быть как можно более короткой. Это оставляет больше времени для работы с программой. Новички часто не знают об этом и помещают в обработчик прерывания длинные циклы или функции задержки. В общем, функции задержки плохо работают с прерываниями, даже если они находятся в основном цикле. Причина в том, что они используют циклы и операцию ассемблера, без операции, для заданного количества циклов в основном цикле программы. Таким образом, нетрудно догадаться, что чем чаще этот цикл прерывается, тем больше время задержки будет отличаться от установленного. Конечно, для коротких промежутков времени, порядка нескольких микросекунд, разница не должна отрицательно влиять на программу, но для более длительных задержек различия могут быть уже значительными.
Мы можем определить продолжительность прерывания, используя код языка ассемблера. Мы также можем оценить, сколько раз будет срабатывать прерывание. Благодаря этому мы можем правильно скорректировать время задержки. Конечно, точно в цель мы никогда не попадем, но такая процедура может помочь.
При написании программы прерывания на C, мы часто попадаем в ловушку компилятора и оптимизации.
Что ж, все переменные разных типов, которые мы обрабатываем во время компиляции, в любом случае преобразуются в одну и ту же форму нуля или единицы, а затем помещаются в памяти. Это могут быть регистры общего назначения, ОЗУ или стек. Если же они больше не нужны, вместо них можно написать что-нибудь другое.
Компилятор, на основе анализа кода, определяет, нужны ли по-прежнему данные или нет, и может не знать, что глобальная переменная, также должна использоваться в прерывании. В результате переменная, предназначенная для изменения своего значения в прерывании, часто остается неизменной.
Рецепт состоит в том, чтобы добавить ключевое слово volatile при инициализации глобальной переменной.
Типы переменных
Наверняка каждый, кто написал какую-либо программу, знает основные типы переменных. Однако, наверное, не всех интересовало, как они хранятся в памяти и какие действия с ними можно выполнять. Поэтому здесь мы остановились на наиболее популярных типах.
Char — переменная, представляющая один символ с клавиатуры. Он занимает в памяти 1 байт (8 бит). Несмотря на то, что новички часто приравнивают этот тип только к буквам, на самом деле его также можно рассматривать как число. Беззнаковый символ может быть от 0 до 255 (то есть от 2 ^ 8 до 1), а символ может быть от -128 до 127.
Вы можете выполнять с ней математические операции, независимо от того, использовали ли вы его ранее как число или знак. например, ‘a’ + 1 = ‘b’.
Вы можете найти числовой эквивалент каждого символа в таблице ASCII.
Int (целое число) — это один из наиболее часто используемых типов переменных. Ints обычно занимает 16 бит памяти и может принимать значения от 0 до 65535 (2 ^ 16-1) в беззнаковом режиме или от -32768 до 32767 со знаком.
Обычно нам не нужно работать с такими большими числами, и нам подходят 8-битные переменные. Следовательно, если мы знаем, что нам не понадобятся числа больше 8 бит, написание такой переменной как int — это просто пустая трата места в памяти.
Float (число с плавающей запятой) — это тип, хранящий дробные числа, занимает в памяти 4 байта (32 бита). В то время как в предыдущих двух типах двоичные данные напрямую преобразовывались в десятичные числа, здесь ситуация иная.
Значение числа с плавающей запятой рассчитывается так:
Где S (знак) соответствует знаку и имеет значение 1 или -1, а E (показатель степени) — это показатель степени, до которой повышается основание системы счисления, над которой мы в настоящее время работаем.
Конечно, компьютеры работают в двоичной системе, поэтому число 2. M — мантисса, которая, в нашем случае, является числом от 1 до 2. Числа с плавающей запятой намного точнее, чем обычные типы. К сожалению, чем большие значения они принимают, тем они менее точны. Это связано с их экспоненциальным характером и присвоением разным числам с одинаковым значением одного и того же представления в памяти.
Очень важно помнить, что арифметика с плавающей запятой отличается от классической арифметики.
Операции с плавающей запятой сложнее, и они также работают с 32-битными числами. Их использование намного более интенсивно загружает процессор и отрицательно сказывается на скорости выполнения программы. Поэтому перед использованием числа с плавающей запятой стоит задуматься, действительно ли вам нужна такая точность. Возможно, было бы лучше работать с целыми числами и использовать какой-нибудь математический трюк, например, масштабирование значения, чтобы избавиться от дроби, или сохранение целой части в одной переменной и дробной части в другой.
Хотя с нашей точки зрения, все эти типы радикально различаются, для процессора они всегда представляют собой просто последовательность нулей и единиц. Вот почему с числами или символами типа int вы можете выполнять операции с равномерным битовым сдвигом. Вы также можете заставить компилятор читать один тип как другой. В этом суть операции приведения к C, с которой у многих возникают проблемы. Однако в языке ассемблера каждая переменная — это просто двоичные данные в памяти, и программист сам решает, как с ними обращаться.
Математические операции
Как вы могли заметить, у ЦП есть только несколько основных функций, таких как:
- сложение,
- вычитание,
- умножение,
- побитовые операции.
Первое, что бросается в глаза — это отсутствие деления. Да, даже такая тривиальная математическая операция — настоящий вызов для микроконтроллера. Процессор обращается с этим так же, как человек, имеющий в своем распоряжении лист бумаги. Алгоритм очень близок к обычному письменному делению! Однако это может занять несколько десятков тактов, а для этого требуется много регистров процессора.
Однако есть одно исключение — деление на два.
В двоичном формате эта операция фактически сдвигает число влево или вправо на заданное количество разрядов. Точно так же, как в десятичной системе счисления, где умножение / деление на степень десяти сводится к смещению десятичной точки. Итак, деление — это еще одна вещь, которую следует использовать в умеренных количествах.
Поскольку так много проблем вызвано простым делением для микроконтроллеров, страшно думать о более сложных операциях, таких как тригонометрические, логарифмические функции, производные или интегралы. Вот здесь и пригодятся математические уловки. Точнее, приближение функций, т.е. приближение их значений на заданных интервалах. Что касается периодических функций, то есть тригонометрических функций, вы также можете использовать массивы вычисленных значений, а затем масштабировать их.
Аппроксимация функции многочленами основана на наблюдении, что для каждой функции можно найти многочлен, который находится с ней на определенном интервале. Чем выше степень полинома, тем точнее приближение.
Конечно, было бы хорошо выполнить операции, связанные с вычислением такого многочлена, раньше, например, в Matlab, а в программе использовать готовые коэффициенты.
Когда дело доходит до аппроксимации интеграции и дифференцирования, на различных форумах есть множество примеров, связанных с реализацией алгоритма PID. Там для интегрирования используется метод прямоугольников. Другими методами аппроксимации интегрирования являются метод трапеций и метод Ньютона-Рафсона. С другой стороны, дифференцирование обычно проводится как коэффициент разности.
Существует множество алгоритмов аппроксимации функций. Однако они требуют хороших математических знаний, включая тригонометрические функции, полиномы, интегральное и дифференциальное исчисление.
Вывод
Статья, как мы думаем, получилась очень обширной и затрагивает множество различных вопросов. Мы понимаем, что, наверное, мало кому это понадобится сразу. Тем не менее, такую информацию стоит изучить.
При написании данной статьи, мы использовали знания, полученные на занятиях в университете и опыт из собственных практик, а также использовали общедоступные интернет-источники.
С Уважением, МониторБанк
Логотип AVR Различные старые микроконтроллеры AVR: ATmega8 в узком 28-контактном корпусе с двумя линиями (DIP -28N), ATxmega128A1 в тонком четырехконтактном плоском корпусе на 100 контактов (TQFP -100), ATtiny45 в 8-контактном маленьком корпусе (SO -8). ATmega328 P в узком двухрядном 28-выводном корпусе (DIP -28N). Он обычно встречается на более старых платах Arduino.
AVR— это семейство микроконтроллеров, разработанных с 1996 года Atmel, приобретенных Microchip Technology в 2016 году. Это однокристальные микроконтроллеры с модифицированной гарвардской архитектурой 8-бит RISC. AVR был одним из первых семейств микроконтроллеров, в котором для хранения программ использовалась встроенная флэш-память в отличие от одноразового программируемого ПЗУ, EPROM или EEPROM, используемый другими микроконтроллерами в то время.
Микроконтроллеры AVR находят множество применений в качестве встроенных систем. Они особенно распространены во встроенных приложениях для любителей и образовательных учреждений, популяризированных их включением во многие из линейки Arduino плат для разработки открытого аппаратного обеспечения.
Содержание
- 1 История
- 2 Обзор устройства
- 2.1 Базовые семейства
- 2.2 Архитектура устройства
- 2.2.1 Программная память
- 2.2.2 Внутренняя память данных
- 2.2.3 Внутренние регистры
- 2.2.4 Порты GPIO
- 2.2.5 EEPROM
- 2.3 Выполнение программы
- 2.4 Набор команд
- 2.5 Скорость MCU
- 2.6 Разработка
- 2.7 Возможности
- 3 Программирование интерфейсы
- 3.1 ISP
- 3.2 PDI
- 3.3 UPDI
- 3.4 Высоковольтный последовательный
- 3.5 Высоковольтный параллельный
- 3.6 Загрузчик
- 3.7 ROM
- 3.8 aWire
- 4 Интерфейсы отладки
- 4.1 debugWIRE
- 4.2 JTAG
- 5 Инструменты разработки и оценочные комплекты
- 5.1 Стартовый комплект STK600
- 5.2 Стартовый комплект STK500
- 5.3 Стартовый комплект STK200
- 5.4 AVRISP и AVRISP mkII
- 5.5 AVR Dragon
- 5.6 JTAGICE
- 5.7 JTAGICE mkII
- 5.8 JTAGICE3
- 5.9 AVR ONE!
- 5.10 Демонстрационная плата Butterfly
- 5.11 AT90USBKey
- 5.12 Комплект беспроводной связи Raven
- 5.13 Сторонние программисты
- 6 Использует
- 7 клонов FPGA
- 8 Другие поставщики
- 9 Ссылки
- 10 Furth Чтение
- 11 Внешние ссылки
История
Архитектура AVR была задумана двумя студентами Норвежского технологического института (NTH), Альф-Эгилем Богеном и Вегардом Волланом.
Атмель говорит, что название AVR не является аббревиатурой и не означает ничего конкретного. Создатели AVR не дают однозначного ответа на вопрос, что означает термин «AVR». Однако общепринято считать, что AVR означает процессор ISC Alf и Vegard R. Обратите внимание, что использование «AVR» в этой статье обычно относится к 8-битной линейке RISC микроконтроллеров Atmel AVR.
Исходный микроконтроллер AVR был разработан в местном ASIC доме в Тронхейме, Норвегия, в то время называемом Nordic VLSI, теперь Nordic Semiconductor, где Боген и Воллан работали студентами. Он был известен как μRISC (Micro RISC) и был доступен как кремниевый IP / строительный блок от Nordic VLSI. Когда технология была продана компании Atmel из Nordic VLSI, внутренняя архитектура получила дальнейшее развитие в Bogen и Wollan в Atmel Norway, дочерней компании Atmel. Разработчики тесно сотрудничали с разработчиками компиляторов в IAR Systems, чтобы гарантировать, что набор инструкций AVR обеспечивает эффективную компиляцию языков высокого уровня.
Среди первых в линейке AVR был AT90S8515, который в 40-выводном корпусе DIP имеет такую же распиновку, что и микроконтроллер 8051, включая внешний мультиплексированный адрес и шину данных. Полярность линии RESET была противоположной (8051 имели RESET с активным высоким уровнем, а AVR — с активным низким RESET), но в остальном распиновка была идентичной.
Архитектура 8-битного микроконтроллера AVR была представлена в 1997 году. К 2003 году Atmel поставила 500 миллионов микроконтроллеров на базе флэш-памяти AVR. Платформа Arduino, разработанная для простых электронных проектов, была выпущена в 2005 году и включала микроконтроллеры AVR ATmega8.
Обзор устройства
AVR представляет собой машину с модифицированной гарвардской архитектурой, где программа и данные хранятся в отдельных системах физической памяти, которые появляются в разных адресных пространствах, но имеют возможность чтения элементов данных из памяти программы с помощью специальных инструкций.
Базовые семейства
AVR обычно подразделяются на следующие:
- tinyAVR— серия ATtiny
- 0,5–32 КБ программной памяти
- 6–32-контактный корпус
- Ограниченный набор периферийных устройств
- Компоненты tinyAVR 0/1/2-серии с 2016 года
- Периферийные устройства равны или превосходят megaAVR 0-series
- Система событий
- Улучшенный набор команд AVRxt, аппаратное умножение
- megaAVR— серия ATmega
- 4–256 КБ программной памяти
- 28– 100-контактный корпус
- Расширенный набор инструкций (инструкции умножения и инструкции для работы с большей памятью программ)
- Расширенный набор периферийных устройств ‘
- частей серии MegaAVR 0 с 2016 года
- Новые периферийные устройства с расширенной функциональностью
- Система событий
- Усовершенствованный набор инструкций AVRxt
- AVR Dxявный преемник megaAVR
- 16–128 КБ памяти программ
- 24 МГц при 1,8-5,5 В
- 14-64 контакта
- 4-16 K SRAM, 512b EEPROM
- Номера деталей в форме AVRffDxpp, где ff — размер вспышки, x — семейный , pp — количество контактов
- Пример: AVR128DA64 — 64-контактный DA-серия с 128 Кб флэш-памяти
- Асинхронный таймер типа D может работать быстрее, чем CPU
- 12-битный АЦП, 10- bit DAC
- DA-серия (начало 2020 г.)
- 28-64-pins
- без внешнего высокочастотного кристалла
- DB-серия, очень похожа на DA (mid -late 2020)
- Добавляет 2 или 3 встроенных операционных усилителя
- MultiVoltage IO (MVIO) на PORTC
- Поддерживает внешний кристалл HF
- DD-series, (позднее 2020? Начало 2021 года?)
- 16-64k flash
- 14-32-контактный корпус
- Поддержка MVIO на 3 или 4 контакта
- XMEGA— серия ATxmega
- 16–384 КБ программной памяти
- 44–64–100-контактный корпус (A4, A3, A1)
- 32-контактный корпус: XMEGA-E (XMEGA8E5)
- Расширенные функции производительности, такие как DMA, «Система событий» и поддержка криптографии
- Обширный набор периферийных устройств с АЦП
- AVR для конкретных приложений
- мегаAVR без специальных функций найдены на других членах семейства AVR, таких как контроллер LCD, контроллер USB, расширенный PWM, CAN и т. д.
- FPSLIC (AVR с FPGA)
- FPGA от 5k до 40k gates
- SRAM для программного кода AVR, в отличие от всех других AVR
- Ядро AVR может работать на частоте до 50 МГц
- 32-битные AVR
- В 2006 году Atmel выпустила микроконтроллеры на базе на 32-битной архитектуре AVR32. Это была совершенно другая архитектура, не связанная с 8-битным AVR, предназначенная для конкуренции с процессорами на базе ARM. Он имел 32-битный путь данных, инструкции SIMD и DSP, а также другие функции обработки аудио и видео. Набор инструкций был похож на другие ядра RISC, но он не был совместим с исходным AVR (ни с одним из различных ядер ARM). С тех пор поддержка AVR32 в Linux была прекращена с версии ядра 4.12; Поддержка компилятором архитектуры в GCC никогда не поддерживалась в центральном репозитории исходного кода компилятора и была доступна в основном в форке, поддерживаемом поставщиком. На момент представления AVR32 компания Atmel уже была лицензиатом архитектуры ARM, причем микроконтроллеры ARM7 и ARM9 были выпущены до и одновременно с AVR32; позже Atmel сосредоточил свои усилия на разработке 32-битных чипов с ядрами ARM Cortex-M и Cortex-A.
Архитектура устройства
Flash, EEPROM и SRAM интегрированы в одну микросхему, что устраняет необходимость во внешней памяти в большинстве приложений. Некоторые устройства имеют опцию параллельной внешней шины, позволяющую добавлять дополнительную память данных или устройства с отображением в память. Почти все устройства (за исключением самых маленьких чипов TinyAVR) имеют последовательные интерфейсы, которые можно использовать для подключения больших последовательных EEPROM или флеш-чипов.
Программная память
Программные инструкции хранятся в энергонезависимой флэш-памяти. Хотя MCU являются 8-битными, каждая инструкция занимает одно или два 16-битных слова.
Размер программной памяти обычно указывается в названии самого устройства (например, линия ATmega64x имеет 64 КБ флэш-памяти, а линия ATmega32x — 32 КБ).
Внешняя программная память не предусмотрена; весь код, выполняемый ядром AVR, должен находиться во встроенной флэш-памяти. Однако это ограничение не распространяется на микросхемы AT94 FPSLIC AVR / FPGA.
Внутренняя память данных
Адресное пространство данных состоит из файла регистров, регистров ввода / вывода и SRAM. Некоторые маленькие модели также отображают ПЗУ программы в адресное пространство данных, но большие модели этого не делают.
Внутренние регистры
Atmel ATxmega128A1 в 100-контактном TQFP корпусе
AVR имеют 32 однобайтовых регистра и являются классифицируются как 8-битные устройства RISC.
В вариантах tinyAVR и megaAVR архитектуры AVR рабочие регистры отображаются как первые 32 адреса памяти (0000 16 –001F 16 ), а затем 64 регистрами ввода / вывода (0020 16 –005F 16 ). В устройствах с большим количеством периферийных устройств за этими регистрами следуют 160 регистров «расширенного ввода-вывода», доступные только как отображаемый в память ввод-вывод (0060 16 –00FF 16 ).
Фактическая SRAM начинается после этих разделов регистров, по адресу 0060 16 или, в устройствах с «расширенным вводом / выводом», по адресу 0100 16.
, хотя существуют отдельные схемы адресации и оптимизация коды операций для доступа к регистровому файлу и первым 64 регистрам ввода / вывода, все они также могут быть адресованы и обработаны, как если бы они были в SRAM.
Самый маленький из вариантов tinyAVR использует сокращенную архитектуру всего с 16 регистрами (с r0 по r15 опущены), которые не адресуются как ячейки памяти. Память ввода-вывода начинается с адреса 0000 16 , за которым следует SRAM. Кроме того, эти устройства имеют небольшие отклонения от стандартного набора команд AVR. В частности, прямые инструкции загрузки / сохранения (LDS / STS) были сокращены с 2 слов (32 бита) до 1 слова (16 бит), что ограничивает общую адресуемую память (сумма ввода / вывода и SRAM) до 128 байт. И наоборот, 16-разрядное адресное пространство инструкции косвенной загрузки (LD) расширяется за счет включения энергонезависимой памяти, такой как флэш-память и биты конфигурации; следовательно, инструкция загрузки памяти программ (LPM) не нужна и опускается. (Для получения подробной информации см. Набор инструкций Atmel AVR.)
В варианте XMEGA рабочий регистровый файл не отображается в адресное пространство данных; Таким образом, невозможно обрабатывать какие-либо рабочие регистры XMEGA, как если бы они были SRAM. Вместо этого регистры ввода-вывода отображаются в адресное пространство данных, начиная с самого начала адресного пространства. Кроме того, объем адресного пространства данных, выделенного для регистров ввода-вывода, существенно вырос до 4096 байт (0000 16 –0FFF 16 ). Однако, как и в предыдущих поколениях, команды быстрого ввода-вывода могут достигать только первых 64 ячеек регистров ввода-вывода (первых 32 ячеек для побитовых инструкций). Вслед за регистрами ввода / вывода серия XMEGA выделяет 4096 байт диапазона адресного пространства данных, которое может использоваться дополнительно для отображения внутренней EEPROM в адресное пространство данных (1000 16 –1FFF 16 ). Фактическая SRAM находится после этих диапазонов, начиная с 2000 16.
портов GPIO
Каждый порт GPIO на крошечном или мегапиксельном AVR поддерживает до восьми контактов и управляется тремя 8- битовые регистры: DDRx, PORTx и PINx, где x — идентификатор порта.
- DDRx: Регистр направления данных, конфигурирует контакты как входы или выходы.
- PORTx: Регистр выходного порта. Устанавливает выходное значение на выводах, настроенных как выходы. Включает или отключает подтягивающий резистор на выводах, сконфигурированных как входы.
- PINx: Входной регистр, используемый для чтения входного сигнала. На некоторых устройствах этот регистр может использоваться для переключения выводов: запись логической единицы в бит PINx переключает соответствующий бит в PORTx, независимо от установки бита DDRx.
Новые AVR ATtiny, такие как ATtiny817 и его братья и сестры, регистры управления портом имеют несколько иное определение. xmegaAVR имеет дополнительные регистры для конфигураций push / pull, totem-pole и pullp.
EEPROM
Почти все микроконтроллеры AVR имеют внутреннюю EEPROM для полупостоянного хранения данных. Как и флеш-память, EEPROM может сохранять свое содержимое при отключении питания.
В большинстве вариантов архитектуры AVR эта внутренняя память EEPROM не отображается в адресуемое пространство памяти MCU. Доступ к нему возможен только так же, как и к внешнему периферийному устройству, с использованием специальных регистров указателя и инструкций чтения / записи, что делает доступ к EEPROM намного медленнее, чем к другому внутреннему ОЗУ.
Однако некоторые устройства семейства SecureAVR (AT90SC) используют специальное отображение EEPROM для данных или памяти программ, в зависимости от конфигурации. Семейство XMEGA также позволяет отображать EEPROM в адресное пространство данных.
Поскольку количество операций записи в EEPROM ограничено — Atmel указывает 100 000 циклов записи в своих таблицах данных — хорошо спроектированная процедура записи EEPROM должна сравнивать содержимое адреса EEPROM с желаемым содержимым и выполнять фактическую запись только в том случае, если необходимо изменить содержимое.
Обратите внимание, что стирание и запись во многих случаях могут выполняться отдельно, побайтно, что также может помочь продлить срок службы, когда биты нужно установить только на все единицы (стирание) или выборочно сбросить на 0 ( записывать).
Выполнение программы
AVR Atmel имеют двухступенчатую одноуровневую конструкцию конвейера. Это означает, что следующая машинная команда выбирается по мере выполнения текущей. Большинство инструкций занимают всего один или два тактовых цикла, что делает AVR относительно быстрыми среди восьмибитных микроконтроллеров.
Процессоры AVR были разработаны с учетом эффективного выполнения скомпилированного C кода и имеют несколько встроенных указателей для задачи.
Набор команд
Набор команд AVR более ортогонален, чем у большинства восьмиразрядных микроконтроллеров, в частности, клонов 8051 и микроконтроллеры PIC, с которыми сегодня конкурирует AVR. Однако это не совсем обычное явление:
- регистры указателя X, Y и Z имеют возможности адресации, которые отличаются друг от друга.
- Регистры местоположения с R0 по R15 имеют более ограниченные возможности адресации, чем регистры местоположения с R16 по R31.
- Порты ввода / вывода с 0 по 31 могут иметь битовую адресацию, в отличие от портов ввода / вывода с 32 по 63.
- CLR (очистить все биты до нуля) влияет на флаги, в то время как SER (установить все биты в единицу) — нет, хотя это дополнительные инструкции. (CLR является псевдооперацией для EOR R, R; в то время как SER — это сокращение от LDI R, $ FF. Арифметические операции, такие как флаги изменения EOR, в то время как перемещение / загрузка / сохранение / переходы, такие как LDI, нет.)
- Доступ только для чтения к данным, хранящимся в программной памяти (флэш-памяти), требует специальных инструкций LPM; в противном случае шина флэш-памяти зарезервирована для памяти команд.
Кроме того, на генерацию кода влияют некоторые специфичные для микросхемы различия. Указатели кода (включая адреса возврата в стеке) имеют длину два байта на микросхемах с объемом флеш-памяти до 128 КБ и три байта на более крупных микросхемах; не все чипы имеют аппаратные умножители; чипы с более чем 8 КБ флэш-памяти имеют инструкции перехода и вызова с более длинными диапазонами; и так далее.
В основном обычный набор инструкций делает программирование с использованием компиляторов C (или даже Ada) довольно простым. GCC уже довольно давно включает поддержку AVR, и эта поддержка широко используется. Фактически, Atmel запросил информацию у крупных разработчиков компиляторов для небольших микроконтроллеров, чтобы определить функции набора команд, которые были наиболее полезны в компиляторе для языков высокого уровня.
Скорость MCU
AVR line обычно поддерживает тактовые частоты от 0 до 20 МГц, а некоторые устройства достигают 32 МГц. Работа с низким энергопотреблением обычно требует пониженной тактовой частоты. Все последние (Tiny, Mega и Xmega, но не 90S) AVR оснащены встроенным генератором, что устраняет необходимость во внешних тактовых генераторах или схемах резонатора. Некоторые AVR также имеют предварительный делитель системных часов, который может делить системные часы на величину до 1024. Этот предварительный делитель частоты может быть переконфигурирован программно во время выполнения, что позволяет оптимизировать тактовую частоту.
Поскольку все операции (исключая умножение и 16-битное сложение / вычитание) в регистрах R0 – R31 являются однократными, AVR может достигать 1 MIPS на МГц, т. Е. 8 Процессор с МГц может достигать 8 MIPS. Загрузка и сохранение в / из памяти занимают два цикла, ветвление занимает два цикла. Ответвления в последних «3-байтовых компонентах ПК», таких как ATmega2560, на один цикл медленнее, чем на предыдущих устройствах.
Разработка
AVR пользуются большим спросом благодаря доступным бесплатным и недорогим инструментам разработки, включая платы для разработки по разумной цене и бесплатное программное обеспечение для разработки. AVR продаются под разными названиями, которые используют одно и то же базовое ядро, но с разными комбинациями периферийных устройств и памяти. Совместимость микросхем в каждом семействе довольно хорошая, хотя функции контроллера ввода-вывода могут отличаться.
См. внешние ссылки для сайтов, относящихся к разработке AVR.
Характеристики
AVR предлагают широкий спектр функций:
- Многофункциональные двунаправленные порты ввода / вывода общего назначения с настраиваемыми встроенными подтягивающими резисторами
- Несколько внутренних генераторов, включая RC-генератор без внешних компонентов
- Внутренняя самопрограммируемая инструкция флэш-память до 256 КБ (384 КБ на XMega)
- Программируется внутри системы с использованием собственных последовательных / параллельных низковольтных интерфейсов или JTAG
- Дополнительная секция загрузочного кода с независимыми битами блокировки для защиты
- Поддержка отладки на кристалле (OCD) через JTAG или debugWIRE на большинстве устройств
- JTAG-сигналы (TMS, TDI, TDO и TCK) мультиплексируются на GPIO. Эти контакты могут быть настроены для работы как JTAG или GPIO в зависимости от настройки бита предохранителя, который можно запрограммировать через ISP или HVSP. По умолчанию AVR с JTAG поставляются с включенным интерфейсом JTAG.
- debugWIRE использует вывод / RESET в качестве двунаправленного канала связи для доступа к схемам отладки на кристалле. Он присутствует на устройствах с меньшим количеством выводов, так как для него требуется только один вывод.
- Внутренние данные EEPROM до 4 КБ
- Внутренние SRAM до 16 КБ (32 КБ на XMega)
- Внешнее пространство для данных с прямым порядком байтов 64 КБ на некоторых моделях, включая Mega8515 и Mega162.
- Внешнее пространство данных накладывается на внутреннее пространство данных, так что полное адресное пространство 64 КБ не отображается на внешней шине и обращается, например, к адрес 0100 16 будет обращаться к внутренней ОЗУ, а не к внешней шине.
- В некоторых элементах серии XMega внешнее пространство данных было расширено для поддержки как SRAM, так и SDRAM. Кроме того, режимы адресации данных были расширены, чтобы обеспечить прямую адресацию до 16 МБ памяти данных.
- 8-битные и 16-битные таймеры
- PWM выход (некоторые устройства имеют расширенный PWM периферийное устройство, которое включает в себя генератор мертвого времени)
- Входной захват, который записывает метку времени, инициированную фронтом сигнала
- Аналоговый компаратор
- 10- или 12-битные аналого-цифровые преобразователи, с мультиплексированием до 16 каналов
- 12-битные ЦАП
- Разнообразные последовательные интерфейсы, включая
- I²C совместимый двухпроводной интерфейс ( TWI)
- Синхронные / асинхронные последовательные периферийные устройства (UART / USART) (используются с RS-232, RS-485 и другими)
- Шина последовательного периферийного интерфейса (SPI)
- Универсальный последовательный интерфейс (USI): многоцелевой аппаратный коммуникационный модуль, который можно использовать для реализации интерфейса SPI, IC или UART.
- Обнаружение пониженного энергопотребления
- Сторожевой таймер (WDT)
- Несколько энергосберегающих спящих режимов
- Освещение и управление двигателем (PWM -specific) модели контроллеров
- CAN поддержка контроллера
- USB поддержка контроллера
- Правильное полноскоростное (12 Мбит / с) оборудование и контроллер концентратора с встроенный AVR.
- Также бесплатно доступны низкоскоростные (1,5 Мбит / с) (HID ) битбэнгинг программные эмуляции
- Ethernet поддержка контроллера
- Поддержка контроллера LCD
- Низковольтные устройства с напряжением до 1,8 В (до 0,7 В для компонентов со встроенным повышающим преобразователем постоянного тока в постоянный)
- устройства picoPower
- DMA контроллеры и периферийная связь «системы событий».
- Поддержка быстрой криптографии для AES и DES
Программные интерфейсы
Есть много средств для загрузки программный код в микросхему AVR. Способы программирования микросхем AVR варьируются от семейства к семейству AVR. В большинстве описанных ниже методов для входа в режим программирования используется строка RESET. Чтобы микросхема случайно не перешла в такой режим, рекомендуется подключить подтягивающий резистор между выводом RESET и положительным источником питания.
ISP
6- и 10-контактные схемы заголовков ISP
Метод программирования внутрисистемное программирование (ISP) функционально выполняется через SPI, плюс некоторое изменение строки сброса. Пока контакты SPI AVR не подключены к чему-либо, нарушающему работу, чип AVR может оставаться припаянным к печатной плате во время перепрограммирования. Все, что потребуется, это 6-контактный разъем и адаптер для программирования. Это наиболее распространенный способ разработки с помощью AVR.
Устройство Atmel-ICE или AVRISP mkII (устаревшее устройство) подключается к USB-порту компьютера и выполняет внутрисистемное программирование с помощью программного обеспечения Atmel.
AVRDUDE (AVR Downloader / UploaDEr) работает в Linux, FreeBSD, Windows и Mac OS X, и поддерживает различное оборудование для внутрисистемного программирования, включая Atmel AVRISP mkII, Atmel JTAG ICE, старые программаторы на базе последовательного порта Atmel, а также различные сторонние программаторы и программаторы «сделай сам».
PDI
Интерфейс программирования и отладки (PDI) — это проприетарный интерфейс Atmel для внешнего программирования и отладки на кристалле устройств XMEGA. PDI поддерживает высокоскоростное программирование всех пространств энергонезависимой памяти (NVM); вспышка, EEPROM, предохранители, биты блокировки и строка подписи пользователя. Это делается путем доступа к контроллеру XMEGA NVM через интерфейс PDI и выполнения команд контроллера NVM. PDI — это 2-контактный интерфейс, использующий контакт сброса для входа часов (PDI_CLK) и специальный контакт данных (PDI_DATA) для ввода и вывода.
UPDI
Унифицированный интерфейс программы и отладки (UPDI) — это однопроводный интерфейс для внешнего программирования и отладки на кристалле новых устройств ATtiny и ATmega.
Высоковольтный последовательный порт
Высоковольтное последовательное программирование (HVSP) в основном является резервным режимом для небольших AVR. Пакет AVR с 8 выводами не оставляет много уникальных комбинаций сигналов для перевода AVR в режим программирования. Однако сигнал 12 вольт — это то, что AVR должен видеть только во время программирования и никогда во время нормальной работы. Режим высокого напряжения также может использоваться в некоторых устройствах, в которых контакт сброса отключен предохранителями.
Параллельное высоковольтное соединение
Параллельное программирование высокого напряжения (HVPP) считается «последним средством» и может быть единственным способом исправить неверные настройки предохранителей на микросхеме AVR.
Загрузчик
Большинство моделей AVR могут зарезервировать область загрузчика, от 256 байтов до 4 КБ, где может находиться код перепрограммирования. При сбросе загрузчик запускается первым и выполняет определенное пользователем определение, следует ли перепрограммировать или перейти к основному приложению. Код может перепрограммироваться через любой доступный интерфейс или считывать зашифрованный двоичный файл через адаптер Ethernet, например PXE. У Atmel есть указания по применению и код, относящийся ко многим интерфейсам шины.
ROM
AVR серии AT90SC доступны с заводской маской-ROM, а не с флэш-памятью для памяти программ. Из-за большой первоначальной стоимости и минимального количества заказа маска-ПЗУ является рентабельной только для крупных серий.
aWire
aWire — это новый однопроводной интерфейс отладки, доступный на новых устройствах UC3L AVR32.
Отладочные интерфейсы
AVR предлагает несколько вариантов отладки, в основном включающих отладку на кристалле, когда микросхема находится в целевой системе.
debugWIRE
debugWIRE — это решение Atmel для обеспечения возможностей отладки на кристалле с помощью одного вывода микроконтроллера. Это особенно полезно для деталей с меньшим количеством выводов, которые не могут обеспечить четыре «запасных» вывода, необходимых для JTAG. JTAGICE mkII, mkIII и AVR Dragon поддерживают debugWIRE. debugWIRE был разработан после первоначального выпуска JTAGICE, и теперь его поддерживают клоны.
JTAG
Функция Joint Test Action Group (JTAG ) обеспечивает доступ к функциям отладки на кристалле, пока микросхема работает в целевой системе. JTAG позволяет получать доступ к внутренней памяти и регистрам, устанавливать точки останова в коде и выполнять пошаговое выполнение для наблюдения за поведением системы.
Atmel предоставляет серию адаптеров JTAG для AVR:
- Atmel-ICE — новейший адаптер. Он поддерживает интерфейсы JTAG, debugWire, aWire, SPI, TPI и PDI.
- JTAGICE 3 — это отладчик среднего уровня в семействе JTAGICE (JTAGICE mkIII). Он поддерживает интерфейсы JTAG, aWire, SPI и PDI.
- JTAGICE mkII заменяет JTAGICE и имеет аналогичную цену. JTAGICE mkII подключается к ПК через USB и поддерживает как JTAG, так и более новый интерфейс debugWIRE. Многочисленные сторонние клоны устройства Atmel JTAGICE mkII начали поставляться после того, как Atmel выпустила протокол связи.
- AVR Dragon представляет собой недорогую (примерно 50 долларов США) замену JTAGICE mkII для некоторых целевых частей. AVR Dragon обеспечивает внутрисистемное последовательное программирование, высоковольтное последовательное программирование и параллельное программирование, а также эмуляцию JTAG или debugWIRE для деталей с 32 КБ программной памяти или меньше. ATMEL изменил функцию отладки AVR Dragon с последней прошивкой AVR Studio 4 — AVR Studio 5, и теперь он поддерживает устройства с программной памятью более 32 КБ.
- Адаптер JTAGICE взаимодействует с ПК через стандартный последовательный порт.. Хотя адаптер JTAGICE был объявлен компанией Atmel «с истекшим сроком службы «, он по-прежнему поддерживается в AVR Studio и других инструментах.
JTAG также можно использовать для выполнения сканирования границы тест, который проверяет электрические соединения между AVR и другими микросхемами с функцией граничного сканирования в системе. Граничное сканирование хорошо подходит для производственной линии, в то время как любитель, вероятно, лучше проведет тестирование с помощью мультиметра или осциллографа.
Инструменты разработки и оценочные комплекты
Плата для разработки Atmel STK500
Официальные инструменты разработки и оценочные комплекты Atmel AVR содержат ряд стартовых комплектов и инструментов отладки с поддержкой большинства устройств AVR:
Стартовый комплект STK600
Стартовый комплект STK600 и система разработки являются обновлением STK500. STK600 использует базовую плату, плату маршрутизации сигналов и целевую плату.
Базовая плата аналогична STK500 в том, что она обеспечивает источник питания, часы, внутрисистемное программирование, порт RS-232 и порт CAN (сеть контроллеров, автомобильный стандарт) через DE9 разъемы и контакты для всех сигналов GPIO от целевого устройства.
Целевые платы имеют разъемы ZIF для DIP, SOIC, QFN или QFP Пакеты в зависимости от платы.
Плата маршрутизации сигналов находится между базовой платой и целевой платой и направляет сигналы на соответствующий контакт на плате устройства. Существует множество различных плат маршрутизации сигналов, которые можно использовать с одной целевой платой, в зависимости от того, какое устройство подключено к разъему ZIF.
STK600 позволяет внутрисистемное программирование с ПК через USB, оставляя порт RS-232 доступным для целевого микроконтроллера. Разъем с 4 контактами на STK600, помеченный как «запасной RS-232», может подключать любой порт USART уровня TTL на микросхеме к встроенной микросхеме MAX232 для преобразования сигналов в уровни RS-232. Сигналы RS-232 подключаются к контактам RX, TX, CTS и RTS на разъеме DB-9.
Стартовый комплект STK500
Стартовый комплект STK500 и система разработки включают ISP и программирование высокого напряжения (HVP) для всех устройств AVR, напрямую или через платы расширения. Плата оснащена разъемами DIP для всех AVR, доступных в корпусах DIP.
Модули расширения STK500: Для платы STK500 доступно несколько модулей расширения:
- STK501 — Добавляет поддержку микроконтроллеров в 64-контактных корпусах TQFP.
- STK502 — Добавляет поддержку ЖК-AVR в 64-контактные корпуса TQFP.
- STK503 — Добавляет поддержку микроконтроллеров в 100-контактных корпусах TQFP.
- STK504 — Добавляет поддержку ЖК-AVR в 100-контактных корпусах TQFP.
- STK505 — Добавляет поддержку 14- и 20-контактных AVR.
- STK520 — Добавляет поддержку 14-, 20- и 32-контактных микроконтроллеров из семейств AT90PWM и ATmega.
- STK524 — Добавляет поддержку для семейства 32-контактных CAN / LIN / Motor Control ATmega32M1 / C1.
- STK525 — Добавляет поддержку микроконтроллеров AT90USB в 64-контактных корпусах TQFP.
- STK526 — Добавляет поддержку AT90USB микроконтроллеры в 32-контактных корпусах TQFP.
Стартовый комплект STK200
Стартовый комплект STK200 и система разработки имеют разъем DIP, на котором можно разместить микросхему AVR в 40, 20 или 8-выводный корпус. На плате есть источник тактовой частоты 4 МГц, 8 светодиодов (LED), 8 кнопок ввода, порт RS-232, разъем для 32k SRAM. и множество общих операций ввода-вывода. Микросхема может быть запрограммирована с помощью ключа, подключенного к параллельному порту.
Чип | Размер флэш-памяти | EEPROM | SRAM | Частота [МГц] |
Корпус |
---|---|---|---|---|---|
AT90S1200 | 1k | 64 | 0 | 12 | PDIP-20 |
AT90S2313 | 2k | 128 | 128 | 10 | PDIP-20 |
AT90S / LS2323 | 2k | 128 | 128 | 10 | PDIP-8 |
AT90S / LS2343 | 2k | 128 | 128 | 10 | PDIP-8 |
AT90S4414 | 4k | 256 | 256 | 8 | PDIP-40 |
AT90S / LS4434 | 4k | 256 | 256 | 8 | PDIP-40 |
AT90S8515 | 8k | 512 | 512 | 8 | PDIP-40 |
AT90S / LS8535 | 8k | 512 | 512 | 8 | PDIP-40 |
AVRISP и AVRISP mkII
AVRISP mkII
AVRISP и AVRISP mkII недороги инструменты, позволяющие программировать все AVR через ICSP.
AVRISP подключается к ПК через последовательный порт и получает питание от целевой системы. AVRISP позволяет использовать любую из «стандартных» распиновок ICSP, 10-контактный или 6-контактный разъем.
AVRISP mkII подключается к ПК через USB и получает питание через USB. Светодиоды, видимые сквозь полупрозрачный корпус, показывают состояние целевой мощности.
Поскольку в AVRISP mkII отсутствуют драйверы / буферные ИС, у него могут возникнуть проблемы с программированием целевых плат с несколькими нагрузками на его линии SPI. В таких случаях требуется программист, способный обеспечить больший ток. В качестве альтернативы, AVRISP mkII все еще можно использовать, если резисторы ограничения нагрузки низкого номинала (~ 150 Ом) могут быть размещены на линиях SPI перед каждым периферийным устройством.
И AVRISP, и AVRISP mkII больше не выпускаются, а страницы продуктов удалены с веб-сайта Microchip. По состоянию на июль 2019 года AVRISP mkII все еще находится в наличии у ряда дистрибьюторов. Также доступен ряд сторонних клонов.
AVR Dragon
AVR Dragon с кабелем программирования ISP и подключенным, синий / зеленоватый ZIF Socket
Atmel Dragon — недорогой инструмент, который подключается к ПК через USB. Dragon может программировать все AVR через JTAG, HVP, PDI или ICSP. Dragon также позволяет отладку всех AVR через JTAG, PDI или debugWire; предыдущее ограничение для устройств с 32 КБ или менее программной памятью было снято в AVR Studio 4.18. У Dragon есть небольшая область прототипа, которая может вместить 8, 28 или 40-контактный AVR, включая подключения к питанию и программирующим контактам. Нет места для каких-либо дополнительных схем, хотя это может быть предоставлено сторонним продуктом под названием «Dragon Rider».
JTAGICE
JTAG In Circuit Инструмент отладки эмулятора (JTAGICE) поддерживает отладку на кристалле (OCD) AVR с интерфейсом JTAG. Исходный JTAGICE (иногда задним числом называемый JTAGICE mkI) использует интерфейс RS-232 для ПК и может программировать AVR только с интерфейсом JTAG. JTAGICE mkI больше не производится, но был заменен на JTAGICE mkII.
JTAGICE mkII
Инструмент отладки JTAGICE mkII поддерживает встроенную отладку (OCD) AVR с интерфейсами SPI, JTAG, PDI и debugWIRE. Интерфейс debugWire позволяет выполнять отладку, используя только один вывод (вывод сброса), что позволяет отлаживать приложения, работающие на микроконтроллерах с малым числом выводов.
JTAGICE mkII подключается через USB, но есть альтернативное подключение через последовательный порт, что требует использования отдельного источника питания. Помимо JTAG, mkII поддерживает программирование ISP (с использованием 6-контактных или 10-контактных адаптеров). И для USB, и для последовательного соединения используется вариант протокола STK500.
JTAGICE3
JTAGICE3 обновляет mkII с более продвинутыми возможностями отладки и более быстрым программированием. Он подключается через USB и поддерживает интерфейсы JTAG, aWire, SPI и PDI. В комплект входит несколько переходников для использования с большинством выводов интерфейса.
AVR ONE!
AVR ONE! — это профессиональный инструмент разработки для всех 8-битных и 32-битных устройств AVR Atmel с возможностью встроенной отладки. Он поддерживает режимы программирования SPI, JTAG, PDI и aWire и отладку с использованием интерфейсов debugWIRE, JTAG, PDI и aWire.
Демонстрационная плата Butterfly
Atmel ATmega169 в 64-контактном корпусе MLF упаковка на задней панели платы Atmel AVR Butterfly
Очень популярная демонстрационная плата AVR Butterfly представляет собой автономный компьютер с батарейным питанием, на котором установлен микроконтроллер Atmel AVR ATmega169V. Он был построен, чтобы продемонстрировать семейство AVR, особенно новый встроенный ЖК-интерфейс. Плата включает в себя ЖК-экран, джойстик, динамик, последовательный порт, часы реального времени (RTC), микросхему флэш-памяти, а также датчики температуры и напряжения. Более ранние версии AVR Butterfly также содержали фоторезистор CdS ; его нет на досках Butterfly, произведенных после июня 2006 г., чтобы обеспечить соответствие RoHS. На маленькой доске сзади есть булавка для рубашки, поэтому ее можно носить как именной значок.
AVR Butterfly поставляется с предустановленным программным обеспечением для демонстрации возможностей микроконтроллера. Заводская прошивка может прокручивать ваше имя, отображать показания датчиков и показывать время. AVR Butterfly также имеет пьезоэлектрический преобразователь, который можно использовать для воспроизведения звуков и музыки.
AVR Butterfly демонстрирует работу с ЖК-дисплеем на 14-сегментном шести буквенно-цифровом дисплее. Однако ЖК-интерфейс использует многие выводы ввода / вывода.
ЦП ATmega169 от Butterfly способен развивать скорость до 8 МГц, но на заводе-изготовителе программно установлено значение 2 МГц, чтобы продлить срок службы батареи кнопки. Предустановленная программа загрузчика позволяет перепрограммировать плату через стандартный последовательный разъем RS-232 с новыми программами, которые пользователи могут писать с помощью бесплатных инструментов Atmel IDE.
AT90USBKey
Эта небольшая плата, размером примерно в половину визитной карточки, стоит немного больше, чем AVR Butterfly. Он включает в себя AT90USB1287 с поддержкой USB On-The-Go (OTG), 16 МБ DataFlash, светодиоды, небольшой джойстик и датчик температуры. Плата включает в себя программное обеспечение, которое позволяет ей работать как USB-накопитель (его документация находится на DataFlash), USB-джойстик и многое другое. Для поддержки возможности USB-хоста он должен работать от батареи, но при работе в качестве периферийного USB-устройства ему требуется только питание, подаваемое через USB.
Только порт JTAG использует стандартную распиновку 2,54 мм. Для всех остальных портов ввода-вывода AVR требуются более компактные разъемы 1,27 мм.
AVR Dragon может как программировать, так и отлаживать, поскольку ограничение в 32 КБ было снято в AVR Studio 4.18, а JTAGICE mkII способен как программировать, так и отлаживать процессор. Процессор также можно запрограммировать через USB с хоста Windows или Linux, используя протокол USB «Обновление прошивки устройства». Atmel поставляет проприетарные (исходный код включен, но распространение ограничено) примеры программ и стек протоколов USB вместе с устройством.
— это стороннее бесплатное программное обеспечение (лицензия MIT ) стек протоколов USB для USBKey и других 8-битных USB AVR.
Беспроводной комплект Raven
Комплект RAVEN поддерживает беспроводную разработку с использованием чипсетов Atmel IEEE 802.15.4 для ZigBee и других беспроводных стеков. Он напоминает пару более мощных беспроводных карт Butterfly плюс беспроводной USBKey; и стоит примерно столько же (менее 100 долларов США). Все эти платы поддерживают разработку на основе JTAG.
В комплект входят две платы AVR Raven, каждая с трансивером 2,4 ГГц, поддерживающим IEEE 802.15.4 (и свободно лицензируемый стек ZigBee). Радиостанции работают с процессорами ATmega1284p, которые поддерживаются настраиваемым сегментированным ЖК-дисплеем, управляемым процессором ATmega3290p. Периферийные устройства Raven напоминают Butterfly: пьезодинамик, DataFlash (больше), внешняя EEPROM, датчики, кристалл 32 кГц для RTC и так далее. Они предназначены для использования при разработке узлов удаленных датчиков, для управления реле или всего, что необходимо.
USB-накопитель использует AT90USB1287 для подключения к USB-хосту и к беспроводным каналам 2,4 ГГц. Они предназначены для мониторинга и управления удаленными узлами, полагаясь на питание хоста, а не на локальные батареи.
Сторонние программисты
Для AVR доступно большое количество сторонних инструментов программирования и отладки. Эти устройства используют различные интерфейсы, включая RS-232, параллельный порт ПК и USB.
Использует
Atmel AVR ATmega328 28-контактный DIP на плате Arduino Duemilanove Atmel AVR ATmega8 28-контактный DIP на специальной плате для разработки
AVR используются в различных автомобильных приложениях, таких как системы безопасности, силовые агрегаты и развлекательные системы. Компания Atmel недавно выпустила новую публикацию «Atmel Automotive Compilation», чтобы помочь разработчикам с автомобильными приложениями. Некоторые из них в настоящее время используются в BMW, Daimler-Chrysler и TRW.
Платформа физических вычислений Arduino основана на микроконтроллере ATmega328 (ATmega168 или ATmega8 в версиях плат старше, чем Diecimila). ATmega1280 и ATmega2560 с расширенными возможностями распиновки и памяти также использовались для разработки платформы Arduino Mega. Платы Arduino могут использоваться с его языком и IDE или с более традиционными средами программирования (C, ассемблер и т. Д.) Как просто стандартизованные и широко доступные платформы AVR.
AVR на базе USB использовались в ручных контроллерах Microsoft Xbox. Связь между контроллерами и Xbox осуществляется через USB.
Многие компании производят платы микроконтроллеров на основе AVR, предназначенные для использования любителями, строителями роботов, экспериментаторами и разработчиками небольших систем, включая Cubloc, gnusb, BasicX, Oak Micros, микроконтроллеры ZX и myAVR. Также существует большое сообщество Arduino-совместимых плат, поддерживающих подобных пользователей.
Schneider Electric использовалась для производства M3000 Motor and Motion Control Chip, включающая ядро Atmel AVR и усовершенствованный контроллер движения для использования в различных приложениях управления движением, но это было прекращено.
FPGA clones
С ростом популярности FPGA в сообществе открытого исходного кода люди начали разрабатывать процессоры с открытым исходным кодом, совместимые с набором инструкций AVR. На веб-сайте OpenCores перечислены следующие основные проекты клонов AVR:
- pAVR, написанный на VHDL, нацелен на создание самого быстрого и максимально функционального процессора AVR путем реализации методов, которых нет в оригинальный процессор AVR, такой как более глубокая конвейерная обработка.
- avr_core, записанный на VHDL, является клоном, нацеленным на максимальное приближение к ATmega103.
- Navré, написано в Verilog, реализует все инструкции Classic Core и нацелен на высокую производительность и низкое использование ресурсов. Он не поддерживает прерывания.
- В проекте opencores CPU lecture, написанном на VHDL доктором Юргеном Зауэрманном, подробно объясняется, как спроектировать полную систему на основе AVR на основе Чип (SoC).
Другие поставщики
В дополнение к чипам, производимым Atmel, клоны доступны от LogicGreen Technologies. Эти части не являются точными клонами — у них есть несколько функций, которых нет в чипах, которые они «клоны», и более высокие максимальные тактовые частоты, но для программирования используется SWD вместо ISP, поэтому необходимо использовать другие инструменты программирования.
Микроконтроллеры на архитектуре ATmega производятся НИИЭТ в Воронеже, Россия, как часть интегральных схем серии 1887 года. Сюда входит ATmega128 под обозначением 1887VE7T (Русский : 1887ВЕ7Т).
Ссылки
Дополнительная литература
- Программирование AVR: обучение письму Программное обеспечение для оборудования; Эллиот Уильямс; Maker Media; 474 страницы; 2014; ISBN 978-1449355784
- Arduino: краткое руководство; Майк Шмидт; Прагматическая книжная полка; 276 страниц; 2011; ISBN978-1-934356-66-1 .
- Требуется некоторая сборка: программирование на языке ассемблера с помощью микроконтроллера AVR; Тимоти С. Маргуш; CRC Press; 643 страницы; 2011; ISBN 978-1439820643
- Микроконтроллер AVR и встроенные системы: использование сборки и C; Мухаммад Али Мазиди, Сармад Наими, Сепехр Наими; Пирсон; 792 страницы; 2010; ISBN978-0138003319 .
Внешние ссылки
Викискладе есть носители, связанные с Atmel AVR. |
- Портал электроники
Официальный сайт
- Atmel AVR
Официальное сообщество
- Сообщество AVR Freaks
- Форум Microchip
Другие
- микроконтроллеры AVR на Curlie, многочисленные ссылки AVR
- AVR-Libc
- Программатор последовательного порта AVR Atmel
- Зачем вам нужен источник синхронизации для AVR?
- Основы AVR — Руководство по AVR для начинающих
- Простейший программист AVR с использованием порта LPT
- Учебное пособие по макетной плате ATmega8
- Схема расположения выводов DIP-пакета AVR: ATtiny44 / 45/84/85, ATmega328P, ATmega644P, ATmega1284P
- Схема расположения выводов AVR TQFP: ATmega328, ATmega2560, ATmega32U4