Указатель стека - Stack Pointer - SP

Микроконтроллеры AVR оснащены 16-разрядным указателем стека, размещенным в двух регистрах пространства I/O по адресам $3E ($5E) и $3D ($5D). Поскольку микроконтроллеры ATmega603/103 поддерживают объем SRAM до 64 Кбайт, то используются все 16 разрядов указателя стека.

Указатель стека указывает на область в SRAM данных, в которой размещаются стеки подпрограмм и прерываний. Объем стека в SRAM данных должен задаваться программой перед каждым вызовом подпрограммы и обработкой разрешенного прерывания. Указатель стека декрементируется на единицу, при каждом занесении командой PUSH данных в стек, и на две единицы при занесении данных в стек подпрограммой CALL и прерыванием.

Указатель стека инкрементируется на единицу, при извлечении данных из стека командой POP, и на две единицы при извлечении данных из стека при возврате из подпрограммы (RET) или возврате из прерывания (IRET).

Биты
               
$3E ($5E) $3D ($5D)
SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8
SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0
SPH SPL
 
               
 
Чтение/Запись
R/W R/W R/W R/W R/W R/W R/W R/W
R/W R/W R/W R/W R/W R/W R/W R/W
 
Начальное состояние
               
               
 

Регистр выбора страницы Z RAM - The RAM Page Z Select Register - RAMPZ

Биты
               
$3B ($5B)
- - - - - - - RAMPZ0
RAMPZ
Чтение/Запись
R R R R R R R R/W
 
Начальное состояние
               
 

Регистр RAMPZ используется обычно для определения к какой странице RAM, емкостью 64К, возможно обращение посредством указателя Z. Поскольку микроконтроллеры ATmega603/103 не поддерживают SRAM с объемом свыше 64К, этот регистр используется только для выбора страницы в памяти программ при использовании команды ELPM. Различные установки бита RAMPZ0 оказывают следующий эффект:

RAMPZ0 = 0: Команде ELPM доступна память программ с адресами от $0000 до $7FFF (младшие 64 Кбайт)
RAMPZ0 = 1: Команде ELPM доступна память программ с адресами от $8000 до $FFFF (старшие 64 Кбайт).

Отметим, что на LPM не воздействует установка RAMPZ.

Микроконтроллер ATmega603 не содержит регистра RAMPZ и не имеет команды ELPM. Команда LPM способна перекрыть все пространство памяти программ микроконтроллера ATmega603.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: