Микроконтроллеры AVR фирмы “ATMEL”

В течение нескольких последних лет в журнале «Радио» постоянно печаталась серия статей А. Долгого (г. Москва), в которых достаточно подробно описывался процесс программирования микроконтроллеров. Большая часть информации в этих статьях относилась к программированию микроконтроллеров PIC16XXXX фирмы MICRICHIP.

Чтобы не повторяться с информационными материалами названного выше уважаемого автора, в этой книге основное внимание будет уделено мною описанию принципов работы с микроконтроллерами AVR фирмы «ATMEL».

Основанная в 1984 г. фирма “Atmel Corp.” (США) на данный момент является одним из признанных лидеров в области производства широкого спектра микроэлектронных компонентов: микросхем энергонезависимой памяти, микроконтроллеров общего назначения и микросхем программируемой логики.

Начиная с середины 90-х годов, фирма “Atmel” начала активно развивать новое направление в своей деятельности – производство высокопроизводительных 8-разрядных RISC-микроконтроллеров для встраиваемых приложений, объединенных общим названием AVR

Микроконтроллеры AVR приобрели большую популярность, привлекая разработчиков достаточно выгодным соотношением таких показателей, как цена, быстродействие и энергопотребление. Кроме того важными параметрами являются удобные режимы программирования, доступностью программно-аппаратных средств поддержки и широкая номенклатура выпускаемых кристаллов. Микроконтроллеры этой серии используются в автомобильной электронике, бытовой технике, сетевых картах и материнских платах компьютеров, в мобильных телефонах нового поколения и т.д.

В рамках единой базовой архитектуры AVR-микроконтроллеры подразделяются на три семейства:

q      Tiny AVR – дешевые и довольно простые по конструкции микроконтроллеры в 8-выводном исполнении;

q       Classic AVR – базовая линия микроконтроллеров;

q       Mega AVR – микроконтроллеры для сложных приложений, требующих большого объема памяти программ и данных.

В этой главе очень коротко будут рассмотрены некоторые основные моменты конструкции микроконтроллеров семейства Classic AVR, как наиболее подходящие для радиолюбительского применения.

При этом все микроконтроллеры семейства поддерживают несколько режимов пониженного энергопотребления, имеют блок прерываний, сторожевой таймер и допускают программирование непосредственно в готовом устройстве через последовательный интерфейс SPI.

Отличительные особенности:

q      производительность, приближающаяся к 1 MIPS/МГц;

q      усовершенствованная AVR RISC архитектура;

q      раздельные шины памяти команд и данных, 32 регистра общего назначения

q      Flash ПЗУ программ, с возможностью внутрисистемного перепрограммирования и загрузки через SPI последовательный канал, 1000 циклов стирание/запись;

q      EEPROM память данных, с возможностью внутрисистемной загрузки через SPI последовательный канал, 100000 циклов стирание/запись;

q      блокировка режима программирования;

q      встроенные аналоговый компаратор, сторожевой таймер, порты SPI и UART, таймеры/счетчики;

q      полностью статические приборы - работают при тактовой частоте от 0 Гц до 20 МГц;

q      диапазон напряжений питания от 1,8 В до 6,0 В;

q      режимы энергосбережения: пассивный (idle) и стоповый (power down).

Общие сведения

AVR Classic – самая обширная производственная линии среди других Flash-микроконтроллеров корпорации Atmel. Atmel представила первый 8-разрядный Flash-микроконтроллер в 1993 году и с тех пор непрерывно совершенствует технологию. Фирма постоянно работает над совершенствованием своей продукции в следующих направлениях:

q       в снижении удельного энергопотребления (мА/МГц);

q      расширения диапазона питающих напряжений (до 1.8 В), что существенно для продления ресурса батарейных систем;

q       увеличения быстродействия до 16 млн. операций в секунду;

q      встройки в изделия реально-временных эмуляторов и отладчиков;

q      реализации функции самопрограммирования;

q      совершенствования и расширения количества периферийных модулей;

q       встройки специализированных устройств (радиочастотный передатчик, USB-контроллер, драйвер ЖКИ, программируемая логика, контроллер DVD, устройства защиты данных) и др.

Успех AVR-микроконтроллеров объясняется возможностью простого выполнения проекта с достижением необходимого результата в кратчайшие сроки, чему способствует доступность большого числа инструментальных средств проектирования, поставляемых, как непосредственно корпорацией Atmel, так и сторонними производителями. Ведущие сторонние производители выпускают полный спектр компиляторов, программаторов, ассемблеров, отладчиков, разъемов и адаптеров. Отличительной чертой инструментальных средств от Atmel является их невысокая стоимость.

Таким образом, AVR-микроконтроллеры представляют более широкие возможности по оптимизации производительности/энергопотребления, что особенно важно при разработке приложений с батарейным питанием. Микроконтроллеры обеспечивает производительность до 16 млн. оп. в секунду и поддерживают Flash-память программ различной емкости: 1… 256 кбайт.

В таблицах 3.1, 3.2 и 3.3 приведены некоторые данные по основным семействам AVR микроконтроллеров.

Таблица 3.1. Микроконтроллеры с архитектурой TinyAVR

Тип

Напр.

питания

В

Тактовая

частота,

МГц

I/O

FLASH

EEP-

ROM

SRAM

(ОЗУ)

АЦП

Корпус

ATtiny11

2,7-5,5

