Board logo

标题: ARM remap与重定位摘抄 (3) [打印本页]

作者: yuyang911220    时间: 2014-6-30 18:51     标题: ARM remap与重定位摘抄 (3)

表1
异常类型 工作模式 正常地址 复位 管理 0x00000000 未定义指令 未定义 0x00000004 软件中断(SWI) 管理 0x00000008 预取中止 中止 0x0000000 数据中止 中止 0x00000010 预留 - 0x00000014 IRQ(中断) IRQ 0x00000018 FIQ(快速中断) FIQ 0x0000001 地址重新映射之后,入口地址被映射到RAM中,中断处理代码也被搬移到RAM地址空是。此时,中断响应和中断处理的速度都将大大加快,这将有利于提高整个系统的实时性。异常中断向量表的设计结构如图3所示。
下面是各部分的源代码(以IRQ异常中断为例)。
异常向量表的定义:(系统初始化时,将异常处理代码入口地址写入异常中的向量表)
_RAM_END_ADDREQU0x01000000;重映射后RAM的终止地址
MAP(_RAM_END_ADDR-0x100)
SYS_RST_VECTOR#4
UDF_INS_VECTOR#4
SWI_SVC_VECTOR#4
INS_ABT_VECTOR#4
DAT_ABT_VECTOR#4
RESERVED_VECTOR#4
IRQ_SVC_VECTOR#4
FIQ_SVC_VECTOR#4
异常初始化代码:

bIRQ_SVC_HANDLER;0x18

IRQ_SVC_HANDLER
SUBsp,sp,#4;满递减堆栈
STMFDsp!,{r0}
LDRr0,=IRQ_SVC_VECTOR;读取中断向量,
;IRQ_SVC_VECTOR=SystemrqHandle
LDRr0,[r0]
STRr0,[sp,#4]
LDMFDsp!,{r0,pc};跳转到异常中断处理代码入口
异常处理入口代码:

SystemIrqHandler
IMPORTISR_IrqHandler
STMFDsp!,{r0-r12,lr}
BLISR_IrqHandler;跳转到C代码中异常中断处理程序ISR_IrqHandler
LDMFDsp!,{r0-r12,lr}
SUBSpc,lr,#4

在如上的结构中,不管系统是否进行了地址的重映射,异常中断向量都可以在运行时动态改变,大大提高了中断处理中的灵活性。中断向量可以在运行时指向不同的异常处理代码入口。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0