VxWorks LPC2104 BSP ARM 02
![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
VxWorks LPC2104 BSP ARM 02
ROM_SIZE=00020000 Flash的大小
RAM的分配和对应常量的定义
片内RAM的地址空间为0x40000000~0x40003FFF
0x40000000~0x4000003F共64字节,放中断向量表LOCAL_MEM_LOCAL_ADRS=0x400000000
RAM_LOW_ADRS=0x40000600
RAM_HIGH_ADRS=0x40000F00
LOCAL_MEM_SIZE=0x00020000
根据上面的分析,修改Makefile和config.h中相应的部分,使两者一样。
堆栈的分配
堆栈的地址设为STACK_ADRS,由系统定义,从RAM_LOW_ADRS开始向下伸展。
2.2 romlnit.s文件
arm的异常向量表如表1。LPC2104的异常向量表也一样,只不过它可以重新映射到RAM的头部,即从0x40000000开始的32个字节。
表1 arm异常向量位置
地 址 异 常
0x0000 0000 复位
0x0000 0004 未定义指令
0x0000 0008 软件中断
0x0000 000C 预取指中止(从存储器取指出错)
0x0000 0010 数据中止(数据访问存储器出错)
0x0000 0014 保留
0x0000 0018 IRQ
0x0000 001C FIQ
*在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:
B start /*复位异常*/
B excEnterUndef /*未定义异常 */
B excEnterSwi /*软中断*/
B excEnterPreftchAbort/*予取指异常*/
B excEnterDataAbort /*数据异常*/
.ascii "20B9" /*保留空间,由格式转换程序超填入0xB9205F80*/
LDR pc,[pc,#-0xFF0]/*IRQ中断入口函数*/
B FIQ_Hander /*FIQ中断入口函数*/
IRQ中断函数的入口函数是C语言写的sysClkInt()和sysAuxClkInt(),需要自己保存现场和恢复现场,代码为:
_arm_FUNCTION(TIME0_IRQ_Hander)
_TIME0_IRQ_Hander:
SUB LR,LR,#4 /*计算返回地址*/
STMFD SP!,{R0-R11,R12,LR} /*保存任务环境*/
MRS R3,SPSR /*保存状态*/
STMFD SP!,{R3}
BL sysClkInt /*调用C语言的中断处理程序*/
LDMFD SP!,{R3}
MSR SPSR_cxsf,R3
LDMFD SP!,{R0-R11,R12,PC}
_arm_FUNCTION(TIME1_IRQ_Hander) |
|
|
|
|
|