新闻中心

EEPW首页>嵌入式系统>设计应用> ARM S3C4510B系统中的异常中断技术

ARM S3C4510B系统中的异常中断技术

作者: 时间:2012-03-29 来源:网络 收藏

2中的处理程序的安装

通过向量表安装处理程序,即将异常向量表指向异常处理程序的入口,实现面向异常中断的跳转。这里需要介绍一下的中断向量表。在S3C4510B系统中,无论在地址重映射之前还是之后,异常中断向量表的入口地址为固定的(见表1)。当系统运行到满足异常中断条件而产生异常中断时,系统将自动跳入相应的异常中断向量表中。而在异常向量表中保存的,正是利用跳转指令或ldr指令指向该中断的异常中断处理程序的指令程序,这样就实现了异常中断处理程序的安装。以SWI软中断为例,异常中断安装的基本顺序如图2所示,其中异常中断向量的地址是固定的,其他地址为假设的。

2.1 利用跳转指令实现异常中断的安装

将BL指令放置到中断向量表的特定位置,跳转目标地址为中断处理程序的首地址,便可直接实现异常中断的安装。其优点是BL指令可以直接保存地址,缺点是BL的跳转范围只有32MB的地址空间,如bl SWI_Handler。

2.2 利用ldr指令实现异常中断的安装

利用ldr直接向程序计数器PC中赋值也可以实现中断处理程序的安装。先要将异常中断处理程序首地址的绝对地址放在邻近的一个存储单元中,然后用ldr命令将该内存单元中的地址读取到PC中。其优点是可调用程序的范围不受限制,如:

ldr pc,SWI_ADDR
……
SWI_ADDR dcd SWI_Handler

以上两种安装方法各有优缺点,需要根据实际情况来选择。 电子书籍网

3 S3C4510B系统中SWI异常中断实例

S3C4510B中的SWI指令可以用来实现RTOS中的系统功能调用。它由用户模式下当前执行的指令引发,通过一个24位的立即数来指代SWI需要调用的系统功能,调用执行的过程在特权模式中进行。

3.1 SWI异常中断的处理程序

通常我们把SWI的中断处理程序分为两级,分别完成立即数的读取和功能调用的执行。其指令代码如下:
……

stmfd sp!,{r0-r12,lr}
保护现场,保存寄存器的值
ldr r0,[lr,#-4]
lr寄存器保存指令
bic r0,r0,#0XFF000000 ;读取指令中的24位立即数
……
cmp R0,#MaxOfSWI
判断立即数是否有效
ldrls pc,[pc,r0,lsl #2]
b OutOfSWIRange ;超出范围
JumpListofSWI
dcd SWIPro_0
dcd SWIPro_1
……
其他所有的软中断入口
SWIPro_0
进入SWI对应立即数0的中断处理程序
……
对应立即数0的中断处理程序
b EndOfSWI
SWIPro0
进入SWI对应立即数1的中断处理程序
……
对应立即数1的中断处理程序
b EndOfSWI
……
其他的SWI处理程序
EndOfSWI
1dmfd sp!,{r0-r12,pc}^
恢复各寄存器

尘埃粒子计数器相关文章:尘埃粒子计数器原理


评论


相关推荐

技术专区

关闭