freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于pci總線的數(shù)據(jù)采集卡電路與軟件驅(qū)動(dòng)設(shè)計(jì)-資料下載頁

2025-06-22 01:17本頁面
  

【正文】 t),代表了設(shè)備和總線之間的連接。在設(shè)備對(duì)象堆棧的中間的對(duì)象稱為功能設(shè)備對(duì)象FDO(Functional Device Object),代表了設(shè)備的功能。在FDO的上面和下面還會(huì)有一些過濾器設(shè)備對(duì)象FIDO(Filter Device Object)。位于FDO上面的過濾器設(shè)備對(duì)象稱為上層過濾器,位于FDO下面(但仍在PDO之上)的過濾器設(shè)備對(duì)象稱為下層過濾器[13]。圖41 Windows程序分層結(jié)構(gòu)模型驅(qū)動(dòng)程序的主要功能主要是完成設(shè)備初始化和讀寫定義,驅(qū)動(dòng)程序在初始化過程中利用器件識(shí)別號(hào)(DID)、廠商識(shí)別號(hào)(VID)和檢索號(hào)(Index)搜索PCI器件,通過調(diào)用PCI BIOS確認(rèn)其存在,然后利用總線號(hào)、器件號(hào)和功能號(hào)尋址該設(shè)備PCI配置空間(Configuration Space),獲得該硬件的參數(shù)。使用DriverWizard完成驅(qū)動(dòng)程序框架,生成兩個(gè)類,一個(gè)是設(shè)備驅(qū)動(dòng)程序類,另一個(gè)是設(shè)備應(yīng)用對(duì)象類。驅(qū)動(dòng)程序類只要完成WDM的DriverEntry和AddDevice例程。設(shè)備對(duì)象類針對(duì)與硬件對(duì)應(yīng)的功能設(shè)備對(duì)象(FDO)類,主要完成硬件交互例程。驅(qū)動(dòng)程序入口程序向操作系統(tǒng)提供一個(gè)名稱為DriverEntry()的函數(shù),在啟動(dòng)驅(qū)動(dòng)程序的時(shí)候,操作系統(tǒng)將調(diào)用這個(gè)入口。在這個(gè)入口函數(shù)中,必須做必要的初始化設(shè)置,并設(shè)置必要的回調(diào)函數(shù)。對(duì)功能驅(qū)動(dòng)程序,一般調(diào)用AddDevice函數(shù)創(chuàng)建一個(gè)設(shè)備對(duì)象并把它連接到以PDO為底的設(shè)備堆棧中。Windows系統(tǒng)需要INF文件來得到硬件設(shè)備驅(qū)動(dòng)程序的安裝信息。INF文件包含了驅(qū)動(dòng)程序的名稱,驅(qū)動(dòng)程序應(yīng)該復(fù)制到的目錄以及在驅(qū)動(dòng)程序安裝時(shí)必須生成和修改的注冊(cè)表入口。DriverWizard在所建工程中生成設(shè)備信息文件框架,通過添加對(duì)應(yīng)信息得到所需的設(shè)備信息文件。 設(shè)備的操作 配置空間的訪問模塊PCI 設(shè)備是可以再定位的,設(shè)備的地址空間不是硬件固定的,PCI 設(shè)備驅(qū)動(dòng)程序及其它配置軟件應(yīng)當(dāng)用該設(shè)備配置空間中的映射信息來決定將設(shè)備映射到何處,這個(gè)可以在例程 OnStartDivce 中實(shí)現(xiàn)。PCI配置空間是一容量為256字節(jié)并具有特定結(jié)構(gòu)的地址空間,其中前64字節(jié)包含PCI接口的信息。任何因設(shè)備而異的信息必須安置在64~255的地址空間。DriverWorks的KPeiConfiguration類封裝了訪問PCI設(shè)備配置空間的所有操作。首先初始化這個(gè)類的實(shí)例:KpeiConfiguration PeiConfig(());初始化完后就可以利用成員函數(shù)ReadBaseAddres/WriteBaseAddress讀寫基地址寄存器,ReadCommandRegister/WriteCommandRegister讀寫命令寄存器,ReadInterrupt/WriteInterrupt讀寫中斷寄存器。 實(shí)現(xiàn)中斷控制中斷處理是系統(tǒng)設(shè)計(jì)中常用的方法,一旦中斷出現(xiàn),要求系統(tǒng)盡快響應(yīng)。在系統(tǒng)實(shí)現(xiàn)中,各個(gè)設(shè)備可能連到一條中斷線上,這就要求 PCI設(shè)備驅(qū)動(dòng)程序能夠支持共享的中斷。在 DivceStudio中使用 Kinterrupt 類實(shí)現(xiàn)中斷處理,調(diào)用成員函數(shù)對(duì)中斷初始化,控制一個(gè)中斷服務(wù)程序和另一個(gè)之間的連接和斷開。對(duì)于 DriveWizard 生成的框架,它在 OnStartDevice(KIrpI)中對(duì)一個(gè)中斷對(duì)象調(diào)用 InitializeAndConnect(),完成初始化和連接。驅(qū)動(dòng)程序能執(zhí)行相應(yīng)的中斷服務(wù)例程ISR。為了實(shí)現(xiàn) PCI 中斷的共享,中斷服務(wù)程序必須迅速作出是否為自己板卡來的中斷的判定, 如果是則返回 TURE,否則返回 FALSE。對(duì)于需要大量操作的工作,中斷服務(wù)程序會(huì)調(diào)用一個(gè)低于 DIRLQ 級(jí)別的延遲調(diào)用函數(shù),在DISPATCH LEVEL上完成處理。由于ISR總是運(yùn)行在DIRQL上,因此在硬件中斷服務(wù)中,常使用DPC,即延遲過程調(diào)用,當(dāng)處理器處于DISPATCH—LEVEL層上時(shí),立即執(zhí)行相應(yīng)的DPC對(duì)象。按以下步驟,可以實(shí)現(xiàn)PCI中斷控制:1)產(chǎn)生中斷類KInterrupt的一個(gè)實(shí)例,即產(chǎn)生中斷對(duì)象。通常使用在設(shè)備類中嵌人中斷類的方法產(chǎn)生中斷對(duì)象。采用這種方法的優(yōu)點(diǎn)是,當(dāng)相應(yīng)設(shè)備對(duì)象產(chǎn)生時(shí),中斷對(duì)象就產(chǎn)生,當(dāng)然這時(shí)候中斷對(duì)象沒有初始化,當(dāng)設(shè)備對(duì)象在卸載過程中被銷毀時(shí),中斷對(duì)象也自動(dòng)被銷毀。2)中斷服務(wù)例程ISR可以是標(biāo)準(zhǔn)函數(shù)或者是自定義的派生類成員函數(shù),如類KDeviee派生類的成員函數(shù)。ISR采用標(biāo)準(zhǔn)函數(shù)比自定義類的成員函數(shù)有潛在的優(yōu)點(diǎn)。下面的函數(shù)可以聲明一個(gè)標(biāo)準(zhǔn)類型的ISR例程:BOOLEAN Isr(PKINTERRUPT InterrupL,PVOID ServieeContext);如果使用派生類成員函數(shù)實(shí)現(xiàn)ISR,必須使用宏MEM—BER—ISR在類中聲明這個(gè)函數(shù)。3)確定中斷對(duì)象參數(shù),如中斷優(yōu)先級(jí)、中斷矢量、模式、共享屬性、總線等。通常這些參數(shù)確定在設(shè)備類構(gòu)造體中實(shí)現(xiàn)。在PCI驅(qū)動(dòng)程序中,通常從注冊(cè)表中獲取參數(shù),然后進(jìn)行資源請(qǐng)求。4)煅用成員函數(shù)Disconnect斷開鉤鏈。 DMA傳輸編程在PCI總線上進(jìn)行高速數(shù)據(jù)傳輸,通常采用DMA技術(shù)。在DMA方式下,數(shù)據(jù)能夠達(dá)到PCI總線規(guī)范的最大數(shù)據(jù)傳輸速率,所以在PCI設(shè)備驅(qū)動(dòng)程序的開發(fā)過程中,實(shí)現(xiàn)DMA的工作方式成為驅(qū)動(dòng)程序的開發(fā)的重點(diǎn)。DMA傳輸通過以下幾步實(shí)現(xiàn):1)創(chuàng)建DMA傳輸控制對(duì)象在SerialReadO例程中為目前的IRP創(chuàng)造一個(gè)DMA傳輸控制對(duì)象。SerialRead0用來實(shí)現(xiàn)串行化讀操作,當(dāng)從隊(duì)列中取出IRP請(qǐng)求時(shí),如果是讀操作請(qǐng)求,則調(diào)用該例程,從而保證多個(gè)讀操作請(qǐng)求不被同時(shí)執(zhí)行。void DMADeviee::SerialRead(Klrp I){m_CurrentTransfer=new(NonPagedP001)KDmaTransfer(this,&m_Dma);if(m_CurrentTransfer==NULL)……}2)初始化該DMA傳輸控制對(duì)象Initiate例程所做的工作就是創(chuàng)建適配器資源(適配器對(duì)象、映射寄存器),初始化傳輸記錄,并調(diào)用用戶定義的回調(diào)函數(shù)啟動(dòng)第一次分割傳輸。If(!NT_SUCCESS(status)){delete m_CurrentTransfer;//如果初始化失敗,釋放DMA傳輸控制對(duì)象}3)定義回調(diào)函數(shù)OnDmaReady0OnDmaReady0是用戶定義的回調(diào)函數(shù)。首先判斷分割傳輸是否全部結(jié)束,可以通過調(diào)用成員函數(shù)BytesRemainin90實(shí)現(xiàn),如果是,則調(diào)用成員函數(shù)Terminate0結(jié)束DMA傳輸,反之進(jìn)行分割傳輸。每次的分割傳輸都要獲取適配器資源,記錄已經(jīng)傳輸?shù)淖止?jié)數(shù),更新下次傳輸?shù)挠脩艟彌_區(qū)的虛擬地址和長度,回調(diào)函數(shù)的最后應(yīng)啟動(dòng)總線設(shè)備上的直接存貯器存取通道(Direct Memory Access Channel,DMAC)J差行DMA傳輸。當(dāng)完成本次DMA的分割傳輸時(shí),就會(huì)產(chǎn)生中斷,此時(shí)簡單地復(fù)位輸入控制移位寄存器(Input Control Shift Register,ICSR)清中斷,在延遲過程調(diào)用(Deferred Procedure Call,DPC)中啟動(dòng)下一次分割傳輸,簡單地調(diào)用用戶定義的回調(diào)函數(shù)即可。 第五章 數(shù)據(jù)采集卡功能編程與測(cè)試 數(shù)據(jù)采集卡的動(dòng)態(tài)連接庫LabVIEW本身是一個(gè)功能比較完整的軟件開發(fā)環(huán)境,Labview是為替代常規(guī)的BASIC或C語言設(shè)計(jì)的。Labview是編程語言而不僅僅是一個(gè)軟件開發(fā)環(huán)境。與VC或VB編程相比,Labview將繁瑣復(fù)雜的語言編程簡化成為以菜單提示方式選擇功能,并且用線條將各種功能連接起來,提供了更簡明、直觀易用的編程方式[14]。作為編寫應(yīng)用程序的語言,除了編程方式不同外,Labview具備語言所有的特性,因此又稱為G語言。由于測(cè)試界面程序不能直接訪問硬件I/O 端口, 因此需要在程序中調(diào)用數(shù)據(jù)采集卡動(dòng)態(tài)鏈接庫(DLL)中的相關(guān)函數(shù)進(jìn)行數(shù)據(jù)采集了。DLL是一個(gè)包含了若干函數(shù)的文件, 是Windows實(shí)現(xiàn)代碼和數(shù)據(jù)共享的基本工具。DLL不僅可以提高編程效率和多任務(wù)環(huán)境下的程序執(zhí)行效率,而且還可以在Windows應(yīng)用程序中實(shí)現(xiàn)代碼和資源共享[15]。該DLL文件可為所有在 Windows 環(huán)境運(yùn)行的編程環(huán)境(如LabVIEW ,Visual Basic和 Visual C++等)所使用.為了將數(shù)據(jù)采集卡的操作簡單化, 動(dòng)態(tài)鏈接庫中所有函數(shù)的參數(shù)均通過一個(gè)結(jié)構(gòu)體 (ZT_PCIBOARD)來傳遞, 結(jié)構(gòu)體如下:struct ZT_PCIBOARD{  long lIndex。/*PCI卡索引值,該值在安裝時(shí)被系統(tǒng)自動(dòng)分配*/  HANDLE hHandle。/* PCI卡的操作句柄(只有涉及中斷時(shí)才用)*/  short nChBase。/*通道號(hào);默認(rèn)為0,表示通道號(hào)從0開始;設(shè)為1,表示通道號(hào)從1開始;不能設(shè)為0或1以外的數(shù)*/  long lData。/*輸入輸出數(shù)據(jù)變量,一般用于傳遞單個(gè)數(shù)據(jù)*/  long* plData。/*輸入輸出數(shù)據(jù)指針,用于傳遞成批數(shù)據(jù)*/  long lCode。/*設(shè)備控制字*/}。打開和關(guān)閉設(shè)備的必備底層函數(shù)說明如下:打開設(shè)備函數(shù):long APIENTRY OpenDevicePlx(ZT_PCIBOARD* bs)入口有效參數(shù):lIndex PCI卡索引值出口返回參數(shù):hHandle PCI卡的操作句柄(只有涉及中斷時(shí),返回才有意義)調(diào)用此函數(shù)時(shí),不改變 errorLevel 的值函數(shù)返回值: 0 表示打開設(shè)備成功,1表示打開設(shè)備失敗關(guān)閉設(shè)備函數(shù):long APIENTRY CloseDevicePlx(ZT_PCIBOARD* bs)入口有效參數(shù):lIndex PCI卡索引值出口返回參數(shù):無,調(diào)用此函數(shù)時(shí),不改變 errorLevel 的值函數(shù)返回值: 0 表示關(guān)閉設(shè)備成功,1表示關(guān)閉設(shè)備失敗 數(shù)據(jù)采集卡功能測(cè)試 數(shù)據(jù)采集卡的安裝將PCI數(shù)據(jù)采集卡插入計(jì)算機(jī)主板的PCI插口,開機(jī)啟動(dòng)后系統(tǒng)將提示發(fā)現(xiàn)新硬件安裝驅(qū)動(dòng)程序,指定路徑到驅(qū)動(dòng)程序INF文件所在位置安裝好驅(qū)動(dòng)后,在設(shè)備管理器中可以查看到PCI數(shù)據(jù)采集卡已安裝好。數(shù)據(jù)采集卡的資源配置為:內(nèi)存配置ED003000~ED00307F,輸入/輸出范圍為9800~987F和9C00~9CFF,中斷請(qǐng)求個(gè)數(shù)為19個(gè)。 PCI數(shù)據(jù)采集卡安裝好后將37芯D型插頭插到PCI數(shù)據(jù)采集卡的37芯D型插頭上,以方便信號(hào)發(fā)生器或示波器的探頭與數(shù)據(jù)采集卡相連。插頭上每個(gè)引腳分別對(duì)應(yīng)的信號(hào)定義如表51所示。ADX表示模擬量輸入的第X通道,括號(hào)外的為單端定義,括號(hào)內(nèi)的是雙端定義;AGND指模擬地,單端使用時(shí)為信號(hào)地;DAX表示計(jì)數(shù)器輸出的第X個(gè)通道。為防止引入現(xiàn)場(chǎng)干擾,不應(yīng)該使AD輸入信號(hào)引腳懸空,可以將不使用的信號(hào)引腳與模擬地短路。表51 插頭引腳與信號(hào)定義插座引腳號(hào)信號(hào)定義插座引腳號(hào)信號(hào)定義1AD0(AD0+)20AD16(AD0)2AD1(AD1+)21AD17(AD1)3AD2(AD2+)22AD18(AD2)4AD3(AD3+)23AD19(AD3)5AD4(AD4+)24AD20(AD4)6AD5(AD5+)25AD21(AD5)7AD6(AD6+)26AD22(AD6)8AD7(AD7+)27AD23(AD7)9AD8(AD8+)28AD24(AD8)10AD9(AD9+)29AD25(AD9)11AD10(AD10+)30AD26(AD10)12AD11(AD11+)31AD27(AD11)13AD12(AD12+)32AD28(AD12)14AD13(AD13+)33AD29(AD13)15AD14(AD14+)34AD30(AD14)16AD15(AD15+)35AD31(AD15)17AGND36DA018DA137DA219DA3 模擬信號(hào)數(shù)據(jù)采集和輸出測(cè)試本實(shí)驗(yàn)通過LabVIEW圖形化編程實(shí)現(xiàn)虛擬示波器,可以直觀的查看采集到的數(shù)據(jù)。使用LabVIEW編寫的虛擬示波器程序可以將數(shù)據(jù)采集卡中的數(shù)據(jù)即時(shí)描繪成波形,并且可以LabVIEW編程更改數(shù)據(jù)采集卡工作方式參數(shù)。圖51 AD定時(shí)方式采集參數(shù)設(shè)定數(shù)據(jù)采集測(cè)試的參數(shù)設(shè)定程序框圖如圖51所示,程序中可以對(duì)單端/雙端信號(hào),固定單通道/多通道循環(huán)采集等模式進(jìn)行定。入口參數(shù)包括ulChMode:通道方式、ulChNo:通道號(hào)或多通道循環(huán)輸出中止通道號(hào)、ulRange:AD采集量程、ulGainInx:增益倍數(shù)、ulStartMode:AD啟動(dòng)方式和ulFreqDiv:采樣頻率。測(cè)試中設(shè)定程序固定單通道采集,使用20號(hào)通道采集數(shù)據(jù),將信號(hào)發(fā)生器的的輸出探頭與對(duì)應(yīng)引腳相連。AD量程分別設(shè)置成0~10000mV和5000mV~+5000mV兩種量程分別測(cè)試。使用定時(shí)方式AD采集,增益倍數(shù)為0,采樣頻率250KHz。打開信號(hào)發(fā)生器電源,分別生成不同的信號(hào)波形發(fā)送到數(shù)據(jù)采集卡,進(jìn)行數(shù)據(jù)采集,運(yùn)行LabVIEW程序得到數(shù)據(jù)采集結(jié)果。圖52 AD定時(shí)方式采集程序框圖AD定時(shí)方式采集程序框圖如圖52所示,調(diào)用DLL文件中的模擬量采集函數(shù):long APIENTRY ZT8336AI (ZT_PCIBOARD* bs)對(duì)某一通道模擬量數(shù)據(jù)采集。入口有效參數(shù)中PCI卡索引值lIndex,默認(rèn)板卡號(hào)為1,通道號(hào)nCh和設(shè)備控制碼的值由LabVIEW中輸入的參數(shù)確定。出口返回參數(shù)lData為該通道模擬量的數(shù)值,錯(cuò)誤返回碼errorLevel返回0時(shí)表示無錯(cuò)誤,函數(shù)返回值為0表示采集成功,
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1