基于eCos操作系統(tǒng)的FLASH驅(qū)動程序分析與移植-基礎(chǔ)電子_第1頁
基于eCos操作系統(tǒng)的FLASH驅(qū)動程序分析與移植-基礎(chǔ)電子_第2頁
基于eCos操作系統(tǒng)的FLASH驅(qū)動程序分析與移植-基礎(chǔ)電子_第3頁
基于eCos操作系統(tǒng)的FLASH驅(qū)動程序分析與移植-基礎(chǔ)電子_第4頁
基于eCos操作系統(tǒng)的FLASH驅(qū)動程序分析與移植-基礎(chǔ)電子_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

精品文檔-下載后可編輯基于eCos操作系統(tǒng)的FLASH驅(qū)動程序分析與移植-基礎(chǔ)電子0引言

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

1系統(tǒng)目標(biāo)板簡介

硬件目標(biāo)板是為無人機(jī)系統(tǒng)設(shè)計的系統(tǒng)開發(fā)板,它是從Arca系統(tǒng)測試板經(jīng)過功能簡化設(shè)計而來的滿足無人機(jī)系統(tǒng)要求的目標(biāo)板。硬件目標(biāo)板如圖1所示。

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

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

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

2eCos驅(qū)動程序的體系結(jié)構(gòu)與驅(qū)動程序設(shè)計模式

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

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

2.1設(shè)備驅(qū)動程序用戶API

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

2.2eCos驅(qū)動程序與內(nèi)核及HAL的接口

應(yīng)用程序在使用設(shè)備的時候,通過驅(qū)動程序的用戶API函數(shù)訪問設(shè)備驅(qū)動程序,設(shè)備驅(qū)動程序又調(diào)用設(shè)備內(nèi)核API函數(shù)與內(nèi)核和硬件抽象層HAL進(jìn)行交互,設(shè)備驅(qū)動程序和內(nèi)核又通過硬件抽象層HAL對硬件平臺進(jìn)行操作。

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

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

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

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

2.3設(shè)備驅(qū)動程序的設(shè)計模式

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

3基于方舟開發(fā)板的InterFLASH驅(qū)動程序分析與移植

3.1Inter公司的TE28F320的FLASH芯片驅(qū)動程序分柢

InterFLASH驅(qū)動程序FLASH_28fxxx.inl文件定義了FLASH設(shè)備低層的管理設(shè)備I/O函數(shù),F(xiàn)LASH_28fxxx_parts.inl文件定義了FLASH設(shè)備邏輯信息。eCos系統(tǒng)I/O包使用DEVTAB_ENTRY()和DEVIO_TABLE()定義的_priv指針對FLASH設(shè)備低層I/O函數(shù)進(jìn)行調(diào)用。具體定義如下:

3.2系統(tǒng)地址空間的分配方案。

當(dāng)MMU內(nèi)存管理單元的控制寄存器MCR.ATE為0時,地址映射方式變?yōu)橹苯佑成湮锢矸绞剑鐖D4所示。

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

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

不同的兩塊開發(fā)板所采用的芯片,特別是FLASH芯片有可能是不一樣的。由于為無人機(jī)專門設(shè)計開發(fā)的目標(biāo)板使用的是Inter公司的TE28F320的FLASH芯片,與Arca公司使用的FLASH驅(qū)動程序不一樣,必須修改FLASH驅(qū)動及FLASH和SRAM的配置信息。

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

(3)FLASH驅(qū)動程序FLASH_28fxxx.inl文件中的數(shù)據(jù)定義修改如下:

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

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

4驅(qū)動測試

4.1Redboot簡介

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

4.2系統(tǒng)測試結(jié)果

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

5結(jié)語

本文通過裁剪和移植FLASH驅(qū)動程序到目標(biāo)開發(fā)板上,展示上具體的修改硬件抽象層和設(shè)備驅(qū)動

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論