振動信號采集系統(tǒng)中高速緩存的實現(xiàn)
出處:何以解憂 發(fā)布于:2009-11-27 12:02:54
摘要:本文主要討論了以單片機(jī)為的振動信號采集系統(tǒng)的設(shè)計。介紹了幾種實現(xiàn)高速緩存的方法,以及利用Intel8237制作一個DMA控制器,詳細(xì)介紹了DMA傳輸?shù)脑砗蜅l件,解決了DMA控制器和外部接口電路的設(shè)計問題,并且給出了DMA控制器的初始化程序。
問題的提出
在設(shè)計以單片機(jī)為的振動信號采集與傳輸系統(tǒng)時,一般會遇到兩個問題。一個是采集的數(shù)據(jù)量,這個問題可以通過存儲空間的擴(kuò)展來解決。另一個問題就是采集數(shù)據(jù)的頻率受單片機(jī)執(zhí)行指令時間的限制的問題。一般的51系列單片機(jī)的晶振頻率為12MHz,一個機(jī)器周期為1uS,則從A/D讀出數(shù)據(jù)到外部RAM至少要4個機(jī)器周期,采樣頻率才250KHz。而振動信號的頻率達(dá)到幾百KHz,雖然A/D轉(zhuǎn)換器可采用高頻芯片,但從A/D把數(shù)據(jù)讀出在存儲到存儲器速度跟不上,如果進(jìn)行多路的數(shù)據(jù)采集則采集的頻率更低,這樣就不能普通的I/O方法進(jìn)行數(shù)據(jù)采集。本文中將提供幾種方案來解決這個問題。終選擇了DMA方式,由于我們所選擇的芯片沒有帶DMA控制器,所以我們就另外設(shè)計了一個DMA控制器,以及它和外部設(shè)備的接口電路。
二、高速緩存的實現(xiàn)
構(gòu)成高速緩存的方法有三種:
種是FIFO(先進(jìn)先出)方式。FIFO存儲器就象數(shù)據(jù)管道一樣,數(shù)據(jù)從管道的一頭流入、從另一頭流出,先進(jìn)入的數(shù)據(jù)先流出。FIFO具有兩套數(shù)據(jù)線而無地址線,可在其一端寫操作而在另一端讀操作,數(shù)據(jù)在其中順序移動,因而能夠達(dá)到很高的傳輸速度和效率,且由于省去了地址線而有利于PCB板布線。缺點是只能順序讀寫數(shù)據(jù),因而顯得比較呆板,而且大容量的高速FIFO非常昂貴;
第二種是雙口RAM方式。雙口RAM具有兩套獨立的數(shù)據(jù)、地址和控制總線,因而可從兩個端口同時讀寫而互不干擾,并可將采樣數(shù)據(jù)從一個端口寫入而由DSP從另一個端口讀出。雙口RAM也能達(dá)到很高的傳輸速度,并且具有隨機(jī)存取的優(yōu)點,缺點是大容量的高速雙口RAM很難得且價格昂貴;
第三種是采用DMA方式。DMA是一
種無需CPU的參與就可以讓外設(shè)與系統(tǒng)RAM之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)挠布C(jī)制。使用DMA可以使系統(tǒng)CPU從實際的I/O數(shù)據(jù)傳輸過程中擺脫出來,從而大大提高系統(tǒng)的吞吐率??紤]到我們系統(tǒng)要采集的是振動信號,一般的頻率也就幾百k赫茲,用前兩種方法是可以達(dá)到理想的效果,但從成本角度分析,這并不經(jīng)濟(jì),所以這里我們選擇第三種DMA方式。
三.DMA控制器的設(shè)計 [1]
(一)DMA傳送的原理
對于中高速外設(shè)數(shù)據(jù)傳輸,一種有效的方式就是就是用DMA方式,主要就是用DMA控制器(簡稱DMAC,典型芯片是Intel 8237),在外設(shè)和內(nèi)存之間直接進(jìn)行數(shù)據(jù)傳輸,這種傳輸由DMAC硬件完成,不需要CPU干預(yù),因此可以達(dá)到很高的速度。在DMAC獲得總線的控制權(quán)之后,什么時候交還總線給CPU,完全有DMAC自己決定,這有兩中模式:塊傳輸模式和單字節(jié)傳輸模式。對于單字節(jié)傳輸模式,DMAC完成一字節(jié)傳輸后,釋放系統(tǒng)總線。但是,在釋放系統(tǒng)總線后,DMAC立即檢測接口電路有無DMA請求(檢測DREQ信號),如果有DMA請求,DMAC又立即向CPU發(fā)出總線請求。這種模式的特點是,DMA請求只傳輸一字節(jié),然后釋放總線,因此,這種模式又稱為“總線竊取方式”,每次總是竊取一個總線周期,完成一字節(jié)傳輸,然后立即釋放總線。(CPU在總線空閑時響應(yīng)DMA請求)。對于塊傳輸模式,DMAC一旦獲得總線控制權(quán),連續(xù)進(jìn)行多個字節(jié)的傳輸,只有當(dāng)“字節(jié)計數(shù)器”減為0,才釋放總線。從內(nèi)存到I/O的DMA塊傳輸過程如下:
(1)接口電路準(zhǔn)備好后,向DMAC發(fā)出DMA請求(DREQ)。
(2)DMAC向CPU發(fā)出總線請求(HOLD),如果無總線封鎖(LOCK),CPU在完成當(dāng)前總線周期后,向DMAC發(fā)出總線允許信號(HLDA),CPU放棄總線控制權(quán),DMAC獲得總線控制權(quán)。
(3)DMAC把存儲器地址送至地址總線。
(4)DMAC向接口電路發(fā)出DMA請求應(yīng)答信號(DACK),以通知接口電路把數(shù)據(jù)送至數(shù)據(jù)總線。
(5)接口電路送出數(shù)據(jù),內(nèi)存單元獲得數(shù)據(jù)。
(6)DMAC內(nèi)部的“地址寄存器”加1,指向下一個內(nèi)存地址。
(7)DMAC內(nèi)部的“字節(jié)計數(shù)器”減1。
(8)若字節(jié)計數(shù)器的值不為0,回到第③步,否則,塊傳輸結(jié)束。
?。ǘ〥MA傳輸?shù)臈l件
要實現(xiàn)DMA傳輸?shù)臈l件主要有兩方面,一個是DMA傳輸對外設(shè)接口電路的要求,一個是對DMA控制器的要求。具體如下:
1. DMA傳輸對外設(shè)接口電路的要求
(1)接口電路中的控制寄存器,必須有1位用來指出數(shù)據(jù)傳送方向,這樣,當(dāng)DMAC控制總線時,就能判別是進(jìn)行輸入還是輸出。
(2)接口電路中的控制寄存器,必須有1位用來啟動I/O操作,通過這一位的設(shè)置來啟動外部設(shè)備的操作。
(3)接口電路中的狀態(tài)寄存器,必須有1位用來指出設(shè)備當(dāng)前是否處于忙狀態(tài)。
2. DMA傳輸對DMA控制器的要求
(1)DMAC的控制寄存器中,專門有1位作為DMA允許位,用來控制是否響應(yīng)來自接口電路的DMA請求。
(2)DMAC的控制寄存器中,必須有1位用來確定DMA方向,以便決定發(fā)出讀信號還是寫信號。
(3)DMAC的控制寄存器中,還有1位用來決定進(jìn)行傳輸后,到底是放棄還是維持對總線的控制權(quán)。
(4)DMAC的狀態(tài)寄存器中,必須有1位表示數(shù)據(jù)塊傳輸是否結(jié)束。
綜上所示,對外設(shè)接口電路和DMA控制器的要求,可得DMA傳輸?shù)呐渲萌鐖D(1)所示:

