基于LPC2104的VxWorksBSP设计
,则从Flash的零地址开始执行,也就是执行romInit()函数。此函数将启动方式BOOT_COLD放在R0中,作为romStart的参数,将系统设为SVC32模式,并禁止IRQ和FIR中断,设置好系统堆栈指针跳到romStart()执行。验证此部分程序执行情况的最简单的一种方法是用汇编写一段点灯程序,用以指令程序的执行情况。其中常量PINSEL0、PINSEL1、IODIR、SPI_IOCON可以头文件templatARM.h中用define定义。
#definePINSEL00xE002C000
#definePINSEL10xE002C004
#defineIODIR0xE0028008
#defineSPI_IOCON0x00003DD0
我们设计的点灯程序如下。将其放在romInit.s适当的位置,可以定位程序的运行情况。
LDRr0,=PINSEL0
MOVr1,#0
STRr1,[R0],#4
STRr1,[R0]
LDRr0,=PINSEL1
MOVr1,#0
STRr1,[R0],#4
STRr1,[R0]
LDRr0,=IODIR
LDRr1,SPI_IOCON
STRr1,[R0]
在Tornado集成开发环境下,templatARM的BSP生成bootrom_res.bin文件后,可以借助ASD1.2的AXD反汇编调方式器进行单步仿真和调试。
2.3sysLib.c文件
在这个文件中,主要是在sysHwInit()函数内实现系统外设的配置,中断向量表的拷贝和重映射,系统定时器中断向量的安装,串口初始化等功能。在串口还没有调通之前,可以借助上面提到的简单点灯函数实现程序的定位。其用C语言重新定义如下(将它插入本文件的适当地址,可以指示各个函数的执行情况):
#include“LPC2106.h”
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IODIR=0x00003DD0;
系统的初始化和配置与硬件系统高度相关。对这部分的代码不作过多的解释,请参看代码注释。几个常量定义如下:
#defineFosc11059200/*晶振频率,10MHz~25MHz应与实际一致*/
#defineFcclk(Fosc*4)
/*系统频率,必须为Fosc的整数倍(1~32),且<=60MHz*/
#defineFcco(Fosc*4)
/*CCO频率,必须为Fcclk的1、2、4、8倍,范围为156MHz~320MHz*/
#defineFpclk(Fcclk/4)*2
/*VPB时钟频率,只能为(Fcclk/4)的1、2、4倍*/
2.4templateTimer.c文件
本文件主要实现与系统时钟和系统辅助时钟相关的函数。关于系统时钟的各函数定义如下(系统辅助时钟的各函数与系统时钟一样,只须将T0换成T1即可):
/*SysClkInt(),此函数每个时钟Tick被调用一次*/
voidsysClkInt(void){
/*通知系统中断结束*/
T0IR=0x01;
T0MR0+=(Fpclk/sysClkTicksPerSecond);
VICVectAddr=0;
/*调用系统中断函数*/
if(sysClkRoutine!=NULL)
(*sysClkRoutine)(sysClkArg);
}
/*sysClkDisable()禁止系统时钟*/
voidsysClkDisable(void){
if(sysClkRunning){
/*禁止系统时钟中断*/
《基于LPC2104的VxWorksBSP设计(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/172484.html
#definePINSEL00xE002C000
#definePINSEL10xE002C004
#defineIODIR0xE0028008
#defineSPI_IOCON0x00003DD0
我们设计的点灯程序如下。将其放在romInit.s适当的位置,可以定位程序的运行情况。
LDRr0,=PINSEL0
MOVr1,#0
STRr1,[R0],#4
STRr1,[R0]
LDRr0,=PINSEL1
MOVr1,#0
STRr1,[R0],#4
STRr1,[R0]
LDRr0,=IODIR
LDRr1,SPI_IOCON
STRr1,[R0]
在Tornado集成开发环境下,templatARM的BSP生成bootrom_res.bin文件后,可以借助ASD1.2的AXD反汇编调方式器进行单步仿真和调试。
2.3sysLib.c文件
在这个文件中,主要是在sysHwInit()函数内实现系统外设的配置,中断向量表的拷贝和重映射,系统定时器中断向量的安装,串口初始化等功能。在串口还没有调通之前,可以借助上面提到的简单点灯函数实现程序的定位。其用C语言重新定义如下(将它插入本文件的适当地址,可以指示各个函数的执行情况):
#include“LPC2106.h”
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IODIR=0x00003DD0;
系统的初始化和配置与硬件系统高度相关。对这部分的代码不作过多的解释,请参看代码注释。几个常量定义如下:
#defineFosc11059200/*晶振频率,10MHz~25MHz应与实际一致*/
#defineFcclk(Fosc*4)
/*系统频率,必须为Fosc的整数倍(1~32),且<=60MHz*/
#defineFcco(Fosc*4)
/*CCO频率,必须为Fcclk的1、2、4、8倍,范围为156MHz~320MHz*/
#defineFpclk(Fcclk/4)*2
/*VPB时钟频率,只能为(Fcclk/4)的1、2、4倍*/
2.4templateTimer.c文件
本文件主要实现与系统时钟和系统辅助时钟相关的函数。关于系统时钟的各函数定义如下(系统辅助时钟的各函数与系统时钟一样,只须将T0换成T1即可):
/*SysClkInt(),此函数每个时钟Tick被调用一次*/
voidsysClkInt(void){
/*通知系统中断结束*/
T0IR=0x01;
T0MR0+=(Fpclk/sysClkTicksPerSecond);
VICVectAddr=0;
/*调用系统中断函数*/
if(sysClkRoutine!=NULL)
(*sysClkRoutine)(sysClkArg);
}
/*sysClkDisable()禁止系统时钟*/
voidsysClkDisable(void){
if(sysClkRunning){
/*禁止系统时钟中断*/
《基于LPC2104的VxWorksBSP设计(第3页)》