Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учб.-мтд. псб..doc
Скачиваний:
233
Добавлен:
22.03.2016
Размер:
3.6 Mб
Скачать

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

В МК AVR семейства Mega разделены адресные пространства памяти программ и памяти данных, а также шины доступа к ним. Такая структура позволяет центральному процессору работать одновременно как с памятью программ, так и с памятью данных, что существенно увеличивает производительность. Обобщенная карта памяти МК приведена на рис. 7.13.

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

Рис. 7.13

граммы. В связи с тем, что длина команд кратна одному слову (16 бит), память программ имеет 16-разрядную организацию, соответственно объем памяти МК составляет 64К (64х1024) 16-разрядных слов. FLASH-память программ рассчитана как минимум на 1000 циклов стираний/записей.

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

Для хранения переменных программ помимо РОН также может использоваться внутреннее ОЗУ объемом 512 байт.

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

Рис. 7.14

Все РОН непосредственно доступны АЛУ. Благодаря этому любой РОН может использоваться практически во всех командах и как источник данных и как приемник данных.

7.4.3. Некоторые сведения о системе команд микроконтроллера

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

Система команд микроконтроллеров AVR содержит следующие основные группы:

- команды логических операций;

- команды арифметических операций и команды сдвига;

- команды операций с битами;

- команды пересылки данных;

- команды передачи управления и некоторые другие команды.

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

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

Примеры команд арифметических операций.

Сложение содержимого двух РОН:

мнемоническое обозначение команды: ADD Rd, Rr;

алгоритм выполнения команды: содержимое РОН Rr складывается с содержимым РОН Rd, результат помещается в РОН R;

формат команды в двоичном коде: 0000 11rd dddd rrrr (одно слово (два байта)), здесь разряды rrrrr представляют двоичный код адреса Rr в адресном пространстве регистрового файла (рис.7.14), разряды ddddd - двоичный код адреса Rd в адресном пространстве регистрового файла, разряды 000011 представляют код операции сложения содержимого двух РОН.

Конкретный пример этой команды на ассемблере:

add r1, r2 < прибавить содержимое РОН2 к содержимому РОН1, результат поместить в РОН1 (в адресном пространстве регистрового файла (рис. 4) РОН1 имеет адрес 0x01, а РОН2 – адрес 0x02)>.

Формат команды в двоичном коде (машинный код): 0000 1100 0001 0010.

Формат этой же команды в шестнадцатеричном коде: 0c 12.

Вычитание константы из регистровой пары:

мнемоническое обозначение команды: SBIW Rd, K;

алгоритм выполнения команды: из содержимого регистровой пары, образованной двумя РОН (Rd+1) и Rd, вычитается значение константы K (0K63), результат помещается обратно в регистровую пару; регистровая пара образуется из двух смежных РОН с номерами 24..31, регистровые пары имеют условные номера 0…3;

формат команды в двоичном коде: 1001 0111 KKdd KKKK (одно слово (два байта)), здесь разряды KKKKKK представляют двоичный код константы K, разряды dd - двоичный код условного номера регистровой пары, разряды 10010111 представляет двоичный код операции вычитания константы из регистровой пары.

Конкретный пример этой команды на ассемблере:

sbiw r24, 0x01 <вычесть единицу из содержимого регистровой пары, образованной РОН24 и РОН25, результат поместить в эту же регистровую пару>;

формат команды в двоичном коде (машинный код): 1001 0111 0000 0001;

формат этой же команды в шестнадцатеричном коде: 97 01.

Команды операций с битами выполняют установку или сброс заданного разряда РОН или РВВ, причем для изменения разрядов регистра состояния SREG имеются также дополнительные команды, так как проверка состояния разрядов именно этого регистра производится чаще всего.

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

РОНРОН;

РОНРВВ;

РОНпамять данных.

Примеры команд пересылки.

Загрузка константы K в РОН:

мнемоническое обозначение команды LDI Rd,K;

алгоритм выполнения команды: в РОН Rd загружается константа K (0K255), данная команда применима только к старшей половине РОН (РОН 16…31) с адресами 0x10…Ox1F (рис.7.14);

формат команды в двоичном коде: 1110 KKKK dddd KKKK (одно слово (два байта)), здесь KKKKKKKK представляет двоичный код константы K, dddd - двоичный код адреса РОН в адресном пространстве регистрового файла, при этом старший разряд кода адреса игнорируется, 1110 - код операции пересылки, представляющей запись в РОН константы K.

Конкретный пример этой команды на ассемблере:

ldi r18, 0xFF <загрузить число 0xFF в РОН18 (в адресном пространстве регистровой памяти (рис.7.14) РОН18 имеет адрес 0x12)>;

формат команды в двоичном коде (машинный код): 1110 1111 0010 1111;

формат этой же команды в шестнадцатеричном коде: ef 2f.

Пересылка содержимого РОН в РВВ:

мнемоническое обозначение команды: OUT A, Rr;

алгоритм выполнения команды: содержимое РОН Rr пересылается в РВВ с адресом А в адресном пространстве регистровой памяти;

формат команды в двоичном коде: 1011 1AAr rrrr AAAA (одно слово (два байта)), здесь AAAAAA представляет двоичный код адреса РВВ в адресном пространстве регистровой памяти , rrrrr - двоичный код адреса РОН, 10111– код операции пересылки из РОН в РВВ.

Конкретный пример этой команды на ассемблере:

out 0x15, r18 <переслать содержимое РОН18 в РВВ с адресом 0x15 ( РОН18 в адресном пространстве регистрового файла имеет адрес 0x12)>;

формат команды в двоичном коде (машинный код): 1011 1011 0010 0101;

формат этой же команды в шестнадцатеричном коде: bb 25.

Команды передачи управления включают команды условного и безусловного перехода, вызова подпрограмм и возврата из них. Также к этой группе относятся команды сравнения, формирующие флаги регистра состояния SREG, и предназначенные, как правило, для работы совместно с командами условного перехода. Ниже приводятся примеры команд передачи управления.

Условный относительный переход, выполняемый в случае, если флаг Z (первый разряд регистра состояния SREG) не установлен, т. е. имеет значение «0»:

мнемоническое обозначение команды: BRNE k;

алгоритм выполнения команды: проверяется флаг Z и если он не установлен, то выполняется переход к команде, адрес которого определяется величиной смещения k (PC= PC+k+1); если же флаг Z установлен (имеет значение «1»), то продолжается выполнение команд программы в естественном порядке (PC=PC+1).

Конкретный пример на ассемблере этой команды, размещенной в адресном пространстве памяти программ (рис.7.13):

0x00da/… <команда программы с адресом da>;

0x00db/ brne -2 <проверить флаг Z, если он не установлен, выполнить переход к команде по новому содержимому счетчика команд PC=PC+k+1=db+(-2)+1=da, т. е. к предыдущей команде, если же флаг Z установлен, то по текущему содержимому счетчика PC=PC+1=db+1=dc продолжится естественный ход выполнения программы, т. е. начнется выборка команды с адресом dc;

0x00dc/… <команда программы с адресом dc>.

Абсолютный безусловный переход:

мнемоническое обозначение команды: JMP k;

алгоритм выполнения команды: выполняется переход по адресу k, который рассматривается как метка.

Конкретный пример этой команды, размещенной в адресном пространстве памяти программ:

0x0000/ jmp 0x008c <выполнить переход по адресу-метке 0x008c>;

0x008c/ <команда программы с адресом 0x008c, двоеточие после кода адреса указывает, что код адреса рассматривается как метка>.