新聞中心
引言

站在用戶的角度思考問題,與客戶深入溝通,找到北流網(wǎng)站設(shè)計與北流網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋北流地區(qū)。
Windows CE.Net 是一個32位、多任務(wù)、多線程的完全搶占式的實時操作系統(tǒng)。它提供了眾多強大工具適應于快速構(gòu)建新一代內(nèi)存少、體積小的智能設(shè)備,如工業(yè)控制器、手持式設(shè)備等。該系統(tǒng)的特點是專為各種具有嚴格資源限制的硬件系統(tǒng)所設(shè)計的。為了將操作系統(tǒng)和硬件設(shè)備連接起來,連接硬件和應用軟件的驅(qū)動就非常重要。該論文主要針對SAMSUNG公司以ARM9為內(nèi)核的S3C2410進行分析,介紹在Windows CE.Net 系統(tǒng)下進行底層設(shè)備流接口驅(qū)動的原理和開發(fā)方法并提供AD驅(qū)動程序的實例。
S3C2410芯片片上AD介紹
S3C2410 是一款基于ARM920T的16/32位RISC微處理器,擁有高性價比,低功耗等特點,也是目前市面上出現(xiàn)較多的嵌入式開發(fā)板的處理器之一,具有8路10位的A/D轉(zhuǎn)換,S3C2410上的A/D轉(zhuǎn)換器在2.5MHZ的時鐘下,***轉(zhuǎn)化速率可達500KSPS,A/D轉(zhuǎn)換器支持片上采樣和保持功能。S3C2410微處理對AD轉(zhuǎn)換進行的操作,主要是對下面的兩個寄存器進行讀/寫:ADC 控制寄存器,ADCCON ;ADC 數(shù)據(jù)寄器,ADCDAT0。
流接口驅(qū)動
Windows CE.Net 支持四種驅(qū)動模型:本地驅(qū)動、流驅(qū)動、USB、NDIS[1]。本文只針對流驅(qū)動進行介紹。
流接口驅(qū)動體系結(jié)構(gòu)
流驅(qū)動將設(shè)備抽象為文件進行操作,它體系結(jié)構(gòu)如圖1所示。應用程序使用文件API對設(shè)備進行訪問,文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進程中;然后FileSys.exe發(fā)現(xiàn)是對設(shè)備進行操作,就會把執(zhí)行交給設(shè)備管理器;接著設(shè)備管理器根據(jù)具體的請求,調(diào)用不同的流接口驅(qū)動程序中暴露的接口;最終驅(qū)動程序負責與硬件交互。
流接口函數(shù)
流接口驅(qū)動程序是動態(tài)連接庫,由設(shè)備管理程序的特殊程序加載、管理和卸載,與具有單獨目的接口的內(nèi)部驅(qū)動程序相比,流接口驅(qū)動程序使用同一個接口并調(diào)用同一個函數(shù)集-流接口函數(shù)[4]。Windows CE.Net 系統(tǒng)規(guī)定流接口的入口點如表1,對應著直接或者間接調(diào)用流接口函數(shù)的系統(tǒng)組件或文件API函數(shù)。生成一個DLL后,就用設(shè)備文件名前綴替換入口點名字中的XXX。
流接口驅(qū)動工作原理
在流驅(qū)動工作原理中需要包括幾個重要的工作實體:硬件、流接口驅(qū)動驅(qū)動程序、系統(tǒng)注冊表、設(shè)備管理器、應用程序。整個驅(qū)動程序工作原理。
流驅(qū)動的工作順序如下:1)加載驅(qū)動。在當系統(tǒng)啟動時,設(shè)備管理器搜尋注冊表的HKEY_LOCAL_MACHINE\Driver\BuiltIn鍵下面的子鍵,并逐一加載子鍵下的每個驅(qū)動,此過程叫BusEnum。2)設(shè)備管理器從注冊表的dll鍵值中獲取驅(qū)動程序所在的DLL文件名。3)設(shè)備管理器調(diào)用LoadDriver()函數(shù)把DLL加載到自己的虛擬地址空間內(nèi)。4)設(shè)備管理器在注冊表的HKEY_LOCAL_MACHINE\Driver\Active下面,記錄所有已經(jīng)加載的驅(qū)動程序[2]。5)設(shè)備管理器調(diào)用驅(qū)動中的XXX_Init()函數(shù)。6)在XXX_Init()中,通常對硬件進行一些基本的初始化操作。通過以上6步,流接口驅(qū)動被成功加載。7)應用程序使用該設(shè)備。首先它調(diào)用CreateFile()打開設(shè)備。CreateFile()是在FileSys.exe中實現(xiàn)的。但是FileSys.exe只作簡單判斷,如果發(fā)現(xiàn)打開的設(shè)備驅(qū)動程序而不是一個文件,那么就重新把主動權(quán)交還給設(shè)備管理器。8)設(shè)備管理器調(diào)用驅(qū)動程序中的XXX_Open()函數(shù)打開設(shè)備。在XXX_Open()中,驅(qū)動程序可能會對硬件進行一些額外的初始化工作,使硬件進入工作狀態(tài)。9)XXX_Open()函數(shù)把打開設(shè)備的結(jié)果返回給設(shè)備管理器。10)設(shè)備管理器把XXX_Open()返回的結(jié)果,再返回給應用程序的CreateFile()函數(shù)調(diào)用。通過7-10步,設(shè)備已被成功打開,至此就可以對設(shè)備進行讀寫和控制操作。11)應用程序使用第7步CreateFile()函數(shù)返回的句柄作為 ReadFile() / WriteFile()的***個參數(shù),向設(shè)備發(fā)送讀請求。同樣ReadFile() / WriteFile()要經(jīng)過FileSys.exe轉(zhuǎn)發(fā)給設(shè)備管理器。12)設(shè)備管理器調(diào)用驅(qū)動程序中的XXX_Read() / XXX_Write() 函數(shù),讀取設(shè)備的數(shù)據(jù)信息或向設(shè)備寫信息。13)在流驅(qū)動程序中,XXX_Read() / XXX_Write() 函數(shù)可與硬件交互,從硬件中讀取必要的信息或向硬件寫必要的信息。然后返回給設(shè)備管理器,再返回給應用程序。
當應用程序不再使用該設(shè)備時,它可調(diào)用CloseHandle()將設(shè)備關(guān)閉。當系統(tǒng)不再使用設(shè)備時,應用程序可調(diào)用DeactivateDevice()函數(shù)把該驅(qū)動程序卸載。
AD驅(qū)動的實現(xiàn)
AD驅(qū)動程序以動態(tài)鏈接庫方式編寫,采用流接口驅(qū)動的標準形式。在ADC_ Init函數(shù)中,主要進行初始化。函數(shù)ADC_Open 只需要返回一個不為0的值來判斷打開設(shè)備成功。在函數(shù) ADC_Write 中通過寫入要選擇的通道號和預分頻值,它控制通道的動作。函數(shù) ADC_Read 中的代碼最為關(guān)鍵,它完成讀取模擬量向數(shù)字量的轉(zhuǎn)換結(jié)果,其部分主要代碼如下:
pADCIOreg->rADCCON = (1<<14)|(ADCPRS<<6)|(ch<<3); //建立通道號
pADCIOreg->rADCCON |= 0x1; // 開始轉(zhuǎn)換
while(pADCIOreg->rADCCON & 0x1); //檢測開始位是否為低電平
while(!(pADCIOreg->rADCCON & 0x8000)); //檢測轉(zhuǎn)換是否完畢標志位
return ( (double)(pADCIOreg->rADCDAT0 & 0x3ff) ); //返回轉(zhuǎn)換完的數(shù)值
其中 ch 表示采樣通道號, ADCPRS為預分頻值。其它函數(shù)均為空。
ADC驅(qū)動封裝及其在Windows CE.Net中的添加
通過以上的工作,編譯出一個 DLL 函數(shù),接著建立一個自己的 def 文件,導出所需要的流接口函數(shù)。新建一個記事本文件,命名為 AdcDriver.Def :
LIBRARY AdcDriver
EXPORTS
ADC_Init
ADC_Open
ADC_Readwww.51kaifa.com
ADC_Write
ADC_Close
ADC_Deinit
然后編寫一個注冊表文件, 命名為AdcDriver.reg :
[HKEY_LOCAL_MACHINE\ Drivers\ BuiltIn\ ADC]
"Index" = dword :1
"Prefix" = "ADC"
"Dll" = "AdcDriver.dll"
"Order" = dword :0
***在 Platform Builder中新建一個 CEC 文件,首先添加一個BuildMethod ,它的任務(wù)是復制注冊表到 Windows CE.Net 的系統(tǒng)目錄下面。然后再添加一個 Bib File,其主要任務(wù)是把編譯的 AdcDriver.dll 文件添加到 Windows CE.Net 內(nèi)核中去。保存寫好的CEC文件。在Platform Builder 中 , 打開“File”菜單,添加已經(jīng)編寫好的 CEC 特征到系統(tǒng)選項中去。生成系統(tǒng)的時候, 添加 CEC 特性,這樣驅(qū)動就加入到操作系統(tǒng)里了。
總結(jié)
文中作者分析了 Windows CE.Net 的流接口驅(qū)動的工作原理順序,設(shè)計實現(xiàn)了Windows CE.Net下的AD驅(qū)動,并通過Platform builder將其編譯到操作系統(tǒng)。而本系統(tǒng)再配上 EVC 開發(fā)的圖形界面軟件,可以開發(fā)出各種使用的設(shè)備,如移動數(shù)據(jù)采集器等,在現(xiàn)代化檢測領(lǐng)域有很強的實用性。本文作者創(chuàng)新點:分析了Windows CE.Net下流驅(qū)動的執(zhí)行順序以及上層文件API如何調(diào)用流驅(qū)動,并給出將編寫的驅(qū)動加入到操作系統(tǒng)的詳細步驟,該驅(qū)動設(shè)計簡單,應用程序可以靈活調(diào)用。
【編輯推薦】
- 基于Win CE的嵌入式電子郵件系統(tǒng)設(shè)計
- 在WinCE中獲取設(shè)備ID
- WinCE編譯過程的四個階段
- WinCE中觸摸屏驅(qū)動開發(fā)詳解
- Windows Mobile和WinCE的區(qū)別
分享名稱:Windows CE下AD驅(qū)動設(shè)計與實現(xiàn)
鏈接地址:http://m.5511xx.com/article/ccosshj.html


咨詢
建站咨詢
