《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于OMAP3530的Windows Embedded Compact 7 BSP的開(kāi)發(fā)與移植
基于OMAP3530的Windows Embedded Compact 7 BSP的開(kāi)發(fā)與移植
來(lái)源:電子技術(shù)應(yīng)用2012年第2期
韓德強(qiáng),,劉立哲,劉 濤,,聶 帥
北京工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,,北京100124
摘要: 介紹了TI公司的OMAP3530雙核處理器和基于該處理器設(shè)計(jì)的開(kāi)發(fā)板,描述了BSP的一般概念及開(kāi)發(fā)方法,。通過(guò)實(shí)例說(shuō)明了在嵌入式系統(tǒng)開(kāi)發(fā)中如何實(shí)現(xiàn)Windows Embedded Compact 7 BSP的開(kāi)發(fā)和移植,。
中圖分類號(hào): TP316.7
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)02-0014-04
The development of BSP under Windows Embedded Compact 7 based on OMAP3530
Han Deqiang,Liu Lizhe,,Liu Tao,,Nie Shuai
College of Computer, Beijing University of Technology, Beijing 100124,China
Abstract: This paper produces the architecture of OMAP3530 microprocessor of TI Corporation and demo board based on this processor. It discusses the general concept of BSP and solutions in board development. It illustrates the method and steps to develop Windows Embedded Compact 7 BSP.
Key words : BSP replant,;OMAP3530,;Windows Embedded Compact 7

    Windows Embedded Compact 7(以下簡(jiǎn)稱Compact 7)操作系統(tǒng)在訪問(wèn)底層硬件時(shí),,不直接訪問(wèn)硬件,而是通過(guò)抽象出來(lái)的函數(shù)訪問(wèn),。抽象出來(lái)的函數(shù)層,,就是通常所說(shuō)的板支持包BSP(Board Support Package)[1]。BSP介于底層硬件和操作系統(tǒng)之間,,完成硬件初始化并將控制權(quán)切換給操作系統(tǒng),。由于嵌入式系統(tǒng)的底層硬件具有無(wú)標(biāo)準(zhǔn)、非規(guī)范等特性,,操作系統(tǒng)都存在著BSP移植的問(wèn)題,,這就要求BSP開(kāi)發(fā)人員在BSP開(kāi)發(fā)過(guò)程中熟練掌握具體的硬件原理和軟件實(shí)現(xiàn)方法。

    Compact 7與之前的Windows CE版本一樣,,提供了一整套平臺(tái)開(kāi)發(fā)工具Platform Builder,,使開(kāi)發(fā)人員能夠快速靈活地創(chuàng)建解決方案[2]。而且Platform Builder本身也提供了多種目標(biāo)板的BSP樣例,,可以在開(kāi)發(fā)移植BSP時(shí)作參考,。
1 OMAP3530處理器
    TI公司推出的OMAP3530是一款技術(shù)先進(jìn)的高性能嵌入式異構(gòu)雙核處理器,主要由一個(gè)600 MHz的CortexTM-A8 ARM核和一個(gè)430 MHz的DSP 核組成,。嵌入式操作系統(tǒng)在ARM核上運(yùn)行,,與數(shù)字信號(hào)處理相關(guān)的任務(wù)則由DSP核負(fù)責(zé)。盡管OMAP3530是一個(gè)異構(gòu)多核架構(gòu)的微處理器,,但DSP核對(duì)于基于ARM核開(kāi)發(fā)的工程師而言是透明的,。在軟件工具鏈中,TI引入了DSP橋的概念,。DSP橋是針對(duì)ARM應(yīng)用程序開(kāi)發(fā)提供的一組面向DSP算法的應(yīng)用程序接口(API),,以便應(yīng)用程序獲取DSP核的計(jì)算資源和數(shù)據(jù)資源。
