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.

主站蜘蛛池模板: 狠狠色香婷婷久久亚洲精品| 欧美成人精品一级在线观看| 无码一区18禁| 欧美视频免费一区二区三区| 亚洲天堂首页| 911亚洲精品| 国产中文在线亚洲精品官网| 亚洲国产黄色| 成年免费在线观看| 国产精品页| 亚洲第一成年网| 美女视频黄又黄又免费高清| 鲁鲁鲁爽爽爽在线视频观看| 欧美一级爱操视频| 天堂成人av| 青青青视频免费一区二区| 国产免费羞羞视频| 免费在线看黄网址| 国产在线一区视频| 曰AV在线无码| 成人另类稀缺在线观看| 国产成人欧美| 性色生活片在线观看| 看看一级毛片| 午夜视频免费一区二区在线看| 国产在线视频自拍| 精品一区二区三区水蜜桃| 亚洲人人视频| 综合五月天网| 国产91精选在线观看| 国产日韩欧美在线视频免费观看| 午夜老司机永久免费看片| 亚洲天堂在线免费| 中美日韩在线网免费毛片视频| 精品久久久无码专区中文字幕| 高清欧美性猛交XXXX黑人猛交| 色哟哟国产精品一区二区| 色网在线视频| 91青青草视频在线观看的| 无码中文字幕乱码免费2| 亚洲最大福利网站| 欧美精品影院| 激情無極限的亚洲一区免费| 久久77777| 日韩欧美在线观看| 国产人人射| 久久五月天综合| 久久久久久久久亚洲精品| 亚洲婷婷在线视频| 久草视频精品| 97国产精品视频人人做人人爱| 伊人久久大线影院首页| 欧美黑人欧美精品刺激| 久久鸭综合久久国产| 99精品国产高清一区二区| 欧美日韩国产系列在线观看| 亚洲国产日韩一区| 亚洲精品福利网站| 国产国产人成免费视频77777| 国产亚洲高清视频| 国产精品亚洲五月天高清| 欧美成人免费一区在线播放| 精品久久久久久成人AV| 视频二区国产精品职场同事| 欧美另类第一页| 精品久久久无码专区中文字幕| 99久久性生片| 午夜福利视频一区| 女人18毛片一级毛片在线 | 亚洲精品免费网站| 国产一区二区三区免费| 欧美成人二区| 亚洲成年人片| 熟妇无码人妻| 亚洲国产一区在线观看| 亚洲欧美精品一中文字幕| a免费毛片在线播放| 中文字幕精品一区二区三区视频| 波多野结衣无码视频在线观看| 国产成人精品综合| 日韩美一区二区| 国产噜噜噜视频在线观看 |