6

6

--

--

--

PDIP8

SOIC8

ATtiny12

1,8-5,5

6

6

64

--

--

PDIP8

SOIC8

ATtiny13

1,8-5,5

20

6

64

64

4x10bit

PDIP8

SOIC8

ATtiny15

2,7-5,5

6

6

64

--

4x10bit

PDIP8 SOIC8

ATtiny2313

1,8-5,5

20

15

128

128

--

PDIP20 SOIC20 MLF32

ATtiny26

2,7-5,5

16

16

128

128

11x10bit

PDIP20

SOIC20 MLF32

ATtiny28

1,8-5,5

4

20

--

--

--

PDIP20

SOIC20

MLF32

 

Таблица 3.2. Микроконтроллеры с архитектурой Classic AVR

Тип

Напр.

питания

В

Тактовая

частота,

МГц

I/O

FLASH

EEP-

ROM

SRAM

(ОЗУ)

АЦП

Корпус

AT90S1200

2,7-6,0

4,0-6,0

4

12

15

64

--

--

DIP20 SO20

SSOP20

AT90S2313

 

2,7-6,0

4,0-6,0

4

10

15

128

128

--

DIP20 SO20

AT90LS2323

 

2,7-6,0

 

4

3

128

128

--

DIP8

SO8

AT90S2323

 

4,0-6,0

10

3

128

128

--

DIP8

SO8

AT90LS2343

 

2,7-6,0

 

4

5

128

128

--

DIP8

SO8

AT90S2343

 

4,0-6,0

10

5

128

128

--

DIP8

SO8

AT90LS4433

 

2,7-6,0

 

4

20

256

128

6x10bit

DIP28

TQFP3

AT90S4433

 

4,0-6,0

8

20

256

128

6x10bit

DIP28

TQFP3

AT90LS8515

 

2,7-6,0

 

4

32

512

512

--

DIP40

TQFP4

PLCC44

AT90S8515

 

4,0-6,0

8

32

512

512

--

DIP40

TQFP4

PLCC44

AT90LS8535

 

2,7-6,0

 

4

32

512

512

8x10bit

DIP40

TQFP4

PLCC44

AT90S8535

 

4,0-6,0

8

32

512

512

8x10bit

DIP40

TQFP4

\PLCC44

 

Таблица 3.3. Микроконтроллеры с архитектурой MegaAVR

Тип

Напр.

питния

В

Тактовая

частота,

МГц

I/O

FLASH

EEP-

ROM

SRAM

(ОЗУ)

АЦП

Корпус

ATmega48

1,8-5,5

20

23

4K

256

512

6x10bit

2x8bit

DIP28

TQFP3

MLF32

ATmega88

1,8-5,5

20

23

8K

512

1K

6x10bit

2x8bit

DIP28

TQFP3

MLF32

ATmega168

1,8-5,5

20

23

16K

512

1K

6x10bit

2x8bit

DIP28

TQFP3

MLF32

ATmega8

2,7-5,5

16

23

8K

512

1K

8x10bit

DIP28

TQFP3

MLF32

ATmega16

2,7-5,5

16

32

16K

512

1K

8x10bit

DIP40

TQFP4

MLF44

ATmega32

2,7-5,5

16

32

32K

1K

2K

8x10bit

DIP40

TQFP4

MLF44

ATmega64

2,7-5,5

16

53

64K

2K

4K

8x10bit

TQFP64

MLF64

ATmega128

2,7-5,5

16

53

128K

4K

4K

8x10bit

TQFP64

MLF64

AT90CAN128

2,7-5,5

16

53

128K

4K

4K

8x10bit

TQFP64

MLF64

ATmega103

4,0-5,5

8

48

128K

4K

4K

8x10bit

TQFP64

ATmega161

2,7-5,5

8

35

16K

512

1K

--

DIP40

TQFP44

MLF44

ATmega162

1,8-5,5

16

35

16K

512

1K

--

DIP40

TQFP44

MLF44

ATmega163L

2,7-5,5

8

32

16K

512

1K

8x10bit

DIP40

TQFP44

MLF44

ATmega169

1,8-5,5

4

53

4x25

LCD

16K

512

1K

8x10bit

TQFP64

ATmega8515

2,7-5,5

16

35

8K

512

512

--

PDIP40

PLCC4

TQFP44

ATmega8535

2,7-5,5

16

32

8K

512

512

8x10bit

PDIP40

PLCC4

TQFP44

ATmega325

1,8-5,5

16

53

32K

1K

2K

8x10bit

TQFP

MLF

ATmega3250

1,8-5,5

16

68

32K

1K

2K

8x10bit

TQFP

MLF

ATmega645

1,8-5,5

16

53

64K

2K

4K

8x10bit

TQFP

MLF

ATmega6450

1,8-5,5

16

68

64K

2K

4K

8x10bit

TQFP

MLF

 

Все приборы одного семейства AVR совместимы по исходным кодам и тактированию. Семейство обеспечено комплектом программ и системами отладки, включающими: макро-ассемблеры, отладчики/симуляторы программ, внутрисхемные эмуляторы, и отладочные устройства.

Микроконтроллеры семейства AVR поставляются в очищенном состоянии –  содержимое и Flash-памяти программ и ЭСППЗУ данных находится в состоянии FF и готово к программированию.

Характеристики ядра контроллера

