<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Windows CE的OLED驅(qū)動(dòng)程序設(shè)計(jì)與實(shí)現(xiàn)

          基于Windows CE的OLED驅(qū)動(dòng)程序設(shè)計(jì)與實(shí)現(xiàn)

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

          摘要: 介紹了 的體系結(jié)構(gòu)和中斷處理機(jī)制, 研究了 設(shè)備程序的類(lèi)型和初始化過(guò)程,以維信諾VGG13264C 132×64 顯示模塊的 為例, 詳細(xì)闡述了嵌入式Windows CE 程序的開(kāi)發(fā)過(guò)程。

          本文引用地址:http://www.ex-cimer.com/article/149936.htm

          隨著計(jì)算機(jī)技術(shù)和嵌入式技術(shù)的迅猛發(fā)展, 嵌入式軟、硬件設(shè)計(jì)需求越來(lái)越廣泛, 嵌入式軟件開(kāi)發(fā), 特別是嵌入式軟件的驅(qū)動(dòng)開(kāi)發(fā), 成為一個(gè)熱點(diǎn)。

          Windows CE 是一個(gè)新的、可移植的、實(shí)時(shí)的、模塊化的操作系統(tǒng),具有簡(jiǎn)捷、高效的完全搶先式多任務(wù)操作核心, 支持強(qiáng)大的通信和圖形顯示功能, 能夠適應(yīng)廣泛的系統(tǒng)需求, 在最新一代的工業(yè)和家用電子設(shè)備中得到了廣泛的應(yīng)用。

          在進(jìn)行嵌入式Windows CE 項(xiàng)目開(kāi)發(fā)的過(guò)程中, 經(jīng)常需要根據(jù)需求定制顯示屏, 如何為定制的顯示屏開(kāi)發(fā)Windows CE 驅(qū)動(dòng)程序成為嵌入式系統(tǒng)開(kāi)發(fā)的關(guān)鍵步驟。本文在深入研究Windows CE 驅(qū)動(dòng)程序工作原理的基礎(chǔ)上, 以維信諾VGG13264C 132×64 顯示模塊的WindowsCE 驅(qū)動(dòng)為例, 詳細(xì)闡述了嵌入式Windows CE 驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程, 并對(duì)設(shè)計(jì)的驅(qū)動(dòng)程序進(jìn)行了測(cè)試。

          1 Window CE 的系統(tǒng)體系結(jié)構(gòu)

          Windows CE 是微軟設(shè)計(jì)開(kāi)發(fā)的一種可升級(jí)的搶先式多任務(wù)32 位實(shí)時(shí)操作系統(tǒng)。一個(gè)Windows CE 的平臺(tái)主要由以下幾部分組成:Windows CE 內(nèi)核組件、OAL 層和驅(qū)動(dòng)程序。OAL 層和驅(qū)動(dòng)程序作為目標(biāo)設(shè)備和Windows CE 內(nèi)核組件之間的接口, 將操作系統(tǒng)上層與硬件隔離, 便于支持硬件擴(kuò)展和即插即用功能,圖1 詳細(xì)描述了三者之間的關(guān)系。

          圖1 基于Windows CE 的目標(biāo)平臺(tái)及其組件

          2 Windows CE 中斷處理

          Windows CE 將中斷處理分為兩個(gè)步驟: 中斷服務(wù)例程(ISR) 和中斷服務(wù)線程(IST)。把每個(gè)硬件的設(shè)備中斷請(qǐng)求(IRQ) 和一個(gè)ISR 聯(lián)系起來(lái), 當(dāng)一個(gè)中斷發(fā)生并未被屏蔽時(shí), 內(nèi)核調(diào)用該中斷注冊(cè)的ISR.因?yàn)镮SR 運(yùn)行于內(nèi)核模式, 所以應(yīng)設(shè)計(jì)得盡可能短,ISR 引導(dǎo)內(nèi)核調(diào)度和啟動(dòng)合適的IST,IST 在設(shè)備驅(qū)動(dòng)程序軟件模塊中編寫(xiě), 運(yùn)行于用戶模式, 它從硬件獲取或向硬件發(fā)送數(shù)據(jù)和控制代碼, 并進(jìn)一步處理設(shè)備中斷。Windows CE 還提供了中斷嵌套功能, 即在一個(gè)ISR 運(yùn)行時(shí), 內(nèi)核并不關(guān)閉中斷, 當(dāng)優(yōu)先級(jí)比之高的中斷發(fā)生時(shí), 內(nèi)核保存當(dāng)前執(zhí)行的中斷服務(wù)例程ISR 的運(yùn)行狀態(tài), 掛起該ISR,轉(zhuǎn)而執(zhí)行更高優(yōu)先級(jí)中斷的ISR.等到高優(yōu)先級(jí)中斷的ISR執(zhí)行完后, 被掛起的低優(yōu)先級(jí)中斷的ISR 才重新開(kāi)始被CPU 調(diào)度執(zhí)行。Windows CE 的中斷處理框圖如圖2 所示。

          Windows CE 的中斷處理框圖

          3 Windows CE 設(shè)備驅(qū)動(dòng)程序

          設(shè)備驅(qū)動(dòng)程序?qū)⒉僮飨到y(tǒng)和設(shè)備連接起來(lái), 使操作系統(tǒng)能夠識(shí)別設(shè)備, 并為應(yīng)用程序提供服務(wù)。

          3.1 設(shè)備驅(qū)動(dòng)程序模型

          Windows CE 提供了用于驅(qū)動(dòng)開(kāi)發(fā)的模型,其中包括來(lái)自其他操作系統(tǒng)的驅(qū)動(dòng)程序模型。

          因?yàn)橛羞@些多變的驅(qū)動(dòng)程序模型, 使Windows CE可以適應(yīng)大部分的內(nèi)部和外圍設(shè)備。目前,Windows CE提供了4 種設(shè)備模型, 其中兩種是專(zhuān)用于Windows CE模型, 另外兩種外部模型來(lái)自其他的操作系統(tǒng), 匯總?cè)鐖D3 所示。

          圖3 驅(qū)動(dòng)程序模型

          3.2 本機(jī)驅(qū)動(dòng)程序

          要把Windows CE 移植到目標(biāo)平臺(tái)上, 必須為平臺(tái)上已建立的設(shè)備提供驅(qū)動(dòng)程序。一些類(lèi)型的設(shè)備, 如鍵盤(pán)、顯示器和PC 卡插槽等對(duì)操作系統(tǒng)都有一個(gè)自定義接口。因?yàn)檫@些接口是專(zhuān)門(mén)用于Windows CE 的, 所以稱這類(lèi)驅(qū)動(dòng)程序?yàn)楸緳C(jī)驅(qū)動(dòng)程序。Windows CE 平臺(tái)生成器提供本機(jī)設(shè)備驅(qū)動(dòng)程序的樣本, 可考慮把本機(jī)設(shè)備驅(qū)動(dòng)程序樣本應(yīng)用到平臺(tái)上, 而不需要再?gòu)念^開(kāi)發(fā)自己的本機(jī)驅(qū)動(dòng)程序。用戶可根據(jù)驅(qū)動(dòng)程序樣本快速開(kāi)發(fā)自己的驅(qū)動(dòng)程序。

          3.3 流接口驅(qū)動(dòng)程序

          流接口驅(qū)動(dòng)程序由設(shè)備管理應(yīng)用程序加載、管理和卸載, 與具有單獨(dú)目的接口的本機(jī)驅(qū)動(dòng)程序相比, 所有流接口驅(qū)動(dòng)程序使用同一個(gè)接口并調(diào)用同一個(gè)函數(shù)集---流接口函數(shù)。流接口驅(qū)動(dòng)程序把外設(shè)抽象成一個(gè)文件, 使用標(biāo)準(zhǔn)文件I/O 函數(shù)和電源管理函數(shù), 這些函數(shù)由Windows CE 操作系統(tǒng)的內(nèi)核使用。流接口驅(qū)動(dòng)程序的入口點(diǎn)函數(shù)為: XXX_ Init、XXX_Deinit、XXX_IOCONtrol、XXX_Open 、XXX_Close 、XXX_PowerDown 、XXX_PowerUp 、XXX_Read 、XXX_Seek 、XXX_Write .流接口驅(qū)動(dòng)程序函數(shù)的作用及調(diào)用關(guān)系如表1 所示。

          表1 Windows CE 下流接口驅(qū)動(dòng)程序函數(shù)作用及調(diào)用關(guān)系

          表1 Windows CE 下流接口驅(qū)動(dòng)程序函數(shù)作用及調(diào)用關(guān)系

          流接口驅(qū)動(dòng)程序從設(shè)備管理器和通過(guò)文件系統(tǒng)調(diào)用的應(yīng)用程序接受命令, 裝入驅(qū)動(dòng)將這些命令翻譯成其所控制設(shè)備的適當(dāng)操作的所有信息。所有的流接口驅(qū)動(dòng), 無(wú)論它管理的是內(nèi)置式設(shè)備還是可安裝式設(shè)備, 是系統(tǒng)引導(dǎo)加載還是動(dòng)態(tài)加載, 它們與其他的系統(tǒng)組件都有類(lèi)似的交互過(guò)程。

          3.4 設(shè)備驅(qū)動(dòng)程序的初始化過(guò)程

          在Windows CE 中, 所有的設(shè)備驅(qū)動(dòng)程序都以動(dòng)態(tài)鏈接庫(kù)(DLL) 的形式存在, 需要通過(guò)進(jìn)程加載。設(shè)備驅(qū)動(dòng)程序向外提供接口函數(shù), 應(yīng)用程序使用API 對(duì)設(shè)備進(jìn)行訪問(wèn)。Windows CE 共有三類(lèi)系統(tǒng)進(jìn)程用來(lái)加載驅(qū)動(dòng)程序:Device.exe 、GWES.exe 、FileSys.exe .驅(qū)動(dòng)程序的初始化過(guò)程為:設(shè)備上電---啟動(dòng)bootloader---啟動(dòng)NK.exe---啟動(dòng)Device.exe---初始化數(shù)據(jù)結(jié)構(gòu)和I/O---加載總線枚舉器---枚舉注冊(cè)表Driver/BuildIn 下所有的子鍵。這里的枚舉就是循環(huán)調(diào)用ActivateDeviceEx 函數(shù)加載驅(qū)動(dòng)程序。

          4 Windows CE 開(kāi)發(fā)流接口驅(qū)動(dòng)程序?qū)嵗?/font>

          以維信諾VGG13264C 132×64 顯示模塊的驅(qū)動(dòng)程序?yàn)槔?具體闡述Windows CE 驅(qū)動(dòng)開(kāi)發(fā)的過(guò)程。

          4.1 硬件結(jié)構(gòu)

          系統(tǒng)硬件以飛凌OK6410-B 開(kāi)發(fā)板為主板, 以維信諾VGG13264C 顯示模塊為OLED 顯示屏。系統(tǒng)硬件框圖如圖4 所示。

          圖4 系統(tǒng)硬件結(jié)構(gòu)框圖

          飛凌OK6410 -B 開(kāi)發(fā)板三星公司最新的ARM11 處理器S3C6410 , 擁有強(qiáng)大的內(nèi)部資源和視頻處理能力, 可穩(wěn)定運(yùn)行在667 MHz 主頻以上, 支持MobileDDR 和多種NAND Flash .FL6410 開(kāi)發(fā)板上集成了多種高端接口, 如復(fù)合視頻信號(hào)、攝像頭、USB、SD 卡、液晶屏、以太網(wǎng)等, 豐富的接口可幫助用戶高端產(chǎn)品級(jí)設(shè)計(jì)。

          維信諾VGG13264C 是132 列×64 行點(diǎn)陣的OLED 單色、字符、圖形顯示模塊, 使用單芯片SSD1303T6 進(jìn)行驅(qū)動(dòng), 具有8 位并行數(shù)據(jù)接口, 模塊內(nèi)含132×64 顯示數(shù)據(jù)RAM, 通過(guò)用戶I/O 接口連接到飛凌OK6410-B 開(kāi)發(fā)板。

          4.2 流接口驅(qū)動(dòng)程序開(kāi)發(fā)過(guò)程

          Windows CE 提供了兩種編寫(xiě)流接口驅(qū)動(dòng)的方法:

          (1) 通過(guò)編寫(xiě)動(dòng)態(tài)鏈接庫(kù)的方法; (2) 通過(guò)修改BSP的方法實(shí)現(xiàn)。由于第二種方法可以加快開(kāi)發(fā)進(jìn)度, 在該實(shí)例中, 使用修改BSP 的方法進(jìn)行流接口驅(qū)動(dòng)程序開(kāi)發(fā), 其開(kāi)發(fā)步驟為: 首先在BSP 中新建一個(gè)目錄, 編寫(xiě)驅(qū)動(dòng)程序文件并確定驅(qū)動(dòng)程序向外提供的接口函數(shù), 然后進(jìn)行注冊(cè)表設(shè)置, 最后進(jìn)行測(cè)試。

          (1) 驅(qū)動(dòng)程序代碼編寫(xiě)

          設(shè)備初始化使用OED_Init 函數(shù)實(shí)現(xiàn), 設(shè)備卸載使用OED_Deinit 函數(shù)實(shí)現(xiàn)。在OED_Init 函數(shù)中, 使用DrvLib_MapIoSpace 函數(shù)實(shí)現(xiàn)物理地址到虛擬地址映射;在OED_Deinit 函數(shù)中, 使用VirtualFree 函數(shù)釋放驅(qū)動(dòng)程序使用的虛擬內(nèi)存從而實(shí)現(xiàn)了設(shè)備的卸載。

          設(shè)備的I/O 控制向設(shè)備發(fā)出命令, 按照維信諾VGG13264C OLED 顯示模塊的時(shí)序關(guān)系, 通過(guò)控制相應(yīng)管腳的電平高低實(shí)現(xiàn)向設(shè)備發(fā)出命令。設(shè)備的I/O 控制在OED_IOControl 函數(shù)中實(shí)現(xiàn), 函數(shù)部分代碼如下:

          (2) 向外提供函數(shù)接口

          通過(guò)配置OED.def 文件導(dǎo)出OLED 提供的接口函數(shù), 供設(shè)備管理器使用。在OED.def 文件中添加如下代碼:

          (3) 注冊(cè)表配置。

          注冊(cè)表文件Platform. reg 用來(lái)配置與OLED 驅(qū)動(dòng)有關(guān)的信息, 配置如下:

          [HKEY_LOCAL_MACHINEDriversBuiltInIoControler]

          Prefix =OED

          Dll =OED.dll

          Index =dword:0

          隨著嵌入式系統(tǒng)廣泛應(yīng)用到信息家電、工業(yè)控制、移動(dòng)通信、互聯(lián)網(wǎng)等領(lǐng)域, 大量嵌入式系統(tǒng)的開(kāi)發(fā)必將對(duì)人類(lèi)科技的發(fā)展起著重要的作用。本文介紹的嵌入式操作系統(tǒng)Windows CE 的驅(qū)動(dòng)程序會(huì)幫助讀者開(kāi)發(fā)出更多的嵌入式系統(tǒng)產(chǎn)品。



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();