999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于PC/104的音頻采集壓縮卡WDM驅動開發

2008-04-12 00:00:00祁艷杰
現代電子技術 2008年6期

摘 要:WDM支持PNP,但在科研和工控中,最常用的數據采集卡通常都是基于PC總線的ISA設備,這類設備不支持PNP,在WDM中沒有獲得很好的支持。使用WDM開發這類設備的驅動程序需要一些特殊處理。首先介紹PC/104規范和WDM驅動的結構以及通用的開發思路,然后重點討論基于PC/104音頻采集壓縮卡WDM驅動程序的設計與實現,并給出主體部分代碼。實踐證明該驅動能穩定地實現一般設備驅動程序所具備的功能,且對ISA卡驅動的開發也具有一定參考價值。

關鍵詞:WDM;PC/104規范;音頻采集壓縮卡;PNP

中圖分類號:TP311 文獻標識碼:B

文章編號:1004-373X(2008)06-033-03

Development of WDM Driver for Audio Acquisition Compression Card Based on PC/104

QI Yanjie

(School of Electronic Engineering,Taiyuan University of Science and Technology,Taiyuan,030024,China)

Abstract:PNP is supported by WDM.But in the field of research and industry control,the data acquisition system is ISA equipment based on PC bus.This kind of equipment can′t support PNP,so it can′t get efficient surport in WDM.Using WDM to develop this kind of driver program needs some special processing. In this paper,we first introduce the PC/104 specification and the structure of the Windows driver model,as well as the way about how to develop a WDM driver.The focuses are laid on the design and implement of a WDM driver which is developed for an image acquisition system based on PC/104 bus.The principal part of the source code for that driver is listed.The actual application proves that the system is able to perform the same as universal drivers do.It also provides a certain extent of reference value to the development of a driver based on ISA bus.

Keywords:WDM;PC/104 specification;audio acquisition compression card;PNP

PC/104是一種專門為嵌入式控制而定義的工業控制總線,他的兼容和機械穩定性好,廣泛應用于環境較為惡劣的工控領域。PC104實際上是基于ISA標準。

WDM(Windows Driver Model)作為微軟為Windows 2000及以后版本準備的新驅動模型,支持PNP(即插即用),為用戶的PNP設備驅動完成大量的底層工作。但在科研和工控中,最常用的數據采集卡通常都是基于PC總線的ISA設備(包括PC/104設備),這類設備不支持PNP,在WDM中沒有獲得很好的支持。使用WDM開發這類設備的驅動程序需要一些特殊處理。

1 PC/104

PC/104是一種專門為嵌入式控制而定義的工業控制總線,近年來在國際上廣泛流行,被IEEE協會定義為IEEE-P996.1。他具有如下特點[1]

(1) 小尺寸結構,標準模塊的機械尺寸為:3.6英寸×3.8英寸(90 mm×96 mm);

(2) 堆棧式,“針”“孔”總線連接,即PC/104總線模塊之間總線的連接是通過上層的針和下層的孔互相咬和相連,有極好的抗震性;

(3) 4 mA總線驅動就可使模塊正常工作(為驅動更多模塊,一般設計采用24 mA)。減少能量消耗,減少總線信號驅動器。

(4) 自我堆棧式連接,無需母板。

一個單獨的PC/104模塊可以作為一個獨立的系統使用,也能夠作為一個成員被嵌入到一個更大的系統中去,各種PC/104模塊能夠被堆疊在一起組成一個系統。

PC/104 被越來越多地使用于各種嵌入式系統中,特別是在一些可靠性要求高而工作環境又比較惡劣的地方。目前已被大量地應用于儀器、通信、醫療設備、工業控制、航空航天、軍事設備等領域。

2 WDM驅動程序

2.1 WDM驅動程序模型

在WDM驅動程序模型中,每個硬件設備至少有2個驅動程序[2]。其中一個稱為功能(function)驅動程序,這就是硬件設備驅動程序。他了解使硬件工作的所有細節,負責初始化I/O操作,處理I/O操作完成時所帶來的中斷事件,為用戶提供一種設備適合的控制方式。另一個驅動程序稱為總線驅動程序,他負責管理硬件與計算機的連接。