2 Compact 7操作系統(tǒng)
    Windows Embedded Compact 7是Windows CE 6.0的后續(xù)產(chǎn)品,,它不僅是一個(gè)功能強(qiáng)大的實(shí)時(shí)操作系統(tǒng),,而且還為開(kāi)發(fā)者提供了全套開(kāi)發(fā)工具。作為Windows CE家族的換代產(chǎn)品,,Compact 7繼承了之前Windows CE系統(tǒng)的優(yōu)良傳統(tǒng),,又在其上增加了對(duì)ARMv7構(gòu)架的支持;對(duì)Windows CE先前版本的強(qiáng)大功能進(jìn)行了進(jìn)一步的擴(kuò)充和豐富,,如支持多點(diǎn)觸控,、優(yōu)化電源管理等。
    與Windows CE 6.0不同,,Compact 7的平臺(tái)開(kāi)發(fā)工具Platform Builder依托于Visual Studio 2008,,內(nèi)嵌的Silverlight for Windows Embedded有利于減輕開(kāi)發(fā)者開(kāi)發(fā)界面的負(fù)擔(dān)。在軟件開(kāi)發(fā)上,,Compact 7徹底摒棄傳統(tǒng)的MFC程序框架,,轉(zhuǎn)而全面支持.Net framework,。高效的開(kāi)發(fā)框架,將最大限度地提高開(kāi)發(fā)者的工作效率,,有助于提高產(chǎn)品的市場(chǎng)競(jìng)爭(zhēng)力,。
3 OMAP3530開(kāi)發(fā)板硬件構(gòu)成
    開(kāi)發(fā)板硬件平臺(tái)主要以TI公司的OMAP3530雙核處理器為核心,配有256 MB SDRAM和512 MB Nand Flash用以啟動(dòng)系統(tǒng)和存儲(chǔ)運(yùn)行程序,。同時(shí),,還配有電源管理、USB,、UART,、以太網(wǎng)控制器、液晶屏等外圍電路,?;贠MAP3530處理器開(kāi)發(fā)板的硬件結(jié)構(gòu)框圖如圖1所示。

4 Compact 7操作系統(tǒng)下BSP開(kāi)發(fā)與移植
    Compact 7中BSP是由Boot Loader,、OEM適配層,、設(shè)備驅(qū)動(dòng)程序,、內(nèi)核獨(dú)立傳輸層(KITL)以及鏡像配置文件五部分組成[3],。關(guān)于各部分之間的相互聯(lián)系以及與硬件平臺(tái)之間的關(guān)系如圖2所示。

4.1 Clone BSP
    Compact 7提供了兩種方法開(kāi)發(fā)BSP,,一種是從零開(kāi)始進(jìn)行BSP開(kāi)發(fā)的方法,,另一種是克隆已有的BSP再進(jìn)行移植的方法。Clone BSP實(shí)質(zhì)就是對(duì)現(xiàn)有的BSP進(jìn)行復(fù)制并按照開(kāi)發(fā)者要求改變BSP的名稱等信息,。Clone BSP保留了原有BSP的程序架構(gòu)和全部代碼,,開(kāi)發(fā)者只需對(duì)BSP中部分代碼進(jìn)行修改添加即可實(shí)現(xiàn)新開(kāi)發(fā)板的功能,簡(jiǎn)化了開(kāi)發(fā)流程,,提高了開(kāi)發(fā)效率,。考慮到從零開(kāi)始開(kāi)發(fā)BSP相當(dāng)困難,,OMAP3530開(kāi)發(fā)板的BSP開(kāi)發(fā)就采用Clone相似平臺(tái)的BSP的方法進(jìn)行移植,。這樣的實(shí)現(xiàn)方法可以大幅度降低開(kāi)發(fā)BSP的難度并縮短開(kāi)發(fā)周期。
    具體方法是,,在Platform Builder中使用其自帶的Clone BSP工具,,克隆TI公司提供的OMAP3530樣例BSP,并自行定義名稱(如MyBSP),,然后設(shè)置相關(guān)描述(如平臺(tái)目錄名稱,、供應(yīng)商名稱以及版本號(hào)等信息)。如果設(shè)置信息合法,,單擊Clone按鈕后會(huì)提示成功克隆BSP,??寺〕龅腂SP位于%_WINCEROOT%\PLATFORM目錄下。
