當(dāng)前位置:首頁(yè) > 智能硬件 > 智能硬件
[導(dǎo)讀]引言 PCI總線(即外圍部件互連總線)是Intel公司提出的計(jì)算機(jī)接口總線。它的時(shí)鐘頻率為33MHz,有32位數(shù)據(jù)總線,可支持突發(fā)傳輸模式,數(shù)據(jù)傳輸峰值速率高達(dá)132 MB/s。 此外,PCI總線還可擴(kuò)展為64位數(shù)據(jù)總

引言
      PCI總線(即外圍部件互連總線)是Intel公司提出的計(jì)算機(jī)接口總線。它的時(shí)鐘頻率為33MHz,有32位數(shù)據(jù)總線,可支持突發(fā)傳輸模式,數(shù)據(jù)傳輸峰值速率高達(dá)132 MB/s。

       此外,PCI總線還可擴(kuò)展為64位數(shù)據(jù)總線,擴(kuò)展后的數(shù)據(jù)傳輸峰值速率高達(dá)264 MB/s,并支持即插即用功能而且獨(dú)立于處理器。由于PCI總線具有諸多優(yōu)點(diǎn),它已經(jīng)成為PC機(jī)的標(biāo)準(zhǔn)總線。因此,PCI接口設(shè)備的驅(qū)動(dòng)程序開(kāi)發(fā)就顯得尤為重要。

      數(shù)字衛(wèi)星解調(diào)卡主要用于接收衛(wèi)星發(fā)來(lái)的調(diào)制信號(hào)的數(shù)字解調(diào)。設(shè)計(jì)中的橋接芯片可采用PLX公司的PCI9054。本文主要介紹數(shù)字衛(wèi)星解調(diào)卡的WDM驅(qū)動(dòng)程序開(kāi)發(fā)方法。

       1 PCI9054接口芯片

       PCI9054是PLX公司推出的PCI接口芯片。它支持本地總線2.2版規(guī)范,工作頻率為0~33 MHz,可提供C、M、J三種本地工作模式,本地端到PCI總線的猝發(fā)傳輸速率高達(dá)132 MB/s。該芯片具有可編程的Serial EEPROM接口,可用于配置PCI9054的部分內(nèi)部配置寄存器。其配置正確與否直接決定著設(shè)備能否正常工作。其中的DeviceID和Vendor ID分別對(duì)應(yīng)設(shè)備號(hào)和銷(xiāo)售商號(hào),計(jì)算機(jī)主要靠這兩個(gè)號(hào)碼識(shí)別硬件。該器件內(nèi)部有6種可編程的FIFO,可以進(jìn)行數(shù)據(jù)的發(fā)送與接收,而其兩種內(nèi)部配置寄存器PCI Configuration Register和Local Configuration Register,可在本地端支持主模式、從模式租DMA傳輸方式。PCI9054的內(nèi)部結(jié)構(gòu)如圖1所示。

 PCI9054支持兩個(gè)獨(dú)立的DMA通道,以用于完成本地端到PCI總線或者PCI總線到本地端的數(shù)據(jù)傳輸。每一個(gè)DMA通道包含一個(gè)DMA控制器和一個(gè)雙向FIFO,兩種通道都分別支持Block傳輸模式和Scatter/Gather傳輸模式。DMA通道0還支持Demand DMA數(shù)據(jù)傳輸模式。

       Block DMA要求PCI主機(jī)或Local主機(jī)能提供PCI和Local的起始地址、傳輸字節(jié)數(shù)和傳輸方向。主機(jī)首先設(shè)定DMA開(kāi)始位并啟動(dòng)數(shù)據(jù)傳輸,一旦傳輸完成,PCI9054設(shè)定將DMACSR0[4]=1或者DMACSR1 [4]=1(分別對(duì)應(yīng)通道0和通道1)來(lái)結(jié)束DMA。如果中斷Enable位DMAMODE0[10]或者DMAMODE1[10]使能,那么,在傳輸結(jié)束時(shí),PCI9054將向主機(jī)申請(qǐng)中斷。在DMA傳輸中,PCI9054既是PCI總線的主控設(shè)備,又是Local總線的主控設(shè)備。另外,通過(guò)編程DMA傳輸模式還可以完成以下設(shè)置或功能:

       (1)將本地總線寬度設(shè)為8位、16位或32位;

       (2)設(shè)置本地總線為允許/禁止內(nèi)部等待狀態(tài),若允許,則可等待0~15個(gè)本地等待狀態(tài);

       (3)設(shè)置本地總線為突發(fā)傳輸4個(gè)雙字長(zhǎng)度;

       (4)使本地地址采用固定模式或線性增長(zhǎng)模式;

       (5)完成PCI內(nèi)存寫(xiě)和無(wú)效操作(commandcode=Fh)或者普通PCI內(nèi)存寫(xiě)操作(commandcode=7h);

       (6)使用/禁用BLAST#以暫停本地傳輸;

       (7)在Scatter/Gather DMA傳輸模式中,當(dāng)DMA傳輸完成或終止計(jì)數(shù)器計(jì)數(shù)到0時(shí),插入PCI中斷(INTA)或者本地中斷(LINT);

       (8)工作于DMA清除計(jì)數(shù)模式。

       2 WDM驅(qū)動(dòng)程序開(kāi)發(fā)工具

       PCI總線的傳統(tǒng)開(kāi)發(fā)工具是微軟公司提供的DDK(Device Driver Kit),包括Windows98 DDK,Windows2000 DDK和Windows XP DDK。但是,使用其開(kāi)發(fā)驅(qū)動(dòng)程序比較復(fù)雜且開(kāi)發(fā)周期長(zhǎng),它只適合發(fā)行類(lèi)產(chǎn)品的驅(qū)動(dòng)開(kāi)發(fā)。

       為了簡(jiǎn)化驅(qū)動(dòng)程序的開(kāi)發(fā),縮短開(kāi)發(fā)周期,常用的方法是使用Numage公司提供的開(kāi)發(fā)工具Driver Studio,這是一個(gè)開(kāi)發(fā)工具包(包含VtoolsD,Driver Works和SoftICE等開(kāi)發(fā)工具)。其中的Driver Works是Compuware公司開(kāi)發(fā)的工具,它提供了一系列類(lèi)。這些類(lèi)包含了許多更為底層的操作并且為一般驅(qū)動(dòng)操作提供了服務(wù)函數(shù),從而為開(kāi)發(fā)人員提供了一個(gè)訪問(wèn)系統(tǒng)核心的標(biāo)準(zhǔn)界面。由于其驅(qū)動(dòng)程序開(kāi)發(fā)采用面向?qū)ο蟮目蚣芙Y(jié)構(gòu),因而開(kāi)發(fā)過(guò)程比較簡(jiǎn)單易行。

       3 DMA模式WDM驅(qū)動(dòng)程序開(kāi)發(fā)

       本文介紹的數(shù)字衛(wèi)星解調(diào)卡的硬件框圖如圖2所示。圖中,當(dāng)FPGA中的數(shù)據(jù)放進(jìn)FIFO后,要經(jīng)過(guò)PCI9054橋接芯片傳輸?shù)絇C機(jī)內(nèi)存中,但由于應(yīng)用程序不能直接操作硬件,所以在應(yīng)用程序和硬件之間必須安裝硬件驅(qū)動(dòng)程序來(lái)完成應(yīng)用程序?qū)τ布脑L問(wèn)??梢?jiàn),驅(qū)動(dòng)程序?qū)τ谡麄€(gè)設(shè)計(jì)至關(guān)重要,它關(guān)系到數(shù)據(jù)能否準(zhǔn)確無(wú)誤的送到指定的目的地。