2.2 驅動程序的結構

WDM驅動程序的結構很簡單。他的主體是一個入口函數DriverEntry。DriverEntry的第一個參數是指針,指向一個剛被初始化的驅動程序對象,該對象代表驅動程序。WDM驅動程序的DriverEntry例程完成這個對象的初始化并返回。WDM驅動程序的DriverEntry例程的主要工作是把各種函數指針填入驅動程序對象。這些指針對操作系統指明了驅動程序容器中各種子例程的位置。他包括下面這些指針成員:

(1) DriverUnload指向驅動程序的清除例程。I/O管理器會在卸載驅動程序前調用該例程。通常WDM驅動程序的DriverEntry例程一般不分配任何資源,所以DriverUnload例程也沒有什么清除工作要做。

(2) DriverExtension→AddDevice指向驅動程序的AddDevice函數。AddDevice函數是WDM驅動程序的一個特殊函數,PNP管理器為每個設備實例調用該函數。他創建一個設備對象并把他連接到該驅動程序的設備堆棧中。在這個函數里,設備對象被創建,設備需要的中斷、DMA等資源被掛接到這個設備對象上,相應地處理函數,如中斷服務例程等也被指定。

(3) DriverStartIo,如果驅動程序使用標準的串行IRP,則必須使用這個函數,使他指向驅動程序的StarIo例程。

(4) MajorFunction是一個指針數組,他主要處理各種用戶的I/O請求IRP。默認情況下,用戶的所有I/O請求都會由I/O管理器返回失敗。驅動程序為要處理的IRP指定相應的派遣函數。

此外,還有一些重要的例程如用于處理中斷操作中斷服務例程,為了提高系統中斷處理效率的中斷服務推遲調用例程等。

驅動程序的其余部分就是前面所指定的那些例程的實現。

2.3 WDM工作原理

WDM驅動程序是分層的,即不同層上的驅動程序有著不同的優先級。另外,WDM還引入了功能設備對象FDO(Functional Device Object)與物理設備對象PDO(Physical Device Object)兩個新類來描述硬件,一個PDO對應一個真實硬件。另外值得注意的是,一個硬件只允許有一個PDO,卻可以擁有多個FDO,在驅動程序中直接操作的不是硬件而是相應的PDO與FDO。在Ring-3與Ring-0通訊方面,系統為每一個用戶請求打包形成一個IRP結構,將其發送至驅動程序,并通過識別IRP中的PDO來區別是發送給哪一個設備的。另外,在驅動程序的加載方面,WDM不通過驅動程序名稱識別,而是通過1個128位的GUID來實現驅動程序的識別。

2.4 WDM驅動程序的開發

驅動程序的開發是一個從粗到細逐步求精的過程。具體來說,可分為以下幾個基本步驟:

(1) 建立WDM編程環境。安裝所需的各種工具包,如VC++,DDK,DriverStudio等。

(2) 創建WDM驅動程序。包括建立工程,編寫DriverEntry例程,創建一個Device對象,編寫各種服務例程等。如果選用DriverStudio作為開發工具,上述工作有很大一部分將由系統自動完成。

(3) 測試驅動程序。首先應安裝好驅動程序,然后編寫一個簡單的測試程序調用Win32 API中的相應函數進行測試。要求在驅動程序中必須為所需要處理的IRP_MJ_XXX寫好處理例程。

(4) 進一步封裝驅動程序(可選)。某些時候為了方便用戶使用,可能要對驅動程序進一步封裝[2]

(5) 打包發布驅動程序。編制好驅動程序之后,需要將其打包發布、制作安裝盤以供客戶使用。

3 一套PC/104音頻采集壓縮卡WDM驅動程序的實現

在Windows 2000下,使用Compuware DriverStudio3.1和Visual C++6.0,這里開發了一套PC/104音頻采集壓縮卡的驅動。該音頻采集壓縮卡系統支持軟件查詢、DMA、中斷3種數據傳輸方式。