4.2 移植Boot Loader
    BSP移植首先要實(shí)現(xiàn)Boot Loader的功能,。Boot Loader是一段啟動(dòng)引導(dǎo)程序,,主要在Compact 7系統(tǒng)加載前初始化相關(guān)硬件,并把系統(tǒng)鏡像加載到內(nèi)存中運(yùn)行,。根據(jù)鏡像boot的方式,,Boot Loader分為nboot、eboot和uboot等,。
    OMAP3530處理器內(nèi)嵌的RAM只有64 KB,,對(duì)Boot Loader生成的可執(zhí)行文件而言過(guò)于小,無(wú)法將其加載到內(nèi)部RAM中,,所以只能使用外部RAM進(jìn)行加載,。但OMAP3530上電時(shí)不能自動(dòng)初始化memory controller,無(wú)法讀寫(xiě)外部RAM,。因此,,需要一個(gè)程序負(fù)責(zé)初始化外部的RAM控制器,把可執(zhí)行文件從 Nand Flash或者SD卡中讀取到外部RAM中,,然后跳轉(zhuǎn)到入口處執(zhí)行,。實(shí)現(xiàn)這一功能的程序稱為x-Loader,x-Loader是Compact 7啟動(dòng)之后運(yùn)行的第一段程序,,實(shí)質(zhì)上是一個(gè)精簡(jiǎn)版的Boot Loader,。x-Loader運(yùn)行的第一個(gè)函數(shù)是startup()函數(shù),startup()采用匯編語(yǔ)言編寫(xiě),,首要功能是對(duì)目標(biāo)系統(tǒng)的CPU進(jìn)行最基本的初始化,。例如,清空TLB和cache,、關(guān)閉中斷,、配置PLL、設(shè)置內(nèi)存控制器,、設(shè)置跳轉(zhuǎn)到main的函數(shù)地址等,。OMAP3530開(kāi)發(fā)板上電后,CPU會(huì)自動(dòng)從Nand Flash或者SD卡中加載x-Loader到內(nèi)部RAM,,然后執(zhí)行初始化任務(wù),,最后將控制權(quán)交給Boot Loader。Startup()函數(shù)實(shí)現(xiàn)main函數(shù)跳轉(zhuǎn)地址代碼如下:
    ldr sp, =( XLDR_STACK_PA+XLDR_STACK_SIZE)
    b        XLDRMain
    其中,,XLDR_STACK_PA和XLDR_STACK_ SIZE是任務(wù)堆棧起始地址和大小,,系統(tǒng)通過(guò)使sp指針指向x-Loader中的任務(wù)堆棧起始地址的方法實(shí)現(xiàn)程序的跳轉(zhuǎn)。
    x-Loader位于BSP目錄下的boot文件夾中,,需要修改其中的platform.c和main.c兩個(gè)文件,。platform.c的作用是對(duì)OMAP3530功能進(jìn)行設(shè)置,,文件中包括PinMuxSetup()、GpioSetup(),、ClockSetup(),、MemorySetup()等幾個(gè)重要的函數(shù)。
    PinMuxSetup()函數(shù)專門(mén)用于設(shè)置引腳功能,,這樣做的好處是可以有統(tǒng)一的啟動(dòng)代碼并且不必?fù)?dān)心在啟動(dòng)過(guò)程中對(duì)復(fù)用引腳功能的再度修改,。其實(shí)現(xiàn)樣例代碼如下:
    OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D0,
    (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0)),;
    OUTREG16函數(shù)用于設(shè)置OMAP3530 中的16 bit寄存器,,該函數(shù)通過(guò)CONTROL_PADCONF_SDRC_D0獲得處理器相應(yīng)管腳的寄存器地址;通過(guò)設(shè)置INPUT_ENABLE,、PULL_INACTIVE等參數(shù)來(lái)實(shí)現(xiàn)對(duì)管腳屬性的定義,;通過(guò)設(shè)置MUX_MODE_X的方法實(shí)現(xiàn)管腳功能的定義。具體MUX_MODE_X代表的功能定義,,可參閱OMAP3530技術(shù)手冊(cè),。
    MemorySetup()函數(shù)用于初始化通用存儲(chǔ)控制器(GPMC)和外部RAM(SDRC)。由于GPMC信號(hào)在Flash和以太網(wǎng)控制器上都用到,。因此,,在MemorySetup()函數(shù)中需要對(duì)GPMC片選信號(hào)進(jìn)行設(shè)置。實(shí)現(xiàn)樣例代碼如下:
    OUTREG32(&pGpmc->GPMC_CONFIG1_3,,
    BSP_GPMC_LAN_CONFIG1),;
    OUTREG32函數(shù)用于設(shè)置OMAP3530 中的32 bit寄存器,通過(guò)GPMC_CONFIG獲得設(shè)置寄存器的地址,;通過(guò)宏定義BSP_GPMC_LAN+CONFIG1設(shè)置具體數(shù)值。
    main.c文件是x-Loader的主程序,,在RELEASE模式下能夠生成MLO執(zhí)行文件,,在DEBUG模式下編譯配置文件 sources 跳過(guò)了對(duì)其的編譯。因?yàn)閤-Loader對(duì)大小有要求,, 若DEBUG 編譯文件過(guò)大,,即使生成可執(zhí)行文件也無(wú)法加載到OMAP3530內(nèi)部RAM中。
    x-Loader移植完成后,,需要進(jìn)行Boot Loader的移植,。為了與x-Loader一致,Boot Loader下執(zhí)行的第一個(gè)函數(shù)也是Startup()函數(shù),。Boot Loader下的Startup()函數(shù)同樣是采用匯編語(yǔ)言編寫(xiě)的,,主要完成靜態(tài)邏輯地址到物理地址的映射以及跳轉(zhuǎn)到BootloaderMain函數(shù)執(zhí)行的功能。
    Boot Loader開(kāi)發(fā)重點(diǎn)是實(shí)現(xiàn)OEMPlatformInit()函數(shù)用以硬件初始化,,這個(gè)函數(shù)與硬件具有高度的相關(guān)性[4],??偟膩?lái)說(shuō),OEMPlatforminit()函數(shù)需要完成五項(xiàng)初始化任務(wù):首先是通過(guò)OEMEthGetSecs()函數(shù)初始化定時(shí)器,,其次初始化Nand Flash存儲(chǔ)器,,再次是復(fù)位外圍設(shè)備,然后初始化用于下載鏡像的以太網(wǎng)控制器,,最后初始化操作系統(tǒng)的內(nèi)存空間,。
    為了使Boot Loader支持以太網(wǎng)下載方式,需要實(shí)現(xiàn)與以太網(wǎng)控制器相關(guān)的函數(shù),。開(kāi)發(fā)板以太網(wǎng)控制器選用SMSC公司的Lan9220芯片,。其具體的實(shí)現(xiàn)過(guò)程如下:
    (1)在%_WINCEROOT\PLATFORM\MyBSP\SRC\BOOT\
