Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Микропроцессорные системы. Применение микроконтроллеров семейства AVR для управления внешними устройствами
.pdf
11
3. Архитектура микроконтроллера ATMega169
Микроконтроллер ATMega169 (рис. 3) имеет стандартную архитектуру микроконтроллеров серии AVR, выпускаемых фирмой Atmel.
Рис. 3. Архитектура микроконтроллера ATMega169
В настоящем издании приводится ознакомительное описание ар-
хитектуры микроконтроллера семейства AVR. Более подробное описа-
ние можно получить в специальной литературе [1–3].
Микроконтроллеры семейства AVR имеют расширенную гарвард-
скую архитектуру. Это означает, что программа и данные находятся в
разных адресных пространствах. Память программ доступна только для
чтения специальными машинными командами. Память данных (ОЗУ)

12
доступна как для чтения, так и для записи. Абсолютное большинство
команд процессора работает с регистрами или памятью данных. Систе-
ма команд ядра AVR близка идеологии RISC.
Процессор AVR имеет 32 8-битных регистра общего назначения
(РОН или General purpose registers), объединенных в регистровый файл.
Регистры обозначаются как R0-R31. В отличие от «идеального» RISCядра, регистры не равноправны (рис. 4).
Рис. 4. Карта регистров микроконтроллеров серии AVR
Некоторые команды (ANDI/CBR, ORI/SBR, CPI, LDI, LDS, STS,
SUBI, SBCI, SER и MULS) работают только с регистрами R16…R31.
Четыре последние пары регистров (R24-R31) могут использоваться попарно для операций с 16-битными числами.
В командах, работающих с 16-битными операндами, четные регистры (R24, R26, R28, R30) хранят младшие 8 бит 16-битного числа,
а нечетные регистры (R25, R27, R29, R31) хранят старшие 8 бит
16-битного числа.
Последние три пары регистров (R26:R27, R28:R29 и R30:R31)
имеют специальные обозначения X, Y и Z. Регистр X представлен парой
РОН R26:R27, Y – парой РОН R28:R29 и Z – парой РОН R30:R31. Ко-
манды, увеличивающие и уменьшающие 16-битное значение с непо-

13
средственным операндом (ADIW, SBIW), работают только с одной из
пар R25:R24, R27:R26 (X), R29:R28 (Y), или R31:R30 (Z). Команда копирования пары регистров работает только с соседними регистрами,
начинающимися с нечетного (R1:R0, R3:R2, …, R31:R30).
Результат команды умножения всегда помещается в R1:R0. Также
только эта пара используется в качестве операндов для команды само-
программирования.
Адресное пространство памяти программ (ОЗУ, Data memory или
SRAM) содержит несколько разделов (рис. 5). Первые 0x100 байт адрес-
ного пространства памяти данных занимают РОН и регистры ввода-
вывода. Эти адреса не могут использоваться для хранения произволь-
ных данных.
Рис. 5. Карта памяти программ (ОЗУ) микроконтроллера AVR
В адресном пространстве памяти данных по адресам 0x0000 –
0x001F расположены 32 РОН R0-R31. Иными словами, к РОН возможно
обращение двумя способами – как непосредственно к регистрам, так и
как к ячейкам ОЗУ с адресами 0x0000 – 0x001F. Регистру R0 соответствует ячейка ОЗУ с адресом 0x0000, а регистру R31 – ячейка ОЗУ с ад-
ресом 0x001F.
В адресном пространстве памяти данных по адресам 0x0020 –
0x005F расположены 64 порта ввода-вывода (I/O Registers), к которым
возможно обращение с помощью специальных команд работы с портами
ввода-вывода. К портам ввода-вывода также возможно обращение двумя
способами (рис. 6) – как к портам ввода-вывода с адресами
0x00-0x3F (только в специальных командах работы с портами ввода-
вывода), так и как к ячейкам памяти с адресами 0x0020 – 0x005F с по-
мощью команд работы с памятью. Порту ввода-вывода 0x00 соответствует ячейка памяти с адресом 0x0020, а порту ввода-вывода 0x3F соответствует ячейка памяти с адресом 0x005F.

