用FIFO設(shè)計(jì)A/D與DSP之間的接口
1 前言
在使用CCD對(duì)非透明薄板厚度的測(cè)量系統(tǒng)設(shè)計(jì)中,筆者采用高速A/D和DSP等器件設(shè)計(jì)信號(hào)采集和處理電路來(lái)確定CCD的像點(diǎn)位置。其具體電路如圖1所示,該信號(hào)采集和處理電路由CCD驅(qū)動(dòng)電路、加法電路、濾波放大等信號(hào)預(yù)處理電路、A/D轉(zhuǎn)換電路、FIFO、DSP電路、時(shí)序與邏輯控制產(chǎn)生電路、USB總線接口電路等組成。其中DSP芯片選用TI公司生產(chǎn)的TMS320C6211高速數(shù)字信號(hào)處理芯片?它主要用于對(duì)A/D轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行插值和重心算法處理,從而確定CCD上像元的位置,然后把處理后的數(shù)據(jù)通過(guò)USB總線傳輸?shù)剑校脵C(jī)進(jìn)行厚度計(jì)算、結(jié)果顯示、存儲(chǔ)等后續(xù)處理。該電路所需的時(shí)鐘信號(hào)和采樣邏輯控制時(shí)序由一片FPGA芯片產(chǎn)生。
當(dāng)模擬信號(hào)由ADC轉(zhuǎn)換成數(shù)字信號(hào)后,往往都需要輸入DSPs的CPU作進(jìn)一步處理。但A/D轉(zhuǎn)換后數(shù)據(jù)輸出與DSP的讀外部數(shù)據(jù)的時(shí)鐘很難精確地配合。即使DSP能讀取到外部總線上的數(shù)據(jù),由于A/D速率是4MHz,DSP外部存儲(chǔ)器時(shí)鐘為90MHz,為了讀到總線上的數(shù)據(jù),DSP外部存儲(chǔ)器讀寫時(shí)鐘也必須控制在4MHz,這樣就大大降低了DSP的使用效率,同時(shí)再加上DSP處理數(shù)據(jù)也需要一定的時(shí)間,而不能一味地讀取外部數(shù)據(jù)。所以,為了控制方便,避免數(shù)據(jù)丟失,設(shè)計(jì)時(shí)應(yīng)采用小容量的FIFO作為兩者之間的接口。本設(shè)計(jì)選用的FIFO芯片是Cypress公司的CY7C425-25ns。該芯片容量為1k9bit,存取時(shí)間最大為25ns,讀寫周期最小為35ns。該器件具有半滿(HF)、全滿(FF)和空(EF)三個(gè)標(biāo)志位輸出,可以同時(shí)滿足深度和寬度級(jí)聯(lián)的需要。
圖1
2 DSP與FIFO芯片的工作原理
2.1 FIFO讀寫過(guò)程
FIFO的一次讀寫過(guò)程如圖2所示,由于FIFO是順序讀取數(shù)據(jù),因此?只需提供讀寫和其它控制信號(hào)線,而不需要一般RAM所需的地址線。若將兩路A/D輸出的數(shù)據(jù)存入FIFO中,每片FIFO用8bit?兩片FIFO即可級(jí)聯(lián)構(gòu)成16bit的數(shù)據(jù)寬度。由于FIFO采用的是5V供電,所以經(jīng)電壓轉(zhuǎn)換器件74LVTH244可將5V?jǐn)?shù)據(jù)信號(hào)電平轉(zhuǎn)換成3.3V,然后與DSP的16Bit外部數(shù)據(jù)總線相連。再由FIFO的半滿信號(hào)HF作為外部中斷信號(hào),當(dāng)FIFO存儲(chǔ)器半滿時(shí),便可由HF經(jīng)邏輯處理后向DSP發(fā)出中斷申請(qǐng)INT4。由于外部FIFO占用著DSP的CE0空間,所以讀信號(hào)的邏輯關(guān)系為:R=CE0+ARE,啟動(dòng)DSP 的EDMA(Enhanced Direct Memory Access)通道傳輸,可將FIFO中的數(shù)據(jù)讀入內(nèi)部RAM中,這樣,在FIFO輸出數(shù)據(jù)的同時(shí),也將A/D轉(zhuǎn)換的數(shù)據(jù)寫入了FIFO中,從而達(dá)到了同時(shí)讀寫的目的。使用EDMA方式傳輸數(shù)據(jù)的好處在于:EDMA控制器可以獨(dú)立于CPU工作,從而可方便地實(shí)現(xiàn)片內(nèi)存儲(chǔ)器、片內(nèi)外設(shè)以及外部存儲(chǔ)空間之間的數(shù)據(jù)轉(zhuǎn)移。由外部中斷INT4啟動(dòng)EDMA傳輸,可以大大提高傳輸速率和CPU的工作效率。DSP讀完2048?jìng)€(gè)數(shù)據(jù)后即開(kāi)始處理,處理完后便可以在一次掃描結(jié)束與下一次掃描尚未開(kāi)始的時(shí)間內(nèi)將16Bit計(jì)算結(jié)果數(shù)據(jù)輸出,總的處理時(shí)間為一個(gè)幀周期。FIFO的寫信號(hào)可由FPGA產(chǎn)生,并可在A/D轉(zhuǎn)換結(jié)束后向FIFO寫數(shù)據(jù)。另外,在每一幀處理之后,還應(yīng)由FPGA輸出控制信號(hào)以對(duì)FIFO進(jìn)行初始化,然后重新輸入下一幀數(shù)據(jù)。
2.2 DSP的讀時(shí)序設(shè)計(jì)
DSP可以通過(guò)硬件的ARDY信號(hào)和軟件設(shè)置來(lái)達(dá)到與異步外設(shè)之間進(jìn)行通訊的目的。DSP工作時(shí),硬件ARDY信號(hào)應(yīng)始終有效。而如果采用軟件設(shè)置方法,則設(shè)計(jì)時(shí)需要考慮以下幾點(diǎn):
(1)SETUP≥1;
(2)STROBE≥?tacc+tsu)ECLK;
(3)STOBE≥trp ECLK;
(4)SETUP+STROBE+HOLD≥trc ECLK;
其中,SETUP、STROBE和HOLD是需要在EMIF CE0空間控制寄存器中配置的讀信號(hào)的三個(gè)狀態(tài)信號(hào);tacc是FIFO的存取時(shí)間(≤25ns),tsu是數(shù)據(jù)建立時(shí)間(≥15ns),trp是讀脈沖寬度(≥25ns),trc是FIFO的讀周期(≥35ns)。由于本設(shè)計(jì)中DSP的內(nèi)部時(shí)鐘為150MHz,外設(shè)時(shí)鐘ECLK為90MHz,所以,最后設(shè)定SETUP=1、STROBE=2、HOLD=2來(lái)滿足DSP與異步FIFO接口的要求。
2.3 軟件設(shè)計(jì)
圖3所示是該系統(tǒng)中DSP的軟件流程圖。由于TMS320C6211采用ROM加載的芯片自舉模式,因此,在芯片復(fù)位過(guò)程中,EDMA將從位于外部CE1空間的EEPROM中拷貝1kB數(shù)據(jù)到地址0處,并在傳輸結(jié)束后,使CPU退出復(fù)位狀態(tài),同時(shí)從地址0處開(kāi)始執(zhí)行指令。由于主程序大小要大于1kB,所以需要編寫BOOT LOAD(大小小于1kB)程序,以使其在復(fù)位后將程序從外部EEPROM拷貝到內(nèi)部程序RAM中運(yùn)行。在圖3所示的主程序流程圖中,當(dāng)系統(tǒng)上電復(fù)位后,首先應(yīng)進(jìn)行DSP的初始化,接著進(jìn)行EDMA的中斷使能和初始化,然后由FIFO的半滿信號(hào)啟動(dòng)EDMA傳輸和由其觸發(fā)中斷程序。當(dāng)傳輸完一組2048?jìng)€(gè)數(shù)據(jù)后,再根據(jù)重心算法求出CCD像點(diǎn)的位置,之后便可開(kāi)始下一次循環(huán)。
3 結(jié)束語(yǔ)
在高速數(shù)據(jù)采集電路中,使用FIFO設(shè)計(jì)DSP芯片和A/D轉(zhuǎn)換器的接口電路具有設(shè)計(jì)簡(jiǎn)單、控制方便等優(yōu)點(diǎn),可大大提高DSP的使用效率。
評(píng)論