亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        PCM高速遙測發(fā)送卡的WDM驅(qū)動程序設(shè)計(jì)

        2008-04-12 00:00:00徐華鋒
        現(xiàn)代電子技術(shù) 2008年4期

        摘 要:PCM高速遙測數(shù)據(jù)發(fā)送卡是一款基于PCI接口芯片9054的PCM信號源,工作碼速率可達(dá)10 Mb/s。以在Windows 2000操作系統(tǒng)下設(shè)計(jì)PCM高速遙測數(shù)據(jù)發(fā)送卡的WDM驅(qū)動程序?yàn)槔?,介紹WDM驅(qū)動程序的基本特點(diǎn)和遙測數(shù)據(jù)發(fā)送卡的基本結(jié)構(gòu),詳細(xì)討論利用Driver Studio開發(fā)WDM驅(qū)動程序設(shè)計(jì)的關(guān)鍵技術(shù),如設(shè)備初始化、軟件FIFO、中斷處理和DMA操作等。

        關(guān)鍵詞:PCI;WDM;I/O請求包(IRP);軟件FIFO

        中圖分類號:TP311.52

        文獻(xiàn)標(biāo)識碼:B

        文章編號:1004—373X(2008)04—063—03

        開發(fā)驅(qū)動程序的軟件主要有:MicroSoft公司的DDK,Jungo公司的Windriver和Compuware NuMega公司的Driver Studio三種。DDK是最基本的驅(qū)動程序開發(fā)工具,比較復(fù)雜,適于專業(yè)的驅(qū)動程序開發(fā)人員,不適于硬件開發(fā)人員開發(fā)驅(qū)動程序。Windriver開發(fā)驅(qū)動程序不需要熟悉操作系統(tǒng)內(nèi)核知識,針對硬件PCI/ISA/PCM—CIA/USB開發(fā)驅(qū)動程序比較方便,但驅(qū)動程序的效率不高、缺乏靈活性。Driver Studio把DDK用類的形式進(jìn)行封裝,簡化設(shè)備驅(qū)動程序的開發(fā),方便又不失靈活性。所以這里選擇Driver Studio作為驅(qū)動程序的開發(fā)工具。

        在結(jié)合PCM高速遙測數(shù)據(jù)發(fā)送卡的基礎(chǔ)上,本文介紹WDM驅(qū)動程序的結(jié)構(gòu)特點(diǎn)和PCM高速遙測數(shù)據(jù)發(fā)送卡的硬件結(jié)構(gòu),并闡述針對數(shù)據(jù)發(fā)送卡的特點(diǎn),詳細(xì)地討論驅(qū)動程序關(guān)鍵部分的設(shè)計(jì)。

        1 PCM遙測數(shù)據(jù)發(fā)送卡的硬件結(jié)構(gòu)

        圖1為遙測數(shù)據(jù)發(fā)送卡的原理框圖。碼型變換器的功能是根據(jù)原始PCM數(shù)據(jù)產(chǎn)生3種輸出碼型:NRZ—L,NRZ—M及NRZ—S之一,以適應(yīng)更加廣泛的測試目的。多電平驅(qū)動器將來自FPGA的LV TTL電平的PCM數(shù)據(jù)和時(shí)鐘信號轉(zhuǎn)換為3種電平接口輸出,分別是TTL,EIA422及MLVDS。同步FIFO作為硬件數(shù)據(jù)幀緩存存儲由PCI總線寫入的數(shù)據(jù)幀,然后由序列生成器讀出。序列生成器根據(jù)PCM時(shí)鐘速率產(chǎn)生串行移出的PCM原始數(shù)據(jù)將來自FIFO的32位并行數(shù)據(jù)轉(zhuǎn)換為串行輸出,同時(shí)根據(jù)移位寄存器的狀態(tài)產(chǎn)生發(fā)向FIFO的讀數(shù)請求:

        2 WDM驅(qū)動程序的結(jié)構(gòu)及特點(diǎn)

        WDM(Windows Driver Model)是在原有的NT內(nèi)核模式驅(qū)動程序的基礎(chǔ)上發(fā)展來的,他增加了PnP(Plugand Play)、電源管理、WMI(Windows Management Instru—mentation)等功能。WDM模型的層次結(jié)構(gòu)如圖2所示。

        層次結(jié)構(gòu)可以使I/O請求過程更加清晰。影響設(shè)備的每一個(gè)操作都使用I/O請求包(IRP),通常IRP被送到設(shè)備堆棧的最上層,然后逐漸過濾到下層驅(qū)動程序。每處理1個(gè)IRP,I/O管理器就調(diào)用1次StartIO例程,從而著手IRP處理工作;如何處理完全取決于具體的設(shè)備,調(diào)用驅(qū)動程序中相應(yīng)的例程。驅(qū)動程序處理完IRP后,會將結(jié)果返回給I/O管理器,再由I/O管理器返回給用戶應(yīng)用程序。

        3 PCM遙測數(shù)據(jù)發(fā)送卡WDM驅(qū)動程序的設(shè)計(jì)

        在設(shè)備的驅(qū)動程序設(shè)計(jì)中,需要處理PCI設(shè)備的硬件讀寫、中斷處理、DMA等功能??梢园羊?qū)動程序視為一個(gè)框架和若干例程的結(jié)合體,各個(gè)例程處理不同的IRP,而框架負(fù)責(zé)在IRP到來時(shí)調(diào)用相應(yīng)的例程。利用Driver—Works的驅(qū)動程序向?qū)?Driver Wizard)新建一個(gè)PCI設(shè)備驅(qū)動程序框架,然后在這個(gè)框架基礎(chǔ)上添加必要的實(shí)現(xiàn)功能的處理代碼,就可以完成整個(gè)驅(qū)動程序的設(shè)計(jì)。下面以PCM遙測數(shù)據(jù)發(fā)送卡為例討論其主要的功能驅(qū)動程序例程的實(shí)現(xiàn)。

        3.1硬件初始化例程

        OnStartDevice(KIrp I)參數(shù)例程中包含2種系統(tǒng)分配的資源配置信息:原始的資源配置信息(AllocatedRe—sources);轉(zhuǎn)換后的資源配置信息(AllocatedResourcesTranslated)。因?yàn)镮/O總線和CPU在尋址物理硬件的方式不同,所以存在2種資源列表。從注冊表、PCI配置空間和其他地方獲取原始的資源值和轉(zhuǎn)換這些值的操作全部由PnP管理器完成,WDM驅(qū)動程序需要做的僅是從設(shè)備啟動IRP中獲取這些資源。

        3.2 中斷服務(wù)例程

        中斷服務(wù)例程運(yùn)行在DIRQL級別上,需要盡可能快地運(yùn)行。本設(shè)計(jì)在中斷服務(wù)例程中,首先判斷中斷是否自己設(shè)備產(chǎn)生的,如果是,則調(diào)用一個(gè)在DISPATCH_LEV—EL級別上運(yùn)行的延遲過程調(diào)用(DPC)。當(dāng)中斷服務(wù)例程完成后,一旦處理器獲得DISPATH_LEVEI。運(yùn)行權(quán),就會運(yùn)行DPC。中斷服務(wù)例程流程圖如3所示。

        3.3 中斷延遲調(diào)用例程

        在延遲調(diào)用例程中,判斷中斷原因如果是DMA中斷就啟動DMA繼續(xù)發(fā)送。如果是發(fā)送通道中斷,則判斷通道號,并把相應(yīng)軟件FIFO里面的待發(fā)送數(shù)據(jù)傳送到硬件FIFO里。在此過程中需要檢查在將軟件FIFO中的數(shù)據(jù)寫入硬件FIFO中后,如果軟件FIFO已被讀空,則應(yīng)禁止通道中斷,否則通道中斷因?yàn)閮?yōu)先級高,會一直于有效狀態(tài),導(dǎo)致系統(tǒng)死鎖。而在用戶程序?qū)戃浖﨔IFO的處理函數(shù)中,檢查通道中斷,如果被禁止,則應(yīng)將新寫入軟件FIFO的數(shù)據(jù)讀取一部分寫入硬件FIFO中,然后開啟通道中斷。

        3.4應(yīng)用程序與驅(qū)動程序的通信例程

        DeviceControl(KIrp I)主要用于應(yīng)用程序與驅(qū)動程序之間的通信,如向硬件讀寫數(shù)據(jù)以及軟件FIFO的操作等。DevcieControl響應(yīng)用戶應(yīng)用程序DeviceloControl()發(fā)送的IRP,根據(jù)IOCTL代碼來判斷調(diào)用子處理函數(shù)PCI_9054_IOCTL_READ_Handler(I),PCI_9054_IOCTL_WRITE_Handler(I).DEV_IOCTL_TXI_FIFO_WRITE_Handler(I)分別完成對硬件的讀寫和軟件FIFO的寫操作。

        3.5 DMA傳輸操作

        硬件FIFO半滿時(shí)產(chǎn)生通道中斷,在DPC里,判斷是通道中斷,則初始化KDmaTransfer,然后調(diào)用OnD-maReady();在OnDmaReady()中啟動首次DMA傳輸,傳輸時(shí)發(fā)生中斷,在DPC中判斷是否DMA中斷,如果是,則調(diào)用Continue()再次啟動下次傳輸,至此全總數(shù)據(jù)傳輸完成。其流程圖如圖4所示。

        4 驅(qū)動程序編譯、調(diào)試和安裝

        當(dāng)驅(qū)動程序編寫完成后,必須在DDK環(huán)境下進(jìn)行編譯,執(zhí)行Rebuild aIl命令,編譯完成后生成*.sys文件和*.inf文件。調(diào)試工具使用Softlce,基本過程如下:

        (1)使用Symbol Loader加載驅(qū)動程序*.nms文件,然后激活Softlee,設(shè)置斷點(diǎn)跟蹤調(diào)試;

        (2)用Genint命令產(chǎn)生虛擬中斷測試,中斷服務(wù)例程;

        (3)根據(jù)需要測試其他功能。驅(qū)動程序的安裝需要對DriverWizard生成的.INF文件進(jìn)行修改,安裝就是根據(jù)INF文件的信息,把編譯好的驅(qū)動程序拷貝到特定的目錄,并修改注冊表來注冊該驅(qū)動程序的參數(shù)。

        5 結(jié) 語

        本文編寫的驅(qū)動程序在以前的驅(qū)動程序基礎(chǔ)上,在驅(qū)動程序里增加一個(gè)相當(dāng)于二級緩存的軟件FIFO;有效地提高了數(shù)據(jù)的響應(yīng)速度,從而實(shí)現(xiàn)更高的數(shù)據(jù)發(fā)送速率;解決了以前在遙測數(shù)據(jù)發(fā)送碼速率較高情況下,出現(xiàn)數(shù)據(jù)幀不連續(xù)導(dǎo)致數(shù)據(jù)接收碼同步死鎖的現(xiàn)象。本文的驅(qū)動程序已成功的應(yīng)用于所開發(fā)的PCM高速遙測數(shù)據(jù)發(fā)送卡,與同期開發(fā)的PCM遙測數(shù)據(jù)接收卡進(jìn)行長時(shí)間的聯(lián)接調(diào)試。實(shí)踐證明他們可以在10 Mb/s的碼速率上可靠工作,而無死鎖或數(shù)據(jù)幀丟失現(xiàn)象。

        亚洲一区二区三区尿失禁| 强d乱码中文字幕熟女1000部| 男女动态视频99精品| 在线观看亚洲第一黄片| 中国女人内谢69xxxx免费视频| 91麻豆国产香蕉久久精品 | 亚洲一区二区三区中文字幕网| 免费人成网站在线观看欧美| 亚洲人成无码网www| 亚洲黄片久久| 亚洲激情一区二区三区不卡| 麻豆tv入口在线看| 日产精品久久久久久久| 日本激情视频一区在线观看| 中文字幕亚洲精品在线免费| 制服丝袜中文字幕在线| japanese无码中文字幕| 青青草一级视频在线观看| 亚洲写真成人午夜亚洲美女| 国产av无码专区亚洲av毛网站| 国产欧美日韩专区| 精品国产麻豆一区二区三区| 日韩乱码中文字幕在线| 国产特级毛片aaaaaaa高清| 亚洲人妻无缓冲av不卡| 牛仔裤人妻痴汉电车中文字幕| 色翁荡熄又大又硬又粗又动态图 | 国产高清一区在线观看| 亚洲av男人的天堂一区| 孕妇特级毛片ww无码内射| 久久中文字幕无码一区二区| 午夜一区二区三区在线观看| www夜插内射视频网站| 日韩亚洲av无码一区二区不卡 | 激情综合色综合啪啪五月丁香| 色综合久久无码中文字幕app| 久久av少妇亚洲精品| 国产a∨天天免费观看美女| 国产成人www免费人成看片| 亚洲一区二区三区中文视频| 九一免费一区二区三区偷拍视频|