成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Windows CE下AD驅動設計與實現

開發
本文主要討論在Windows CE.Net 操作系統下,如何設計實現S3C2410芯片具有AD接口的驅動程序;詳細介紹Windows CE.Net 下,流接口驅動程序的工作原理和編寫方法。

引言

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

S3C2410芯片片上AD介紹

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

流接口驅動

Windows CE.Net 支持四種驅動模型:本地驅動、流驅動、USB、NDIS[1]。本文只針對流驅動進行介紹。

流接口驅動體系結構

流驅動將設備抽象為文件進行操作,它體系結構如圖1所示。應用程序使用文件API對設備進行訪問,文件API被操作系統轉發到FileSys.exe進程中;然后FileSys.exe發現是對設備進行操作,就會把執行交給設備管理器;接著設備管理器根據具體的請求,調用不同的流接口驅動程序中暴露的接口;最終驅動程序負責與硬件交互。

流接口函數

流接口驅動程序是動態連接庫,由設備管理程序的特殊程序加載、管理和卸載,與具有單獨目的接口的內部驅動程序相比,流接口驅動程序使用同一個接口并調用同一個函數集-流接口函數[4]。Windows CE.Net 系統規定流接口的入口點如表1,對應著直接或者間接調用流接口函數的系統組件或文件API函數。生成一個DLL后,就用設備文件名前綴替換入口點名字中的XXX。

流接口驅動工作原理

在流驅動工作原理中需要包括幾個重要的工作實體:硬件、流接口驅動驅動程序、系統注冊表、設備管理器、應用程序。整個驅動程序工作原理。

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

當應用程序不再使用該設備時,它可調用CloseHandle()將設備關閉。當系統不再使用設備時,應用程序可調用DeactivateDevice()函數把該驅動程序卸載。

AD驅動的實現

AD驅動程序以動態鏈接庫方式編寫,采用流接口驅動的標準形式。在ADC_ Init函數中,主要進行初始化。函數ADC_Open 只需要返回一個不為0的值來判斷打開設備成功。在函數 ADC_Write 中通過寫入要選擇的通道號和預分頻值,它控制通道的動作。函數 ADC_Read 中的代碼最為關鍵,它完成讀取模擬量向數字量的轉換結果,其部分主要代碼如下:

pADCIOreg->rADCCON = (1<<14)|(ADCPRS<<6)|(ch<<3); //建立通道號

pADCIOreg->rADCCON |= 0x1; // 開始轉換

while(pADCIOreg->rADCCON & 0x1); //檢測開始位是否為低電平

while(!(pADCIOreg->rADCCON & 0x8000)); //檢測轉換是否完畢標志位

return ( (double)(pADCIOreg->rADCDAT0 & 0x3ff) ); //返回轉換完的數值

其中 ch 表示采樣通道號, ADCPRS為預分頻值。其它函數均為空。

ADC驅動封裝及其在Windows CE.Net中的添加

通過以上的工作,編譯出一個 DLL 函數,接著建立一個自己的 def 文件,導出所需要的流接口函數。新建一個記事本文件,命名為 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 ,它的任務是復制注冊表到 Windows CE.Net 的系統目錄下面。然后再添加一個 Bib File,其主要任務是把編譯的 AdcDriver.dll 文件添加到 Windows CE.Net 內核中去。保存寫好的CEC文件。在Platform Builder 中 , 打開“File”菜單,添加已經編寫好的 CEC 特征到系統選項中去。生成系統的時候, 添加 CEC 特性,這樣驅動就加入到操作系統里了。

總結

文中作者分析了 Windows CE.Net 的流接口驅動的工作原理順序,設計實現了Windows CE.Net下的AD驅動,并通過Platform builder將其編譯到操作系統。而本系統再配上 EVC 開發的圖形界面軟件,可以開發出各種使用的設備,如移動數據采集器等,在現代化檢測領域有很強的實用性。本文作者創新點:分析了Windows CE.Net下流驅動的執行順序以及上層文件API如何調用流驅動,并給出將編寫的驅動加入到操作系統的詳細步驟,該驅動設計簡單,應用程序可以靈活調用。

 

【編輯推薦】

  1. 基于Win CE的嵌入式電子郵件系統設計
  2. 在WinCE中獲取設備ID
  3. WinCE編譯過程的四個階段
  4. WinCE中觸摸屏驅動開發詳解
  5. Windows Mobile和WinCE的區別
責任編輯:佚名 來源: esdevelop
相關推薦

2009-05-28 13:27:33

Windows CE

2009-04-11 15:12:24

Windows CE串行通信GPS

2009-07-03 16:48:05

Windows CE

2010-02-25 14:27:59

Windows CE

2009-07-16 15:02:39

Windows CE平臺類型

2010-02-25 15:30:47

SDRAMWindows CE

2010-01-13 14:18:52

Windows Emb

2011-06-27 09:49:53

Windows CEAndroid

2011-08-01 16:52:42

Windows CE 嵌入式

2009-08-17 09:57:00

C# Windows

2009-08-17 09:27:12

c# Windows

2011-07-05 13:32:45

QT Mysql 驅動

2009-11-10 16:40:46

WindowsEmbeddedWindows7

2010-05-05 13:16:02

Windows PhoWindows CE

2010-03-31 16:36:35

Windows CE

2020-12-14 09:26:32

WindowsAD域安裝軟件

2009-09-24 09:45:07

Windows Emb

2010-06-07 09:47:34

php sendmai

2012-09-28 13:39:40

Windows備份

2021-06-07 09:33:21

企業架構驅動
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产婷婷精品av在线 | 一区二区三区在线 | 香蕉视频在线播放 | 一区二区三区在线免费观看视频 | 久久国产成人 | 国产欧美视频一区二区 | 精品一二区 | 五月婷婷激情网 | 98久久| 国产成人99久久亚洲综合精品 | 在线观看视频91 | 久久精品视频播放 | 日韩欧美一区二区三区四区 | 亚洲一区二区三区四区在线观看 | 日韩国产精品一区二区三区 | 日韩一级免费观看 | 美女久久久久久久 | 三级视频网站 | 精品久久99 | 手机在线不卡av | 日韩国产精品一区二区三区 | 一区二区三区四区在线视频 | 卡通动漫第一页 | 国产精品久久777777 | 免费久久久久久 | 久久久久国产一级毛片 | 色播久久久 | 无吗视频 | 国产一区二区三区四区五区加勒比 | 国产一区二区 | 一区二区蜜桃 | 中文字幕 国产精品 | 国产精品一区二区欧美 | 精品国产乱码久久久久久蜜退臀 | 欧美在线一区二区三区 | 婷婷开心激情综合五月天 | 免费骚视频 | 夜夜夜夜草 | 精品久久香蕉国产线看观看亚洲 | 高清国产午夜精品久久久久久 | 亚洲午夜视频 |