驅(qū)動(dòng)程序完成的主要功能如下:

       (1)接收應(yīng)用傳送的符號(hào)率,配置符號(hào)率;

       (2)接收應(yīng)用程序傳送的控制字,配置AD9851用作外部FIFO數(shù)據(jù)傳輸?shù)臅r(shí)鐘;

       (3)設(shè)置數(shù)據(jù)傳輸為DMA方式,直到接收到應(yīng)用程序發(fā)來(lái)的停止數(shù)據(jù)采集命令為止。驅(qū)動(dòng)要保證數(shù)據(jù)傳輸順利進(jìn)行。

       本設(shè)計(jì)使用Driver Works來(lái)開(kāi)發(fā)WDM驅(qū)動(dòng)程序。

       3.1 基于Driver Works的WDM驅(qū)動(dòng)程序框架

       這里所要生成的是PCI設(shè)備的驅(qū)動(dòng)程序。采用DMA方式傳輸時(shí),生成WDM驅(qū)動(dòng)程序框架的主要步驟如下:

       (1)從VC++中啟動(dòng)Driver Works,設(shè)置驅(qū)動(dòng)程序名稱(chēng)及存放的路徑,設(shè)計(jì)時(shí)可取驅(qū)動(dòng)名稱(chēng)為BPSKDRIVER;

       (2)選擇工程類(lèi)型為WDM DRIVER;

       (3)選擇驅(qū)動(dòng)類(lèi)型為WDM Function Driver;

       (4)選擇硬件總線類(lèi)型為PCI,在這里要注意,PCI Vendor ID和PCI Device ID應(yīng)根據(jù)硬件信息填寫(xiě);

       (5)添加存儲(chǔ)器空間和I/O空間所需的類(lèi)對(duì)象,添加DMA資源,使用設(shè)備接口打開(kāi)設(shè)備;

       (6)用控制代碼完成應(yīng)用程序和驅(qū)動(dòng)的交互,即在應(yīng)用程序中使用Device IO Control來(lái)完成應(yīng)用程序向驅(qū)動(dòng)傳輸數(shù)據(jù)。

       3.2 DMA傳輸控制

       (1)DMA傳輸類(lèi)的概念及初始化

       按照上述步驟生成WDM驅(qū)動(dòng)的框架后,其大部分例程函數(shù)(如Driver Entry、Add Device、Device Control、On Start Device)等已經(jīng)由軟件自動(dòng)生成并能基本滿(mǎn)足設(shè)計(jì)要求,下面重點(diǎn)介紹DMA傳輸控制函數(shù)。

       設(shè)計(jì)中,對(duì)DMA寄存器的訪問(wèn)可采用I/O方式,并可利用Driver Works提供的KIoRange類(lèi)產(chǎn)生該類(lèi)的一個(gè)實(shí)例,然后在設(shè)備啟動(dòng)例程中初始化該實(shí)例,即可實(shí)現(xiàn)對(duì)硬件的兩個(gè)I/O地址空間的映射,其中一個(gè)I/O地址空間用于訪問(wèn)橋接芯片PCI9054的寄存器,另一個(gè)I/O地址空間用于訪問(wèn)本地端的設(shè)備,其初始化方法如下:

