日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 電源 > 數(shù)字電源
[導讀]引言 PCI總線(即外圍部件互連總線)是Intel公司提出的計算機接口總線。它的時鐘頻率為33MHz,有32位數(shù)據(jù)總線,可支持突發(fā)傳輸模式,數(shù)據(jù)傳輸峰值速率高達132 MB/s。此外

引言

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

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

1 PCI9054接口芯片

PCI9054是PLX公司推出的PCI接口芯片。它支持本地總線2.2版規(guī)范,工作頻率為0~33 MHz,可提供C、M、J三種本地工作模式,本地端到PCI總線的猝發(fā)傳輸速率高達132 MB/s。該芯片具有可編程的Serial EEPROM接口,可用于配置PCI9054的部分內部配置寄存器。其配置正確與否直接決定著設備能否正常工作。其中的DeviceID和Vendor ID分別對應設備號和銷售商號,計算機主要靠這兩個號碼識別硬件。該器件內部有6種可編程的FIFO,可以進行數(shù)據(jù)的發(fā)送與接收,而其兩種內部配置寄存器PCI Configuration Register和Local Configuration Register,可在本地端支持主模式、從模式租DMA傳輸方式。PCI9054的內部結構如圖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ù)和傳輸方向。主機首先設定DMA開始位并啟動數(shù)據(jù)傳輸,一旦傳輸完成,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)設置本地總線為允許/禁止內部等待狀態(tài),若允許,則可等待0~15個本地等待狀態(tài);

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

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

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

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

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

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

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

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

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

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

本文介紹的數(shù)字衛(wèi)星解調卡的硬件框圖如圖2所示。圖中,當FPGA中的數(shù)據(jù)放進FIFO后,要經(jīng)過PCI9054橋接芯片傳輸?shù)絇C機內存中,但由于應用程序不能直接操作硬件,所以在應用程序和硬件之間必須安裝硬件驅動程序來完成應用程序對硬件的訪問??梢姡寗映绦驅τ谡麄€設計至關重要,它關系到數(shù)據(jù)能否準確無誤的送到指定的目的地。



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

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

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

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

本設計使用Driver Works來開發(fā)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應根據(jù)硬件信息填寫;

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

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

3.2 DMA傳輸控制

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

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

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

其中,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備資源。此對象對于Master設備和Slave設備都是適用的。驅動中,此類函數(shù)可在On Start Device中由成員函數(shù)Initialize初始化。

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

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

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

(2)回調函數(shù)

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

(3)中斷服務

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

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

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

(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。而對于現(xiàn)行的32位機,它不需要像Win32 AMD64 Free等這樣的工程;

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

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

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

4 結束語

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

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

上海 2025年5月8日 /美通社/ -- 前沿動態(tài) 德州儀器 (TI) 于 5 月 6 日至 8 日在德國紐倫堡舉辦的電力轉換與智能運動(Power Conver...

關鍵字: PCI 德州儀器 功率密度 BSP

…… 德國最大的功率半導體展會于紐倫堡舉行(5月6日至8日)…… 分享模擬與電源、專用CIS、SiC和GaN技術的最新進展 韓國首爾2025年4月7日 /美通社/ -- 領...

關鍵字: PCI TE GAN 功率半導體

本文將演示一種加速嵌入式系統(tǒng)設計原型階段的方法,說明如何將與硬件無關的驅動程序和傳感器結合使用,簡化整個嵌入式系統(tǒng)的器件選擇。同時還將介紹嵌入式系統(tǒng)的器件、典型軟件結構以及驅動程序的實現(xiàn)。后續(xù)文章“利用與硬件無關的方法簡...

關鍵字: 嵌入式系統(tǒng) 驅動程序 傳感器

隨著科技的飛速發(fā)展,嵌入式系統(tǒng)已經(jīng)成為現(xiàn)代生活不可或缺的一部分,它們被廣泛應用于從智能家居到自動駕駛汽車的各個領域。而在這些系統(tǒng)中,C語言由于其高效性、可移植性和對硬件的直接控制能力,成為了嵌入式系統(tǒng)開發(fā)的首選語言。

關鍵字: C語言 驅動程序

每個嵌入式軟件應用程序都必須在某個時候訪問最低級別的固件并控制硬件。驅動程序的設計和實現(xiàn)對于確保系統(tǒng)能夠滿足其實時要求至關重要。

關鍵字: 嵌入式 驅動程序

隨著人工智能推動金融業(yè)的商業(yè)價值,這一里程碑突顯了Cloudera對安全與合規(guī)的承諾 加利福尼亞州圣克拉拉2024年8月23日 /美通社/ -- Cloudera...

關鍵字: PCI 人工智能 BSP 私有云

在Linux內核開發(fā)中,字符設備驅動程序是連接硬件設備與用戶空間應用程序的重要橋梁。本文將詳細介紹如何編寫一個基本的字符設備驅動程序,從理論框架到實際代碼實現(xiàn),再到測試和部署。

關鍵字: Linux 字符設備 驅動程序

USB攝像頭是一種采用USB接口的視頻采集設備,其優(yōu)點在于即插即用、操作簡便,無需額外驅動程序,支持筆記本電腦,并且成本較低,可以支持遠程網(wǎng)絡觀看。

關鍵字: usb攝像頭 驅動程序

與兩相雙極步進電機的驅動電路相比,兩相單極步進電機的驅動電路在輸入段配置、內部邏輯及控制電路和驅動電路使用雙通道方面基本相同,但是輸出段的配置不同。

關鍵字: 四相步進電機 驅動程序 程序電路

本文介紹了如何實現(xiàn)嵌入式MICREL網(wǎng)卡的驅動程序開發(fā)和設計。首先,我們介紹了MICREL網(wǎng)卡的概述和工作原理。然后,詳細探討了驅動程序的開發(fā)流程,包括硬件和軟件的配置以及驅動程序的編寫和測試。最后,總結了幾點注意事項和...

關鍵字: 嵌入式 MICREL網(wǎng)卡 驅動程序
關閉