EBOOT下添加Lan9220dbg.c。
    (2)在Lan9220dbg.c文件中實(shí)現(xiàn)LAN9220_Init,、LAN-
9220_SendFrame和LAN9220_GetFrame 3個(gè)函數(shù),。
    (3)在%_WINCEROOT\PLATFORM\MyBSP\SRC\INC下的kitl_cfg.h文件中聲明上述3個(gè)函數(shù),并定義BSP_ETHDRV_LAN9220結(jié)構(gòu)體,。結(jié)構(gòu)體定義如下:
    #define BSP_ETHDRV_LAN9220 {
    (OAL_KITLETH_INIT) LAN9220_Init, NULL, NULL,
    (OAL_KITLETH_SEND_FRAME) LAN9220_SendFrame,
    (OAL_KITLETH_GET_FRAME) LAN9220_GetFrame,
    NULL, NULL, NULL, NULL,  NULL, NULL }
    (4)在%_WINCEROOT\PLATFORM\MyBSP\SRC\BOOT\
EBOOT下的boot_cfg.h文件中添加BSP_ETHDRV_LAN-
9220到g_bootDevices內(nèi)容中即可,。
    初始化傳輸端口通過(guò)修改OEMPreDownload()函數(shù)實(shí)現(xiàn),在OEMPreDownload函數(shù)中首先需要為硬件平臺(tái)指點(diǎn)一個(gè)靜態(tài)IP地址,,其次通過(guò)設(shè)置g_bootCfg.kitlFlags變量來(lái)設(shè)置IP協(xié)議,,然后將boot方式設(shè)置成以太網(wǎng)下載模式,最后調(diào)用OEMLaunch函數(shù)來(lái)下載鏡像,。OEMLaunch函數(shù)的功能是下載鏡像,,并將程序計(jì)數(shù)器的指針直接設(shè)置到操作系統(tǒng)鏡像的開(kāi)始地址。它是啟動(dòng)操作系統(tǒng)前Boot Loader的最后一個(gè)函數(shù),,沒(méi)有返回值,。可以參考微軟提供的標(biāo)準(zhǔn)BSP中的代碼實(shí)現(xiàn)該函數(shù),。實(shí)現(xiàn)此函數(shù)后,,Boot Loader的功能基本完成。