其中,pResListTranslated、pResListRaw分別是IRQ中系統(tǒng)分配的翻譯資源列表和原始資源列表。初始化完成后,就可以使用類(lèi)的成員函數(shù)in,out對(duì)端口進(jìn)行操作。例如:m_IoPortRange0.outd(0x30,0x40100),就可向IO端口0的偏移量為0x30的地址中寫(xiě)入0x40100。

       進(jìn)行DMA傳輸需要用到三個(gè)DMA傳輸類(lèi),分別為KdmaAdapter、KCommonDmaBuffer和KdmaTransfer。

       KdmaAdapter是DMA適配器對(duì)象,可用于表示需要進(jìn)行DMA傳輸?shù)脑O(shè)備資源。此對(duì)象對(duì)于Master設(shè)備和Slave設(shè)備都是適用的。驅(qū)動(dòng)中,此類(lèi)函數(shù)可在On Start Device中由成員函數(shù)Initialize初始化。

       KconnonDmaBuffer是DMA通用緩沖區(qū)對(duì)象。驅(qū)動(dòng)中,此類(lèi)可在On Start Device中由成員函數(shù)Initialize初始化。通用緩沖區(qū)是外部設(shè)備和驅(qū)動(dòng)程序之間的一段物理上連續(xù)的虛擬內(nèi)存,這個(gè)內(nèi)存是從系統(tǒng)中分配出來(lái)的,是非常珍貴的資源,任何時(shí)候都可以被他的設(shè)備和驅(qū)動(dòng)程序存取。通用緩沖區(qū)包括緩沖區(qū)空間大小、虛擬地址、邏輯地址等信息。由于通用緩沖區(qū)是非常珍貴的資源,所以它的大小也受到限制。為此,驅(qū)動(dòng)時(shí)應(yīng)對(duì)每個(gè)DMA請(qǐng)求進(jìn)行分段,并為每個(gè)段提供一個(gè)傳輸段描述符數(shù)組。而且,當(dāng)設(shè)備不支持分散/集中時(shí),這個(gè)數(shù)組中的描述符只能有一個(gè)。每個(gè)描述符包含一個(gè)物理地址和相應(yīng)的字節(jié)數(shù),其結(jié)構(gòu)如下:

