基于DSP的PCI總線數(shù)據(jù)采集系統(tǒng)的研究
隨著數(shù)字信號處理器性能的不斷提高及其成本與售價的大幅下降,數(shù)字信號處理應(yīng)用領(lǐng)域飛速擴(kuò)展,信號處理進(jìn)入了一個新的發(fā)展時期。同時隨著計算機(jī)技術(shù)以及互聯(lián)網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,越來越多的數(shù)據(jù)需要經(jīng)過計算機(jī)來進(jìn)行處理、存儲、傳輸籌操作。計算機(jī)的應(yīng)用已經(jīng)遍及我們生活的每一個角落。由于計算機(jī)本身的特點(diǎn),通用計算機(jī)通常僅負(fù)責(zé)沒有實(shí)時性要求的工作,而不適于進(jìn)行實(shí)時性要求很高的數(shù)字信號處理。將計算機(jī)和 DSP有機(jī)地結(jié)合起來,充分利用各自的優(yōu)點(diǎn),它們將會相得益彰,滿足現(xiàn)實(shí)應(yīng)用中對數(shù)據(jù)實(shí)時處理能力、數(shù)據(jù)傳輸能力以及數(shù)據(jù)管理能力提出的越來越高的要求。 PCI總線以其眾多優(yōu)點(diǎn)在計算機(jī)中具有不可取代的作用,采用PCI總線使DSP與計算機(jī)通信可以很好地滿足其對高速數(shù)據(jù)傳輸?shù)囊?。本文以?shí)際開發(fā)系統(tǒng)為背景,以TI公司的TMS320VC5402與PLX公司的PCI9052為基礎(chǔ)。詳細(xì)論述了基于DSP的PCI總線結(jié)構(gòu)的數(shù)據(jù)采集系統(tǒng)硬件及軟件設(shè)計方案和實(shí)現(xiàn)方法。
2 數(shù)據(jù)采集系統(tǒng)硬件設(shè)計
2.1 系統(tǒng)結(jié)構(gòu)及原理
基于DSP的PCI總線高速數(shù)據(jù)采集系統(tǒng)的結(jié)構(gòu)如圖1所示,它主要由A/
A/D轉(zhuǎn)換器采用TI公司的TLC5510,TLC5510為8 bit、20 MS/s的高速并行A/D轉(zhuǎn)換器。TLC5510在每個時鐘的下降沿采樣,該采樣點(diǎn)的轉(zhuǎn)換數(shù)據(jù)經(jīng)過2.5個延遲后,在時鐘的上升沿輸出,也就是每個點(diǎn)的轉(zhuǎn)換時間為2.5個時鐘周期,一旦轉(zhuǎn)換流水線啟動,則在每個時鐘的上升沿都有一個轉(zhuǎn)換數(shù)據(jù)輸出。
DSP與計算機(jī)之間的通信由接口電路PCI9052實(shí)現(xiàn)。PCI9052是PLX公司推出的一種簡單、高效的PCI從設(shè)備接口,可實(shí)現(xiàn)多種外設(shè)局部總線和PCI總線的互連。根據(jù)PCI規(guī)范,主設(shè)備和從設(shè)備的劃分本質(zhì)上是確定數(shù)據(jù)傳輸雙方訪問與被訪問的能力和關(guān)系。在此,PCI9052只能由主機(jī)或其它擁有總線主控制能力的設(shè)備進(jìn)行數(shù)據(jù)的讀寫操作。但由于其內(nèi)部有64Byte寫FIFO和32Byte讀FIFO,使PCI9052的局部總線和PCI總線能互相獨(dú)立工作,可支持傳輸速度為132 Mb/s的突發(fā)傳輸[2]。
DSP采用TI公司的TMS320VC5402,它的處理能力可達(dá)到100 Mb/s,具有改進(jìn)型的8位HPI接口,有16 K*16 Bit DARAM,以及4 K*l6 Bit ROM存儲空間。具有較高的性價比[3]。
2.2 PCI9052與TMS320VC5402的接口
PCI9052的局部總線設(shè)置為8位局部總線,采用地址數(shù)據(jù)非復(fù)用模式,PCI9052和TMS320VC5402的接口電路如圖2所示[4,5]。此時,LBE1為LA1,LBE0為LA0。將PCI9052的LBE0接HPI的HBIL,用以區(qū)分第一字節(jié)和第二字節(jié)。PCI9052的LA17接TMS320VC5402的HCNTL1,LA16接HC-NTL0,以選擇HPI寄存器。PCI9052的LAD[0:7]接TMS320VC5402的HD[7:0]。TMS320VC5402的HINT反向后接至PCI9052的LINT1,之所以反向是由于HINT低電平有效,而UNT1是高電平有效。PCI9052的LW/R反向后接至TMS320VC5402的HR/W,因為LW/R高電平表示寫,低電平表示讀;而HR/W高電平表示主機(jī)要讀HPI,低電平表示主機(jī)要寫HPI。PCI9052的CS0與CS1相或后連接至HCS,RD和WR分別連接到HDS1,HDS2。TMS320VC5402的LRDY通過一定的邏輯組合再加上一個D觸發(fā)器與PCI9052的LRDY相連以實(shí)現(xiàn)PCI9052與HPI的同步。PCI9052局部時鐘采用40MHz。其中CPLD選用EPM7128,使用MAX+PLUSⅡ進(jìn)行設(shè)計。
HPI主機(jī)接口采用訪問寄存器的方式來進(jìn)行DSP內(nèi)部數(shù)據(jù)的讀寫,把HPI口單純映射到PCI的I/O空間或者存儲器空間都有不可避免的缺點(diǎn),因此本接口電路采用雙映射方式,利用映射來訪問控制、地址寄存器和單個數(shù)據(jù)口,而利用存儲器映射來訪問連續(xù)數(shù)據(jù)口。以實(shí)現(xiàn)TMS320VC5402與PCI9052之間方便、高效的數(shù)據(jù)通信[6]。
3 數(shù)據(jù)采集系統(tǒng)軟件的設(shè)計
數(shù)據(jù)采集系統(tǒng)的軟件設(shè)計包括三個部分:DSP上的采集程序及響應(yīng)程序。數(shù)據(jù)采集卡的驅(qū)動程序,在驅(qū)動程序上構(gòu)建的應(yīng)用程序。驅(qū)動程序是實(shí)現(xiàn)DSP與計算機(jī)通信的關(guān)鍵,本文主要介紹設(shè)備驅(qū)動模型及其初始化的設(shè)計方法。
3.1 驅(qū)動程序模型
Win2000不支持直接訪問硬件,虛擬驅(qū)動器依賴運(yùn)行在內(nèi)核模式的真正的驅(qū)動器。內(nèi)核模式驅(qū)動程序使用系統(tǒng)級代碼編寫,且運(yùn)行在內(nèi)核模式下,因為內(nèi)核模式允許直接硬件訪問。內(nèi)核驅(qū)動程序可被進(jìn)一步分成遺留模式的驅(qū)動程序和Windows驅(qū)動模式的驅(qū)動程序(WDM)。
Windows驅(qū)動程序模型(WDM)如圖3所示。圖中左邊是一個設(shè)備對象堆棧。設(shè)備對象是系統(tǒng)為幫助軟件管理硬件而創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)。處于堆棧最底層的設(shè)備對象稱為物理設(shè)備對象(PDO)。在設(shè)備對象堆棧的中間某處有一個功能設(shè)備對象(FDO)。FDO的上面和下面還會有一些過濾設(shè)備對象。位于FDO上面的過濾設(shè)備對象稱為上層過濾器,位于FDO下面的過濾器設(shè)備對象稱為下層過濾器。
總線驅(qū)動器的任務(wù)之一就是枚舉總線上的設(shè)備。并為每個設(shè)備創(chuàng)建一個PDO。一旦總線驅(qū)動器程序檢查到新硬件存在,PnP管理器就創(chuàng)建一個PDO,創(chuàng)建完P(guān)DO后,PnP管理器參照注冊表中的信息查找與這個PDO相關(guān)的過濾器和功能驅(qū)動程序。系統(tǒng)安裝程序負(fù)責(zé)這些注冊表項,而驅(qū)動程序包中控制硬件安裝的INF文件負(fù)責(zé)添加其他表項。這些表項定義了過濾器和功能驅(qū)動程序
3.2 驅(qū)動程序的初始化
PnP管理器先裝入硬件需要的驅(qū)動程序,然后再調(diào)用驅(qū)動程序中的AddDevice函數(shù)。一個驅(qū)動程序可以被多個類似的硬件使用。但驅(qū)動程序的某些全局初始化操作只能在第一次被裝入時執(zhí)行一次。而DriverEntry例程就是用于這個目的。DriverEntry是內(nèi)核模式驅(qū)動程序主入口點(diǎn)常用的名字。I/O管理器按下面方式調(diào)用該例程:
DriverEntry的第一個參數(shù)是一個指針,指向一個被初始化的驅(qū)動程序?qū)ο?,該對象代表用戶的?qū)動程序。DriverEntry的第二個參數(shù)是設(shè)備服務(wù)鍵鍵名,其主要工作是把各種函數(shù)指針填入驅(qū)動程序?qū)ο?。這些指針為操作系統(tǒng)指明了驅(qū)動程序容器中各種子例程的位置。
PnP管理器先裝入最底層的過濾器驅(qū)動程序并調(diào)用其AddDevice函數(shù)。該函數(shù)創(chuàng)建一個FiDO,這樣就在過濾器驅(qū)動程序和FiDO之間建立了水平連接。然后AddDevice把PDO連接到FiDO上。PnP管理器繼續(xù)下上執(zhí)行,裝入并調(diào)用每個底層過濾器、功能驅(qū)動程序、高層過濾器,直到完成這個堆棧。該函數(shù)的原型如下:
DriverObject參數(shù)指向一個驅(qū)動程序?qū)ο?,就是在DriverEntry例程中初始化的那個驅(qū)動程序?qū)ο?。PDO參數(shù)指向設(shè)備堆棧底部的物理設(shè)備對象。AddDevice函數(shù)的基本任務(wù)是創(chuàng)建一個設(shè)備對象并把它連接到以PDO為底的設(shè)備堆棧中。
當(dāng)AddDevice函數(shù)將FDO和FiDO創(chuàng)建且連接好后,PnP管理器分配資源且發(fā)送PRP_MN_START_DEVICE,功能驅(qū)動程序需要在這個IRP上做大量工作,包括分配并配置額外的軟件資源以及為設(shè)備操作做準(zhǔn)備。處理這個IRP主要通過PnPStartDevice函數(shù)完成。PnPStartDevice函數(shù)首先將IRP傳遞到底層驅(qū)動程序。等待完成后,調(diào)用IoGetCurrentIrpStackLocation函數(shù)得到當(dāng)前自己的堆棧單元。I/O堆棧單元的Parameters聯(lián)合有一個名為StarDevice的子結(jié)構(gòu),該結(jié)構(gòu)包含了資源分配信息。在StarDevice里就可以將分配的資源填充到PDO的設(shè)備擴(kuò)展域中,并且調(diào)用IoConnectInterrupt函數(shù)連接中斷。
層次結(jié)構(gòu)可以使I/O請求過程更加明了。每個影響到設(shè)備的操作都使用I/O請求包。通常IRP先被送到設(shè)備堆棧的最上層驅(qū)動程序,然后逐漸過濾到下面的驅(qū)動程序。內(nèi)核通常通過發(fā)送I/O請求包(IRP)來運(yùn)行驅(qū)動程序中的代碼。
4 結(jié)束語
基于DSP的PCI總線數(shù)據(jù)采集系統(tǒng)充分利用了DSP豐富的內(nèi)部資源、強(qiáng)大的數(shù)字信號處理能力及PCI總線的高傳輸速度,能夠方便的開發(fā)數(shù)據(jù)壓縮、語音壓縮存儲等新功能信號,并進(jìn)行預(yù)處理與分析處理。通過PCI總線進(jìn)行數(shù)據(jù)傳送可大大提高傳輸速度。本系統(tǒng)適用于高速數(shù)據(jù)的采集和處理以及需要進(jìn)行大量數(shù)據(jù)傳輸?shù)膽?yīng)用場合。
評論