Основными характеристиками центрального процессора микроконтроллеров рассматриваемого семейства Classic являются:

q      полностью статическая архитектура; минимальная тактовая частота равна нулю;

q      АЛУ подключено непосредственно к регистрам общего назначения;

q      большинство команд выполняется за один машинный цикл;

q      многоуровневая система прерываний; поддержка очереди прерываний;

q      от 3 до 16 источников прерываний (из них до 2 внешних);

q      наличие программного стека.

 

Характеристики подсистемы ввода/вывода

Основными характеристиками подсистемы ввода/вывода являются:

q      программное конфигурирование и выбор портов ввода/вывода;

q      каждый вывод может быть запрограммирован как входной или как выходной независимо от других;

q      входные буферы с триггером Шмитта на всех выводах;

q      возможность подключения ко всем входам внутренних подтягивающих резисторов (сопротивление резисторов составляет 35…120 кОм);

q      нагрузочная способность всех выводов составляет до 20 мА, что позволяет непосредственно управлять светодиодными индикаторами.

 

Периферийные устройства

Микроконтроллеры семейства Classic обладают достаточно развитой периферией. Набор периферийных устройства, имеющихся в составе того или иного микроконтроллера, зависит от конкретной модели. Перечислим все периферийные устройства, так или иначе встречающиеся в микроконтроллерах семейства:

q      8-разрядный таймер/счетчик с предделителем (таймер Т0);

q      16-разрядный таймер/счетчик с предделителем (таймер Т1);

q      8-разрядный таймер/счетчик с возможностью работы в асинхронном режиме (таймер Т2);

q      сторожевой таймер (WDT);

q      одно- или двухканальный 8… 10-разрядный генератор сигнала с широтно-импульсной модуляцией (ШИМ);

q      одноканальный 8-разрядный генератор сигнала с ШИМ;

q      аналоговый компаратор;

q      10-разрядный АЦП (6 или 8 каналов);

q      полнодуплексный универсальный асинхронный приемопередатчик (UART);

q      последовательный синхронный интерфейс SPI.

Архитектура ядра

Ядро является «сердцем» микроконтроллеров AVR. Оно выполнено по усовершенствованной RISC  (enhanced RISC) архитектуре, в которой используется ряд решений, направленных на повышение быстродействия микроконтроллеров. Схематическое упрощенное изображение ядра показано на рис. 3.5.

 

Рис. 3.5. Архитектура ядра микроконтроллера

Арифметико-логическое устройства (АЛУ) выполняет все вычисления и непосредственно подключено к 32 рабочим регистрам, объединенным в регистровый файл. Благодаря этому АЛУ выполняет одну операцию (чтение содержимого регистров, выполнение операции и запись результата обратно в регистровый файл) за один машинный цикл.

В микроконтроллерах AVR практически все команды (за исключением команд, у которых одним из операндов является 16-разрядный адрес) занимают одни ячейку памяти программ.

 

Цоколевка и описание выводов

Наиболее распространенное среди радиолюбителей семейство микроконтроллеров AVR Classic состоит в общей сложности из 17 моделей микроконтроллеров. Все они выпускаются в корпусах различных типов, что позволяет выбрать модель, наилучшим образом отвечающую требованиям по компоновке.

В табл. 3.2 приводятся основные параметры микроконтроллеров, такие как объем памяти (программ и данных), количество контактов ввода/вывода, тип корпуса, диапазон рабочих частот и напряжение питания.

Полную информацию по каждой модели следует искать в специальной литературе. Дополнительно следует отметить, что все микроконтроллеры семейства Classic выпускаются или в коммерческом (диапазон рабочих температур 0… +70°С), или в промышленном (диапазон рабочих температур -40…+85°С) исполнениях.

МК модели AT90S1200

С целью ограничения размеров данной главы, далее ограничимся рассмотрением только микроконтроллера модели AT90S1200, который является типичным представителем семейства Classic AVR.

Кроме того, в Приложении 4 приведено достаточно подробное описание еще одного очень популярного микроконтроллера – AT90S2313.

Данные по остальным моделям AVR МК можно найти в специальной литературе.

На рис. 3.6 показано расположение выводов МК модели AT90S1200.

 

Рис. 3.6. Расположение выводов AT90S1200

В табл. 3.4 для микроконтроллера AT90S1200  приведены названия выводов и указаны их функции (как основные, так и дополнительные). Кроме того, для каждого вывода в таблице указан его тип (вход, выход, вход/выход, вывод питания).

В таблице 3.4 использованы следующие обозначения выводов:

I – вход;

Oвыход;

I/O – вход/выход;

Pвыводы питания.

Таблица 3.4. Описание выводов модели AT90S1200

Обозначение

Номер вывода

Тип вывода

Описание

XTAL1

5

I

Вход инвертора генератора и вход внешнего тактового сигнала

XTAL2

4

O

Выход инвертора генератора

RESET

1

I

Вход сброса. При удержании на входе НИЗКОГО уровня в течение 50 нс выполняется сброс устройства.

Порт В. 8-разрядный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами

PB0 (AIN0)

12

I/O

B0 (Положительный вход компаратора)

PBI (AIN1)

13

I/O

B1 (Отрицательный вход компаратора)

PB2

14

I/O

B2

PB3

15

I/O

B3

PB4

16

I/O

B4

PB5 (MPS1)

17

I/O

B5 (Вход данных при последовательном программировании (SPI))

PB6 (MISO)

18

I/O

B6 (Выход данных при последовательном программировании (SPI))

PB7 (SCK)

19

I/O

B7 (Вход тактового сигнала при последовательном программировании SPI))

Порт D. 7-разрядный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами

PD0

2

I/O

D0

PD1

3

I/O

D1

PD2 (INT0)

6

I/O

D2 (Вход внешнего прерывания)

PD3

7

I/O

D3

PD4 (T0)

8

I/O

D4 (Вход внешнего тактового сигнала таймера/ счетчика Т0)

PD5

9

I/O

D5

PD6

11

I/O

D6

GND

10

P

Общий вывод

Vcc

20

P

Вывод источника питания

 

Структурная схема микроконтроллера AT90S1200 приведена на рис. 3.7. Его отличительные особенности:

q      2 порта ввода/вывода: B (8-разрядный) и D (7-разрядный);

q      3-уровневый аппаратный стек;

q      встроенный тактовый RC-генератор;

q      аналоговый компаратор;

q      возможность подключения внешнего кварцевого резонатора.

 

Рис. 3.7. Структурная схема микроконтроллера AT90S1200

Организация памяти

Организация памяти микроконтроллеров AVR семейства Classic, в том числе и МК AT90S1200, выполнена по гарвардской архитектуре, в которой разделены не только адресные пространства памяти программ и памяти данных, но также и шины доступа к ним. Причем память данных состоит из трех областей: регистровая память, статическое ОЗУ и память на основе EEPROM. В связи с тем, что регистровая память находится в адресном пространстве ОЗУ, об этих двух областях памяти обычно говорят как об одной. Каждая из областей (ОЗУ и EEPROM) расположена в своем адресном пространстве.

Заметим, что модель AT90S1200 не имеет внутреннего ОЗУ (хотя регистровая память, естественно, присутствует).

Обобщенная карта памяти микроконтроллеров AVR семейства Classic приведена на рис. 3.8.

 

Рис. 3.8. Схема карты памяти микроконтроллеров семейства Classic

Следует заметить, что:

1)      поскольку микроконтроллеры AVR имеют 16-разрядную систему команд, объем памяти программ на рисунке указан не в байтах, а в 16-разрядных словах;

2)      символ «$» перед числом означает, что это число записано в шестнадцатеричной системе счисления.

 

Память программ предназначена для хранения команд, управляющих функционированием микроконтроллера. В памяти программ хранятся также различные константы, не меняющиеся во время работы программы. Память программ в микроконтроллерах семейства Classic представляет собой электрически стираемое ППЗУ (FLASH-ПЗУ). Поскольку все команды занимают в памяти 16 бит (некоторые – 32 бита), память программ имеет 16-разрядную организацию. Соответственно, объем памяти составляет от 512 16-разрядных слов для модели AT90S1200 до 40% слов для старших моделей.

Для адресации памяти программ используется счетчик команд (PC  Program Counter). Размер счетчика команд составляет от 9 до 12 разрядов в зависимости от объема адресуемой памяти.

По адресу $000 памяти программ находится вектор сброса. После инициализации (сброса) микроконтроллера выполнение программы начинается с этого адреса (фирма Atmel рекомендует размещать по этому адресу команду относительного перехода к инициализационной части программы).

Начиная с адреса $001 располагается таблица векторов прерывания. Ее размер зависит от модели микроконтроллера и составляет от 2 (адреса $001, $002) до 16 (адреса $001...$010) векторов. При возникновении прерывания после сохранения в стеке текущего значения счетчика команд происходит выполнение команды, расположенной по адресу соответствующего вектора. Поэтому по этим адресам располагаются команды относительного перехода к подпрограммам обработки прерываний. Ниже приведен типичный листинг начала программы для модели AT90S1200.

 

Листинг 3.1. Текст начала программы для AT90S1200

;-----------------------------------------------------------------------------

Address      Labels       Code                 Comments

$000                     rjmp RESRT           ; Обработчик сброса

$001                     rjmp EXT INT0        ; Обработчик внешнего прерывания

$002                     rkmp TIM OVF0        ; Обработчик  прерывания

                                              ;    от таймера 0

$003         MAIN:       ldi r16,             ; начало основной программы       

                         low (RAMEND)        

                         out SPL, r16

                         <инструкция> ххх

;-----------------------------------------------------------------------------

Если в программе прерывания не используются (запрещены), то основная программа может начинаться непосредственно с адреса $001.

В заключение следует отметить, что FLASH-ПЗУ, используемое в микроконтроллерах AVR, рассчитано как минимум на 1000 циклов стирания/записи.

 

Память данных микроконтроллеров семейства Classic разделена на три части: регистровая память, оперативная память (статическое ОЗУ) и энергонезависимое ЭСППЗУ (EEPROM).

Регистровая память включает в себя 32 регистра общего назначения (РОН), объединенных в регистровый файл и служебные регистры ввода/вывода (РВВ). Размер регистровой памяти фиксирован и для всех моделей составляет 96 байт, соответственно под РОН отводится 32 байта, а под РВВ – 64 байта.

В области регистров ввода/вывода расположены различные служебные регистры (регистр указателя стека, регистр состояния и т.п.), а также регистры управления периферийными устройствами, входящими в состав микроконтроллера. Общее количество РВВ зависит от конкретной модели микроконтроллера.