圖(1)
?。ㄈ〥MA控制器和接口電路的初始化程序[2,4]
為了使DMA過程能正確進(jìn)行,必須使用程序?qū)MA控制器和接口電路進(jìn)行初始化,初始化包括下列設(shè)置:
1.設(shè)置DMAC的字節(jié)計數(shù)器初值,以決定數(shù)據(jù)塊的長度。
2.設(shè)置DMAC的地址寄存器初值,以確定數(shù)據(jù)傳輸所用的存儲區(qū)首地址。
3.設(shè)置DMAC的控制寄存器,指出數(shù)據(jù)傳送方向、是否進(jìn)行塊傳輸,并啟動DMA操作。
4.設(shè)置接口電路的控制寄存器,指出數(shù)據(jù)傳輸方向,并啟動I/O操作。
設(shè):(INT-interface接口,CON-control register控制寄存器,“輸入”指I/O存儲器,“輸出”指存儲器I/O)
接口狀態(tài)寄存器地址INTSTAT, bit2=1---I/O設(shè)備忙
接口控制寄存器地址INTCON, bit0=1為輸入,bit0=0為輸出
bit2=1---啟動I/O操作
DMAC控制寄存器地址DMACON
bit0=1為輸入,bit0=0為輸出
bit3=1,可接收DMA請求
bit6=0為字節(jié)傳輸模式,bit6=1為塊傳輸模式
DMAC字節(jié)計數(shù)器地址BYTE-REG
DMAC地址寄存器地址ADD-REG
I/O的數(shù)據(jù)塊傳輸初始化程序如下:
IDLE: IN AL , INTSTAT ;讀接口狀態(tài)
TEST AL , 04H; 是否忙(bit 2)
JNZ IDLE; bit2=1,忙
MOV AX, COUNT; 塊傳輸字節(jié)數(shù)
OUT BYTE_REG, AX
MOV AL, DMAC; DMAC原控制字
OR AL, 49H; 塊傳輸允許接收DMA請求,輸入
OUT DMACOM, AL
MOV AL, INTC; 接口電路的原控制字
OR AL, 05H; 輸入,啟動操作
OUT INTCOM, AL
程序?qū)涌陔娐泛虳MAC初始化后,當(dāng)接口準(zhǔn)備就緒,向DMAC請求傳輸,DMAC再向CPU請求總線。當(dāng)DMAC獲得總線控制權(quán)后,按初始化程序規(guī)定的方式執(zhí)行傳輸。傳輸過程本身不需CPU干預(yù)。在DMAC傳輸完成后,發(fā)出結(jié)束信號EOP,CPU可以查詢EOP信號,以便進(jìn)行后續(xù)數(shù)據(jù)處理。或者把EOP信號作為中斷請求信號,CPU在中斷處理程序中進(jìn)行后續(xù)數(shù)據(jù)處理。
?。ㄋ模〥MA控制器的工作特點[1]
1.DMAC是一個接口電路,CPU可以通過其端口地址對DMAC進(jìn)行讀/寫操作,以便對DMAC進(jìn)行初始化或查詢其狀態(tài)。但它與一般的接口電路有顯著的不同,DMAC可以獲得系統(tǒng)總線控制權(quán),當(dāng)其獲得系統(tǒng)總線控制權(quán)后,能提供一系列控制信號,像CPU一樣操縱外設(shè)和內(nèi)存之間的數(shù)據(jù)傳輸。即,DMAC有兩種工作狀態(tài):
從模塊狀態(tài)(或稱被動態(tài)):作為接口電路,受CPU控制
主模塊狀態(tài)(或稱主動態(tài)):控制系統(tǒng)總線
2.DMAC控制內(nèi)存和外設(shè)的數(shù)據(jù)傳輸方式,與CPU的方式完全不同。
CPU:
?、?通過執(zhí)行指令傳輸數(shù)據(jù)。
②.被傳輸?shù)臄?shù)據(jù)必須通過CPU累加器(AL/AX)中轉(zhuǎn)。
DMAC:
?、?通過硬件邏輯電路,用固定的順序地址信號和讀/寫信號進(jìn)行數(shù)據(jù)傳輸。
②.被傳輸?shù)臄?shù)據(jù)不送入DMAC內(nèi)部中轉(zhuǎn),從“源”讀得的數(shù)據(jù)保存在數(shù)據(jù)總線上,然后立即開始寫操作,將數(shù)據(jù)寫入“目的”。
正是由于DMAC的上述數(shù)據(jù)傳輸特點,使DMA傳輸可以達(dá)到很高的速度,這也是DMA(Direct Memory Access直接內(nèi)存訪問)的含義。
四、結(jié)論
實驗證明,用DMA方式進(jìn)行數(shù)據(jù)傳輸,可以把有限的單片機(jī)資源從煩瑣的數(shù)據(jù)傳輸中解放出來,使之在系統(tǒng)的其他方面發(fā)揮更大的功能。 而用Intel 8237設(shè)計的DMA控制器和外設(shè)的連接電路簡單,成本低廉,具有很高的實用價值。本文所提出的DMA模塊及其接口只要稍作修改,就可以在數(shù)據(jù)采集場合應(yīng)用。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 什么是氫氧燃料電池,氫氧燃料電池的知識介紹2025/8/29 16:58:56
- SQL核心知識點總結(jié)2025/8/11 16:51:36
- 等電位端子箱是什么_等電位端子箱的作用2025/8/1 11:36:41
- 基于PID控制和重復(fù)控制的復(fù)合控制策略2025/7/29 16:58:24
- 什么是樹莓派?一文快速了解樹莓派基礎(chǔ)知識2025/6/18 16:30:52









