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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > WindowsCE.Net下基于流驅(qū)動(dòng)的AD驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

          WindowsCE.Net下基于流驅(qū)動(dòng)的AD驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

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

          0 引言

          Windows CE.Net 是一個(gè)32位、多任務(wù)、多線程的完全搶占式的實(shí)時(shí)操作系統(tǒng)。它提供了眾多強(qiáng)大工具適應(yīng)于快速構(gòu)建新一代內(nèi)存少、體積小的智能設(shè)備,如工業(yè)控制器、手持式設(shè)備等。該系統(tǒng)的特點(diǎn)是專為各種具有嚴(yán)格資源限制的硬件系統(tǒng)所設(shè)計(jì)的。為了將操作系統(tǒng)和硬件設(shè)備連接起來(lái),連接硬件和應(yīng)用軟件的驅(qū)動(dòng)就非常重要。該論文主要針對(duì)SAMSUNG公司以ARM9為內(nèi)核的S3C2410進(jìn)行分析,介紹在Windows CE.Net 系統(tǒng)下進(jìn)行底層設(shè)備的原理和開發(fā)方法并提供AD驅(qū)動(dòng)程序的實(shí)例。

          1 S3C2410芯片片上AD介紹

          S3C2410 是一款基于ARM920T的16/32位RISC微處理器,擁有高性價(jià)比,低功耗等特點(diǎn),也是目前市面上出現(xiàn)較多的嵌入式開發(fā)板的處理器之一,具有8路 10位的A/D轉(zhuǎn)換,S3C2410上的A/D轉(zhuǎn)換器在2.5MHZ的時(shí)鐘下,最大轉(zhuǎn)化速率可達(dá)500KSPS,A/D轉(zhuǎn)換器支持片上采樣和保持功能。 S3C2410微處理對(duì)AD轉(zhuǎn)換進(jìn)行的操作,主要是對(duì)下面的兩個(gè)寄存器進(jìn)行讀/寫:ADC 控制寄存器,ADCCON ;ADC 數(shù)據(jù)寄器,ADCDAT0。

          2

          Windows CE.Net 支持四種驅(qū)動(dòng)模型:本地驅(qū)動(dòng)、流驅(qū)動(dòng)、USB、NDIS[1]。本文只針對(duì)流驅(qū)動(dòng)進(jìn)行介紹。

          2.1 體系結(jié)構(gòu)

          流驅(qū)動(dòng)將設(shè)備抽象為文件進(jìn)行操作,它體系結(jié)構(gòu)如圖1所示。應(yīng)用程序使用文件API對(duì)設(shè)備進(jìn)行訪問(wèn),文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進(jìn)程中;然后FileSys.exe發(fā)現(xiàn)是對(duì)設(shè)備進(jìn)行操作,就會(huì)把執(zhí)行交給設(shè)備管理器;接著設(shè)備管理器根據(jù)具體的請(qǐng)求,調(diào)用不同的流接口驅(qū)動(dòng)程序中暴露的接口;最終驅(qū)動(dòng)程序負(fù)責(zé)與硬件交互[2-3]。

          圖1流接口驅(qū)動(dòng)的體系結(jié)構(gòu)

          2.2 流接口函數(shù)

          流接口驅(qū)動(dòng)程序是動(dòng)態(tài)連接庫(kù),由設(shè)備管理程序的特殊程序加載、管理和卸載,與具有單獨(dú)目的接口的內(nèi)部驅(qū)動(dòng)程序相比,流接口驅(qū)動(dòng)程序使用同一個(gè)接口并調(diào)用同一個(gè)函數(shù)集-流接口函數(shù)[4]。Windows CE.Net 系統(tǒng)規(guī)定流接口的入口點(diǎn)如表1,對(duì)應(yīng)著直接或者間接調(diào)用流接口函數(shù)的系統(tǒng)組件或文件API函數(shù)。生成一個(gè)DLL后,就用設(shè)備文件名前綴替換入口點(diǎn)名字中的XXX。

          表1 流接口入口函數(shù)

          流接口函數(shù)

          功能描述

          調(diào)用流接口對(duì)象

          XXX_Init()

          初始化設(shè)備

          系統(tǒng)設(shè)備管理器

          XXX_Denit()

          卸載設(shè)備

          系統(tǒng)設(shè)備管理器

          XXX_Open()

          打開設(shè)備進(jìn)行讀寫操作

          文件API函數(shù)CreateFile()

          XXX_Close()

          關(guān)閉設(shè)備

          文件API函數(shù)CloseHandle()

          XXX_Read()

          讀取設(shè)備數(shù)據(jù)

          文件API函數(shù)ReadFile()

          XXX_Write()

          向設(shè)備寫數(shù)據(jù)

          文件API函數(shù)WriteFile()

          XXX_IOControl()

          對(duì)設(shè)備進(jìn)行各種操作

          文件API函數(shù)DeviceIOControl()

          XXX_Seek()

          移動(dòng)設(shè)備數(shù)據(jù)的指針位置

          文件API函數(shù)SetFilePointer()

          XXX_PowerDown()

          使設(shè)備休眠

          系統(tǒng)電源管理器

          XXX_PowerUp()

          恢復(fù)設(shè)備電源

          系統(tǒng)電源管理器

          2.3 流接口驅(qū)動(dòng)工作原理

          在流驅(qū)動(dòng)工作原理中需要包括幾個(gè)重要的工作實(shí)體:硬件、流接口驅(qū)動(dòng)驅(qū)動(dòng)程序、系統(tǒng)注冊(cè)表、設(shè)備管理器、應(yīng)用程序。整個(gè)驅(qū)動(dòng)程序工作原理如圖2所示。

          流驅(qū)動(dòng)的工作順序如下:1)加載驅(qū)動(dòng)。在當(dāng)系統(tǒng)啟動(dòng)時(shí),設(shè)備管理器搜尋注冊(cè)表的 HKEY_LOCAL_MACHINEDriverBuiltIn鍵下面的子鍵,并逐一加載子鍵下的每個(gè)驅(qū)動(dòng),此過(guò)程叫BusEnum。2)設(shè)備管理器從注冊(cè)表的dll鍵值中獲取驅(qū)動(dòng)程序所在的DLL文件名。3)設(shè)備管理器調(diào)用LoadDriver()函數(shù)把DLL加載到自己的虛擬地址空間內(nèi)。4)設(shè)備管理器在注冊(cè)表的HKEY_LOCAL_MACHINEDriverActive下面,記錄所有已經(jīng)加載的驅(qū)動(dòng)程序[2]。 5)設(shè)備管理器調(diào)用驅(qū)動(dòng)中的XXX_Init()函數(shù)。6)在XXX_Init()中,通常對(duì)硬件進(jìn)行一些基本的初始化操作。通過(guò)以上6步,流接口驅(qū)動(dòng)被成功加載。7)應(yīng)用程序使用該設(shè)備。首先它調(diào)用CreateFile()打開設(shè)備。CreateFile()是在FileSys.exe中實(shí)現(xiàn)的。但是 FileSys.exe只作簡(jiǎn)單判斷,如果發(fā)現(xiàn)打開的程序而不是一個(gè)文件,那么就重新把主動(dòng)權(quán)交還給設(shè)備管理器。8)設(shè)備管理器調(diào)用驅(qū)動(dòng)程序中的 XXX_Open()函數(shù)打開設(shè)備。在XXX_Open()中,驅(qū)動(dòng)程序可能會(huì)對(duì)硬件進(jìn)行一些額外的初始化工作,使硬件進(jìn)入工作狀態(tài)。 9)XXX_Open()函數(shù)把打開設(shè)備的結(jié)果返回給設(shè)備管理器。10)設(shè)備管理器把XXX_Open()返回的結(jié)果,再返回給應(yīng)用程序的 CreateFile()函數(shù)調(diào)用。通過(guò)7-10步,設(shè)備已被成功打開,至此就可以對(duì)設(shè)備進(jìn)行讀寫和控制操作。11)應(yīng)用程序使用第7步 CreateFile()函數(shù)返回的句柄作為ReadFile() / WriteFile()的第一個(gè)參數(shù),向設(shè)備發(fā)送讀請(qǐng)求。同樣ReadFile() / WriteFile()要經(jīng)過(guò)FileSys.exe轉(zhuǎn)發(fā)給設(shè)備管理器。12)設(shè)備管理器調(diào)用驅(qū)動(dòng)程序中的XXX_Read() / XXX_Write() 函數(shù),讀取設(shè)備的數(shù)據(jù)信息或向設(shè)備寫信息。13)在流驅(qū)動(dòng)程序中,XXX_Read() / XXX_Write() 函數(shù)可與硬件交互,從硬件中讀取必要的信息或向硬件寫必要的信息。然后返回給設(shè)備管理器,再返回給應(yīng)用程序。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();