Организация ядра AVR-контроллеров
Лекция 10. МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ
НА ОСНОВЕ МИКРОКОНТРОЛЛЕРОВ ATMEL
10.1. Общие сведения
10.2. Организация ядра AVR-контроллеров
10.3. Программная модель AVR-микроконтроллеров
10.4.Периферийные устройства AVR
10.5. Исполнительные модули AVR
10.6. Порты ввода/вывода
Общие сведения
Фирма Atmel Corp. (США), основанная в 1984 г. и имеющая достаточно широкий спектр деятельности в областях науки и техники, одним из основных направлений считает развитие вычислительных систем управления и контроля.
В настоящий момент Atmel является одной из ведущих корпораций в области микроэлектроники таких направлений, как микроконтроллеры, производство энергонезависимых схем памяти, микросхем программируемой логики.
Таблица 3.1
Микроконтроллеры Atmel AVR серия Classic
AT90S1200 | KB | 64 B | + | 1/- | + | + | + | 2,7-6,0 | 0–12 | |||||||||
AT90S2313 | KB | 128 B | 128 B | + | 1/1 | + | + | + | 2,7-6,0 | 0–10 | ||||||||
AT90LS2323 | KB | 128 B | 128 B | + | 1/- | + | 2,7-6,0 | 0–4 | ||||||||||
AT90S2323 | KB | 128 B | 128 B | + | 1/- | + | 4,0-6,0 | 0–10 | ||||||||||
AT90LS2343 | KB | 128 B | 128 B | + | 1/- | + | + | 2,7-6,0 | 0–4 | |||||||||
AT90S2343 | KB | 128 B | 128 B | + | 1/- | + | + | 4,0-6,0 | 0–10 | |||||||||
AT90LS4433 | KB | 256 B | 128 B | + | 1/1 | + | + | + | + | + | 2,7-6,0 | 0–4 | ||||||
AT90S4433 | KB | 256 B | 128 B | + | 1/1 | + | + | + | + | + | 4,0-6,0 | 0–8 | ||||||
AT90S8515 | KB | 512 B | 512 B | 64К В | + | 1/1 | + | + | + | + | 2,7-6,0 | 0–8 | ||||||
AT90C8534 | KB | 512 B | 256 B | 1/1 | 3,3-6,0 | 0–1,5 | ||||||||||||
AT90LS8535 | KB | 512 B | 512 B | + | 2/1 | + | + | + | + | + | 2,7-6,0 | 0–4 | ||||||
AT90S8535 | KB | 512 B | 512 B | + | 2/1 | + | + | + | + | + | 4,0-6,0 | 0–8 |
Таблица 3.2
Микроконтроллеры Atmel AVR серия ATMega
ATmega8515L | 8 KB | 512 B | 512 B | до 64К | + | + | 1/1 | + | + | + | + | + | + | 2,7–5,5 | 0–8 | |||||||
ATmega8515 | 8 KB | 512 B | 512 B | до 64К | + | + | 1/1 | + | + | + | + | + | + | 4,5–5,5 | 0–16 | |||||||
ATmega8535L | 8 KB | 512 B | 512 B | + | + | 2/1 | + | + | + | + | + | + | + | 2,7–5,5 | 0–8 | |||||||
ATmega8535 | 8 KB | 512 B | 512 B | + | + | 2/1 | + | + | + | + | + | + | + | 4,5–5,5 | 0–8 | |||||||
ATmega8L | 8 KB | 512 B | 1024 B | + | + | 2/1 | + | 6/8 | + | + | + | + | + | + | 2,7–5,5 | 0–8 | ||||||
ATmega8 | 8 KB | 512 B | 1024 B | + | + | 2/1 | + | 6/8 | + | + | + | + | + | + | 4,0–5,5 | 0–16 | ||||||
ATmega16L | 16 KB | 512 B | 1024 B | + | + | + | 2/1 | + | + | + | + | + | + | + | 2,7–5,5 | 0–8 | ||||||
ATmega16 | 16 KB | 512 B | 1024 B | + | + | + | 2/1 | + | + | + | + | + | + | + | 4,0–5,5 | 0–16 | ||||||
ATmega161L | 16 KB | 512 B | 1024 B | + | + | 2/1 | + | + | + | + | + | 2,7–5,5 | 0–4 | |||||||||
ATmega161 | 16 KB | 512 B | 1024 B | + | + | 2/1 | + | + | + | + | + | 4,0–5,5 | 0–8 | |||||||||
ATmega162V | 16 KB | 512 B | 1024 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | 1,8–3,6 | 0–1 | ||||||
ATmega162U | 16 KB | 512 B | 1024 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | 2,4–4,0 | 0–8 | ||||||
ATmega162L | 16 KB | 512 B | 1024 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | 2,7–5,5 | 0–8 | ||||||
ATmega162 | 16 KB | 512 B | 1024 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | 4,0–5,5 | 0–16 |
Окончание табл. 3.2
ATmega163L | 16 KB | 512 B | 1024 B | + | + | 2/1 | + | + | + | + | + | + | + | 2,7–5,5 | 0–4 | |||||||
ATmega163 | 16 KB | 512 B | 1024 B | + | + | 2/1 | + | + | + | + | + | + | + | 4,0–5,5 | 0–8 | |||||||
ATmega169L | 16 KB | 512 B | 1袣B | + | + | + | 2/1 | + | + | + | + | + | + | 1,8–3,6 | 0–4 | |||||||
ATmega169V | 16 KB | 512 B | 1袣B | + | + | + | 2/1 | + | + | + | + | + | + | 2,7–3,6 | 0–1 | |||||||
ATmega323L | 32 KB | 1024 B | 2048 B | + | + | + | 2/1 | + | + | + | + | + | + | + | 2,7–5,5 | 0–4 | ||||||
ATmega323L | 32 KB | 1024 B | 2048 B | + | + | + | 2/1 | + | + | + | + | + | + | + | 4,0–5,5 | 0–8 | ||||||
ATmega32L | 32 KB | 1024 B | 2048 B | + | + | + | 2/1 | + | + | + | + | + | + | + | 2,7–5,5 | 0–8 | ||||||
ATmega32 | 32 KB | 1024 B | 2048 B | + | + | + | 2/1 | + | + | + | + | + | + | + | 4,0–5,5 | 0–16 | ||||||
ATmega64L | 64 KB | 2048 B | 4096 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | + | 2,7–5,5 | 0–8 | |||||
ATmega64 | 64 KB | 2048 B | 4096 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | + | 4,0–5,5 | 0–16 | |||||
ATmega103L | 128 KB | 4096 B | 4000 B | до 64 К | + | 2/1 | + | + | + | + | 2,7–3,6 | 0–4 | ||||||||||
ATmega103 | 128 KB | 4096 B | 4000 B | до 64 К | + | 2/1 | + | + | + | + | 4,0–5,5 | 0–6 | ||||||||||
ATmega128L | 128 KB | 4096 B | 4096 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | + | 2,7–5,5 | 0–8 | |||||
ATmega128 | 128 KB | 4096 B | 4096 B | до 64 К | + | + | + | 2/2 | + | + | + | + | + | + | + | 4,0–5,5 | 0–16 |
Таблица 3.3
Микроконтроллеры Atmel AVR серия Tiny
ATtiny11L | 1 KB | + | 1/- | + | + | + | 2.7–5.5 | 0–2 | ||||||||
ATtiny11 | 1 KB | + | 1/- | + | + | + | 4.0–5.5 | 0–6 | ||||||||
ATtiny12 V | 1 KB | 64 B | + | 1/- | + | + | + | 1.8–5.5 | 0–1 | |||||||
ATtiny12L | 1 KB | 64 B | + | 1/- | + | + | + | 2.7–5.5 | 0–4 | |||||||
ATtiny12 | 1 KB | 64 B | + | 1/- | + | + | + | 4.0–5.5 | 0–8 | |||||||
ATtiny13L | 1 KB | 64 B | 64 B | + | 1/- | + | + | + | 2.7–5.5 | 0–4 | ||||||
ATtiny15L | 1 KB | 64 B | + | 2/- | + | + | + | + | 2.7–5.5 | 1.6 | ||||||
ATtiny26L | 2 KB | 128 B | 128 B | + | 2/- | + | + | + | + | + | 2.7–5.5 | 0–8 | ||||
ATtiny26 | 2 KB | 128 B | 128 B | + | 2/- | + | + | + | + | + | 4.5–5.5 | 0–16 | ||||
ATtiny28 V | 2 KB | 1/- | + | + | + | 1.8–5.5 | 0–1 | |||||||||
ATtiny28L | 2 KB | 1/- | + | + | + | 2.7–5.5 | 0–4 |
Изначально появившиеся микроконтроллеры серии АТ89 были довольно удачной копией Intel MSC51, но впоследствии оказалось, что копия была более чем удачной в основном за счет пониженного энергопотребления и все больше разработчиков стали ориентироваться именно на Atmel.
В научно-исследовательском центре Atmel в Норвегии группой разработчиков (Alf Bogen и Vergard Wollan ) была предложена новая концепция 8-разрядных МК, базирующаяся на RISC-архитектуре, эти идеи легли в основу создания RISC AVR-микроконтроллеров. Результатом разработок стала серия AT90. Контроллеры разрабатывались не только для создания программ на языке низкого, но и высокого уровня. В качестве языка высокого уровня был взят Си, поскольку именно Си является самым широкораспространенным языком высокого уровня для разработки приложений для микроконтроллеров. Результатом проведения специальных научных исследований стало то, что получаемый объектный код для контроллера при трансляции с языка Си практически не обладает избыточностью. Флеш-память микроконтроллеров, созданных по КМОП-технологии, можно программировать посредством ISP, что допускает многократное перезаписывание памяти без каких-либо дополнительных устройств.
Микроконтроллеры AVR являются достаточно мощными, низкопотребляющими и гибкими устройствами, что в совокупности с низкой стоимостью определило их широкое распространение на мировом и российском рынках. В настоящее время AVR-контроллеры используются практически во всех областях производства: от Smart Card для персональных компьютеров до спутниковых навигационных систем.
Различают следующие группы AVR-контроллеров:
Mega AVR (префикс ATmegaXXX); Classic AVR (префикс AT90SXXX);
Tiny AVR (префикс ATtinyXXX); AVR для Smart Cards (префикс AT90SCC).
Mega AVR имеют наибольшие объемы памяти, наибольшее количество выводов и наиболее полный набор периферийных узлов.
Classic AVR – группа, которая содержит микроконтроллеры с различным сочетанием периферийных узлов, имеет разные объемы встроенной памяти и количество выводов.
Tiny AVR – дешевые кристаллы в 8-выводных корпусах, способные работать от источника пониженного напряжения и при этом обладающие такими функционально важными периферийными узлами, как, например, АЦП.
AVR для Smart Cards – группа специализированных кристаллов, предназначенных для работы в составе периферийных и сетевых адаптеров.
В табл. 3.1, табл. 3.2, табл. 3.3 приведены характеристики основных групп МК Atmel AVR.
Организация ядра AVR-контроллеров
Улучшенная RISC (enhanced RISC) архитектура AVR-микроконтроллеров (рис. 3.1) объединяет комплекс решений, направленных на повышение быстродействия микропроцессорного ядра AVR. Арифметикологическое устройство (ALU), в котором выполняются все вычислительные операции, имеет доступ к 32 оперативным регистрам, объединенным в регистровый файл. Выборка содержимого регистров, выполнение операции и запись результата обратно в регистровый файл выполняются за один машинный цикл.
Основной идеей всех RISC (Reduced Instruction Set Computer), как известно, является увеличение быстродействия за счет сокращения количества операций обмена с памятью программ. Для этого каждую команду стремятся уместить в одну ячейку памяти. При ограниченной разрядности ячейки памяти это неизбежно приводит к сокращению набора команд микропроцессора.
У AVR-микроконтроллеров в соответствии с этим принципом практически все команды (исключая те, у которых одним из операндов является 16-разрядный адрес) также упакованы в одну ячейку памяти программ. Но сделать это удалось не за счет сокращения количества команд процессора, а путем расширения ячейки памяти программ до 16 разрядов. Такое решение является причиной богатства системы команд AVR по сравнению с другими RISC-микроконтроллерами.
Организация памяти AVR выполнена по схеме гарвардского типа, в которой разделены не только адресные пространства памяти программ и памяти данных, но также и шины доступа к ним.
Вся программная память AVR-микроконтроллеров выполнена по технологии FLASH и размещена на кристалле. Она представляет собой последовательность 16-разрядных ячеек и имеет емкость от 512 слов до 64 Kслов в зависимости от типа кристалла.
Во FLASH-память кроме программы могут быть записаны постоянные данные, которые не изменяются во время функционирования микропроцессорной системы. Это различные константы, таблицы знакогенераторов, таблицы линеаризации датчиков и т. п. Достоинством технологии FLASH является высокая степень упаковки, а недостатком – то, что она не позволяет стирать отдельные ячейки. Поэтому всегда выполняется полная очистка всей памяти программ, а для AVR гарантируется, как минимум, 1000 циклов перезаписи FLASH-памяти.
Кроме того, для хранения данных AVR-микроконтроллеры могут иметь, в зависимости от типа кристалла, внутреннюю (от 0 до 4 Kбайт) и внешнюю (от 0 до 64 Кбайт) оперативную SRAM-память и энергонезависимую внутреннюю EEPROM-память (от 0 до 4 Kбайт).
Разделение шин доступа к FLASH-памяти и SRAM-памяти дает возможность иметь шины данных для памяти данных и памяти программ различной разрядности, а также использовать технологию конвейеризации. Конвейеризация заключается в том, что во время исполнения текущей команды программный код следующей уже выбирается из памяти и дешифрируется.
Для сравнения вспомним, что у микроконтроллеров семейства MCS-51 выборка кода команды и ее исполнение осуществляются последовательно, что занимает один машинный цикл, который длится 12 периодов кварцевого резонатора.
В случае использования конвейера приведенную длительность машинного цикла можно сократить. Например, у PIC-микроконтроллеров фирмы Microchip за счет использования конвейера удалось уменьшить длительность машинного цикла до четырех периодов кварцевого резонатора. Длительность же машинного цикла AVR составляет один период кварцевого резонатора. Таким образом, AVR способны обеспечивать заданную производительность при более низкой тактовой частоте. Именно эта особенность архитектуры и позволяет AVR-микроконтроллерам иметь наилучшее соотношение энергопотребление/производительность, так как потребление КМОП микросхем, как известно, определяется их рабочей частотой.
EEPROM-блок электрически стираемой памяти AVR предназначен для хранения энергонезависимых данных, которые могут изменяться непосредственно на объекте. Это калибровочные коэффициенты, различные установки, конфигурационные параметры системы. EEPROM-память имеет меньшую по сравнению с FLASH емкость (до 4 Кбайт), но при этом допускает возможность побайтной перезаписи ячеек, которая может происходить как под управлением внешнего процессора, так и под управлением собственно AVRмикроконтроллера во время его работы по программе.
Программирование энергонезависимых блоков памяти AVR может осуществляться как параллельно, так и последовательно через SPI-интерфейс (Serial Peripheral Interface).
Управление и обмен данными с EEPROM-памятью и со всеми периферийными узлами осуществляется при помощи регистров ввода/вывода, которые имеются в каждом периферийном узле.