基于WinCE的OLED驅(qū)動程序設(shè)計
3.3 流接口驅(qū)動程序
本文引用地址:http://m.butianyuan.cn/article/273004.htm流接口驅(qū)動程序由設(shè)備管理應(yīng)用程序加載、管理和卸載, 與具有單獨目的接口的本機驅(qū)動程序相比, 所有流接口驅(qū)動程序使用同一個接口并調(diào)用同一個函數(shù)集---流接口函數(shù)。流接口驅(qū)動程序把外設(shè)抽象成一個文件, 使用標(biāo)準(zhǔn)文件I/O 函數(shù)和電源管理函數(shù), 這些函數(shù)由Windows CE 操作系統(tǒng)的內(nèi)核使用。流接口驅(qū)動程序的入口點函數(shù)為: XXX_ Init、XXX_Deinit、XXX_IOCONtrol、XXX_Open 、XXX_Close 、XXX_PowerDown 、XXX_PowerUp 、XXX_Read 、XXX_Seek 、XXX_Write .流接口驅(qū)動程序函數(shù)的作用及調(diào)用關(guān)系如表1 所示。
表1 Windows CE 下流接口驅(qū)動程序函數(shù)作用及調(diào)用關(guān)系
流接口驅(qū)動程序從設(shè)備管理器和通過文件系統(tǒng)調(diào)用的應(yīng)用程序接受命令, 裝入驅(qū)動將這些命令翻譯成其所控制設(shè)備的適當(dāng)操作的所有信息。所有的流接口驅(qū)動, 無論它管理的是內(nèi)置式設(shè)備還是可安裝式設(shè)備, 是系統(tǒng)引導(dǎo)加載還是動態(tài)加載, 它們與其他的系統(tǒng)組件都有類似的交互過程。
3.4 設(shè)備驅(qū)動程序的初始化過程
在Windows CE 中, 所有的設(shè)備驅(qū)動程序都以動態(tài)鏈接庫(DLL) 的形式存在, 需要通過進(jìn)程加載。設(shè)備驅(qū)動程序向外提供接口函數(shù), 應(yīng)用程序使用API 對設(shè)備進(jìn)行訪問。Windows CE 共有三類系統(tǒng)進(jìn)程用來加載驅(qū)動程序:Device.exe 、GWES.exe 、FileSys.exe .驅(qū)動程序的初始化過程為:設(shè)備上電---啟動bootloader---啟動NK.exe---啟動Device.exe---初始化數(shù)據(jù)結(jié)構(gòu)和I/O---加載總線枚舉器---枚舉注冊表Driver/BuildIn 下所有的子鍵。這里的枚舉就是循環(huán)調(diào)用ActivateDeviceEx 函數(shù)加載驅(qū)動程序。
4 Windows CE 開發(fā)流接口驅(qū)動程序?qū)嵗?/p>
以維信諾VGG13264C 132×64 OLED 顯示模塊的驅(qū)動程序為例, 具體闡述Windows CE 驅(qū)動開發(fā)的過程。
4.1 硬件結(jié)構(gòu)
系統(tǒng)硬件以飛凌OK6410-B 開發(fā)板為主板, 以維信諾VGG13264C 顯示模塊為OLED 顯示屏。系統(tǒng)硬件框圖如圖4 所示。
飛凌OK6410 -B 開發(fā)板基于三星公司最新的ARM11 處理器S3C6410 , 擁有強大的內(nèi)部資源和視頻處理能力, 可穩(wěn)定運行在667 MHz 主頻以上, 支持MobileDDR 和多種NAND Flash .FL6410 開發(fā)板上集成了多種高端接口, 如復(fù)合視頻信號、攝像頭、USB、SD 卡、液晶屏、以太網(wǎng)等, 豐富的接口可幫助用戶實現(xiàn)高端產(chǎn)品級設(shè)計。
維信諾VGG13264C 是132 列×64 行點陣的OLED 單色、字符、圖形顯示模塊, 使用單芯片SSD1303T6 進(jìn)行驅(qū)動, 具有8 位并行數(shù)據(jù)接口, 模塊內(nèi)含132×64 顯示數(shù)據(jù)RAM, 通過用戶I/O 接口連接到飛凌OK6410-B 開發(fā)板。
4.2 流接口驅(qū)動程序開發(fā)過程
Windows CE 提供了兩種編寫流接口驅(qū)動的方法:
(1) 通過編寫動態(tài)鏈接庫的方法實現(xiàn); (2) 通過修改BSP的方法實現(xiàn)。由于第二種方法可以加快開發(fā)進(jìn)度, 在該實例中, 使用修改BSP 的方法進(jìn)行流接口驅(qū)動程序開發(fā), 其開發(fā)步驟為: 首先在BSP 中新建一個目錄, 編寫驅(qū)動程序文件并確定驅(qū)動程序向外提供的接口函數(shù), 然后進(jìn)行注冊表設(shè)置, 最后進(jìn)行測試。
(1) 驅(qū)動程序代碼編寫
設(shè)備初始化使用OED_Init 函數(shù)實現(xiàn), 設(shè)備卸載使用OED_Deinit 函數(shù)實現(xiàn)。在OED_Init 函數(shù)中, 使用DrvLib_MapIoSpace 函數(shù)實現(xiàn)物理地址到虛擬地址映射;在OED_Deinit 函數(shù)中, 使用VirtualFree 函數(shù)釋放驅(qū)動程序使用的虛擬內(nèi)存從而實現(xiàn)了設(shè)備的卸載。
設(shè)備的I/O 控制向設(shè)備發(fā)出命令, 按照維信諾VGG13264C OLED 顯示模塊的時序關(guān)系, 通過控制相應(yīng)管腳的電平高低實現(xiàn)向設(shè)備發(fā)出命令。設(shè)備的I/O 控制在OED_IOControl 函數(shù)中實現(xiàn), 函數(shù)部分代碼如下:
(2) 向外提供函數(shù)接口
通過配置OED.def 文件導(dǎo)出OLED 提供的接口函數(shù), 供設(shè)備管理器使用。在OED.def 文件中添加如下代碼:
(3) 注冊表配置。
注冊表文件Platform. reg 用來配置與OLED 驅(qū)動有關(guān)的信息, 配置如下:
[HKEY_LOCAL_MACHINEDriversBuiltInIoControler]
"Prefix "="OED"
"Dll "="OED.dll "
"Index "=dword:0
隨著嵌入式系統(tǒng)廣泛應(yīng)用到信息家電、工業(yè)控制、移動通信、互聯(lián)網(wǎng)等領(lǐng)域, 大量嵌入式系統(tǒng)的開發(fā)必將對人類科技的發(fā)展起著重要的作用。本文介紹的基于嵌入式操作系統(tǒng)Windows CE 的驅(qū)動程序會幫助讀者開發(fā)出更多的嵌入式系統(tǒng)產(chǎn)品。
逆變器相關(guān)文章:逆變器原理
可控硅相關(guān)文章:可控硅工作原理
逆變器相關(guān)文章:逆變器工作原理
比較器相關(guān)文章:比較器工作原理
評論