4.3 移植OEM適配層
    OEM適配層OAL(OEM Adaptation Layer)邏輯上位于Compact 7內(nèi)核和硬件平臺(tái)之間,。物理上可以生成可執(zhí)行文件(NK.EXE),。OAL的出現(xiàn)大大方便了操作系統(tǒng)和硬件平臺(tái)之間的通信。OAL還用來(lái)處理中斷,、控制時(shí)鐘,、管理電源、控制I/O接口等,。
    通常情況下,,OAL創(chuàng)建的方法就是復(fù)制與自己開(kāi)發(fā)平臺(tái)相近且已經(jīng)成功應(yīng)用的OAL文件,然后進(jìn)行適當(dāng)?shù)男薷模琌AL文件位于%_WINCEROOT\PLATFORM\MyBSP\SRC\OAL目錄下,。移植過(guò)程中需要修改OEMInit函數(shù),,該函數(shù)是在OEM適配層中初始化中斷、時(shí)鐘,、KITL,、計(jì)數(shù)器以及看門(mén)狗功能的。需要注意的是,,如果要打開(kāi)串口的debug功能,,也要在OEMInit函數(shù)中進(jìn)行設(shè)置,將OEMDeinitDebugSerial()函數(shù)注釋掉,。
4.4 開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序
    BSP驅(qū)動(dòng)程序?qū)儆趦?nèi)置驅(qū)動(dòng),,與流驅(qū)動(dòng)不一樣的是,它不用設(shè)備管理器來(lái)管理,,也不用導(dǎo)出與流驅(qū)動(dòng)程序類似的API接口,。此類驅(qū)動(dòng)通常放在硬件平臺(tái)的目錄之下,如LCD顯示,、USB接口驅(qū)動(dòng)就放在SRC\DRIVERS目錄下,。
    以Touch的開(kāi)發(fā)為例,簡(jiǎn)要介紹Compact 7下內(nèi)置驅(qū)動(dòng)的開(kāi)發(fā)過(guò)程,。Compact 7中Touch驅(qū)動(dòng)采用分層方式實(shí)現(xiàn),,分為MDD(Model Device Driver)層和PDD(Platform Dependent Driver)層,分層結(jié)構(gòu)方便了驅(qū)動(dòng)程序的維護(hù)和移植,。Touch驅(qū)動(dòng)分層示意圖如圖3所示,。

 

 

    Touch驅(qū)動(dòng)程序接收用戶的觸摸信息,并將其轉(zhuǎn)換為觸摸屏上的位置坐標(biāo)信息,,再傳給圖形,、窗口和事件的子系統(tǒng)GWES(Graphics,Windowing, and Events Subsystem)模塊,。主要的工作是處理用戶交互和圖形輸出等任務(wù),。觸摸屏驅(qū)動(dòng)就是被它加載的,同時(shí)被GWES加載的還有鼠標(biāo)驅(qū)動(dòng),、鍵盤(pán)驅(qū)動(dòng)以及顯示設(shè)備驅(qū)動(dòng)。
    對(duì)于初學(xué)者只需實(shí)現(xiàn)PDD層函數(shù)以及與MDD層通信的DDSI函數(shù)即可,。MDD層與GWES模塊通信的DDI函數(shù)已由微軟實(shí)現(xiàn),。這樣驅(qū)動(dòng)開(kāi)發(fā)的工作量會(huì)少很多,而代碼的可靠性則有了更好的保證,。
    Compact 7觸摸屏驅(qū)動(dòng)程序采用中斷方式對(duì)按下?tīng)顟B(tài)進(jìn)行檢測(cè),,如果檢測(cè)到觸摸動(dòng)作時(shí)將產(chǎn)生中斷并觸發(fā)一個(gè)事件通知一個(gè)工作線程開(kāi)始采集數(shù)據(jù)。同時(shí),,驅(qū)動(dòng)將打開(kāi)一個(gè)定時(shí)器,,若觸摸動(dòng)作仍然存在,,則定時(shí)觸發(fā)同一個(gè)事件通知工作線程采集數(shù)據(jù)。驅(qū)動(dòng)中采用了觸摸屏中斷以及定時(shí)器中斷2個(gè)中斷源,,不僅可以監(jiān)控觸摸筆按下和抬起的動(dòng)作,,還可以檢測(cè)到觸摸屏按下時(shí)的拖動(dòng)軌跡[5]。
    由于OMAP3530開(kāi)發(fā)板與觸摸屏之間采用I2C總線通信,,而Compact 7提供的樣例是以SPI接口進(jìn)行數(shù)據(jù)通信,,因此,需要修改PDDInitializeHardware函數(shù)和PDDGetControllerData函數(shù),。對(duì)SPI接口的讀寫(xiě)改為對(duì)I2C總線的讀寫(xiě),;之后在PDDTouchPanelGetPoint函數(shù)中修改代碼,按照具體觸摸屏控制芯片的數(shù)據(jù)定義格式進(jìn)行坐標(biāo)轉(zhuǎn)換,;最后更改.reg文件中的注冊(cè)信息,,定義管腳號(hào)、驅(qū)動(dòng)加載位置等,。Compact 7系統(tǒng)啟動(dòng)過(guò)程中加載GWES模塊后,,GWES模塊將根據(jù)注冊(cè)表的信息加載觸摸屏驅(qū)動(dòng)。
