《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 基于PCI總線的數字衛星解調卡驅動程序開發
基于PCI總線的數字衛星解調卡驅動程序開發
摘要:   數字衛星解調卡主要用于接收衛星發來的調制信號的數字解調。設計中的橋接芯片可采用PLX公司的PCI9054。本文主要介紹數字衛星解調卡的WDM驅動程序開發方法。
Abstract:
Key words :

引言

  PCI總線(即外圍部件互連總線)是Intel公司提出的計算機接口總線。它的時鐘頻率為33MHz,有32位數據總線,可支持突發傳輸模式,數據傳輸峰值速率高達132 MB/s。此外,PCI總線還可擴展為64位數據總線,擴展后的數據傳輸峰值速率高達264 MB/s,并支持即插即用功能而且獨立于處理器。由于PCI總線具有諸多優點,它已經成為PC機的標準總線。因此,PCI接口設備的驅動程序" title="驅動程序">驅動程序開發就顯得尤為重要。

  數字衛星" title="數字衛星">數字衛星解調卡主要用于接收衛星發來的調制信號的數字解調。設計中的橋接芯片可采用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初始化。

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

  其中的物理地址即邏輯地址,字節數則是相應的邏輯地址范圍的長度。

  KdmaTransfer為DMA傳輸對象,用來管理內存和設備之間的數據傳輸,但此時的DMA適配器必須可用。適配器對象可用來通知傳輸數據的類型和使用的DMA通道等。驅動中,此類可在OnStart Device中由成員函數Initialize初始化。在DMA傳輸中,數據可直接傳輸到系統物理內存中。管理這些內存的方式有Common Buffer和Packet兩種。第一種方式是在物理內存中預先開辟一段連續的內存空間,CPU和PCI都可以對其進行訪問,且在一次DMA傳輸過程中,物理地址保持不變,該方式適合傳輸大量數據和連續的DMA傳輸;而在Packet方式中,由于其內存物理地址不確定,因此適合間斷性的DMA傳輸。

  (2)回調函數

  由于DMA傳輸采用分段傳輸,所以,每當準備傳輸一個新段時,KDmaTransfer的對象將通知驅動程序調用回調例程。回調函數的原型由typedef DMAREADY_CALLBACK指定,使用宏DEVMEMBER_DMAREADY可聲明回調函數基類的成員函數。通過判斷成員函數Bytes Remaining可判斷傳輸是否完成。若返回值為0,則調用成員函數Terminate以完成相應的IRP,否則,回調函數繼續傳輸。

  (3)中斷服務

  本驅動需要處理兩種中斷,第一種是本地中斷,它是當FIFO輸出半滿信號時由FPGA通過LINT#信號發給PCI9054的中斷信號;第二種中斷是DMA傳輸結束時由DMA中斷控制器產生的。這兩種中斷可以通過對DMA的中斷控制寄存器的特定位處理來區分。判斷是否是本地中斷時,可以通過判斷DMA中斷控制寄存器的第15位是否為1來確定,如果INTCSR[15]=1,則為本地中斷;判斷是否是DMA中斷則可通過判斷DMA中斷控制寄存器的第23位是否為1來確定,如果INTCSR[23]=1,則為DMA中斷。不同的中斷,其處理方式不同。

  3.3 驅動程序的創建及安裝文件的修改

  為了正確的創建WDM驅動程序,首先要建立WDM編程環境,并創建自己的庫文件。參考文件中提供了一種WDM編程環境的建立方法,但是,按照書中的方法經常不能成功的建立編程環境,為此,筆者根據自己的經驗介紹一種簡單易行的方法:

  (1)首先安裝DDK;

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

  (3)在打開的對話框中的DDK Root Directory中設置DDK的根目錄(如E:\WINDDK\2600),然后點擊Launch Program,并打開Compuware DriverStudio的Driver Works文件夾中Source里的VdwLibs.dsw文件。

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

  (5)選好一個工程后,點擊OK,然后點擊Build with BUILD.EXE即可生成所需的庫。然后再根據自己的需要重新選擇新的Project configurations,以進行庫的創建。

  筆者的這種方法在于使用DDK Build Setting的Launch Program打開VdwILibs.dsw,編譯沒有出現錯誤,書中的方法則是先打開VC++,然后打開VdwLibs.dsw,選擇Batch Build下的Rebuild All創建庫,但是筆者試了幾次均不成功。

  庫文件生成之后,即可打開創建好的驅動程序,并在VC++的菜單中打開DDK Build Setting,再在DDK Root Directory中設置DDK的路徑為實際安裝的路徑,之后點擊Build圖標,就可以生成BPSKDRIVER.sys文件了。另外,驅動的類型可以自己設定,Windows系統定義了一系列的設備類名和GUID,找到驅動工程文件中后綴名為.inf的安裝文件,將其內容修改成與硬件信息一致就可以了。然后將此文件拷貝到工程中的i386文件夾中。至此,一個完整的驅動就創建成功了。

  4 結束語

  本驅動現在已經經過測試,工作正常。并已經應用于數字衛星解調卡中。WDM編程環境的創建具有筆者自己的見解,并且可以實現一次創建即成功,希望對同類驅動程序的開發具有借鑒作用。

 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久成人免费视频| 亚洲一级黄色| 国产偷国产偷亚洲高清97cao| 亚洲在线观看| 91久久在线视频| 亚洲视屏一区| 久久精品日韩| 欧美日韩免费观看一区三区| 久久久久免费视频| 久久一本综合频道| 一本色道久久精品| 久久久另类综合| 欧美在线啊v一区| 韩国福利一区| 日韩视频精品在线观看| 蜜桃久久精品乱码一区二区| 欧美制服丝袜第一页| 久久精品视频免费观看| 亚洲欧美三级伦理| 国内精品视频在线观看| 午夜精品视频在线观看一区二区| 亚洲在线观看免费| 国产精品一区二区三区免费观看| 欧美手机在线视频| 一区二区三区精品视频| 在线观看一区二区视频| 国产欧美婷婷中文| 国模精品一区二区三区| 国产亚洲欧美aaaa| 免费不卡在线视频| 久久精品在这里| 亚洲在线观看视频| 欧美日韩中文精品| 国产人成一区二区三区影院| 欧美一区=区| 揄拍成人国产精品视频| 麻豆国产va免费精品高清在线| 在线欧美亚洲| 欧美日韩在线视频一区| 欧美成人午夜激情在线| 国产欧美日韩精品丝袜高跟鞋| 一区二区三区中文在线观看| 亚洲人体一区| 性娇小13――14欧美| 亚洲欧美欧美一区二区三区| 亚洲一区在线观看视频| 欧美一区二区在线免费观看| 欧美日韩国产综合视频在线观看| 欧美婷婷久久| 欧美日韩在线精品一区二区三区| 亚洲欧美日韩天堂| 国产精品久久久久久久久借妻| 久久精品国产亚洲精品| 亚洲欧美精品伊人久久| 在线精品亚洲一区二区| 黄色成人免费观看| 亚洲伊人久久综合| 亚洲欧美在线免费| 激情六月婷婷综合| 亚洲午夜激情网站| 免费亚洲电影在线观看| 欧美午夜性色大片在线观看| 亚洲日本免费电影| 欧美三级在线视频| 亚洲一区欧美一区| 欧美激情性爽国产精品17p| 亚洲欧美一区二区视频| 国产在线精品一区二区中文| 欧美日韩午夜在线视频| 欧美日韩成人激情| 在线国产精品播放| 国产在线高清精品| 免费成人性网站| 伊人狠狠色丁香综合尤物| 国产精品区一区二区三区| 国产久一道中文一区| 揄拍成人国产精品视频| 免费成人av在线| 亚洲狠狠丁香婷婷综合久久久| 国产精品v欧美精品v日本精品动漫| 影音先锋成人资源站| 亚洲欧美综合另类中字| 激情久久久久久久久久久久久久久久| 亚洲高清成人| 欧美激情欧美狂野欧美精品| 免费欧美电影| 久久精品99无色码中文字幕| 亚洲欧美日韩人成在线播放| 一区二区三区在线免费视频| 黄色一区三区| 国产一区二区三区久久久久久久久| 国产九九视频一区二区三区| 日韩视频第一页| 国产一区二区精品久久99| 国产精品久久久久婷婷| 国产日韩欧美三级| 国产精品色一区二区三区| 国产九区一区在线| 亚洲欧美国产一区二区三区| 亚洲第一在线| 国产日韩欧美综合在线| 亚洲激情专区| 久久xxxx精品视频| 午夜在线视频一区二区区别| 国产日韩在线播放| 欧美人成在线| 亚洲一区二区毛片| 欧美一区91| 久久激情视频久久| 亚洲一区中文| 国产亚洲毛片| 亚洲激情网址| 国产精品免费观看在线| 亚洲国产日韩在线| 老色鬼久久亚洲一区二区| 欧美理论电影在线观看| 国产精品一区视频网站| 激情综合网激情| 久久国产日韩| 亚洲国产日韩欧美在线图片| 欧美日韩精品二区第二页| 欧美一区二区三区免费视频| 在线成人性视频| 夜色激情一区二区| 一本高清dvd不卡在线观看| 中文国产成人精品| 亚洲欧美欧美一区二区三区| 亚洲欧美国产va在线影院| 亚洲一级二级在线| 亚洲人成毛片在线播放| 在线观看视频欧美| 欧美精品一区二区三区很污很色的| 亚洲日产国产精品| 欧美另类高清视频在线| 亚洲特级毛片| 久久一日本道色综合久久| 国产亚洲一区二区三区在线播放| 欧美在线|欧美| 一区二区三区四区五区视频| 久久中文欧美| 影音先锋久久久| 国产伦精品一区| 日韩亚洲欧美综合| 亚洲欧美日韩国产中文| 亚洲午夜一区| 亚洲毛片在线观看| 国产精品草莓在线免费观看| 欧美日韩一二三区| 亚洲午夜精品久久久久久app| 精品1区2区| 国产一区二区三区最好精华液| 国产精品男女猛烈高潮激情| 久久精品国产第一区二区三区最新章节| 好看的亚洲午夜视频在线| 91久久精品日日躁夜夜躁国产| 欧美亚洲日本一区| 久久综合精品国产一区二区三区| 久久久久久久一区| 国产精品一区二区久久久| 欧美视频一区在线| 亚洲激情国产精品| 国产婷婷色综合av蜜臀av| 欧美激情精品久久久久久变态| 亚洲人成人一区二区三区| 国产精品看片你懂得| 欧美日韩国产综合视频在线观看中文| 久久爱另类一区二区小说| 欧美亚洲在线播放| 欧美日韩在线精品| 欧美一区二区三区在线| 欧美中文字幕在线| 美女精品在线| 欧美二区不卡| 亚洲国产精品一区二区www在线| 精品成人一区二区三区| 国内精品久久久久久久影视麻豆| 一区二区免费在线视频| 久久久精品网| 国产精品青草综合久久久久99| 亚洲欧美电影在线观看| 国产亚洲视频在线观看| 亚洲二区视频在线| 国产精品国产三级国产普通话99| 欧美高清视频在线播放| 欧美成人三级在线| 欧美日韩亚洲系列| 娇妻被交换粗又大又硬视频欧美| 欧美一区二区三区啪啪| 亚洲尤物视频在线| 欧美在线三区| 鲁鲁狠狠狠7777一区二区| 性8sex亚洲区入口| 亚洲第一搞黄网站| 欧美日韩精品三区| 欧美在线视频免费观看| 亚洲国产一区二区在线| 亚洲男人第一网站| 亚洲一区成人| 国产乱码精品一区二区三区忘忧草| 久热精品视频在线| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲专区一区二区三区| 欧美mv日韩mv国产网站| 亚洲男人的天堂在线观看| 一个色综合导航| 欧美精品久久久久久久免费观看| 欧美一区国产一区| 欧美xxx成人| 亚洲国产高清在线观看视频| 国语对白精品一区二区| 欧美视频专区一二在线观看| 在线观看日韩一区| 欧美日韩国产欧美日美国产精品| 国产情人节一区| av成人免费在线| 国产乱理伦片在线观看夜一区| 国内在线观看一区二区三区| 久久在精品线影院精品国产| 亚洲人午夜精品| av成人手机在线| 在线观看日韩www视频免费| 久久久欧美精品sm网站| 亚洲欧美日韩国产一区二区三区| 很黄很黄激情成人| 欧美凹凸一区二区三区视频| 99视频一区二区| 欧美色网在线| 亚洲欧美综合精品久久成人| 久久精品国产2020观看福利| 国产精品成人一区二区| 国产日本欧美一区二区| 在线观看日韩av先锋影音电影院| 亚洲欧美精品在线观看| 久久久精品2019中文字幕神马| 国产精品亚洲人在线观看| 久久精品国产69国产精品亚洲| 影音欧美亚洲| 国产一区二区三区久久久| 亚洲一区二区在线免费观看| 欧美国产先锋| 在线一区日本视频| 欧美精品亚洲一区二区在线播放| 亚洲午夜国产成人av电影男同| 欧美精品综合| 国内精品久久久久伊人av| 狠狠色丁香婷婷综合久久片| 亚洲高清不卡在线观看| 国产欧美日本在线| 伊人影院久久| 午夜在线电影亚洲一区| 国产精品乱人伦一区二区| 久久久亚洲影院你懂的| 久久精品99久久香蕉国产色戒| 亚洲精品资源美女情侣酒店| 亚洲午夜激情| 午夜精品美女久久久久av福利| 欧美性久久久| 午夜精品在线看| 亚洲一区免费观看| 午夜视频一区在线观看| 亚洲精品影视在线观看| 欧美日韩午夜在线| 先锋影音一区二区三区| 欧美精品在线一区| 久久久之久亚州精品露出| 欧美日韩一区二区高清| 欧美精品七区| 欧美影院在线| 久久综合伊人77777蜜臀| 亚洲黄色毛片| 午夜精品一区二区三区四区| 亚洲视频日本| 亚洲婷婷在线| 久久一区欧美| 久久免费精品日本久久中文字幕| 亚洲专区一二三| 亚洲免费在线视频一区 二区| 国产精品日日摸夜夜添夜夜av| 国产精品v亚洲精品v日韩精品| 欧美一区二区福利在线| 国产一区二区精品久久99| 欧美一区91| 一区二区在线看| 欧美激情第二页| 国产在线观看精品一区二区三区| 国精产品99永久一区一区| 伊人精品久久久久7777| 久久不射电影网| 艳妇臀荡乳欲伦亚洲一区| 亚洲福利视频网站| 亚洲精品一区在线观看香蕉| 免费视频久久| 免费短视频成人日韩| 亚洲一区在线观看免费观看电影高清| 亚洲一区二区精品| 91久久视频| 亚洲最新在线| 国产日韩在线不卡| 国产日韩欧美黄色| 欧美成人免费全部| 国产精品99久久久久久人| 在线成人中文字幕| 亚洲一本大道在线| 麻豆精品视频| 在线精品亚洲一区二区| 亚洲欧美国产精品专区久久| 老司机成人在线视频| 国产一区二区三区av电影| 欧美激情亚洲综合一区| 国产精品欧美一区二区三区奶水| 很黄很黄激情成人| 另类欧美日韩国产在线| 亚洲黄色成人网| 国内精品久久久久国产盗摄免费观看完整版| 亚洲精品国产精品国自产观看浪潮| 国产精自产拍久久久久久蜜| 欧美一区2区三区4区公司二百| 欧美日韩精品三区| 99视频精品免费观看| 国产精品夜夜夜一区二区三区尤| 美女任你摸久久| 欧美色视频日本高清在线观看| 午夜精品一区二区在线观看| 国内一区二区在线视频观看| 亚洲淫片在线视频| 中文精品一区二区三区| 国内伊人久久久久久网站视频| 久久人人精品|