在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 高速PCI信號采集卡設(shè)計與實(shí)現(xiàn)綜合實(shí)例之:主機(jī)應(yīng)用程序和驅(qū)動程序的接口設(shè)計

            高速PCI信號采集卡設(shè)計與實(shí)現(xiàn)綜合實(shí)例之:主機(jī)應(yīng)用程序和驅(qū)動程序的接口設(shè)計

            作者: 時間:2017-06-04 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/201706/348785.htm

            13.5

            13.5.1例程的封裝

            通過調(diào)用PCI設(shè)備的例程,我們可以實(shí)現(xiàn)操作系統(tǒng)對PCI設(shè)備的控制。但是直接調(diào)用例程進(jìn)行編程往往顯得不夠直接,也不具有足夠的針對性。因此在高級語言里面對PCI設(shè)備或者信號采集設(shè)備的控制,往往是調(diào)用已經(jīng)封裝過的例程。

            將例程進(jìn)行封裝,形成一些可以調(diào)用的具有針對性的PCI信號采集設(shè)備API函數(shù),是驅(qū)動開發(fā)者比較頭疼的問題。因?yàn)檫@個過程需要了解WindowsWDM模型,熟悉WindowsDDK的開發(fā)過程,而這些往往需要花費(fèi)硬件開發(fā)者的大量時間。

            幸運(yùn)的是,有一些很好的集成開發(fā)環(huán)境幫助我們完成了這個工作。用戶只需要將具體設(shè)備的參數(shù)導(dǎo)入開發(fā)工具的向?qū)е校纯勺詣由蓪?yīng)該設(shè)備的驅(qū)動程序。這些開發(fā)工具包括DriverStudio、Windriver等。

            另外,針對基于PCI9054的PCI設(shè)備,PLX公司已經(jīng)為用戶提供了較為完備的API函數(shù)包。用戶只需要根據(jù)需要調(diào)用其中的API函數(shù),即可輕松實(shí)現(xiàn)對PCI9054采集設(shè)備的控制。下面介紹幾個常用的PLXAPI函數(shù)。

            13.5.2PLXAPI函數(shù)

            PLX公司為其提供的動態(tài)鏈接庫中包含了豐富的API函數(shù),可以用于PCI9054卡的控制與傳輸。在這些API函數(shù)中,有如下的幾個是常常用到的(注:在2007年5月提供的PLXSDKVersion5.0中,API函數(shù)名有所更新,下面仍然按照V5版之前的函數(shù)名進(jìn)行介紹)。

            1.PlxPciDeviceOpen函數(shù)

            用于設(shè)備啟動,在對設(shè)備進(jìn)行任何操作之前都應(yīng)該先打開設(shè)備,其函數(shù)原型為:

            RETURN_CODEPlxPciDeviceOpen(

            DEVICE_LOCATION*pDevice,//指向包含設(shè)備信息的數(shù)據(jù)結(jié)構(gòu)的指針

            HANDLE*pHandle //指向用于存放已打開設(shè)備的句柄的指針

            );

            DEVICE_LOCATION數(shù)據(jù)結(jié)構(gòu)的定義如下:

            typedefstruct_DEVICE_LOCATION{

            U8BusNumber;//PCI設(shè)備所在的總線號

            U8SlotNumber;//PCI設(shè)備所在的插槽號

            U16DeviceId;//PCI設(shè)備的設(shè)備號

            U16VendorId;//PCI設(shè)備的廠商號

            U8SerialNumber[12];//PCI設(shè)備的惟一標(biāo)識碼

            }DEVICE_LOCATION;

            對于PCI9054來說,DeviceId為10b5,VendorId為5406(不同的版本可能為9054)。SerialBumber的格式為“devicename>-indexnumber>”。如:有PLX9054的PCI卡,如果它的序列號為“Pci9054-1”,表示這是第二個PLX9054設(shè)備,第一個為“Pci9054-0”。

            2.PlxPciDeviceClose函數(shù)

            用于關(guān)閉已打開的PCI設(shè)備,其函數(shù)原型為:

            RETURN_CODEPlxPciDeviceClose(HANDLEhDevice);//已打開的PCI設(shè)備的句柄

            3.PlxPciBoardReset函數(shù)

            用于復(fù)位已經(jīng)打開的PCI設(shè)備,其函數(shù)原型為:

            VOIDPlxPciBoardReset(HANDLEhDevice);//已打開的PCI設(shè)備的句柄

            4.PlxBusIopRead函數(shù)

            用于從本地總線讀取數(shù)據(jù)(常指DirectSlave讀模式),其函數(shù)原型為:

            RETURN_CODEPlxBusIopRead(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            IOP_SPACEIopSpace,//PCI總線至本地總線,映射空間0/1

            U32address,//若bRemap=FALSE,代表IOPSpace相對地址,否則是絕對地址

            BOOLEANbRemap,//絕對地址與相對地址布爾值

            VOID*pBuffer,//指向用戶用于存放讀取數(shù)據(jù)的緩沖區(qū)

            U32ByteCount,

            ACCESS_TYPEAccessType);//讀數(shù)據(jù)方式,支持本地總線使用8位、16位或32位進(jìn)行傳輸

            5.PlxBusIopWrite函數(shù)

            用于從本地總線寫數(shù)據(jù)(常指DirectSlave寫模式),其函數(shù)原型為:

            RETURN_CODEPlxBusIopWrite(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            IOP_SPACEIopSpace,//PCI總線至本地總線,映射空間0/1

            U32address,//若bRemap=FALSE,代表IOPSpace相對地址,否則是絕對地址

            BOOLEANbRemap,//絕對地址與相對地址布爾值

            VOID*pBuffer,//指向用戶用于存放讀取數(shù)據(jù)的緩沖區(qū)

            U32ByteCount,//讀取的數(shù)據(jù)量大小

            ACCESS_TYPEAccessType);//讀數(shù)據(jù)方式,支持本地總線使用8位、16位或32位進(jìn)行傳輸

            6.PlxIntrAttach函數(shù)

            用于鏈接中斷,當(dāng)有效中斷產(chǎn)生時,將事件傳遞給指針句柄,其函數(shù)原型為:

            RETURN_CODEPlxIntrAttach(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            PLX_INTRintrTypes,//含有需要指定的中斷信息的數(shù)據(jù)結(jié)構(gòu)(PLX_INTR)

            HANDLE*pEventHdl);//指向接收中斷事件的指針句柄

            7.PlxIntrDisable函數(shù)

            用于禁止某類中斷,其函數(shù)原型為:

            RETURN_CODEPlxIntrDisable(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            PLX_INTR*pPlxIntr); //含有需要指定的中斷信息的數(shù)據(jù)結(jié)構(gòu)(PLX_INTR)

            8.PlxIntrEnable函數(shù)

            用于使能某類中斷,其函數(shù)原型為:

            RETURN_CODEPlxIntrEnable(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            PLX_INTR*pPlxIntr); //含有需要指定的中斷信息的數(shù)據(jù)結(jié)構(gòu)(PLX_INTR)

            9.PlxIntrStatusGet函數(shù)

            用于返回當(dāng)前終端狀態(tài),其函數(shù)原型為:

            RETURN_CODEPlxIntrStatusGet(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            PLX_INTR*pPlxIntr); //含有需要指定的中斷信息的數(shù)據(jù)結(jié)構(gòu)(PLX_INTR)

            10.PlxIntrWait函數(shù)

            用于等待中斷,并可設(shè)定等待時間長度,其函數(shù)原型為:

            RETURN_CODEPlxIntrWait(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            HANDLEhEvent,//被等待的事件句柄

            U32Timeout_ms//為等待的時間長度,單位為ms

            );

            由于此函數(shù)只能用在Linux系統(tǒng)中,因此在Windows系統(tǒng)中使用PLXAPI函數(shù)包等待中斷時,使用另外兩個WindowsAPI函數(shù)進(jìn)行中斷等待,即WaitSingleObject()函數(shù)和WaitMultipleObject()函數(shù)。

            11.PlxDmaSglChannelOpen函數(shù)

            用于開啟Scatter/Gather模式DMA通道,其函數(shù)原型為:

            RETURN_CODEPlxDmaSglChannelOpen(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            DMA_CHANNELchannel,//為被開啟的DMA通道

            DMA_CHANNEL_DESC*pDesc);//包含DMA通道的參數(shù)描述結(jié)構(gòu)體(DMA_CHANNEL_DESC)指針

            12.PlxDmaSglChannelClose函數(shù)

            用于關(guān)閉已經(jīng)打開的Scatter/Gather模式DMA通道,其函數(shù)原型為:

            RETURN_CODEPlxDmaSglChanneClose(

            HANDLEhDevice,//已打開的PCI設(shè)備的句柄

            DMA_CHANNELchannel);//將要關(guān)閉的已被開啟的DMA通道

            13.PlxDmaSglTransfer函數(shù)

            用于開始進(jìn)行Scatter/Gather模式的DMA傳輸,其函數(shù)原型為:

            RETURN_CODEPlxDmaSglTransfer(

            HANDLEhDevice, //已打開的PCI設(shè)備的句柄

            DMA_CHANNELchannel, //進(jìn)行Scatter/Gather模式DMA傳輸?shù)耐ǖ?/p>

            DMA_TRANSFER_ELEMENT*dmaData, //指向用于DMA數(shù)據(jù)緩沖區(qū)結(jié)構(gòu)(DMA_TRANSFER_

            //ELEMENT)指針

            BOOLEANreturnImmediate); //取值為FALSE表示程序等待DMA傳輸結(jié)束后再執(zhí)行下一

            //條指令

            //,反之,則不等待結(jié)束就執(zhí)行下一條指令

            13.5.3API函數(shù)調(diào)用

            有了這些豐富的API函數(shù)資源,用戶即可根據(jù)自己的需要為信號采集設(shè)備設(shè)計功能多樣的應(yīng)用程序。在進(jìn)行應(yīng)用程序的設(shè)計時,只需要將API函數(shù)庫包含在用戶的程序中即可。

            PLX公司提供的PLXSDK開發(fā)包中包含了完整的API函數(shù)庫文件。將這些API庫文件復(fù)制到用戶的應(yīng)用程序目錄下,并在程序中include進(jìn)去,即可調(diào)用這些API函數(shù)。更多的函數(shù)及用法詳見PLXSDK的編程者開發(fā)手冊。

            13.5.4PCI9054驅(qū)動程序安裝

            INF文件是安裝設(shè)備驅(qū)動程序時必須使用的文件,其擴(kuò)展名為.inf。驅(qū)動程序安裝后將它保存在windows/inf目錄中,是Winodws操作系統(tǒng)下用來描述設(shè)備或文件等數(shù)據(jù)信息的文件。

            INF文件全稱InformationFile文件。在操作系統(tǒng)發(fā)現(xiàn)新硬件之后向系統(tǒng)指明應(yīng)該安裝的驅(qū)動程序,系統(tǒng)為設(shè)備提供的服務(wù)以及注冊表項(xiàng)要修改的內(nèi)容。它為該設(shè)備提供一個全面描述硬件參數(shù)和相應(yīng)驅(qū)動文件(動態(tài)鏈接庫等文件)的信息。

            驅(qū)動程序安裝的最終結(jié)果包括對系統(tǒng)的兩個永久更改。

            ·描述驅(qū)動程序的系統(tǒng)注冊表項(xiàng)、它的卸載順序以及任何正確的配置資料。

            ·將驅(qū)動程序文件復(fù)制到一個指定的系統(tǒng)目錄中。

            INF文件是由標(biāo)準(zhǔn)的ASCII碼組成,可以用任何一款文字編輯器查看修改其中的內(nèi)容。它是分節(jié)的,每節(jié)以“[]”擴(kuò)起來,每一個節(jié)名最長為255個字符(Windows2000/XP/2003操作系統(tǒng)中)或28個字符(Windows98操作系統(tǒng)中)。

            節(jié)與節(jié)之間的內(nèi)容叫條目,每一個節(jié)是由許多的條目組成的。每一個條目都由“=”分開,如“a=b”。如果每一個條目的等號后有多個值,則每一個值之間用逗號分隔開。INF對大小寫不敏感,行注釋語句命令是“;”,類似VisualBasic里的“’”。如果一行寫不下,使用“”來換行。更多關(guān)于INF文件的規(guī)則和說明可以查看WindowsDDK的說明,這里不再詳述。

            通過INF文件,用戶可以允許系統(tǒng)自動安裝信號采集設(shè)備的驅(qū)動程序,或者在對話支持下按照系統(tǒng)安裝向?qū)б徊揭徊酵瓿沈?qū)動程序安裝過程。



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