logo

AVR应用笔记 AVR单片机内核剖析 ATmega128 堆栈指针

ATmega128 堆栈指针

以下资料参考马潮老师的中文手册,由微雪电子整理并发布,转载请注明出处:www.waveshare.net,否则追究相应责任!

堆栈指针主要用来保存临时数据,局部变量和中断/ 自程序的返回地址。堆栈指针总是指 向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数 值将减小。

堆栈指针指向位于SRAM 的函数及中断堆栈。堆栈空间必须在调用函数或中断使能之前 定义。指针必须指向高于$60 的地址。用PUSH 指令推数据入栈时,堆栈指针将减一, 而当调用函数或中断时,指针将减二。使用POP 指令时,堆栈指针将加一,而用RET 或 RETI 返回时,指针将加二。

AVR堆栈指针占用了I/O空间两个8位寄存器。使用的位数由实际情况决定。注意,在AVR 结构中某些操作使用的数据空间很小,只要SPL 即可 ,此时,不会给出SPH 寄存器。

ATmega128 堆栈指针

RAM 页面的Z 选择寄存器-RAMPZ

ATmega128 RAMPZ

• Bits 7..2 – Res: 保留
保留位,读操作返回值为零。在写数据时要写入0 以保证与未来产品的兼容。

• Bit 1 – RAMPZ0: 扩展RAM 页面Z 指针
RAMPZ 寄存器用于选择Z 指针访问的是哪一个64K RAM。由于ATmega128 不支持超过64K的存储器,因此RAMPZ只用来协助ELPM/SPM指令决定访问哪一个程序存储器页。不同的RAMPZ0 的作用如下:
RAMPZ0 = 0: ELPM/SPM 可以访问程序存储器地址$0000 - $7FFF ( 低64K 字节)
RAMPZ0 = 1: ELPM/SPM 可以访问程序存储器地址$8000 - $FFFF ( 高64K 字节)

LPM 不受RAMPZ 设置的影响。

 相关AVR资料说明

可作为如下AVR的参考资料: ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny2313 ATtiny26 ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32 ATmega64 ATmega128 ATmega162 ATmega169 ATmega169P ATmega8515 ATmega8535

 相关AVR型号资料

ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny26 ATtiny2313
ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32
ATmega64 ATmega128 ATmega162 ATmega169 ATmega8515 ATmega8535

ATmega128 堆栈指针

——