<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于eCos的FLASH驅動(dòng)的分析與移植

基于eCos的FLASH驅動(dòng)的分析與移植

作者: 時(shí)間:2012-07-11 來(lái)源:網(wǎng)絡(luò ) 收藏

0 引 言

嵌入式系統需要支持的外部設備種類(lèi)繁多,如何構造運行良好的嵌入式設備的驅動(dòng)程序,對嵌入式操作系統的實(shí)際應用有重要意義。是一種源代碼公開(kāi)的實(shí)時(shí)嵌人式操作系統,對嵌入式應用具有良好的支持,內核專(zhuān)門(mén)設計了便于設備驅動(dòng)管理和開(kāi)發(fā)的I/O包和DEV包,開(kāi)發(fā)人員可以方便地將自己開(kāi)發(fā)的驅動(dòng)程序加入其中,與別的系統組件一起進(jìn)行配置。

本文引用地址:http://dyxdggzs.com/article/257370.htm

1 系統目標板簡(jiǎn)介

硬件目標板是為無(wú)人機系統設計的系統開(kāi)發(fā)板,它是從Arca系統測試板經(jīng)過(guò)功能簡(jiǎn)化設計而來(lái)的滿(mǎn)足無(wú)人機系統要求的目標板。硬件目標板如圖1所示。

GT2000支持SRAM,FLASH,ROM,VLIO(靜態(tài)段支持可變等待時(shí)間I/O設備)和SDRAM(同步動(dòng)態(tài)RAM)等外部擴展存儲器。GT2000的外部地址空間是按體(bank)劃分的,有四個(gè)體屬于靜態(tài)存儲器區域,由引腳CS0~CS3選擇,在將FLASH,SRAM,VLIO(用作其他外設接口)等靜態(tài)I/O設備地址分別設計在CS0~CS2區域內,由GT2000內部的外部?jì)却嬖L(fǎng)問(wèn)接口(EMI)控制器中的靜態(tài)內存訪(fǎng)問(wèn)控制寄存器(SMCR)進(jìn)行訪(fǎng)問(wèn)控制,分配地址訪(fǎng)問(wèn)接口。

系統目標板選用兩片Intel公司的TE28F320的FLASH(16位)并聯(lián)獲得32位總線(xiàn)寬度。Intel公司的TE28F320是32 Mb(2 M×16 b)多功能FLASH,2.7~3.6 V單電源供電,讀取時(shí)間為70 ns,封裝格式為48-Pin TSoP(12 mm×20 mm)或48-Ball TFB-GA,可被擦寫(xiě)10 000次。方舟的JTAG仿真器支持TE28F320 FLASH,可以通過(guò)JTAG接口進(jìn)行在線(xiàn)讀寫(xiě)和擦除,這給調試程序和硬件提供了方便。

FLASH的電路原理圖以及GT2000的引腳“DACK[2..1]/MD_MEM[1..0]”設置如圖2所示。


2 驅動(dòng)程序的體系結構與驅動(dòng)程序設計模式

操作系統的設備驅動(dòng)程序通常包含以下內容:提供一些底層函數,負責完成設備初始化與配置、注冊設備,從設備收發(fā)數據、控制設備、處理設備中斷等,并進(jìn)行設備管理。eCos操作系統內核支持設備驅動(dòng)程序的同步、計時(shí)、內存管理、緩沖區管理、設備名空間及資源管理等。

eCos系統的I/O包中包含了設備的驅動(dòng)程序接口模塊,全部是以組件的形式存在。設備驅動(dòng)程序模塊支持系統設計的分層結構。設備I/O包中的程序需要使用設備DEV包中的程序,而設備DEV包中的程序需要調用eCos的硬件抽象層包中的底層接口函數,如圖3所示。


2.1 設備驅動(dòng)程序用戶(hù)API

eCos為應用程序提供了一組用戶(hù)API函數,這些操作包括對設備進(jìn)行初始化和配置,獲取配置信息,對設備進(jìn)行讀寫(xiě)等。設備驅動(dòng)程序必須使用設備句柄進(jìn)行設備操作,通過(guò)cyg_io_lookup()函數把設備在系統中的惟一名字映射成設備句柄。

2.2 eCos驅動(dòng)程序與內核及HAL的接口

應用程序在使用設備的時(shí)候,通過(guò)驅動(dòng)程序的用戶(hù)API函數訪(fǎng)問(wèn)設備驅動(dòng)程序,設備驅動(dòng)程序又調用設備內核API函數與內核和硬件抽象層HAL進(jìn)行交互,設備驅動(dòng)程序和內核又通過(guò)硬件抽象層HAL對硬件平臺進(jìn)行操作。

eCos內核向設備驅動(dòng)程序提供調度、時(shí)鐘、同步、中斷等內核服務(wù)的支持。在某些嵌入式應用中,部分內核服務(wù)并不是必需的。在配置時(shí)不選擇Kernel包,設備驅動(dòng)程序的內核服務(wù)支持由硬件抽象層提供。

HAL包含所有與平臺相關(guān)的代碼,是eCos操作系統對硬件進(jìn)行的抽象定義,它直接控制和訪(fǎng)問(wèn)硬件,為eCos內核和高層代碼提供服務(wù)。

I/O包和DEV包構成了eCos驅動(dòng)程序的基本框架。設備驅動(dòng)程序一般分為三個(gè)部分,分別為設備表入口DEVTAB_ENTRY、設備I/O函數表DEVIO_TAB和設備I/O函數。I/O包提供抽象的設備操作支持,應用程序訪(fǎng)問(wèn)設備時(shí)使用邏輯設備名,每個(gè)設備都對應一個(gè)惟一的邏輯設備名。DEV包提供設備操作的底層實(shí)現,對硬件通過(guò)HAL直接操作。

