基于LPC2104的VxWorksBSP设计
址
异常
0x00000000复位0x00000004未定义指令0x00000008软件中断0x0000000C预取指中止(从存储器取指出错)0x00000010数据中止(数据访问存储器出错)0x00000014保留0x00000018IRQ0x0000001CFIQ
*在ARM文档中标识为保留,该位置被Boot装载程序用作者有效的用户程序关键字。
基于ARM体系结构的VxWorks的其中四个异常入口函数为:excEnterUndef、ecxEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在对应的位置用B指令跳到对应的函数中即可。代码如下:_ARM_FUNCTION(romInit)
_romInit:
ARM的异常向量表如表1。LPC2104的异常向量表也一样,只不过它可以重新映射到RAM的头部,即从0x40000000开始的32个字节。
基于ARM体系结构的VxWorks的其中四个异常入口函数为:excEnterUndef、excEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在对应的位置用B指令跳到对应的函数中即可。代码如下:
_ARM_FUNCTION(romInit)
_romInit:
cold:
Bstart/*复位异常*/
BexcEnterUndef/*未定义异常*/
BexcEnterSwi/*软中断*/
BexcEnterPreftchAbort/*予取指异常*/
BexcEnterDataAbort/*数据异常*/
.ascii"20B9"/*保留空间,由格式转换程序超填入0xB9205F80*/
LDRpc,[pc,#-0xFF0]/*IRQ中断入口函数*/
BFIQ_Hander/*FIQ中断入口函数*/
IRQ中断函数的入口函数是C语言写的sysClkInt()和sysAuxClkInt(),需要自己保存现场和恢复现场,代码为:
_ARM_FUNCTION(TIME0_IRQ_Hander)
_TIME0_IRQ_Hander:
SUBLR,LR,#4/*计算返回地址*/
STMFDSP!,{R0-R11,R12,LR}/*保存任务环境*/
MRSR3,SPSR/*保存状态*/
STMFDSP!,{R3}
BLsysClkInt/*调用C语言的中断处理程序*/
LDMFDSP!,{R3}
MSRSPSR_cxsf,R3
LDMFDSP!,{R0-R11,R12,PC}
_ARM_FUNCTION(TIME1_IRQ_Hander)
_TIME1_IRQ_Hander:
SUBLR,LR,#4/*计算返回地址*/
STMFDSP!,{R0-R11,R12,LR}/*保存任务环境*/
MRSR3,SPSR/*保存状态*/
STMFDSP!,{R3}
BLsysAuxClkInt/*调用C语言的中断处理程序*/
LDMFDSP!,{R3}
MSRSPSR_cxsf,R3
LDMFDSP!,{R0-R11,R12,PC}
快速中断函数VxWorks不用由用户自己定义。其框架如下:其中FIQ_Exception()函数由C语言定义,在文件开始用globlFUNC(FIQ_Exception)声明。
FIQ_Hander:
STMFDSP!,{R0-R12,LR}
BLFIQ_Exception
LDMFDSP!,{R0-R12,LR}
SUBSPC,LR,#4
当系统上电时,如果地址0x00000014内的数据是0xB9205F80 《基于LPC2104的VxWorksBSP设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/172484.html
异常
0x00000000复位0x00000004未定义指令0x00000008软件中断0x0000000C预取指中止(从存储器取指出错)0x00000010数据中止(数据访问存储器出错)0x00000014保留0x00000018IRQ0x0000001CFIQ
*在ARM文档中标识为保留,该位置被Boot装载程序用作者有效的用户程序关键字。
基于ARM体系结构的VxWorks的其中四个异常入口函数为:excEnterUndef、ecxEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在对应的位置用B指令跳到对应的函数中即可。代码如下:_ARM_FUNCTION(romInit)
_romInit:
ARM的异常向量表如表1。LPC2104的异常向量表也一样,只不过它可以重新映射到RAM的头部,即从0x40000000开始的32个字节。
基于ARM体系结构的VxWorks的其中四个异常入口函数为:excEnterUndef、excEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在对应的位置用B指令跳到对应的函数中即可。代码如下:
_ARM_FUNCTION(romInit)
_romInit:
cold:
Bstart/*复位异常*/
BexcEnterUndef/*未定义异常*/
BexcEnterSwi/*软中断*/
BexcEnterPreftchAbort/*予取指异常*/
BexcEnterDataAbort/*数据异常*/
.ascii"20B9"/*保留空间,由格式转换程序超填入0xB9205F80*/
LDRpc,[pc,#-0xFF0]/*IRQ中断入口函数*/
BFIQ_Hander/*FIQ中断入口函数*/
IRQ中断函数的入口函数是C语言写的sysClkInt()和sysAuxClkInt(),需要自己保存现场和恢复现场,代码为:
_ARM_FUNCTION(TIME0_IRQ_Hander)
_TIME0_IRQ_Hander:
SUBLR,LR,#4/*计算返回地址*/
STMFDSP!,{R0-R11,R12,LR}/*保存任务环境*/
MRSR3,SPSR/*保存状态*/
STMFDSP!,{R3}
BLsysClkInt/*调用C语言的中断处理程序*/
LDMFDSP!,{R3}
MSRSPSR_cxsf,R3
LDMFDSP!,{R0-R11,R12,PC}
_ARM_FUNCTION(TIME1_IRQ_Hander)
_TIME1_IRQ_Hander:
SUBLR,LR,#4/*计算返回地址*/
STMFDSP!,{R0-R11,R12,LR}/*保存任务环境*/
MRSR3,SPSR/*保存状态*/
STMFDSP!,{R3}
BLsysAuxClkInt/*调用C语言的中断处理程序*/
LDMFDSP!,{R3}
MSRSPSR_cxsf,R3
LDMFDSP!,{R0-R11,R12,PC}
快速中断函数VxWorks不用由用户自己定义。其框架如下:其中FIQ_Exception()函数由C语言定义,在文件开始用globlFUNC(FIQ_Exception)声明。
FIQ_Hander:
STMFDSP!,{R0-R12,LR}
BLFIQ_Exception
LDMFDSP!,{R0-R12,LR}
SUBSPC,LR,#4
当系统上电时,如果地址0x00000014内的数据是0xB9205F80 《基于LPC2104的VxWorksBSP设计(第2页)》