网站首页 | 论文指导 | 经济论文 | 理工论文 | 管理论文 | 法律论文 | 行政论文 | 英语论文
艺术论文 | 农学论文 | 医学论文 | 文史论文 | 教育教学论文 | 论文定制 | 论文发表
论文库分类>>> 点这里访问轻松论文网主站>>>
您当前的位置:轻松论文网 -> 论文中心 -> 理工论文 -> 电子通信网络论文 -> 文章内容 退出登录 用户管理
 子栏目导航
· 计算机与信息技术论文
· 电子通信网络论文
· 自动化论文
· 土建水利论文
· 交通运输论文
· 化学与化工论文
· 石油与能源动力论文
· 机械制造论文
· 矿业与冶金论文
· 工程论文
· 生命环境论文
· 材料科学与工程
· 综合论文
 最新推荐
· 世界地缘政治体系与印度...
· 维新与革命:政治选择的...
· 世界地缘政治体系与印度...
· 中国国家安全哲学-政治哲...
· 政治学视野中的公共政策...
· 方法引导下的政治理论[上...
· 格拉修斯原则:基督教二...
· 方法引导下的政治理论[下...
· 国体、国情与现代国家-政...
· 试论我国今后政治发展的...
· 东亚的政治权威与现代化...
· 跨国收养法的概念与渊源...
 热门文章
· 开题报告的格式(通用...
· 怎样写开题报告
· [图文] 开题报告范文1(银行...
· 开题报告范文2(网上...
· 毕业论文开题报告-A...
· 开题报告的撰写方法...
· 开题报告范文3(网络...
· 文献综述的写法
· 毕业论文例文评析
· 开题报告撰写的方法...
 相关文章
· [图文] 基于ARM7核处理器Vx...
 
[论文定制][论文发表][价格总览][支付方式][购买流程]点击这里给我发消息 点击这里给我发消息
基于LPC2104的VxWorksBSP设计
作者:佚名  来源:不详  发布时间:2007-3-2 16:21:15  发布人:admin

减小字体 增大字体

摘要:在新的目标板上安装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 0018IRQ
0x0000 001CFIQ

 *在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:

STMFD SP!,{R0-R12,LR}

BL FIQ_Exception

LDMFD SP!,{R0-R12,LR}

SUBS PC,LR,#4

当系统上电时,如果地址0x00000014内的数据是0xB9205F80,则从Flash的零地址开始执行,也就是执行romInit()函数。此函数将启动方式BOOT_COLD放在R0中,作为romStart的参数,将系统设为SVC32模式,并禁止IRQ和FIR中断,设置好系统堆栈指针跳到romStart()执行。验证此部分程序执行情况的最简单的一种方法是用汇编写一段点灯程序,用以指令程序的执行情况。其中常量PINSEL0、PINSEL1、IODIR、SPI_IOCON可以头文件templatARM.h中用define定义。

#define PINSEL0 0xE002C000

#define PINSEL1 0xE002C004

#define IODIR 0xE0028008

#define SPI_IOCON 0x00003DD0

我们设计的点灯程序如下。将其放在romInit.s适当的位置,可以定位程序的运行情况。

LDR r0,=PINSEL0

MOV r1,#0

STR r1,[R0],#4

STR r1,[R0]

LDR r0,=PINSEL1

MOV r1,#0

STR r1,[R0],#4

STR r1,[R0]

LDR r0,=IODIR

LDR r1,SPI_IOCON

STR r1,[R0]

在Tornado集成开发环境下,templatARM的BSP生成bootrom_res.bin文件后,可以借助ASD1.2的AXD反汇编调方式器进行单步仿真和调试。

2.3 sysLib.c文件

在这个文件中,主要是在sysHwInit()函数内实现系统外设的配置,中断向量表的拷贝和重映射,系统定时器中断向量的安装,串口初始化等功能。在串口还没有调通之前,可以借助上面提到的简单点灯函数实现程序的定位。其用C语言重新定义如下(将它插入本文件的适当地址,可以指示各个函数的执行情况):

#include “LPC2106.h”

PINSEL0=0x00000000;

PINSEL1=0x00000000;

IODIR=0x00003DD0;

系统的初始化和配置与硬件系统高度相关。对这部分的代码不作过多的解释,请参看代码注释。几个常量定义如下:

#define Fosc 11059200 /*晶振频率,10MHz~25MHz应与实际一致*/

#define Fcclk(Fosc *4)

/*系统频率,必须为Fosc的整数倍(1~32),且<=60MHz*/

#define Fcco (Fosc *4)

/*CCO频率,必须为Fcclk的1、2、4、8倍,范围为156MHz~320MHz*/

#define Fpclk (Fcclk/4)*2

/*VPB时钟频率,只能为(Fcclk/4)的1、2、4倍*/

2.4 templateTimer.c文件

本文件主要实现与系统时钟和系统辅助时钟相关的函数。关于系统时钟的各函数定义如下(系统辅助时钟的各函数与系统时钟一样,只须将T0换成T1即可):

/*SysClkInt(),此函数每个时钟Tick被调用一次*/

void sysClkInt(void){

/*通知系统中断结束*/

T0IR=0x01;

T0MR0+=(Fpclk/sysClkTicksPerSecond);

VICVectAddr=0;

/*调用系统中断函数*/

if(sysClkRoutine!=NULL)

(*sysClkRoutine)(sysClkArg);

}

/*sysClkDisable()禁止系统时钟*/

void sysClkDisable(void){

if(sysClkRunning){

/*禁止系统时钟中断*/

VICIntEnClr=0x10;

T0TC=0;

SysClkRunning=FLASE;

}

}

/*sysClkEnable()启动系统时钟*/

void sysClkEnable(void){

static BOOL connected=FALSE;

if(!connected){

/*定时器0初始化*/

T0TC=0;

T0TCR=0x01;

T0MCR=0x01;

T0MR0=(Fpclk/sysClkTicksPerSecond);

VICIntEnable=0x10;

Connected=TRUE;

}

if(!sysClkRunning){

T0TC=0;

sysClkRunning=TRUE;

}

}

3 应用程序设计

由于EasyARM开发板本身资源较少,不可能与PC机连接成宿主机一目标机的调试环境,通过主机将代码下载到目标机再执行。因此在设计应用程序时,可以修改bootConfig.c文件中的bootCmdLoop()函数,生成bootrom_res.hex文件,格式转换后,下载到Flash中运行,在PC机上借助串口调试助手打印调试信息。具体过程是:在Tornado2.2集成开发环境下选取Build->Build Boot Rom,BSP选定templateARM,Image选定bootrom_res.hex,编译器选gnu,确认即可。

4 小结

VxWorks所需要的唯一的驱动程序是系统时钟,本文详细给出了系统时钟源代码,同时还给出了串口通信的源代码,使得开发板与PC机能正常通信。另外,给出了基于VxWorks的应用程序的设计方法。由于BSP的设计本身就是一件很具有挑战性的工作,相信本文对VxWorks的BSP设计得有所帮助。

论文指导 开题报告   论文格式   论文撰写   论文答辩   论文答谢   
经济论文 税收论文   证券投资论文   房地产论文   金融论文   投资论文   财政论文   西经论文   国际贸易论文   计量经济论文   国民经济论文   保险信托论文   地方经济   国际经济   新经济学   经济学理论   经济学其他   
理工论文 计算机与信息技术论文   电子通信网络论文   自动化论文   土建水利论文   交通运输论文   化学与化工论文   石油与能源动力论文   机械制造论文   矿业与冶金论文   工程论文   生命环境论文   材料科学与工程   综合论文   
管理论文 电子商务论文   会计论文   财务论文   人力资源论文   市场营销论文   企业管理论文   信息管理论文   旅游管理论文   工商管理论文   公共管理论文   物流管理论文   
法律论文 民法论文   刑法论文   诉讼法论文   行政法论文   国家法   宪法论文   土地资源环境法论文   国际法论文   劳动保障论文   商法论文   经济法论文   法史学论文   法理学论文   司法制度论文   
行政论文 中国政治论文   国际政治论文   管理科学论文   思想政治教育论文   国家行政管理论文   政治理论论文   哲学理论论文   三个代表论文   社工论文   
英语论文 学术英语论文   商务英语论文   科技英语论文   英语教学论文   
艺术论文 艺术理论论文   电视艺术论文   电影艺术论文   音乐论文   舞蹈论文   戏剧论文   美术论文   
农学论文 农艺学(园林,林学)论文   渔业论文   水产论文   植物保护论文   农业基础科学论文   综合论文   
医学论文 医学论文写作方法   基础医学论文   医药卫生论文   临床医学论文   药学论文   特种医学论文   护理学论文   
文史论文 中国史论文   世界史论文   考古论文   文字学论文   语法论文   中国文学论文   世界文学论文   文学理论论文   文艺美学论文   文学评论论文   经典名著赏析论文   新闻传媒学论文   社会学论文   
教育教学论文 语文论文   数学论文   英语论文   物理论文   美术论文   音乐论文   地理论文   化学论文   历史论文   体育论文   思想政治论文   生物自然论文   信息技术论文   德育管理论文   素质教育论文   教学管理论文   综合论文   
[ ] [返回上一页] [打 印] [收 藏]
上一篇文章:CODARTS建模方法在嵌入式软件开发中的应用
下一篇文章:嵌入式系统以太网卡控制器LAN91C96
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
服务电话:020-61131011;020-61131022 转82 投诉电话:020-61131011;020-61131022 转88 传真:020-61131022
电子邮件:paperease@vip.163.com paper@126.com 服务QQ:130008818 130009919
© 2002-2004 轻松论文网 赣ICP备05004673号 网络实名:轻松论文