Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП МПУ-13.doc
Скачиваний:
10
Добавлен:
01.04.2025
Размер:
6 Мб
Скачать
☆
    1. Структура и адресация памяти данных. Группа команд передачи данных

Память данных МК семейства AVR состоит из двух физически различных устройств:

  1. резидентного энергозависимого [volatile] статического оперативного запоминающего устройства (СОЗУ) [SRAM: Static Random Access Memory], разрядностью 8 бит (1 байт) и количеством ячеек от 96 до 4096 = 4 Кбайт; в некоторых моделях МК возможно наращивание ОЗУ внешними микросхемами с общим объемом не более 64 Кбайт;

  2. резидентного энергонезависимого [nonvolatile] электрически стираемого и записываемого (tЗП = 2…4 мс) постоянного запоминающего устройства (ЭСППЗУ) [EEPROM: Electrically Erasable Programmable Read-Only Memory], разрядностью 8 бит (1 байт) и количеством ячеек от 64 до 4096 = 4 Кбайт; целесообразно использовать как память настроек (параметров).

Адресация памяти. Все три перечисленные физические области памяти (FlashROM, SRAM, EEPROM) имеют раздельные адресные пространства (Табл. 1.1). Разделение обеспечивается системой команд и режимов адресации. Кроме того, в области SRAM с помощью режимов адресации выделяются две подобласти:

  1. файл регистров общего назначения (РОН) R0 … R31 занимает адреса 0 … 31 (= 0x1f);

  2. файл регистров ввода/вывода (РВВ) [I/O: Input/Output] состоит из 64 ячеек и занимает адреса 32 … 95 (0x20 … 0x5f).

Таблица 1.1. Карта памяти МК семейства AVR

Память программ

Память данных (ячейка – 1 байт)

Встроенная FlashROM

Объем: от 1024 байт

до 256 КБ

Ячейка:

2 байта – для программы

1 байт – для данных

Адреса

Энергозависимая

Энергонезависимая

0x00

…

0x1f

РОН (Registers)

0

…

31

Встроенная EEPROM

64 Б … 4 КБ,

Адреса:

0x00

…

E_END

0x20

…

0x5f

РВВ (I/O)

0

…

63

0x60

…

S_END

Встроенная SRAM

(Data)

0…8 КБ

S_END+1

…

0xff

Внешняя SRAM

0…64 КБ

Область РОН является наиболее интенсивно используемой областью памяти данных (ПД): только в ней располагаются операнды арифметико-логической группы команд и реализуются сложные режимы адресации. Пары регистров R27:R26=X, R29:R28=Y, R31:R30=Z могут использоваться как 16-разрядные для адресации памяти данных – X, Y, Z и памяти программ – Z. Остальные области памяти доступны только командам передачи данных.

Регистры ввода/вывода, иначе называемые регистрами специальных функций (РСФ) [SFR: Special Function Register], позволяют следить за состоянием и управлять аппаратными ресурсами МК: процессора, EEPROM, системы прерываний, параллельных портов и других встроенных периферийных устройств. К этой подобласти относятся регистр состояния SREG и 16-разрядный регистр-указатель стека SP [Stack Pointer] (состоит из двух 8-разрядных регистров SPH и SPL).

Стеком называется область памяти данных, работающая по принципу «последним записан – первым считан» [LIFO: Last Input – First Output]. Используется при выполнении подпрограмм. При вызове подпрограммы в стеке аппаратно сохраняется адрес следующей за вызовом команды, при возврате из подпрограммы этот адрес восстанавливается из стека.

Также стек может использоваться программистом или транслятором для передачи параметров в подпрограммы или из подпрограммы. В подпрограммах обслуживания прерываний стек используется для сохранения и восстановления контекста.

В данной серии МК стек «растет вниз», начиная со старших адресов SRAM, поэтому при помещении данных в стек используется постдекремент указателя стека, т. е. уменьшение значения SP на 1 после записи, обозначается (SP)–, при извлечении из стека – прединкремент, т. е. увеличение значения SP на 1 перед записью, обозначается +(SP).

Группу команд передачи данных можно разделить на подгруппы, в зависимости от обслуживаемых областей памяти:

  1. РОН ↔ константа: LDI.

Пример: LDI Rd*,K8 ;Загрузка 8-разрядной константы в РОН Rd*=R16…R31.

  1. РОН ↔ РОН: MOV, MOV.

Пример: MOV R0, R16 ;Копирование содержимого РОН R16 в R0.

  1. РОН ↔ РВВ: IN, OUT.

Пример: IN Rd, P ;Копирование содержимого РВВ P=0…63 в РОН Rd=R0…R31.

Пример: OUT P, Rd ;Копирование содержимого РОН Rd=R0…R31 в РВВ P=0…63.

  1. РОН ↔ память данных (включая подобласти РОН и РВВ):

LD, LDD, LDS, ST, STD, STS, PUSH, POP.

Пример: LD Rd, X ; Загрузка содержимого байта SRAM по адресу (R26:R27)=(X) в РОН Rd.

