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