
15
Y寄存器
7
R29 ( 0x1D )
15
Z寄存器
7
R31 ( 0x1F的)
YH
0
7
R28 ( 0x1C处)
ZH
0
7
R30 ( 0X1E )
YL
0
0
ZL
0
0
在不同的寻址模式中,这些地址寄存器可以实现固定偏移
位置,自动加一和自动减一(见指令集
有关详细信息,参考) 。
RAM页面Z选择寄存器 -
RAMPZ
位
7
–
6
–
R
0
5
–
R
0
4
–
R
0
3
–
R
0
2
–
R
0
1
–
R
0
0
RAMPZ0
读/写
0
RAMPZ
读/写
初始值
R
0
位7..2 - Res:保留位
这些是保留位,读返回值为零。当写这个地址某些地区可能
化,写这些位为零与未来器件的兼容性。
第1位 - RAMPZ0 :扩展内存页Z指针
该RAMPZ寄存器通常被用于选择64K RAM页面被访问
Z指针。由于AT90CAN128不支持超过64K的SRAM存储器,
该寄存器仅用于选择页面中的程序存储器访问时
在ELPM / SPM指令被使用。在RAMPZ0位的不同设置有
以下的效果:
RAMPZ0 = 0:
RAMPZ0 = 1:
程序存储器地址为0x0000 - 0x7FFF的(较低的64K字节)是
通过ELPM / SPM访问
程序存储器地址为0x8000 - 0xFFFF的(更高的64K字节)是
通过ELPM / SPM访问
注意, LPM不受该RAMPZ设置。
堆栈指针
堆栈主要用于存储临时数据,用于存储局部变量和
中断和调用子程序的返回地址。堆栈指针
总是指向堆栈的顶部。需要注意的是该协议栈实现成长
从更高的存储位置,以降低内存位置。这意味着,一个堆栈
PUSH指令减少堆栈指针。
堆栈指针指向数据SRAM堆栈区所在的子程序和接口
中断堆栈。数据SRAM堆栈空间必须由定义
之前的任何子程序调用的程序执行和使能中断。堆栈
指针必须被设置为指向上述地址0x60 。堆栈指针减一
当数据被压入与PUSH指令的堆栈,并且它是通过减
2时,返回地址被压入堆栈子程序调用或中断。
堆栈指针加一,当数据从栈中弹出的
POP指令,并且它是由两个递增当数据从与堆栈中弹出。
从子程序返回RET或RETI中断返回。
AVR的堆栈指针被实现为两个8位寄存器中的I / O空间。该num-
实际使用的比特误码率是依赖于实现。注意,在一些数据空间
12
AT90CAN128
4250E–CAN–12/04