14
Рис. 6. Соответствие адресов пространства порта ввода-вывода
и пространства памяти данных
В адресном пространстве памяти данных по адресам 0x0060 –
0x00FF расположены 160 расширенных портов ввода-вывода (I/O
Registers), к которым возможно обращение только как к ячейкам памяти.
Специальные команды работы с портами ввода-вывода не поддерживают обращение к расширенным портам.
Порты ввода-вывода служат для управления внешними (по отно-
шению к ядру микроконтроллера) устройствами – таймерами, контроллерами прерываний, контроллерами интерфейсов UART, SPI, линиями
ввода-вывода и так далее.
В адресном пространстве памяти данных по адресам 0x0100 –
0x04FF расположена память данных объемом 1 Кбайт (1024 байта). Эта
память используется программистом по своему усмотрению для хране-
ния произвольных данных.
Память программ (Program FLASH) имеет объем 16 Кбайт
(16 384 байта), или 8 16-битных слов. Каждая команда AVR занимает
одно или два 16-битных слова (два или четыре байта).

15
Первые 92 байта (46 слов) памяти программ с адресами 0x0000 –
0x005B заняты векторами прерываний (табл. 2). В остальной области –
0x005C-0x3FFF расположена программа и данные, доступные только
для чтения специальными командами чтения из памяти программ.
Таблица 2
Список векторов прерываний ATMega169
Номер
вектора
Адрес памяти про-
грамм (в байтах)
Источник
преры-
вания
Описание
0
0x0000
RESET
Рестарт процессора по сигналу Reset
или WatchDog-таймеру
1
0x0004
INT0
Прерывание от внешнего сигнала
2
0x0008
PCINT0
Прерывание по изменению состоя-
ния линии
3
0x000С
PCINT1
Прерывание по изменению состоя-
ния линии
4
0x0010
TIMER2
COMP
Прерывание по совпадению
таймера 2
5
0x0014
TIMER2
OVF
Прерывание по переполнению
таймера 2
6
0x0018
TIMER1
CAPT
Прерывание по захвату таймера 1
7
0x001С
TIMER1
COMPA
Прерывание по совпадению с реги-
стром А таймера 1
8
0x0020
TIMER1
COMPB
Прерывание по совпадению с реги-
стром B таймера 1
9
0x0024
TIMER1
OVF
Прерывание по переполнению
таймера 1
10
0x0028
TIMER0
COMP
Прерывание по совпадению
таймера 0
11
0x002С
TIMER0
OVF
Прерывание по переполнению
таймера 0
12
0x0030
SPI, STC
Прерывание по завершению обмена
SPI
13
0x0034
USART,
RX
Прерывание по приему байта UART
14
0x0038
USART,
UDRE
Прерывание по флагу «регистр пе-
редачи данных пуст» UART
15
0x003С
USART,
TX
Прерывание по окончанию передачи
байта UART

16
16
0x0040
USI
START
Прерывание по началу обмена, ин-
терфейс USI
17
0x0044
USI
OVERFL
OW
Прерывание по переполнению, ин-
терфейс USI
18
0x0048
ANALOG
COMP
Прерывание по событию от анало-
гового компаратора
19
0x004С
ADC
Прерывание от АЦП, аналого-
цифровое преобразование заверше-
но
20
0x0050
EE
READY
Прерывание по готовности энерго-
независимой памяти EEPROM
21
0x0054
SPM
READY
Прерывание по готовности к записи
в память программ
22
0x0058
LCD
Прерывание по началу фрейма
ЖКИ-дисплея

17
4. Порты ввода-вывода общего назначения
Порты ввода-вывода общего назначения (GPIO) (не путать с портами ввода-вывода или регистрами ввода-вывода ядра микроконтролле-
ра!) представляют собой набор электрических линий, состояние каждой
из которых может быть программно установлено или прочитано.
Порты ввода-вывода (Input-Output Ports) – схемотехническое ре-
шение, позволяющее общаться ядру микропроцессора с «внешним миром». Порты ввода (Input Ports) позволяют считывать состояния внешних устройств. Порты вывода (Output Ports) позволяют выводить комби-
нации электрических сигналов на внешние устройства.
Рассмотрим общий принцип действия порта ввода-вывода в режиме вывода, рис. 7.
Рис. 7. Упрощенная схема порта вывода
В нашем примере порт вывода имеет 4 линии вывода O0-O3.
В общем случае порт вывода представляет собой регистр-защелку, способный хранить несколько бит данных. Линии O0-O3 в нашем примере – это электрические линии, выведенные во «внешний мир». По команде ядра процессора выставляются следующие сигналы:
адрес порта вывода выставляется на шину адреса (ША). По адре-
су дешифратор адресов выставляет сигнал разрешения записи в регистрзащелку (в нашем примере сигнал CS0);

