Микроконтроллеры 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)
|
| RAMPZ
|
Чтение/Запись
|
|
|
Начальное состояние
|
|
|
Регистр 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.