<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于PCI總線的數(shù)字衛(wèi)星解調(diào)卡驅(qū)動程序開發(fā)

          基于PCI總線的數(shù)字衛(wèi)星解調(diào)卡驅(qū)動程序開發(fā)

          作者: 時間:2009-03-05 來源:網(wǎng)絡(luò) 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/202712.htm

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

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

          1 PCI9054接口芯片

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

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

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

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

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

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

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

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

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

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

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

          2 WDM驅(qū)動程序開發(fā)工具

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

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

          3 DMA模式WDM驅(qū)動程序開發(fā)

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

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

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

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

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

          本設(shè)計使用Driver Works來開發(fā)WDM驅(qū)動程序。

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

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

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

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

          (3)選擇驅(qū)動類型為WDM Function Driver;

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

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

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

          3.2 DMA傳輸控制

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

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

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

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

          進行DMA傳輸需要用到三個DMA傳輸類,分別為KdmaAdapter、KCommonDmaBuffer和KdmaTransfer。

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


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();