使用Compuware DriverStudio 3.1作為開發工具可以大大簡化驅動程序的開發過程。DriverStudio3.1開發通用內核模式的開發包是DriverWorks。DriverWorks是一個面向對象的工具包。他封裝了比較底層的繁復操作,提供給開發者一個簡捷的界面。同時,DriverWorks和Visual C++有很多的接口:DriverWorks為Visual C++提供了一個專門開發WDM驅動程序的WIZARD。通過WIZARD,開發者可以很容易的生成一個驅動程序的框架。開發者要做的工作就是根據特定硬件編寫相應的代碼。

3.1 框架生成和資源配置

在使用WIZARD生成的驅動程序框架的過程中,需要為設備配置資源如中斷、I/O端口范圍、DMA以及驅動程序與應用程序的接口命令及處理函數。

由于PC/104設備本身不具備PNP功能,為了使其具有PNP特性,可以通過PNP管理器和INF文件完成自動資源分配[3]。本例在INF文件中通過如下方式為設備配置資源:

ClassGUID={fc4ba6a3-9e9a-4960-a427-c4ed80a94957} ;GUID

ConfigPriority=NORMAL

IOConfig=10@300-3ff%fff0(ffff::);IoPortRange0;

IRQConfig=5,7,8,9,10,12,13;IRQNUM

DMAConfig=W:5 ;DMACHANNEL

3.2 硬件訪問

驅動程序根據WIZARD在框架生成過程中的配置聲明KIoRange,KMemoryRange,KInterrupt,KDefferedCall,KDmaAdapter等類的實例[2]。另外還需手動聲明KDmaTransfer類實例和StartDMA(),OnDmaReady()函數并根據具體情況編寫函數體。

在OnStartDevice()實例中,初始化KInterrupt,KDefferredCall,KDmaAdapter,KIoRange等類的實例,以及其他一些初始化工作。主體部分代碼如下:

// Initialize the DMA adapter object

m_Dma.Initialize(dd,m_Lower.PDO());

m_Buffer.Initialize(m_Dma,1024);

// For each I/O port mapped region,initialize the I/O port range using

// the resources provided by NT.Once initialized,use member functions such as

// inb/outb,or the array element operator to access the ports range.

status = m_IoPortRange0.Initialize(

pResListTranslated,

pResListRaw,

0

);

// Initialize and connect the interrupt

status = m_Irq.InitializeAndConnect(

pResListTranslated,

LinkTo(Isr_Irq),

this

);

在SerialRead()或SerialWrite()例程中,創建KDmaTransfer類實例并初始化,主體部分代碼如下:

//創建KDmaTransfer類實例并初始化

m_CurrentTransfer = new(NonPagedPool)KDmaTransfer(this,m_Dma);

//下面采用應用程序的數據緩沖區作為DMA數據區

status = m_CurrentTransfer->Initiate(

I.Mdl(),

(I.MajorFunction() == IRP_MJ_READ) ? FromDeviceToMemory : FromMemoryToDevice,

LinkTo(OnDmaReady)

); //此操作將使系統調用OnDmaReady例程

在DpcFor_Irq()例程中,調用KDmaTransfer類的Continue()函數:

m_CurrentTransfer->Continue(UseTransferSize);

在Isr_Irq()例程中完成清除中斷,請求DpcFor_Irq()例程操作。

在StartDMA()例程中設置DMA控制寄存器,啟動DMA傳輸。

在OnDmaReady()例程中,判斷是否為第1次調用從而啟動StartDMA()例程以及傳輸是否結束,并完成相關操作。

3.3 編譯調試

完成音頻采集壓縮卡的WDM驅動程序的主體部分后,就可以進行編譯和調試。

DriverWorks在創建驅動程序框架的同時,也為會該驅動程序創建一個DOS界面的Win32 Console應用程序。某些情況下,開發人員可能還需要另外創建一個MFC程序。

在相應的應用程序創建后進行調試。Driver-Studio 3.1自帶的調試工具是DriverMonitor和SoftICE。DriverMonitor用于觀察Debug版本驅動程序的調試輸出信息。SoftICE功能非常強大,他結合硬件調試器的強大功能和符號調試程序的易用性,能夠在用戶模式下顯示內核程序的源代碼,允許通過符號名訪問數據。

3.4 封裝、打包

