课程

教学相长

认真教书,认真学习

第一章 概述
第二章 Nios II处理器体系结构
第三章 Avalon接口规范
第四章 SOPC软硬件开发平台
第五章 Nios II处理器常用外设
第六章 μC/OS II操作系统移植
第七章 Nios II系统深入设计
第八章 调试技术

Nios II 寄存器

Nios II处理器包含32个通用寄存器、6个控制寄存器。该结构支持管理模式和用户模式,防止控制寄存器受到出错程序的破坏。

通用寄存器

32个通用寄存器分别为r0~r31。

寄存器

名字

 

寄存器

名字

   

r0

zero

清零

r4

 

传递给函数的参数

r1

at

汇编的临时变量寄存器

r5

 

传递给函数的参数

r2

 

函数返回值(低32位)

r6

 

传递给函数的参数

r3

 

函数返回值(高32位)

r7

 

传递给函数的参数

           

r8

 

调用者要保存的寄存器

r20

 

子程序要保存的寄存器

r9

 

调用者要保存的寄存器

r21

 

子程序要保存的寄存器

r10

 

调用者要保存的寄存器

r22

 

子程序要保存的寄存器

r11

 

调用者要保存的寄存器

r23

 

子程序要保存的寄存器

r12

 

调用者要保存的寄存器

r24

et

为异常处理保留

r13

 

调用者要保存的寄存器

r25

bt

为程序断点保留

r14

 

调用者要保存的寄存器

r26

gp

全局指针

r15

 

调用者要保存的寄存器

r27

sp

堆栈指针

r16

 

子程序要保存的寄存器

r28

fp

帧指针

r17

 

子程序要保存的寄存器

r29

ea

异常返回地址

r18

 

子程序要保存的寄存器

r30

ba

断点返回地址

r19

 

子程序要保存的寄存器

r31

ra

函数返回地址

在这些通用寄存器中,有些寄存器还具有供汇编程序识别的特殊名称。这些通用寄存器的功能如下。

zero寄存器(r0)总是返回0,对该寄存器写操作无效。Nios II无清零指令,常用r0对寄存器清零。

r1或at在汇编程序中常用做临时变量寄存器。

r2,r3用于存放子程序的返回值。

r4~r7用来传递4个非浮点参数给一个子程序。r4传递第一个参数,r5传递第二个参数,依此类推。若四个寄存器不够传递参数,编译器将通过堆栈来传递。

r8~r15用于子程序调用,子程序可以使用其中的值而不用保存它们。但调用者必须清楚:这些寄存器中的值可能被一次子程序调用改变,所以调用者有责任保存它们。

r16~r23用于子程序调用,子程序必须保证这些寄存器中的值在调用前后保持不变,即要么在子程序执行时不使用它们,要么使用前把它们保存在堆栈中并在退出时恢复。

r24或et在异常处理时使用。使用时,可以不恢复原来的值。该寄存器很少做其他用途。

r25或bt在程序断点处理时使用。使用时,可以不恢复原来的值。该寄存器很少作其他用途。

r26或gp是全局指针。指向静态数据区中一个运行时临时决定的地址。存取位于gp值上下32KB范围内的数据时,只需要一条以gp作为基指针的指令即可完成。

r27或sp是堆栈指针。Nios II没有专门的出栈(POP)、入栈(PUSH)指令,在子程序入口处,sp指向栈底部,以sp为基址,用寄存器基址+偏移地址的方式来访问栈中的数据。

r28或fp是帧指针,习惯上用于跟踪栈的变化和维护运行环境。

r29或ea用于保存异常处理时的程序返回地址。

r30或ba用于保存程序断点处理的程序返回地址。

r31或ra用于保存子程序调用的返回地址。

控制寄存器

6个控制寄存器分别为ct10~ct15。所有控制器都有供汇编程序识别的特殊名称,如表9.3所示。控制寄存器的访问与通用寄存器不同,只有特殊控制寄存器读/写指令指令rdctl和wrctl才可以读/写控制寄存器。控制寄存器只有在管理模式才可被访问。

寄存器

bit位意义:31…2

1

0

ct10

status

保留

U

PIE

ct11

estatus

保留

EU

EPIE

ct12

bstatus

保留

BU

BPIE

ct13

ienable

中断允许位

ct14

ipending

中断发生标志位

ct15

cpuid

唯一的处理器标识号

控制寄存器的功能如下所述。

status状态寄存器:只有第1位和第0位有意义。第1位U反映处理器当前状态。'1'表示处于用户态(User-mode),'0'表示处于超级用户态(Supervisor Mode);第0位PIE是处理器中断允许位,'1'表示处理器允许外设中断,'0'表示处理器禁止外设中断,PIE为1时,中断是否被处理还要看 ienable寄存器的值。

estatus寄存器:在异常处理时保存status寄存器内容。其中EPIE位被定义,它保存了status寄存器中的PIE位。异常处理程序能检测estatus寄存器,以确定处理器的异常状态。中断返回时,eret指令将estatus寄存器值复制回status寄存器,恢复异常发生前的 status内容。

bstatus寄存器:在处理断点时保存status寄存器内容。其中BPIE位被定义,它保存了status寄存器中的PIE位。当断电发生时,status寄存器将被复制到bstatus寄存器中,利用bstatus寄存器可恢复status寄存器断点之前的内容。

ienable寄存器:控制外部硬件中断的处理。寄存器中的每一位控制一个中断输入,共有32个中断输入irq0~irq31。1表示中断允许,0表示中断禁止。

ipending寄存器:其值用来表示此时哪个中断已注册。某位为1表示相应的irq输入有效且相应的中断在ienable寄存器中已被允许。

cpuid寄存器:主要是在多处理器系统中,保持一个唯一标识处理器的静态值。cpuid寄存器的值在系统创建时就已确定。

影子寄存器

指某些寄存器的镜像寄存器,用于与原始寄存器同步,但当进入某些Exception Handler处理时,Raw寄存器值发生变化,而Shadow寄存器值不变,
这样出Handler时,Raw寄存器值可从Shadow寄存器恢复。