Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессорные системы. Применение микроконтроллеров семейства AVR для управления внешними устройствами

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
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.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]