基于Windows CE的OLED驅動程序設計與實現(xiàn)
摘要: 介紹了Windows CE 的體系結構和中斷處理機制, 研究了Windows CE 設備驅動程序的類型和初始化過程,以維信諾VGG13264C 132×64 OLED 顯示模塊的WindowsCE 驅動程序設計為例, 詳細闡述了嵌入式Windows CE 驅動程序的開發(fā)過程。
隨著計算機技術和嵌入式技術的迅猛發(fā)展, 嵌入式軟、硬件設計需求越來越廣泛, 嵌入式軟件開發(fā), 特別是嵌入式軟件的驅動開發(fā), 成為一個熱點。
Windows CE 是一個新的、可移植的、實時的、模塊化的操作系統(tǒng),具有簡捷、高效的完全搶先式多任務操作核心, 支持強大的通信和圖形顯示功能, 能夠適應廣泛的系統(tǒng)需求, 在最新一代的工業(yè)和家用電子設備中得到了廣泛的應用。
在進行嵌入式Windows CE 項目開發(fā)的過程中, 經(jīng)常需要根據(jù)需求定制顯示屏, 如何為定制的顯示屏開發(fā)Windows CE 驅動程序成為嵌入式系統(tǒng)開發(fā)的關鍵步驟。本文在深入研究Windows CE 驅動程序工作原理的基礎上, 以維信諾VGG13264C 132×64 OLED 顯示模塊的WindowsCE 驅動程序設計為例, 詳細闡述了嵌入式Windows CE 驅動程序的開發(fā)過程, 并對設計實現(xiàn)的驅動程序進行了測試。
1 Window CE 的系統(tǒng)體系結構
Windows CE 是微軟設計開發(fā)的一種可升級的搶先式多任務32 位實時操作系統(tǒng)。一個基于Windows CE 的平臺主要由以下幾部分組成:Windows CE 內核組件、OAL 層和驅動程序。OAL 層和驅動程序作為目標設備和Windows CE 內核組件之間的接口, 將操作系統(tǒng)上層與硬件隔離, 便于支持硬件擴展和即插即用功能,圖1 詳細描述了三者之間的關系。
2 Windows CE 中斷處理
Windows CE 將中斷處理分為兩個步驟: 中斷服務例程(ISR) 和中斷服務線程(IST)。把每個硬件的設備中斷請求(IRQ) 和一個ISR 聯(lián)系起來, 當一個中斷發(fā)生并未被屏蔽時, 內核調用該中斷注冊的ISR.因為ISR 運行于內核模式, 所以應設計得盡可能短,ISR 引導內核調度和啟動合適的IST,IST 在設備驅動程序軟件模塊中編寫, 運行于用戶模式, 它從硬件獲取或向硬件發(fā)送數(shù)據(jù)和控制代碼, 并進一步處理設備中斷。Windows CE 還提供了中斷嵌套功能, 即在一個ISR 運行時, 內核并不關閉中斷, 當優(yōu)先級比之高的中斷發(fā)生時, 內核保存當前執(zhí)行的中斷服務例程ISR 的運行狀態(tài), 掛起該ISR,轉而執(zhí)行更高優(yōu)先級中斷的ISR.等到高優(yōu)先級中斷的ISR執(zhí)行完后, 被掛起的低優(yōu)先級中斷的ISR 才重新開始被CPU 調度執(zhí)行。Windows CE 的中斷處理框圖如圖2 所示。
3 Windows CE 設備驅動程序
設備驅動程序將操作系統(tǒng)和設備連接起來, 使操作系統(tǒng)能夠識別設備, 并為應用程序提供服務。
3.1 設備驅動程序模型
Windows CE 提供了用于驅動開發(fā)的模型,其中包括來自其他操作系統(tǒng)的驅動程序模型。
因為有這些多變的驅動程序模型, 使Windows CE可以適應大部分的內部和外圍設備。目前,Windows CE提供了4 種設備模型, 其中兩種是專用于Windows CE模型, 另外兩種外部模型來自其他的操作系統(tǒng), 匯總如圖3 所示。
3.2 本機驅動程序
要把Windows CE 移植到目標平臺上, 必須為平臺上已建立的設備提供驅動程序。一些類型的設備, 如鍵盤、顯示器和PC 卡插槽等對操作系統(tǒng)都有一個自定義接口。因為這些接口是專門用于Windows CE 的, 所以稱這類驅動程序為本機驅動程序。Windows CE 平臺生成器提供本機設備驅動程序的樣本, 可考慮把本機設備驅動程序樣本應用到平臺上, 而不需要再從頭開發(fā)自己的本機驅動程序。用戶可根據(jù)驅動程序樣本快速開發(fā)自己的驅動程序。
3.3 流接口驅動程序
流接口驅動程序由設備管理應用程序加載、管理和卸載, 與具有單獨目的接口的本機驅動程序相比, 所有流接口驅動程序使用同一個接口并調用同一個函數(shù)集---流接口函數(shù)。流接口驅動程序把外設抽象成一個文件, 使用標準文件I/O 函數(shù)和電源管理函數(shù), 這些函數(shù)由Windows CE 操作系統(tǒng)的內核使用。流接口驅動程序的入口點函數(shù)為: XXX_ Init、XXX_Deinit、XXX_IOCONtrol、XXX_Open 、XXX_Close 、XXX_PowerDown 、XXX_PowerUp 、XXX_Read 、XXX_Seek 、XXX_Write .流接口驅動程序函數(shù)的作用及調用關系如表1 所示。
表1 Windows CE 下流接口驅動程序函數(shù)作用及調用關系
流接口驅動程序從設備管理器和通過文件系統(tǒng)調用的應用程序接受命令, 裝入驅動將這些命令翻譯成其所控制設備的適當操作的所有信息。所有的流接口驅動, 無論它管理的是內置式設備還是可安裝式設備, 是系統(tǒng)引導加載還是動態(tài)加載, 它們與其他的系統(tǒng)組件都有類似的交互過程。
3.4 設備驅動程序的初始化過程
在Windows CE 中, 所有的設備驅動程序都以動態(tài)鏈接庫(DLL) 的形式存在, 需要通過進程加載。設備驅動程序向外提供接口函數(shù), 應用程序使用API 對設備進行訪問。Windows CE 共有三類系統(tǒng)進程用來加載驅動程序:Device.exe 、GWES.exe 、FileSys.exe .驅動程序的初始化過程為:設備上電---啟動bootloader---啟動NK.exe---啟動Device.exe---初始化數(shù)據(jù)結構和I/O---加載總線枚舉器---枚舉注冊表Driver/BuildIn 下所有的子鍵。這里的枚舉就是循環(huán)調用ActivateDeviceEx 函數(shù)加載驅動程序。
4 Windows CE 開發(fā)流接口驅動程序實例
以維信諾VGG13264C 132×64 OLED 顯示模塊的驅動程序為例, 具體闡述Windows CE 驅動開發(fā)的過程。
4.1 硬件結構
系統(tǒng)硬件以飛凌OK6410-B 開發(fā)板為主板, 以維信諾VGG13264C 顯示模塊為OLED 顯示屏。系統(tǒng)硬件框圖如圖4 所示。
飛凌OK6410 -B 開發(fā)板基于三星公司最新的ARM11 處理器S3C6410 , 擁有強大的內部資源和視頻處理能力, 可穩(wěn)定運行在667 MHz 主頻以上, 支持MobileDDR 和多種NAND Flash .FL6410 開發(fā)板上集成了多種高端接口, 如復合視頻信號、攝像頭、USB、SD 卡、液晶屏、以太網(wǎng)等, 豐富的接口可幫助用戶實現(xiàn)高端產(chǎn)品級設計。
維信諾VGG13264C 是132 列×64 行點陣的OLED 單色、字符、圖形顯示模塊, 使用單芯片SSD1303T6 進行驅動, 具有8 位并行數(shù)據(jù)接口, 模塊內含132×64 顯示數(shù)據(jù)RAM, 通過用戶I/O 接口連接到飛凌OK6410-B 開發(fā)板。
4.2 流接口驅動程序開發(fā)過程
Windows CE 提供了兩種編寫流接口驅動的方法:
(1) 通過編寫動態(tài)鏈接庫的方法實現(xiàn); (2) 通過修改BSP的方法實現(xiàn)。由于第二種方法可以加快開發(fā)進度, 在該實例中, 使用修改BSP 的方法進行流接口驅動程序開發(fā), 其開發(fā)步驟為: 首先在BSP 中新建一個目錄, 編寫驅動程序文件并確定驅動程序向外提供的接口函數(shù), 然后進行注冊表設置, 最后進行測試。
(1) 驅動程序代碼編寫
設備初始化使用OED_Init 函數(shù)實現(xiàn), 設備卸載使用OED_Deinit 函數(shù)實現(xiàn)。在OED_Init 函數(shù)中, 使用DrvLib_MapIoSpace 函數(shù)實現(xiàn)物理地址到虛擬地址映射;在OED_Deinit 函數(shù)中, 使用VirtualFree 函數(shù)釋放驅動程序使用的虛擬內存從而實現(xiàn)了設備的卸載。
設備的I/O 控制向設備發(fā)出命令, 按照維信諾VGG13264C OLED 顯示模塊的時序關系, 通過控制相應管腳的電平高低實現(xiàn)向設備發(fā)出命令。設備的I/O 控制在OED_IOControl 函數(shù)中實現(xiàn), 函數(shù)部分代碼如下:
(2) 向外提供函數(shù)接口
通過配置OED.def 文件導出OLED 提供的接口函數(shù), 供設備管理器使用。在OED.def 文件中添加如下代碼:
(3) 注冊表配置。
注冊表文件Platform. reg 用來配置與OLED 驅動有關的信息, 配置如下:
[HKEY_LOCAL_MACHINEDriversBuiltInIoControler]
"Prefix "="OED"
"Dll "="OED.dll "
"Index "=dword:0
隨著嵌入式系統(tǒng)廣泛應用到信息家電、工業(yè)控制、移動通信、互聯(lián)網(wǎng)等領域, 大量嵌入式系統(tǒng)的開發(fā)必將對人類科技的發(fā)展起著重要的作用。本文介紹的基于嵌入式操作系統(tǒng)Windows CE 的驅動程序會幫助讀者開發(fā)出更多的嵌入式系統(tǒng)產(chǎn)品。