原创 如何使用SH2A的Register Bank

2011-2-25 14:01 1991 4 4 分类: MCU/ 嵌入式
来源:瑞萨单片机论坛

SH2A RISC体系是瑞萨基于SH2的结构上发展而来的,具有比SH2更强的处理能力,采用超标量超流水线技术,单个周期可以执行最多2条指令。CPU时钟频率可以达到200MHZ。

有趣的是,SH2A里面有15组寄存器缓冲区,称为Register Banks(以下简称为BANK)。
BANK主要用来发生中断时快速保存相关的寄存器和某些值,SH2A里面的每组BANK能保持的有R0~R14,GBR,PR,MACH,MACL一共19个寄存器和一个该中断向量在向量表中的地址偏移值VTO。如图:

如何使用SH2A的Register Bank - 瑞沙 - 瑞萨产品世界


当IO设备的中断产生时,如果开启了BANK功能,这19个寄存器会自动保存到BANK0里,如果发生了中断嵌套,则寄存器会继续保存到BANK1..BANK2....,这15组BANK实际上是一个栈的结构。当发生了15级中断嵌套后,则会发生BANK溢出异常(overflow),此时CPU的寄存器不会被保存到BANK里,而是保持到栈里。
当从中断里返回时,执行RESBANK指令,则可以从BANK里恢复寄存器内容。但是,如果BANK里没有数据时,执行RESBANK,则会发生BANK下溢错误(underflow)。

与BANK有关的寄存器,如图:

如何使用SH2A的Register Bank - 瑞沙 - 瑞萨产品世界


IBCR用来使能或禁止某个中断优先级对应的中断是否使用BANK。比如将BIT15设置为1,则优先级为15的中断使用BANK。
IBNR的BE位可以设置BANK使能总开关,BN位记录使用的BANK数,每使用一个BANK,则IBNR加1;恢复寄存器时,IBNR减1。类似于栈指针寄存器。
如图:

如何使用SH2A的Register Bank - 瑞沙 - 瑞萨产品世界



使用BANK的优点:
使用BANK,能在中断时快速的保持寄存器,以满足系统对时间的响应度。保存BANK发生在中断响应后与开始执行中断ISR之间,不同于传统的CPU需要在ISR里保存寄存器。
执行一条RESBANK指令从BANK恢复寄存器时,只需要9个时钟周期(普通的指令需要19个周期)。
因此,使用BANK功能,是系统发生中断时,能节约(19-9)+19 = 29个时钟周期。
如图:

如何使用SH2A的Register Bank - 瑞沙 - 瑞萨产品世界


使用BANK的缺点:
由于SH2A的BANK是一种类似于栈的设备,但是它又没有栈灵活,所以程序员几乎无法控制BANK的行为。
程序员对BANK的操作为:开启或禁止BANK,但是不能修改BANK的内容。原因是IBNR的BN位是只读的,它不能像SP栈指针寄存器那样可以灵活的操作。
当我们在SH2A上运行多任务操作系统时,如果开启BANK,一定要控制好BANK的行为,否则会带来灾难性的后果!

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条