Для хранения переменных программ вместе с регистрами также может использоваться статическое ОЗУ объемом от 128 до 512 байт. Кроме того, микроконтроллеры AT90S4414 и AT90S8515 имеют возможность подключения внешнего статического ОЗУ объемом до 64 Кбайт.

Для хранения данных, которые могут изменяться в процессе настройки и функционирования готовой системы (калибровочные константы, серийные номера, ключи и т.п.), может быть использована EEPROM-память. Ее объем составляет для различных моделей от 64 до 512 байт. Эта память расположена в отдельном адресном пространстве, а доступ к ней осуществляется с помощью определенных РВВ.

 

Статическое ОЗУ

В микроконтроллерах AVR семейства Classic используется линейная организация памяти. Объем статического ОЗУ для различных моделей семейства составляет от 128 до 512 байт (см. табл. 3.2).

В адресном пространстве ОЗУ также расположены все регистры микроконтроллеров, под них отведены младшие 96 адресов (см. рис. 3.9). Основные адреса отведены под 128/256/512…64 К ячеек статического ОЗУ.

На рис. 3.9 схематически показана организация статического ОЗУ.

 

Рис. 3.9. Схема организации статического ОЗУ

Регистры общего назначения

Прежде чем перейти к описанию имеющихся в МК регистров, хочу обратить ваше внимание на то, что в Приложении 4 все регистры МК AT90S2312 рассмотрены очень подробно. Поскольку большинство регистров AT90S1200 идентичны описанным в Приложении 4, считаю возможным далее в этой главе ограничиться только описанием некоторых общих особенностей. Для большего количества информации смотрите Приложение 4 либо специальную литературу, например,[8].

Все регистры общего назначения (РОН) объединены в файл, структура которого показана на рис. 3.10.

 

Рис. 3.10. Структура регистров общего назначения

Как уже было сказано, в микроконтроллерах AVR все 32 РОН непосредственно доступны АЛУ в отличие от микроконтроллеров других фирм, в которых имеется только один такой регистр – рабочий регистр W (аккумулятор). Благодаря этому любой РОН может использоваться во всех командах и как операнд-источник и как операнд-приемник. Исключение составляют лишь пять арифметических и логических команд, выполняющих действия между константой и регистром (SBCI, SUBI, CPI, ANDI, ORI),а также команда загрузки константы в регистр (LDI). Эти команды могут обращаться только ко второй половине регистров (R16...R31).

Ряд регистров общего назначения используется в качестве указателей при косвенной адресации памяти данных. В модели AT90S1200 таким регистром является регистр R30 (регистр Z). Поскольку объем адресуемой памяти данных этой модели составляет всего 96 байт, для хранения адреса достаточно одного 8-разрядного регистра. Во всех других моделях для косвенной адресации используются три 16-разрядных регистра (регистры X, Y и Z), каждый из которых получается объединением двух РОН (рис. 3.11).

 

Рис. 3.11. Регистры-указатели X, Y и Z

 

Как показано на рис. 3.10, каждый регистр файла имеет свой собственный адрес в пространстве памяти данных (кроме AT90S1200). Поэтому к ним можно обращаться как к памяти, несмотря на то, что физически эти регистры не являются ячейками ОЗК.

Регистры ввода/вывода

Регистры ввода/вывода (РВВ) располагаются в так называемом пространстве ввода/вывода размером 64 байта. Все РВВ можно разделить на две группы:

q      служебные регистры микроконтроллера;

q      регистры, относящиеся к периферийным устройствам (в т.ч. порты ввода/вывода).

 Размер каждого регистра – 8 разрядов.

Распределение адресов пространства ввода/вывода зависит от конкретной модели микроконтроллера, т.к. разные модели имеют различный состав периферийных устройств и, соответственно, разное количество регистров.

К любому регистру ввода/вывода можно обратиться с помощью команд IN и OUT, выполняющих пересылку данных между одним из 32 РОН и пространством ввода/вывода. Кроме того, имеются 4 команды поразрядного допуска, использующие в качестве операндов регистры ввода/вывода команды установки/сброса      отдельного разряда (SBI и CBI) и команды проверки состояния отдельного разряда (SBIS и SBIC).

Таблица 3.5. Регистры ввода/вывода модели AT90S1200 и AT90S2313

Название

Функция

AT90S1200

AT90S2313

ACSR

Регистр управления и состояния аналогового компаратора

$08

$08 ($28)

DDRB

Регистр направления данных порта В

$17

$17 ($37)

DDRD

Регистр направления данных порта D

$11

$11 ($31)

EEAR

Регистр адреса EEPROM

$IE

$IE ($3E)

EECR

Регистр данных EEPROM

$IC

$IC ($3C)

EEDR

Общий регистр флагов прерываний

$ID

$ID ($3D)

GIFR

Общий регистр маски прерываний

--

$3A ($5A)

GIMSK

Регистр захвата таймера/счетчика 1 (старший байт)

$3B

$3B ($5B)

ICRIH

Регистр захвата таймера/счетчика 1 (младший байт)

--

$25 ($$45)

ICRIL

Общий регистр управления микроконтроллером

--

$24 ($44)

MCUCR

Регистр состояния микроконтроллера

$35

$35 ($55)

MCUSR

Регистр состояния микроконтроллера

--

--

OCRIAH

Регистр совпадения выхода 1 (старший байт)

--

$2B ($4B)