4.5 移植內(nèi)核獨(dú)立傳輸層
    在Windows CE系統(tǒng)中使用了內(nèi)核獨(dú)立傳輸層KITL(Kernel Independent Transport Layer)技術(shù),,其設(shè)計(jì)目標(biāo)是向開(kāi)發(fā)者提供一種簡(jiǎn)單的開(kāi)發(fā)方式以支持調(diào)試服務(wù),。從Windows CE 6.0開(kāi)始,KITL模塊已經(jīng)獨(dú)立出OAL,,在操作系統(tǒng)運(yùn)行時(shí)已經(jīng)有了一個(gè)獨(dú)立的KITL.dll動(dòng)態(tài)鏈接庫(kù),。Compact 7操作系統(tǒng)繼承了這一特性,同時(shí)也提供了大量的程序樣例用于開(kāi)發(fā)參考,。
    KITL的開(kāi)發(fā)過(guò)程只需要完善OEM部分代碼即可,,這部分代碼位于\SRC\KITL目錄下。用戶需要實(shí)現(xiàn)OEMKitlStartup函數(shù),、OEMKitlInit函數(shù),,同時(shí)需要構(gòu)造相關(guān)結(jié)構(gòu)體數(shù)據(jù)。OEMKitlStartup的功能是構(gòu)造實(shí)際參數(shù)的數(shù)據(jù),,如代表KITL連接設(shè)備的標(biāo)識(shí)符字符串,、記錄用戶對(duì)系統(tǒng)KITL功能配置的數(shù)據(jù)以及所有可選KITL連接設(shè)備的硬件位置。OEMKitlInit的功能是構(gòu)造一個(gè)設(shè)置KITL傳輸層端口的結(jié)構(gòu)體數(shù)據(jù),。
    OMAP3530開(kāi)發(fā)板的KITL采用中斷方式進(jìn)行驅(qū)動(dòng),。中斷方式在OEMKitlStartup函數(shù)中設(shè)置。具體代碼如下:
    // Prepare interrupt
    pGPIORegs = OALPAtoUA(BSP_ETHER_GPIO_PA);
    SETREG32(&pGPIORegs->OE,
            1 << (BSP_IRQ_ETHER_KITL % 32));
    // Interrupt on falling edge
    SETREG32(&pGPIORegs->FALLINGDETECT,
            1 << (BSP_IRQ_ETHER_KITL % 32));
    OEMKitlEnableClocks(FALSE);
    之后在OEMKitlEnableClocks函數(shù)中修改IRQ管腳對(duì)時(shí)鐘的響應(yīng),。具體代碼如下:
    // IRQ pin
    clockRoutines.pfnEnableDeviceFClock(OMAP_DEVICE_GPIO,
bEnable);
    其中宏定義BSP_IRQ_ETHER_KITL和OMAP_DEVICE_GPIO的值由開(kāi)發(fā)板上實(shí)際連接到LAN9220的中斷信號(hào)的管腳決定,。移植過(guò)程中對(duì)這兩個(gè)宏定義進(jìn)行修改即可實(shí)現(xiàn)KITL的功能。
