新聞中心

VxWorks LPC2104 BSP ARM

作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

STMFD SP!,{R0-R12,LR}

BL FIQ_Exception

LDMFD SP!,{R0-R12,LR}

SUBS PC,LR,#4

當系統(tǒng)上電時,如果地址0x00000014內(nèi)的數(shù)據(jù)是0xB9205F80,則從Flash的零地址開始執(zhí)行,也就是執(zhí)行romInit()函數(shù)。此函數(shù)將啟動方式BOOT_COLD放在R0中,作為romStart的參數(shù),將系統(tǒng)設(shè)為SVC32模式,并禁止IRQ和FIR中斷,設(shè)置好系統(tǒng)堆棧指針跳到romStart()執(zhí)行。驗證此部分程序執(zhí)行情況的最簡單的一種方法是用匯編寫一段點燈程序,用以指令程序的執(zhí)行情況。其中常量PINSEL0、PINSEL1、IODIR、SPI_IOCON可以頭文件templatarm.h中用define定義。

#define PINSEL0 0xE002C000

#define PINSEL1 0xE002C004

#define IODIR 0xE0028008

#define SPI_IOCON 0x00003DD0

我們設(shè)計的點燈程序如下。將其放在romInit.s適當?shù)奈恢?,可以定位程序的運行情況。

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集成開發(fā)環(huán)境下,templatarm的BSP生成bootrom_res.bin文件后,可以借助ASD1.2的AXD反匯編調(diào)方式器進行單步仿真和調(diào)試。

2.3 sysLib.c文件

在這個文件中,主要是在sysHwInit()函數(shù)內(nèi)實現(xiàn)系統(tǒng)外設(shè)的配置,中斷向量表的拷貝和重映射,系統(tǒng)定時器中斷向量的安裝,串口初始化等功能。在串口還沒有調(diào)通之前,可以借助上面提到的簡單點燈函數(shù)實現(xiàn)程序的定位。其用C語言重新定義如下(將它插入本文件的適當?shù)刂?,可以指示各個函數(shù)的執(zhí)行情況):

#include “LPC2106.h”

PINSEL0=0x00000000;

PINSEL1=0x00000000;

IODIR=0x00003DD0;

系統(tǒng)的初始化和配置與硬件系統(tǒng)高度相關(guān)。對這部分的代碼不作過多的解釋,請參看代碼注釋。幾個常量定義如下:

#define Fosc 11059200 /*晶振頻率,10MHz~25MHz應(yīng)與實際一致*/

#define Fcclk(Fosc *4)

/*系統(tǒng)頻率,必須為Fosc的整數(shù)倍(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文件

本文件主要實現(xiàn)與系統(tǒng)時鐘和系統(tǒng)輔助時鐘相關(guān)的函數(shù)。關(guān)于系統(tǒng)時鐘的各函數(shù)定義如下(系統(tǒng)輔助時鐘的各函數(shù)與系統(tǒng)時鐘一樣,只須將T0換成T1即可):

/*SysClkInt(),此函數(shù)每個時鐘Tick被調(diào)用一次*/

void sysClkInt(void){

/*通知系統(tǒng)中斷結(jié)束*/

T0IR=0x01;

T0MR0 =(Fpclk/sysClkTicksPerSecond);

VICVectAddr=0;

/*調(diào)用系統(tǒng)中斷函數(shù)*/

if(sysClkRoutine!=NULL)

(*sysClkRoutine)(sysClkArg);

}

/*sysClkDisable()禁止系統(tǒng)時鐘*/

void sysClkDisable(void){

if(sysClkRunning){

/*禁止系統(tǒng)時鐘中斷*/

VICIntEnClr=0x10;

T0TC=0;

SysClkRunning=FLASE;

}

}

/*sysClkEnable()啟動系統(tǒng)時鐘*/

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 應(yīng)用程序設(shè)計

由于Easyarm開發(fā)板本身資源較少,不可能與PC機連接成宿主機一目標機的調(diào)試環(huán)境,通過主機將代碼下載到目標機再執(zhí)行。因此在設(shè)計應(yīng)用程序時,可以修改bootConfig.c文件中的bootCmdLoop()函數(shù),生成bootrom_res.hex文件,格式轉(zhuǎn)換后,下載到Flash中運行,在PC機上借助串口調(diào)試助手打印調(diào)試信息。具體過程是:在Tornado2.2集成開發(fā)環(huán)境下選取Build->Build Boot Rom,BSP選定templatearm,Image選定bootrom_res.hex,編譯器選gnu,確認即可。

4 小結(jié)

VxWorks所需要的唯一的驅(qū)動程序是系統(tǒng)時鐘,本文詳細給出了系統(tǒng)時鐘源代碼,同時還給出了串口通信的源代碼,使得開發(fā)板與PC機能正常通信。另外,給出了基于VxWorks的應(yīng)用程序的設(shè)計方法。由于BSP的設(shè)計本身就是一件很具有挑戰(zhàn)性的工作,相信本文對VxWorks的BSP設(shè)計得有所幫助。


上一頁 1 2 下一頁

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