OCRIAL

Регистр совпадения выхода 1 (младший байт)

--

$2A ($4A)

PINB

Выводы порта В

$16

$16 ($36)

PIND

Выводы порта D

$10

$10 ($30)

PORTB

Регистр данных порта В

$18

$18 ($38)

PORTD

Регистр данных порта D

$12

$12 ($32)

SPL

Указатель стека

--

$3D ($5D)

SREG

Регистр состояния

$3F

$3F  ($5F)

TCCR0

Регистр управления таймером/счетчиком 0

$33

$33  ($53)

TCCRIA

Регистр управления А таймером/счетчиком 1

--

$2F  ($4F)

TCCRIB

Регистр управления В таймером/счетчиком 1

--

$2E  ($4E)

TCNT0

Счетный регистр таймера/счетчика 0 (8-разрядный)

$32

$32  ($52)

TCNTIH

Счетный регистр таймера/счетчика 1

--

$2D  ($4D)

TCNTIL

Счетный регистр таймера/счетчика 1 (младший байт)

--

$2C  ($4C)

TIFR

Регистр флагов прерываний от таймера/счетчика

$38

$38  ($58)

TIMSK

Регистр маски прерываний от таймера/счетчика

$39

$39  ($59)

UBRR

Регистр скорости передачи UART

--

$09  ($29)

UCR

Регистр управления UART

--

$0A  ($2A)

UDR

регистр данных UART

--

$0C  ($2C)

USR

Регистр состояния UART

--

$0B  ($2B)

WDTCR

Регистр управления сторожевым таймером

$21

$21  ($41)

 

Служебные регистры МК

Далее рассмотрим служебные регистры микроконтроллера. Обратите внимание, что адреса служебных регистров не меняются от моделей к модели (т.е. регистр SREG всегда расположен по адресу $3F ($5F), регистр GIMSK – по адресу $3B ($5B)и т.д.).

 

SREF (регистр состояния) – Регистр состояния располагается по адресу $3F ($5F). Этот регистр представляет собой набор флагов, показывающих текущее состояние микроконтроллера. Эти флаги автоматически устанавливаются в «1» или в «0» при наступлении определенных событий (в соответствии с результатом выполнения команд). Все разряды этого регистра доступны как для чтения, так и для записи в любой момент времени; после сброса микроконтроллера все разряды регистра сбрасываются в «0».

 

SP (указатель стека) – в моделях, имеющих объем до 128 байт (адресное пространство ОЗУ -- $000...$0DF),указатель стека реализован на одном регистре SPL, расположенном по адресу $3D ($5D). В остальных моделях указатель стека реализован на паре регистров SPH:SPL, расположенных по адресам $3E ($5E) и $3D ($5D) соответственно.

Все используемые разряды регистров доступны как для чтения, так и для записи в любой момент времени. После сброса микроконтроллера содержимое регистров равно 0, поэтому в самом начале программы указатель стека необходимо проинициализировать каким-либо значением (как правило, это наибольший для конкретного микроконтроллера адрес памяти данных).

 

