您的位置 首页 编程

VxWorks LPC2104 BSP ARM

摘要:在新的目标板上安装VxWorks的过程极具挑战性。本文较详细地介绍基于LPC2104的arm开发板的BSP设计方法,并给出源代码。关键词:VxWorks LPC2104 BSP armV

摘要:在新的方针板上装置VxWorks的进程极具挑战性。本文较具体地介绍依据LPC2104的arm开发板的BSP规划办法,并给出源代码。

关键词:VxWorks LPC2104 BSP arm

VxWorks是一种商用嵌入式实时操作体系(RTOS)多年来,风河公司为用户供给了一系列广泛的板级支撑包(BSP)。可是,跟着CPU的开展,用户自己规划的硬件渠道越来越多,分散性越来越大,因而介于硬件渠道和操作体系之间的BSP的自主设备也日益急迫。EasyARM开发板是广州周建功单片机有限公司开发的依据飞利浦LPC2104型arm7TDMI芯片的低价位学习板,具有128KB的Flash,16KB的RAM,满意VxWorks运转的最低要求。

1 格局阐明及格局转化程序的制造

Tornado发生的方针代码的默许格局是Motorola开发板的Flash下载工具只能下载Intel 32bit格局。有必要将它们进行转化才能将代码写入到Flash中去。下面以Motorola的S2格局为例阐明格局的转化。

S2的一种实践格局如下:

S0120000626F6F74726F6D5F726532E686578CF

S214000000060000EABD0300EAA50300EAB70300EA1B

S804000000FB

其间第一条是记载的头部。第二条是地址和对应的数据记载,S2表明24位地址的格局,14表明开端地址000000和对应的数据及奇偶效验对的总和。最终两位表明一切十六进制数对的校验和。最终一条是记载的完毕标志。

Intel 32 bit的一种实践格局如下:

:020000040000FA

:10000000060000EABD0300EABB50300EAB70300EA20

…………

:00000001FF

其间第一条是记载的头部,表明32位地址的高16位为0000。在第二条记载中,:表明记载的开端,10表明记载对的个数,0000表明开端地址的值,最终两位表明校验和。最终一条是记载的完毕标志。

了解这两种格局后,编写格局转化程序便是很简单的一件事情。

2 BSP的规划进程及软件仿真办法

2.1 驻留ROM/Flash的体系各段分配状况

因为LPC2104只要16KB的RAM,故只能程序代码和数据放在Flash中,开机后再将数据拷贝到RAM内,而程序仍然放在Flash中并在其间运转,即所谓的ROM Resident Image规划。在Tornado集成开发环境下,选取templatarm的BSP生成的bootrom_res.hex文件便是这种ROM_Resident文件,其代码段、数据段、仓库段分别在Flash和RAM中的状况如图1。

Flash的分配和对应常量的界说

片内Flash的地址空间为0x00000000~0x00020000

ROM_TEXT_ADRS=00000000代码段的开端地址

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)

_TIME1_IRQ_Hander:

SUB LR,LR,#4 /*核算回来地址*/

STMFD SP!,{R0-R11,R12,LR} /*保存使命环境*/

MRS R3,SPSR /*保存状况*/

STMFD SP!,{R3}

BL sysAuxClkInt /*调用C言语的间断处理程序*/

LDMFD SP!,{R3}

MSR SPSR_cxsf,R3

LDMFD SP!,{R0-R11,R12,PC}

快速间断函数VxWorks不必由用户自己界说。其结构如下:其间FIQ_Exception()函数由C言语界说,在文件开端用globl FUNC(FIQ_Exception)声明。

FIQ_Hander:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/297534.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部