• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關 閉

    新聞中心

    EEPW首頁 > 工控自動化 > 設計應用 > 基于PCI總線的數字衛星解調卡驅動程序開發

    基于PCI總線的數字衛星解調卡驅動程序開發

    作者: 時間:2009-03-05 來源:網絡 收藏

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

    本文引用地址:http://www.czjhyjcfj.com/article/202712.htm

    此外,總線還可擴展為64位數據總線,擴展后的數據傳輸峰值速率高達264 MB/s,并支持即插即用功能而且獨立于處理器。由于總線具有諸多優點,它已經成為PC機的標準總線。因此,PCI接口設備的驅動程序開發就顯得尤為重要。

    卡主要用于接收衛星發來的調制信號的數字。設計中的橋接芯片可采用PLX公司的PCI9054。本文主要介紹卡的WDM驅動程序開發方法。

    1 PCI9054接口芯片

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

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

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

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

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

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

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

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

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

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

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

    2 WDM驅動程序開發工具

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

    為了簡化驅動程序的開發,縮短開發周期,常用的方法是使用Numage公司提供的開發工具Driver Studio,這是一個開發工具包(包含VtoolsD,Driver Works和SoftICE等開發工具)。其中的Driver Works是Compuware公司開發的工具,它提供了一系列類。這些類包含了許多更為底層的操作并且為一般驅動操作提供了服務函數,從而為開發人員提供了一個訪問系統核心的標準界面。由于其驅動程序開發采用面向對象的框架結構,因而開發過程比較簡單易行。

    3 DMA模式WDM驅動程序開發

    本文介紹的解調卡的硬件框圖如圖2所示。圖中,當FPGA中的數據放進FIFO后,要經過PCI9054橋接芯片傳輸到PC機內存中,但由于應用程序不能直接操作硬件,所以在應用程序和硬件之間必須安裝硬件驅動程序來完成應用程序對硬件的訪問。可見,驅動程序對于整個設計至關重要,它關系到數據能否準確無誤的送到指定的目的地。

    驅動程序完成的主要功能如下:

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

    (2)接收應用程序傳送的控制字,配置AD9851用作外部FIFO數據傳輸的時鐘;

    (3)設置數據傳輸為DMA方式,直到接收到應用程序發來的停止數據采集命令為止。驅動要保證數據傳輸順利進行。

    本設計使用Driver Works來開發WDM驅動程序。

    3.1 基于Driver Works的WDM驅動程序框架

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

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

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

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

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

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

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

    3.2 DMA傳輸控制

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

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

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

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

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

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


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 菏泽市| 永福县| 浦城县| 塔城市| 吴川市| 乌兰察布市| 洛川县| 麻栗坡县| 星座| 厦门市| 乾安县| 丰城市| 吉林市| 温宿县| 岗巴县| 钦州市| 邯郸县| 来安县| 凉山| 嘉祥县| 新蔡县| 穆棱市| 崇明县| 宜阳县| 达拉特旗| 抚远县| 阿合奇县| 抚宁县| 安宁市| 彭阳县| 昌宁县| 余江县| 峨山| 丰都县| 古交市| 来安县| 辰溪县| 伊金霍洛旗| 泗水县| 巴东县| 罗定市|