GIMSK, TIMSK, GIFR, TIFR (регистры управления прерываниями) – эти четыре регистра предназначены для управления внешними прерываниями (регистры GIMSK и GIFR) и прерываниями от таймеров (регистры TIMSK и GIFR прерываниями от таймеров (регистры TIMSK и TIFR). Регистры масок GIMSK (общий регистр маски прерываний) и TIMSK (регистр маски прерываний от таймеров) используются для разрешения/запрещения отдельных прерываний, а регистры флагов GIFR (общий регистр флагов прерываний) и TIFR (регистр флагов прерываний от таймеров) содержат флаги, показывающие, произошло или нет соответствующее прерывание.
MCUCR (регистр управления микроконтроллером)  расположен по адресу $35 ($55). Этот регистр содержит ряд флагов, используемых для общего управления микроконтроллером. Состав флагов, размещенных в регистре MCUCR, несколько меняется от модели к модели, соответственно в некоторых моделях некоторые разряды не используются. Неиспользуемые разряды регистра доступны только для чтения и содержат «0». Все используемые разряды регистра доступны как для чтения, так и для записи в любой момент времени. После сброса микроконтроллера во всех разрядах регистра записано «0».
MCUSR (регистр состояния микроконтроллера) – расположен по адресу $34 ($54). Этот регистр содержит флаги, состояние которых позволяет определить причину, по которой произошел сброс микроконтроллера.

 

Способы адресации памяти данных

Все микроконтроллеры AVR семейства Classic, за исключением модели AT90S1200, поддерживают 8 способов адресации для доступа к различным областям памяти данных (РОН, РВВ, ОЗУ). Модель AT90S1200 в связи с отсутствием у нее встроенного ОЗУ и из-за наличия единственного индексного регистра поддерживает только 4 способа адресации из восьми.

В действительности способов адресации всего два:

q      прямая адресация;

q      косвенная адресация.

 

Однако каждый способ адресации имеет несколько разновидностей в зависимости от того, к какой области памяти производится обращение (для прямой адресации) или какие дополнительные действия выполняются над индексным регистром (для косвенной адресации).

 

Прямая адресация

При прямой адресации адреса операндов содержатся непосредственно в слове команды. В соответствии со структурой памяти данных существуют следующие разновидности прямой адресации: прямая адресация одного РОН, прямая адресация двух РОН, прямая адресация РВВ, прямая адресация ОЗУ.

 

Прямая адресация одного регистра общего назначения

Этот способ адресации используется в командах, оперирующих с одним из регистров общего назначения. При этом адрес регистра- операнда (его номер) содержится в разрядах 8…4 (5 бит) слова команды.

Примером команд, использующих этот способ адресации, являются команды работы со стеком (PUSH, POP), команды инкремента (INC), декремента (DEC), а также некоторые команды арифметических операций.

 

Прямая адресация двух регистров общего назначения

Этот способ адресации используется в командах, оперирующих одновременно с двумя регистрами общего назначения. При этом адрес регистра-источника содержится в разрядах 9, 3…0 (5 бит), а адрес регистра-приемника в разрядах 8…4 (5 бит) слова команды.

К командам, использующим этот способ адресации, относятся команда пересылки данных из регистра в регистр (MOV), а также большинство команд арифметических операций.

Прямая адресация регистра ввода/вывода

Данный способ адресации используется командами пересылки данных между регистром ввода/вывода и регистровым файлом – IN и OUT. В этом случае адрес регистра ввода/вывода содержится в разрядах 10, 9, 3…0 (6 бит), а адрес РОН – в разрядах 8…4 (5 бит).

 

Прямая адресация ОЗУ

Как следует из названия, данный способ используется при обращении ко всему адресному пространству памяти данных. Естественно, этот способ адресации не поддерживается микроконтроллером AT90S1200.

В системе команд микроконтроллеров семейства имеется только две команды, использующие этот способ адресации. Это команды пересылки байта между одним из РОН и ячейкой ОЗУ – LDS и STS. Каждая из этих команд занимает в памяти программ два слова (32 бита). В первом слове содержится код операции и адрес регистра общего назначения (в разрядах с 8-го по 4-й). Во втором слове находится адрес ячейки памяти, к которой происходит обращение.

Еще раз обращаем ваше внимание, что по адресам $00...$IF расположен файл регистров общего назначения, а по адресам $20...$5F расположены регистры ввода/вывода.

 

Косвенная адресация

При косвенной адресации адрес ячейки памяти (для AT90S1200 – регистра) находится в одном из индексных регистров X, Y и Z. В зависимости от дополнительных манипуляций, которые производятся над содержимым индексного регистра, различают следующие разновидности косвенной адресации: простая косвенная адресация, относительная косвенная адресация, косвенная адресация с преддекрементом и косвенная адресация            с постинкрементом.

 

Простая косвенная адресация

Сразу отметим, что AT90S1200 поддерживает только этот вид косвенной адресации. При использовании команд простой косвенной адресации обращение производится по адресу (регистра – для AT90S1200, ячейки памяти – для остальных моделей), который находится в индексном регистре. Никаких действий с содержимым индексного регистра при этом не производится.

Микроконтроллеры поддерживают 6 команд (по 2 для каждого индексного регистра) простой косвенной адресации: LD Rd, X/Y/Z, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в разрядах 8…4 слова команды.

 

Относительная косвенная адресация

При использовании команд относительной косвенной адресации адрес ячейки памяти, к которой производится обращение, получается суммированием содержимого индексного регистра (Y или Z) и константы, задаваемой в команде. Другими словами, производится обращение по адресу, указанному в команде, относительно адреса, находящегося в индексном регистре.

Соответственно микроконтроллера поддерживают 4 команды относительной косвенной адресации (две для регистра Y и две для регистра Z): LDD Rd, Y+q/Z+q (пересылка байта из ОЗУ и РОН) и ST Y+q/Z+q, Rr (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в разрядах 8…4 слова команды, а величина смещения – разрядах 13, 11, 10…0. Поскольку под значение смещения отводится только 6 бит, оно не может превышать 64.

 

Косвенная адресация с преддекрементом

При использовании команд косвенной адресации с преддекрементом содержимое индексного регистра сначала увеличивается на 1, а затем производится обращение по полученному адресу.

Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с преддекрементом: LD Rd, - X/ -Y/ -Z (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в разрядах 8…4 слова

 

Косвенная адресация с постинкрементом

При использовании команд косвенной адресации с постинкрементом после обращения по адресу, который находится в индексном регистре, содержимое индексного регистра уменьшается на 1.

Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с постинкрементом: LD Rd, X+/Y+/Z+ пересылка байта из ОЗУ в РОН) и ST X+/Y+/Z+, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в разрядах 8…4 слова команды.

 

Энергонезависимая память данных

Как уже было сказано, микроконтроллеры AVR семейства Classic имеют в своем составе энергонезависимую память (EEPROM). Объем этой памяти колеблется от 64 байт в модели AT90S1200 до 512 байт в старших моделях. EEPROM-память расположена в своем адресном пространстве и так же, как и ОЗУ, организована линейно.

Организация доступа

Для обращения к EEPROM-памяти используются три регистра: регистр адреса, регистр данных и регистр управления. Все эти регистры, а также их использование подробно рассматриваются в этом пункте.

Регистр адреса

В регистр адреса загружается адрес ячейки, к которой будет производиться обращение. В моделях микроконтроллеров с объемом EEPROM-памяти до 256 байт регистр адреса реализован на одном РВВ (регистр ввода/вывода) – EEAR (EEPROM Addres Register), расположенном по адресу $IE ($3E). В моделях микроконтроллеров с объемом EEPROM-памяти, равным 512 байт, для адресации всего адресного пространства требуется уже девять разрядов, поэтому регистр адреса в них реализован на двух РВВ – EEARH (старший байт адреса) и EEARL (младший байт адреса). Эти регистры расположены по адресам $IF ($3F) и $IE ($3E) соответственно.

Все перечисленные регистры доступны как для записи, так и для чтения. При этом содержимое разрядов 7…1 регистра EEARH, разумеется, игнорируется.

 

Регистр данных

Регистр ввода/вывода, являющийся регистром данных EEPROM-памяти, называется EEDR (EEPROM Data Register), а расположен он по адресу $ID ($3D). При записи в этот регистр загружаются данные, которые должны быть помещены в EEPROM по адресу, находящемуся в регистре EEAR.

Регистр управления

Как следует из названия, данный регистр используется для управления доступом к EEPROM-памяти. Этот регистр, который называется EECR (EEPROM Control Register), расположен по адресу $IC ($3C),. Разные модели предоставляют неодинаковые возможности по управлению процессами записи/чтения в EEPROM, поэтому состав управляющих разрядов в регистре EECR зависит от конкретной модели микроконтроллера.

Таким образом, процедура записи одного байта в EEPROM-память состоит из следующих этапов:

1.      Дождаться готовности EEPROM к приему новых данных (ждать, пока не сбросится флаг EEWE регистра EECR).

2.      Загрузить байт данных в регистр EEDR, а требуемый адрес – в регистр EEAR (EEARH:EEARL).

3.      Установить в «1» флаг EEMWE регистра EECR. Причем для выполнения этой операции необходимо в том же машинном цикле записать «0» в разряд EEWE.

4.      В течение 4 машинных циклов после установки флага EEMWE записать в разряд EEWE регистра EECR лог: «1».

Для микроконтроллера AT90S1200, в регистре EECR которого отсутствует флаг EEMWE, пункты 3 и 4 сводятся к простой установке разряда EEWE. Обратите внимание, что после установки этого разряда в «1» процессор пропускает 2 машинных цикла перед началом выполнения следующей инструкции.

Длительность цикла записи составляет 2…4 мс, в зависимости от напряжения питания микроконтроллера (2 мс при Vcc = 2,7 В). По окончании цикла записи разряд EEWE аппаратно сбрасывается, после чего программа может начать запись следующего байта.

С учетом сказанного фрагмент программы, осуществляющей запись в EEPROM, выглядит следующим образом (на примере модели AT90S1200):

;-----------------------------------------------------------

EEWrite:

sbic        EECR,EEWE           ;  ждать, пока флаг EEWE не будет

rjmp        EEWrite             ;  сброшен

sli                             ;  запретить прерывания

out         EEAR, AddrReq       ;  загрузить адрес (AddrReq РОН)

out         EEAR, DataReq       ;  загрузить данные (DataReq РОН)

sbi         EECR, EEWE          ;  выдать строб записи в EEPROM

sli                                                       ; разрешить прерывание (если необходимо)

;------------------------------------------------------------------

  Процедура чтения данных из EEPROM гораздо проще, чем процедура записи. После загрузки требуемого адреса в регистр EEAR (EEARH;EEARL) программа должна установить в «1» разряд EERE регистра EECR. Когда запрошенные данные будут находиться в регистре данных EEDR, произойдет аппаратный сброс этого разряда.

С учетом сказанного фрагмент программы, осуществляющей чтение из EEPROM, выглядит следующим образом (на примере модели AT90S1200):

; -------------------------------------------------------------

sbic           EECR, EEWE      ; ждать окончания текущей записи   

rjmp           EERead          ; (пока флаг EEWE не станет равным

                               ;  «0»)  

out            EEDR, AddrReq   ;  загрузить адрес (AddrReq -- РОН

sbi            EECR, EERE      ;  выдать строб чтения из EEPROM

in            DataReq, EEDR    ;прочитанный байт – в РОН DataReq

; ---------------------------------------------------

Меры предосторожности при работе с EEPROM

К сожалению, у EEPROM-памяти есть один недостаток: во время работы при пониженном напряжении питания хранящиеся в ней данные могут быть повреждены. Это может произойти по двум причинам:

1. Обычная процедура записи в EEPROM требует некоторого минимального напряжения питания; если напряжение питания ниже этой величины, запись не может быть выполнена.

2.  Микроконтроллер сам может выполнять команды некорректно, если напряжение питания будет ниже некоторой величины.

    Чтобы избежать повреждения данных, хранящихся в EEPROM, достаточно воспользоваться одним из трех следующих решений:

  1. Удерживать микроконтроллер в состоянии сброса все время, пока напряжение питания находится ниже нормы. Это решение реализуется внешней схемой защитного сброса, называемой также детектором пониженного напряжения питания (Brown-out Detector).
  2. Удерживать микроконтроллер в «спящем» режиме (Power Down), пока напряжение питания находится ниже нормы. Поскольку в этом режиме микроконтроллер не может выполнять никаких команд, такое решение эффективно защищает служебные регистры EEPROM от непреднамеренной записи.
  3. Хранить константы во FLASH-памяти программ, если они не должны меняться во время работы программы. Микроконтроллер не может самостоятельно производить запись в FLASH-память, соответственно, при понижении напряжения питания ее содержимое не будет повреждено.

 

 

Hosted by uCoz