18
на шину данных (ШД) выставляются данные, которые записыва-
ются в порт (т. е. в регистр-защелку);
на линию WRP – сигнал записи, по которому данные с ШД запи-
сываются в регистр-защелку и появляются на выходных линиях O0-03.
В результате выполнения указанных действий линии O0-03 уста-
навливаются в состояние, определяемое программой, и находятся в этом
состоянии до следующей записи в порт вывода.
Рис. 8. Порт ввода-вывода в режиме ввода
Порт ввода устроен подобно порту вывода (рис. 8). В нашем примере порт ввода имеет 4 линии ввода I0-I3. В общем случае порт ввода
представляет собой буфер с тремя состояниями, который передает со-
стояние внешних линий на шину данных. Линии I0-I3 в нашем примере – это электрические линии, выведенные во «внешний мир». По команде ядра процессора выставляются следующие сигналы:
адрес порта вывода выставляется на шину адреса (ША). По адре-
су дешифратор адресов выставляет сигнал разрешения записи в регистрзащелку (в нашем примере сигнал CS0);
на линию RDP выставляется сигнал чтения, по которому данные
с линий I0-I3 выставляются на ШД;
на шину данных (ШД) выставляются данные с линий I0-I3, отку-
да эти данные считываются ядром микроконтроллера.
В результате выполнения указанных действий ядро микроконтроллера считывает данные с внешних линий ввода I0-I3.

19
Микроконтроллер семейства AVR имеет несколько регистров для
управления портами ввода-вывода общего назначения (GPIO) – регистр
ввода (PIN), регистр вывода (PORT) и регистр управления направлением
порта (DDR). Регистры каждого порта ввода-вывода доступны как в адресном пространстве портов ввода-вывода, так и в адресном простран-
стве памяти данных. Обозначаются регистры каждого порта следующим
образом: для порта A – PINA, PORTA, DDRA; для порта B – PINB,
PORTB, DDRB и т. д. Каждый из регистров имеет размер 8 бит. Иными
словами, одним выводом в регистр можно управлять сразу восемью ли-
ниями ввода-вывода.
Рис. 9. Упрощенная схема одной линии порта ввода-вывода
микроконтроллера семейства AVR
Основным отличием портов микроконтроллеров семейства AVR от
показанных примеров является то, что каждая линия порта AVR может
использоваться как для ввода, так и для вывода данных. Направление
передачи данных определяется содержимым регистра DDR соответ-
ствующего порта. Упрощенная схема одной линии порта ввода-вывода
микроконтроллера семейства AVR показана на рис. 9. Заметим, что мно-
гие линии портов ввода-вывода микроконтроллеров семейства AVR мо-
гут выполнять несколько функций. Какая из функций выполняется линией того или иного порта – выбирается программным способом, путем
записи необходимой конфигурации в соответствующие регистры управ-
ления периферийными устройствами.

20
Состояние линии определяется тремя сигналами: DDRx, PORTx и
PINx. Сигнал PINx управляет ключом К, который электрически подключает и отключает выход регистра защелки PORTx к выходной линии Pxy.
Индекс x – обозначает номер порта, а индекс y – номер линии порта.
Если сигнал DDRxy имеет значение 0, то выход регистра защелки
PORTxy отключен от выходной лини Pxy и значение, записанное в регистр PORTx, не влияет на состояние выходной лини Pxy. Другими сло-
вами, порт работает только в режиме ввода.
Если сигнал DDRxy имеет значение 1, то выход регистра защелки
PORTx подключен к выходной лини Pxy и значение, записанное в регистр PORTx выводится на выходную линию Pxy. Значит, порт работает
только в режиме вывода.
Обратите внимание, что считывать состояние линии данных из ре-
гистра PINxy можно всегда – вне зависимости от режима работы порта.
Следовательно, порт всегда можно использовать для считывания реаль-
ного состояния линии.
Рассмотрим типичные задачи, решаемые при управлении внешними устройствами с помощью портов ввода-вывода общего назначения
применительно к микроконтроллерам семейства AVR.
4.1. Пример настройки порта ввода-вывода
Рассмотрим пример настройки порта ввода-вывода D. Предполо-
жим, что необходимо линии 0–3 порта D настроить на ввод данных,
а линии 4–7 на вывод данных.
Представим направление передачи данных линий порта D, как показано на рис. 10.
Рис. 10. Направление передачи данных линий порта D (DDRD)
Из показанного видно, что биты 0, 1, 2, 3-го регистра DDRD
должны быть установлены в состояние 0 (ввод данных), а линии 4, 5, 6,
7 – в состояние 1 (вывод данных).
Значение, которое должно быть записано в регистр DDRD, в дво-
ичном виде, представлено как 0b11110000; в шестнадцатеричном виде –
это число 0xF0.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
