新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于eCos操作系統的FLASH驅動程序分析與移植

        基于eCos操作系統的FLASH驅動程序分析與移植

        作者: 時間:2009-12-25 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/152193.htm

        2.1 設備程序用戶API
        為應用程序提供了一組用戶API函數,這些操作包括對設備進行初始化和配置,獲取配置信息,對設備進行讀寫等。設備驅動程序必須使用設備句柄進行設備操作,通過cyg_io_lookup()函數把設備在系統中的惟一名字映射成設備句柄。
        2.2 eCos驅動程序與內核及HAL的接口
        應用程序在使用設備的時候,通過驅動程序的用戶API函數訪問設備驅動程序,設備驅動程序又調用設備內核API函數與內核和硬件抽象層HAL進行交互,設備驅動程序和內核又通過硬件抽象層HAL對硬件平臺進行操作。
        eCos內核向設備驅動程序提供調度、時鐘、同步、中斷等內核服務的支持。在某些嵌入式應用中,部分內核服務并不是必需的。在配置時不選擇Kernel包,設備驅動程序的內核服務支持由硬件抽象層提供。
        HAL包含所有與平臺相關的代碼,是eCos對硬件進行的抽象定義,它直接控制和訪問硬件,為eCos內核和高層代碼提供服務。
        I/O包和DEV包構成了eCos驅動程序的基本框架。設備驅動程序一般分為三個部分,分別為設備表入口DEVTAB_ENTRY、設備I/O函數表DEVIO_TAB和設備I/O函數。I/O包提供抽象的設備操作支持,應用程序訪問設備時使用邏輯設備名,每個設備都對應一個惟一的邏輯設備名。DEV包提供設備操作的底層實現,對硬件通過HAL直接操作。
        eCos中的所有設備驅動程序都使用設備表入口進行描述。設備表入口使用宏DEVTAB_ENTRY()可以生成一個設備表入口數據結構。其中,_handlers指向DEVIO_TABLE入口函數。提供用戶應用程序的調用支持;_priv指向設備真正的硬件操作數據結構,提供硬件設備與上層軟件的交互。設備I/O入口宏定義如下:


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


        3 基于方舟開發板的Inter 驅動程序
        3.1 Inter公司的TE28F320的芯片驅動程序分柢
        Inter 驅動程序FLASH_28fxxx.inl文件定義了FLASH設備低層的管理設備I/O函數,FLASH_28fxxx_parts.inl文件定義了FLASH設備邏輯信息。eCos系統I/O包使用DEVTAB_ENTRY()和DEVIO_TABLE()定義的_priv指針對FLASH設備低層I/O函數進行調用。具體定義如下:


        3.2 系統地址空間的分配方案。
        當MMU內存管理單元的控制寄存器MCR.ATE為0時,地址映射方式變為直接映射物理方式,如圖4所示。

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

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴业县| 甘洛县| 邳州市| 丹阳市| 肥城市| 东莞市| 阿拉善右旗| 黄石市| 六枝特区| 平乡县| 郸城县| 互助| 怀来县| 全椒县| 镇赉县| 宁波市| 横峰县| 诏安县| 霸州市| 称多县| 应城市| 大田县| 邯郸市| 师宗县| 奈曼旗| 西城区| 松滋市| 盐山县| 南充市| 同心县| 肥东县| 冷水江市| 西乌珠穆沁旗| 康平县| 龙岩市| 明溪县| 于田县| 潼关县| 惠水县| 离岛区| 东台市|