4.6 設(shè)置配置文件
    當(dāng)創(chuàng)建一個(gè)Compact 7的工程時(shí),可以通過(guò)添加環(huán)境變量,、修改.bib和.reg等文件來(lái)重新配置BSP,。Compact 7將配置文件分為兩類,一類是源代碼配置文件,,如Dirs文件,、Makefile文件以及Sources文件;另一類是鏡像配置文件,,如.bib文件,、.reg文件、.dat文件等,。開(kāi)發(fā)人員必須理解相關(guān)配置文件的作用和使用方法才能合理地配置系統(tǒng)資源,。
    至此,BSP的開(kāi)發(fā)流程已基本完成,。開(kāi)發(fā)移植好的BSP要在Platform Builder中編譯生成可以在硬件開(kāi)發(fā)平臺(tái)上運(yùn)行的二進(jìn)制代碼,,通過(guò)SD卡將MLO和eboot.nb0下載到Nand Flash上,然后再通過(guò)以太網(wǎng)下載NK.bin到開(kāi)發(fā)板上,。
    開(kāi)發(fā)BSP 是一個(gè)基于具體硬件和軟件的復(fù)雜過(guò)程,,需要開(kāi)發(fā)者對(duì)硬件和軟件知識(shí)都有較為深入的了解[6]。BSP開(kāi)發(fā)的正確性將直接影響到系統(tǒng)運(yùn)行的穩(wěn)定性,。
參考文獻(xiàn)
[1] 周建設(shè).Windows CE設(shè)備驅(qū)動(dòng)及BSP開(kāi)發(fā)指南[M].北京:中國(guó)電力出版社,,2009.
[2] 陳瑞,張永瑞,,歐陽(yáng)雄.基于XSCALE架構(gòu)處理器WinCE系統(tǒng)BSP開(kāi)發(fā)[J].電子科技,,2006(2).
[3] Microsoft.BSP porting guide for Windows Embedded Compact 7[Z].2010.
[4] 李大為.Windows CE工程實(shí)踐完全解析[M].北京:中國(guó)電力出版社,2008.
[5] 張毅,,王海濤.基于S3C2410A的WinCE 5.0下觸摸屏驅(qū)動(dòng)的實(shí)現(xiàn)[J].重慶郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),,2008(6).
[6] 李海林,趙惠林,,熊文峰.基于XScale PXA255處理器WinCE 420系統(tǒng)BSP開(kāi)發(fā)[J].艦船電子工程,,2006(3).

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。