eCos中的所有設備驅動(dòng)程序都使用設備表入口進(jìn)行描述。設備表入口使用宏DEVTAB_ENTRY()可以生成一個(gè)設備表入口數據結構。其中,_handlers指向DEVIO_TABLE入口函數。提供用戶(hù)應用程序的調用支持;_priv指向設備真正的硬件操作數據結構,提供硬件設備與上層軟件的交互。設備I/O入口宏定義如下:


2.3 設備驅動(dòng)程序的設計模式

一般來(lái)說(shuō),eCos提供了三種驅動(dòng)程序設計模式。設備驅動(dòng)程序與內核和HAL之間的API接口主要對中斷以及中斷處理程序的ISR,DSR和線(xiàn)程的同步進(jìn)行控制和管理。eCos設備驅動(dòng)程序的中斷模塊分為三個(gè)層次,分別是中斷服務(wù)程序ISR,中斷滯后服務(wù)程序DSR和中斷線(xiàn)程。中斷服務(wù)程序ISR在響應中斷時(shí)立即調用,中斷滯后服務(wù)程序DSR由ISR發(fā)出調用請求后執行,中斷線(xiàn)程為驅動(dòng)程序的客戶(hù)程序。具體為硬件抽象層HAL對硬件中斷源譯碼,并在最短的時(shí)間內調用ISR中斷服務(wù)程序,ISR對硬件中斷可以立即處理,但限于與中斷線(xiàn)程交互較少的設備。大多數情況下,需要請求相應的中斷滯后服務(wù)程序DSR進(jìn)入線(xiàn)程調度運行,DSR將在ISR執行完成后立即運行。如果需要復雜的中斷服務(wù)則要用戶(hù)自己定義中斷線(xiàn)程。對于一個(gè)具有中斷的設備驅動(dòng)程序,必須提供ISR和DSR。

3 基于方舟開(kāi)發(fā)板的Inter 分析與移植

3.1 Inter公司的TE28F320的FLASH芯片驅動(dòng)程序分柢

Inter FLASH_28fxxx.inl文件定義了FLASH設備低層的管理設備I/O函數,FLASH_28fxxx_parts.inl文件定義了FLASH設備邏輯信息。eCos系統I/O包使用DEVTAB_ENTRY()和DEVIO_TABLE()定義的_priv指針對FLASH設備低層I/O函數進(jìn)行調用。具體定義如下:


3.2 系統地址空間的分配方案。

當MMU內存管理單元的控制寄存器MCR.ATE為0時(shí),地址映射方式變?yōu)橹苯佑成湮锢矸绞?,如圖4所示。

直接映射方式的映射關(guān)系是:在使用高速緩存方式時(shí)將虛擬地址A1區域(0x80000000~0xA0000000)映射到實(shí)際物理地址0x00000000~0x20000000的區域;根據目標開(kāi)發(fā)板的設計規范,系統的FLASH的物理地址從0x00000000開(kāi)始,系統設計編寫(xiě)程序時(shí)使用相應的虛擬地址空間為0x80000000~0x80FFFFFF。SRAM的物理地址從0x04000000開(kāi)始,使用相應的虛擬地址空間為0x84000000~0x84200000。

3.3 修改eCos硬件抽象層中FLASH和SRAM的配置信息以及FLASH設備驅動(dòng)程序

不同的兩塊開(kāi)發(fā)板所采用的芯片,特別是FLASH芯片有可能是不一樣的。由于為無(wú)人機專(zhuān)門(mén)設計開(kāi)發(fā)的目標板使用的是Inter公司的TE28F320的FLASH芯片,與Arca公司使用的不一樣,必須修改FLASH驅動(dòng)及FLASH和SRAM的配置信息。

(1)SRAM布局文件修改如下:


(3)FLASH驅動(dòng)程序FLASH_28fxxx.inl文件中的數據定義修改如下:


(4)修改平臺抽象層文件plf_hci.h文件

由于目標開(kāi)發(fā)板上沒(méi)有采用EEPROM和HCI(硬件配置接口)的方式存儲系統硬件信息,而是采用在eCos平臺抽象層中把開(kāi)發(fā)板上的硬件信息靜態(tài)存儲在文件中。在平臺抽象層文件plf_hci.h中修改如下:


4 驅動(dòng)測試

4.1 簡(jiǎn)介

是一個(gè)標準的嵌入式系統引導和Debug環(huán)境,是基于eCos的一個(gè)應用程序,使用eCos的硬件抽象層作為它的基礎。內含GDBstub,允許從應用程序調試的GDB宿主機鏈接目標平臺,通過(guò)串口或網(wǎng)口進(jìn)行調試。既可以用在產(chǎn)品的開(kāi)發(fā)階段(調試功能),也可以用在最終的產(chǎn)品上。

4.2 系統測試結果

使用eCos圖形配置工具對修改好的eCos硬件抽象象層和FLASH設備驅動(dòng)程序進(jìn)行裁剪,并用串口進(jìn)行系統測試,通過(guò)minicom顯示運行的FLASH和SRAM地址結果如圖5所示。


5 結語(yǔ)

本文通過(guò)裁剪和移植FLASH驅動(dòng)程序到目標開(kāi)發(fā)板上,展示上具體的修改硬件抽象層和設備驅動(dòng)程序代碼方法。通過(guò)實(shí)際裁剪,配置一個(gè)具有實(shí)際應用價(jià)值的Redboot,對于嵌入式技術(shù)的學(xué)習和應用具有現實(shí)的意義。本文的難點(diǎn)在于eCos硬件抽象層和設備驅動(dòng)程序源代碼的理解和修改。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>