Board logo

标题: 基于LPC2104的VxWorksBSP设计 03 [打印本页]

作者: samwalton    时间: 2014-4-26 13:38     标题: 基于LPC2104的VxWorksBSP设计 03

在这个文件中,主要是在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设计得有所帮助。




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