為了方便用戶程序的調用,對生成的驅動程序進行了進一步的封裝。封裝后的DLL文件可以在大多數軟件環境中調用。最后用InstallShield打包。

4 結 語

使用DriverSutdio 3.1,結合Visual C++ 6.0,Micro[CD*4]soft Windows 2000 sp4 DDK開發的基于PC/104音頻采集壓縮卡WDM驅動,能夠完成一般設備驅動程序所需的功能。同時由于加入PNP的支持,使得該系統的硬件安裝、卸載非常簡便。此外,本文的開發思路對同類設備以及ISA設備驅動的開發也具有一定的參考價值。

參考文獻

[1]PC/104 Specification Version 2.5,2003.

[2]李海.PCI設備Windows通用驅動程序設計\\[J\\].電子技術應用,2000,26(1):19-22.

[3]張龍.ISA數據采集卡的WDM驅動程序實現\\[J\\].電子技術應用,2001,27(11):20-23.

[4]武安河.Windows 2000/XP WDM設備驅動程序開發\\[M\\].北京:電子工業出版社,2005.

[5]\\[美\\]坎特.Windows WDM設備驅動程序開發指南\\[M\\].孫義,馬莉波,國雪飛,等譯.北京:機械工業出版社,2000.

[6]徐杰,蘇凱雄.DVB碼流PCI接收卡的WDM設備驅動程序設計\\[J\\].現代電子技術,2005,28(10):26-28.

[7]陳大科,李軍予.PCI總線WDM驅動程序的設計方法與實例\\[J\\].現代電子技術,2006,29(22):99-100,103.

主站蜘蛛池模板: 日韩视频免费| 欧美日韩激情在线| 亚洲国产中文欧美在线人成大黄瓜| 深爱婷婷激情网| 国产在线高清一级毛片| 国产美女自慰在线观看| 久久亚洲黄色视频| 久久久久夜色精品波多野结衣| 一本大道香蕉久中文在线播放| 9966国产精品视频| 中国精品久久| 免费女人18毛片a级毛片视频| 国产www网站| 国产福利一区在线| 亚洲最新网址| 久久国产精品国产自线拍| 国产理论最新国产精品视频| 亚洲日本韩在线观看| 中文字幕精品一区二区三区视频| 中文字幕不卡免费高清视频| 精品国产91爱| 亚洲色图欧美在线| 四虎国产成人免费观看| 免费一级无码在线网站| 午夜欧美理论2019理论| 麻豆精品视频在线原创| 香蕉综合在线视频91| 欧亚日韩Av| 亚洲AV无码一二区三区在线播放| 久久国产精品无码hdav| 久久香蕉欧美精品| 国产毛片不卡| 日本欧美成人免费| 日本一区二区三区精品国产| 亚洲人成网站观看在线观看| 久久综合一个色综合网| 亚洲最大福利网站| a天堂视频| 婷婷伊人久久| 国产精品亚洲一区二区三区z| a亚洲视频| 人妻夜夜爽天天爽| 国产人人射| 亚洲日韩精品欧美中文字幕| 喷潮白浆直流在线播放| 最新痴汉在线无码AV| 综合网久久| 国产主播在线一区| 岛国精品一区免费视频在线观看| 日韩欧美中文字幕在线精品| 日韩人妻无码制服丝袜视频| 国产女同自拍视频| 69国产精品视频免费| 久久久成年黄色视频| 欧美精品导航| 亚洲香蕉伊综合在人在线| 国产剧情一区二区| 欧美无遮挡国产欧美另类| 欧美精品黑人粗大| 亚国产欧美在线人成| 国产在线日本| 久久中文无码精品| 亚洲看片网| 国产九九精品视频| 九色在线观看视频| 日韩高清欧美| 伊人查蕉在线观看国产精品| 伊人五月丁香综合AⅤ| 91一级片| 国产视频欧美| 18禁不卡免费网站| 丝袜国产一区| 国产欧美日韩精品第二区| 2021无码专区人妻系列日韩| 91精品专区国产盗摄| 欧美日韩亚洲综合在线观看| 欧美人人干| 69国产精品视频免费| 日韩国产一区二区三区无码| 欧美日韩国产精品综合 | 日韩一区精品视频一区二区| 在线国产三级|