Пример: STS А16, Rr ; Сохранить содержимое РОН Rr в SRAM по адресу (А16).

Пример: PUSH Rr ; Протолкнуть содержимое РОН Rr в стек.

Пример: POP Rd ; Извлечь содержимое байта из стека в РОН Rd.

  1. РОН  память программ (константа): LPM, ELPM.

Пример: LPM ;Загрузка содержимого байта FlashROM по адресу (R30:R31)=(Z) в РОН R0 (адрес < 65536).

Пример: ELPM Rd,Z ;Загрузка содержимого байта FlashROM по адресу (Z) в РОН Rd (адрес > 65535).

Режимы адресации данных в группе команд передачи данных имеют наибольшее разнообразие:

  1. Абсолютная адресация – код данных (константа) входит в код команды, подгруппа 1.

Пример: К8 – 8-разрядная константа (0…255).

  1. Прямая (непосредственная) адресация – код адреса входит в код команды, подгруппы: 1 – 5.

Пример: Rd(Rd*) – 5(4)-разрядный адрес РОН – приемника = 0…31 (16…31). Под название – регистровый!

Пример: P – 6-разрядный адрес РВВ = 0…63. Под название – регистровый!

Пример: А16 – 16-разрядный адрес SRAM = 0…65535. Формат команды – 2 слова (4 байта)!

  1. Косвенная адресация – код адреса (или его часть) находится в одном из регистров-указателей Z, Y, X, с разновидностями:

    1. Простая косвенная – содержимое регистра указателя не изменяется во время выполнения команды, подгруппы 4, 5.

Пример: Y=R28:R29 – 16-разрядный адрес SRAM.

Пример: Z=R30:R31 – 16-разрядный адрес FlashROM.

    1. Относительная косвенная (индексная) – то же, что и для простой, но исполнительный адрес образуется суммированием содержимого регистра-указателя и константы (индекса) в коде команды (6 разрядов, 0…63), подгруппа 4.

Пример: LDD Rd, Z+i6 ;Загрузить в Rd содержимое байта SRAM по адресу (R30:R31)+(i6), i6=0…63.

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

Пример: LD Rd, –Y ; Y  Y–1, Rd  (Y).

Пример: PUSH Rr ; (SP) Rr, SP SP–1. !Постдекремент !

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

Пример: ST X+, Rr ; (X)  Rr, X  X+1.

Пример: POP Rd ; SP  SP+1, Rd  (SP). ! Прединкремент !

Общие черты группы команд передачи данных:

  • не изменяют состояние флагов в регистре состояния SREG;

  • формат команд: для большинства – 1 слово, 2 слова – для команд с непосредственной адресацией;

  • время выполнения зависит от области действия: 1 машинный цикл – для команд 1–3-й подгрупп (РОН, РВВ и константы), 2 м. ц. – для 4-й подгруппы (SRAM) и 3 м. ц. – для 5-ой подгруппы (FlashROM).

Система команд содержит ряд команд, обеспечивающих изменение состояния отдельных битов и анализ состояния отдельных битов:

– SBI [Set Bit], CBI [Clear BIt] – установить, очистить указанный бит РВВ;

– SBIS [Skip if Bit Input/output register Set], SBIC [Skip if Bit Input/output register Clear] – пропустить следующую команду, если указанный бит РВВ установлен, сброшен.

В тех случаях, когда последовательность действий, требуемая при заданном состояния бита РВВ, не укладывается в одну машинную команду, сразу после команды SBIS / SBIC ставится команда безусловного перехода RJMP с адресом перехода к действиям, выполняемым при невыполнении указанного в предыдущей команде условия.

При размещении в памяти данных многобайтных чисел в МК семейства AVR используется принцип размещения младшего байта по меньшему адресу, а старшего – по большему адресу. Так некоторые команды используют пары регистров общего назначения, например X = XH:XL = R26:R27, в этой записи знак “:” называют знаком конкатенации, регистр R26:R27.

Доступ к области EEPROM обеспечивается через группу регистров ввода/вывода:

  • EEAR [EEPROM Address Register] - регистр адреса, при объеме EEPROM более 255 байт состоит из двух 8-разрядных регистров EEARH:EEARL;

  • EEDR [EEPROM Data Register] - регистр данных;

  • EECR [EEPROM Control Register] - регистр управления, состоящий из следующих битов:

  • EERE(0) [Read Enable] – программная установка в «1» инициирует чтение, по окончании чтения аппаратно сбрасывается в «0»;

  • EEWE(1) [Write Enable] – программная установка в «1» инициирует запись при EEMWE=1, сброс в «0» осуществляется аппаратно по окончании операции записи (2…4 мс);

  • EEMWE(2) [Master Write Enable] – предварительное разрешение записи по «1», аппаратный сброс через 4 м. ц. после установки;

  • EERIE(3) [Ready Interrupt Enable] – разрешение прерывания («1») по готовности, т. е. окончанию записи.