焊縫檢測(cè)系統(tǒng)中PCI總線高速數(shù)據(jù)采集卡設(shè)計(jì)
2.5 PCI接口芯片
PCI總線協(xié)議2.1版出現(xiàn)以后,集成芯片商們紛紛推出了與其兼容的總線接口芯片。其中,AMCC(Applied Micro Circuit Corperation)公司的S5933接口方便、控制靈活,軟件配置簡(jiǎn)單,在高速網(wǎng)絡(luò)接口、數(shù)字通信、高速成像等領(lǐng)域有著廣泛應(yīng)用。S5933S8593最突出的優(yōu)點(diǎn)是能夠作為PCI主控設(shè)備發(fā)起DMA操作,即S5933完全具備雙字DMA控制器的功能。
圖3是結(jié)合系統(tǒng)應(yīng)用而繪制的S5933結(jié)構(gòu)框圖。由圖3可知,S5933內(nèi)部具有配置寄存器組和操作寄存器組,配置寄存器組用于控制S5933在PCI總線系統(tǒng)中的運(yùn)作方式(訪問延遲、能否發(fā)起主控DMA操作等)以及記錄系統(tǒng)分配給S5933的資源信息(如中斷引腳、I/O等),而PCI總線和外加電路之間的數(shù)據(jù)交換則通過操作寄存器組實(shí)現(xiàn)。以I/O資源為例,計(jì)算機(jī)上電后,系統(tǒng)將分配給S5933的I/O資源首地址填入基地址寄存器,此值決定了操作寄存器組在I/O空間中的映射位置(S5933的操作寄存器組缺省地映射到I/O地址空間,便于軟件操作),見圖3。之后,CPU只需執(zhí)行簡(jiǎn)單的I/O操作就可以讀寫操作寄存器組,隱含的地址譯碼工作由S5933完成。外加電路控制邏輯則保證操作寄存器組與外加電路的正常通信。S5933提供了三種形式的外加電路接口,高速數(shù)據(jù)采集卡使用信箱(Mailbox)寄存器實(shí)現(xiàn)雙字輸出,用FIFO方式實(shí)現(xiàn)高速DMA寫操作。
3 高速數(shù)據(jù)采集卡的軟件設(shè)計(jì)
3.1 虛擬設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)
系統(tǒng)的控制軟件工作在WINDOWS98操作系統(tǒng)下,為此開發(fā)了高速數(shù)據(jù)采集卡的虛擬設(shè)備驅(qū)動(dòng)程序(VXD)。由S5933的結(jié)構(gòu)可知,VXD需要實(shí)現(xiàn)雙字I/O操作和物理內(nèi)存管理。雙字I/O的操作相對(duì)簡(jiǎn)單,調(diào)用虛擬機(jī)管理器(VMM)的SIMULATE_VM_IO例程即可,較困難的是物理內(nèi)存管理。由于S5933發(fā)起的DMA操作需要物理內(nèi)存的起始地址,因此必須涉及頁(yè)面級(jí)的物理內(nèi)存操作,故采用下述內(nèi)存管理策略:
應(yīng)用程序加載VXD;
加載成功后發(fā)送申請(qǐng)緩沖區(qū)的事件給VXD;
VXD使用PAGEALLOCATE例程得到地址連續(xù)的適當(dāng)長(zhǎng)度(如四頁(yè)即16K字節(jié))的物理內(nèi)存;
鎖定緩沖區(qū)并將物理地址逆映射為線性地址;
將物理首地址填入S5933的寫RAM地址寄存器;
允許S5933進(jìn)行主控DMA傳輸;
傳輸完畢時(shí),應(yīng)用程序請(qǐng)求VXD釋放上述物理內(nèi)存。
3.2 應(yīng)用VXD設(shè)計(jì)數(shù)據(jù)采集程序
將VXD放在應(yīng)用程序的同級(jí)目錄下,則以下VC++代碼就能動(dòng)態(tài)加載(VXDVIEWER可驗(yàn)證)一個(gè)VXD:
HANDLE hDEVICE=CreateFile("\\\\.\\pathname",0,0,NULL,0,FILE_FLAG_DELETE_ON_CLOSE,NULL);
編好的VXD為應(yīng)用程序提供了若干服務(wù)例程,應(yīng)用程序執(zhí)行下面的代碼即可調(diào)用服務(wù)例程ZHC1:
DeviceIoControl(HDEVICE,ZHC1,lpinbuffer,ninsize,lpoutbuffer,noutsize,NULL,NULL);
數(shù)據(jù)采集算法如下:
DO {讀取寫RAM字節(jié)計(jì)數(shù)器;
再次讀取寫RAM字節(jié)計(jì)數(shù)器;
IF 計(jì)數(shù)器內(nèi)容為零 THEN
跳出循環(huán)進(jìn)行后續(xù)數(shù)據(jù)處理;
ELSEIF 兩次讀取的結(jié)果不同 THEN
不做任何處理而進(jìn)入下一次循環(huán);
ELSE
清相應(yīng)的狀態(tài)標(biāo)志并設(shè)置有關(guān)寄存器以從斷點(diǎn)處續(xù)傳;
ENDIF
}
調(diào)試表明,應(yīng)用VXD的數(shù)據(jù)采集程序能夠穩(wěn)定、高速地采集外部數(shù)據(jù)。對(duì)焊縫缺陷自動(dòng)超聲檢測(cè)系統(tǒng)的實(shí)際測(cè)試表明,該高速數(shù)據(jù)采集卡能滿足缺陷回波的檢測(cè)要求。圖4(a)為實(shí)際測(cè)試時(shí)用示波器觀測(cè)到的模擬放大電路的輸出信號(hào),圖4(b)是A/D轉(zhuǎn)換后、截掉始波并經(jīng)半波整流后得到的信號(hào)。
高速數(shù)據(jù)采集卡具有體積小、可靠性高、控制邏輯更改方便、可擴(kuò)展性強(qiáng)等優(yōu)點(diǎn)。對(duì)于檢測(cè)厚度為10~100mm的鋼板,一次采集的數(shù)據(jù)最多為4KB,至多只需0.13ms就可將數(shù)據(jù)從卡上FIFO經(jīng)PCI總線傳入內(nèi)存。
評(píng)論