Смекни!
smekni.com

Внутренняя организация микроконтроллеров AVR (стр. 1 из 2)

Внутренняя организация микроконтроллеров AVR


Микроконтроллеры AVR выпускаются фирмой Atmel и предназначены для свободного использования в проектируемой аппаратуре.

Общие характеристики микроконтроллеров AVR следующие:

· Напряжение питания – 3-5 В

· Количество регистров общего назначения – 32

· Наличие внутренних ОЗУ, памяти программ, энергонезависимой памяти

· Поддержка интерфейсов USART(RS 232), SPI(I2C)

Архитектура микроконтроллера АТ9052313

Микроконтроллеры AVR являются 8-разрядными. Это означает, что все действия по выполнению арифметических операций, работы с портами, таймерами, интерфейсами выполняются побайтно.

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

Арифметика логического устройства предназначена для выполнения операции сложения, вычитания, а также логических операций на аппаратном уровне.

128 байт оперативной памяти, предназначены для хранения данных пока на МК подано питание.

128 EEPROM предназначены для хранения информации после выключения питания МК.

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

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

15 линий ввода/вывода физически являются ножками МК, объединенные в 2 порта ввода/вывода – порт В и порт D. Порт В является 8-разрядным, порт D является 7-разрядным.

Обращение к линиям ввода/вывода может быть как индивидуальным, так и порту в целом, т.е. каждая из линий порта ввода/вывода может быть настроена как на ввод информации, так и на вывод, а данные выводятся и считываются из порта как по битам, так и по байтам.

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

16-разрядный таймер-счетчик предназначен для подсчета тактов, импульсов либо импульсов, поступающих на вход Т1. 8-разрядный таймер-счетчик считает до 256 с коэффициентом предделения от 1 до 1024.

USART – аппаратно реализуемый интерфейс приема/передачи между двумя устройствами в старт/стоповом режиме.

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

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

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

Аналоговый компаратор предназначен для сравнения напряжений, поданных на 2 соответствующих входа МК. Если напряжение на положительном входе больше, то происходит соответствующее прерывание.

WATCHDOG таймер – это таймер, отсчитывающий интервал времен, в течении которого МК находится в спящем режиме. По окончании счета МК выходит из спящего режима. Спящий режим часто используется в устройствах, которые работают от аккумуляторов, когда нужно снизить энергопотребление и продлить время работы без подзарядки.

Регистр статуса – это регистр, в котором отображается результат выполнения большинства команд МК. Этот регистр представляет собой совокупность битов флагов, каждый из которых установлен в 1 либо сбрасывается в 0, в результате выполнения соответствующей команды.

Флаги в регистре статуса обновляются автоматически, как только выполняется соответствующая команда, обновляющая эти флаги.

Сравнительный анализ современных микроконтролеров представлен ниже:

Система команд микроконтроллеров серии AVR представлена ниже:

Арифметические конструкции МК AVR

ADDRd, Rr - суммирование содержимого регистра Rd с содержимым регистра Rr. Результат помещается в Rd.


ADDR16, R17

Если результат больше 256, то флаг переноса – это флаг С в регистре статуса. Регистры Rd и Rr – любые из диапазона 0

Rd, Rr
31

ADCRd, Rr – суммирование с переносом. Содержимое Rd добавляется содержимому Rr и значению флага переноса С.

Пусть R16

15

R17

2

ADCR16, R17

SUBRd, Rr – вычитание без переноса, т.е. Rd= Rd – Rr.

SUBIRd, k – вычитание константы k из содержимого регистра Rd, т.е. Rd= Rd – k.

SBCRd, Rr – вычитание с переносом, т.е. Rd= Rd – Rr – c.

ANDRd, Rr – логическая "И" содержимого двух регистров Rd и Rr.

R16=8=00001000

R17=00001010

ANDR16, R17=00001000

ANDIRd, k – логическая "И" содержимого регистра Rd и константы k.

ORRd, Rr – логическая "ИЛИ" содержимого двух регистров.

ORIRd, k - логическая "ИЛИ" содержимого регистра Rd и константы k.

EORRd, Rr– исключающая "ИЛИ".

COMRd – побитная инверсия Rd.

NEGRd – изменение знака числа.

SBRRd, k – установить биты в регистре.


Пример. Установить нулевой и третий биты в регистре R17.

SBR R17,0b00001001

SBR R17,9

SBR R17,$09 (0x09)

Устанавливать биты в регистре можно только для регистров 16 – 31.

CBRRd, k – очистить биты в регистре.

INCRd – увеличить на 1 содержимое регистра Rd.

DECRd – уменьшить на 1 содержимое регистра Rd.

CLRRd – очистка содержимого регистра Rd.

SERRd – установить в 1 все биты регистра.

MULRd, Rr – умножение без знака.

MULSRd, Rr – умножение со знаком.

Инструкции ветвления

RJMPk – относительный переход на метку k. Переход осуществляется в пределе 2000 команд от места вызова.

RJMP Res

- - - - - - -

Res. ADD R16, R17

IJMP – косвенный переход на адрес, хранящийся в регистровой паре Z.

В микроконтроллере AVR существуют 3 регистровые пары X, Y, Z. Регистровые пары используются при косвенной адресации и позволяют осуществлять переход в пределах 216.

JMPk – переход на метку k в пределах 4 млн. инструкций.

RCALLk – относительный вызов подпрограмм, т.е. переход на метку k, с которой начинается вызываемая подпрограмма. При этом подпрограмма должна заканчиваться командой RET.

ICALL – косвенный вызов подпрограммы, начальный адрес которой хранится в регистровой паре Z.

CALLk – вызов подпрограммы удаленной на расстояние до 64 000 команд от места вызова.

RETI – возврат из прерывания.

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

CPSERd, Rr – сравнить содержимое двух регистров и пропустить следующую команду, если значения в эти регистрах одинаково.

CPRd, Rr – сравнить содержимое двух регистров.

CPIRd, k – сравнить содержимое регистра с константой.

BREQk – переход на метку, если выполнилось равенство.

BRNEk – переход на метку, если значение

BRCSk – флаг переноса установлен, т.е. перейти на метку, если установлен флаг переноса.

BRCCk – перейти на метку, если флаг переноса сброшен в 0.

BRSHk – перейти на метку, если равно или больше.

CP R16 R17

BRSH RCS

---------------

RES -------

BRLOk - перейти на метку, если меньше.

BRMIk – перейти на метку, если установлен флаг отрицательного числа.

BRPLk – перейти на метку, если флаг отрицательного числа сброшен в 0.

BRGEk – перейти на метку, если больше или равно с учетом знака.

BRLTk – перейти на метку, если меньше с учетом знака.

BRHSk – перейти на метку, если флаг внутреннего переноса установлен.

BRHCk– перейти на метку, если флаг внутреннего переноса сброшен в 0.

BRTSk – перейти на метку, если флаг Т установлен.

BRTCk – перейти на метку, если флаг Т сброшен в 0.

BRVSk – перейти на метку, если флаг перевыполнения установлен.

BRVCk – перейти на метку, если флаг перевыполнения сброшен в 0.

BRIEk – перейти на метку, если разрешены прерывания.

BRIDk – перейти на метку, если прерывания запрещены.

SBRCRd, b – пропустить следующую команду, если бит b в регистре Rd сброшен в 0.

SBRSRd, b – пропустить следующую команду, если бит b в регистре Rd установлен.

SBICP, b – пропустить следующую команду, если бит b в порту Р сброшен в 0.

SBISP, b – пропустить следующую команду, если бит b в порту Р установлен.

BRBSS, k – перейти на метку k, если флаг S в регистре статуса установлен.