其中的物理地址即邏輯地址,字節(jié)數(shù)則是相應(yīng)的邏輯地址范圍的長(zhǎng)度。

       KdmaTransfer為DMA傳輸對(duì)象,用來(lái)管理內(nèi)存和設(shè)備之間的數(shù)據(jù)傳輸,但此時(shí)的DMA適配器必須可用。適配器對(duì)象可用來(lái)通知傳輸數(shù)據(jù)的類(lèi)型和使用的DMA通道等。驅(qū)動(dòng)中,此類(lèi)可在OnStart Device中由成員函數(shù)Initialize初始化。在DMA傳輸中,數(shù)據(jù)可直接傳輸?shù)较到y(tǒng)物理內(nèi)存中。管理這些內(nèi)存的方式有Common Buffer和Packet兩種。第一種方式是在物理內(nèi)存中預(yù)先開(kāi)辟一段連續(xù)的內(nèi)存空間,CPU和PCI都可以對(duì)其進(jìn)行訪問(wèn),且在一次DMA傳輸過(guò)程中,物理地址保持不變,該方式適合傳輸大量數(shù)據(jù)和連續(xù)的DMA傳輸;而在Packet方式中,由于其內(nèi)存物理地址不確定,因此適合間斷性的DMA傳輸。

       (2)回調(diào)函數(shù)

       由于DMA傳輸采用分段傳輸,所以,每當(dāng)準(zhǔn)備傳輸一個(gè)新段時(shí),KDmaTransfer的對(duì)象將通知驅(qū)動(dòng)程序調(diào)用回調(diào)例程?;卣{(diào)函數(shù)的原型由typedef DMAREADY_CALLBACK指定,使用宏DEVMEMBER_DMAREADY可聲明回調(diào)函數(shù)基類(lèi)的成員函數(shù)。通過(guò)判斷成員函數(shù)Bytes Remaining可判斷傳輸是否完成。若返回值為0,則調(diào)用成員函數(shù)Terminate以完成相應(yīng)的IRP,否則,回調(diào)函數(shù)繼續(xù)傳輸。

       (3)中斷服務(wù)

       本驅(qū)動(dòng)需要處理兩種中斷,第一種是本地中斷,它是當(dāng)FIFO輸出半滿(mǎn)信號(hào)時(shí)由FPGA通過(guò)LINT#信號(hào)發(fā)給PCI9054的中斷信號(hào);第二種中斷是DMA傳輸結(jié)束時(shí)由DMA中斷控制器產(chǎn)生的。這兩種中斷可以通過(guò)對(duì)DMA的中斷控制寄存器的特定位處理來(lái)區(qū)分。判斷是否是本地中斷時(shí),可以通過(guò)判斷DMA中斷控制寄存器的第15位是否為1來(lái)確定,如果INTCSR[15]=1,則為本地中斷;判斷是否是DMA中斷則可通過(guò)判斷DMA中斷控制寄存器的第23位是否為1來(lái)確定,如果INTCSR[23]=1,則為DMA中斷。不同的中斷,其處理方式不同。

       3.3 驅(qū)動(dòng)程序的創(chuàng)建及安裝文件的修改

       為了正確的創(chuàng)建WDM驅(qū)動(dòng)程序,首先要建立WDM編程環(huán)境,并創(chuàng)建自己的庫(kù)文件。參考文件中提供了一種WDM編程環(huán)境的建立方法,但是,按照書(shū)中的方法經(jīng)常不能成功的建立編程環(huán)境,為此,筆者根據(jù)自己的經(jīng)驗(yàn)介紹一種簡(jiǎn)單易行的方法:

       (1)首先安裝DDK;

       (2)在開(kāi)始菜單中選擇Compuware Driver Studio\Develop下的DDK Build Setting;

       (3)在打開(kāi)的對(duì)話(huà)框中的DDK Root Directory中設(shè)置DDK的根目錄(如E:\WINDDK\2600),然后點(diǎn)擊Launch Program,并打開(kāi)Compuware DriverStudio的Driver Works文件夾中Source里的VdwLibs.dsw文件。

       (4)選擇Build菜單中的Set Active Project Configuration,并在彈出的對(duì)話(huà)框中選擇合適的Project configurations。而對(duì)于現(xiàn)行的32位機(jī),它不需要像Win32 AMD64 Free等這樣的工程;

       (5)選好一個(gè)工程后,點(diǎn)擊OK,然后點(diǎn)擊Build with BUILD.EXE即可生成所需的庫(kù)。然后再根據(jù)自己的需要重新選擇新的Project configurations,以進(jìn)行庫(kù)的創(chuàng)建。

       筆者的這種方法在于使用DDK Build Setting的Launch Program打開(kāi)VdwILibs.dsw,編譯沒(méi)有出現(xiàn)錯(cuò)誤,書(shū)中的方法則是先打開(kāi)VC++,然后打開(kāi)VdwLibs.dsw,選擇Batch Build下的Rebuild All創(chuàng)建庫(kù),但是筆者試了幾次均不成功。

       庫(kù)文件生成之后,即可打開(kāi)創(chuàng)建好的驅(qū)動(dòng)程序,并在VC++的菜單中打開(kāi)DDK Build Setting,再在DDK Root Directory中設(shè)置DDK的路徑為實(shí)際安裝的路徑,之后點(diǎn)擊Build圖標(biāo),就可以生成BPSKDRIVER.sys文件了。另外,驅(qū)動(dòng)的類(lèi)型可以自己設(shè)定,Windows系統(tǒng)定義了一系列的設(shè)備類(lèi)名和GUID,找到驅(qū)動(dòng)工程文件中后綴名為.inf的安裝文件,將其內(nèi)容修改成與硬件信息一致就可以了。然后將此文件拷貝到工程中的i386文件夾中。至此,一個(gè)完整的驅(qū)動(dòng)就創(chuàng)建成功了。

       4 結(jié)束語(yǔ)

       本驅(qū)動(dòng)現(xiàn)在已經(jīng)經(jīng)過(guò)測(cè)試,工作正常。并已經(jīng)應(yīng)用于數(shù)字衛(wèi)星解調(diào)卡中。WDM編程環(huán)境的創(chuàng)建具有筆者自己的見(jiàn)解,并且可以實(shí)現(xiàn)一次創(chuàng)建即成功,希望對(duì)同類(lèi)驅(qū)動(dòng)程序的開(kāi)發(fā)具有借鑒作用。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