文獻標識碼: A
文章編號: 0258-7998(2014)04-0025-04
數字信號處理器(DSP)廣泛應用于圖像處理、通信與醫療等海量數據處理領域。在很多基于DSP的多路實時數據處理系統[1]中,需要將大量的數據傳輸到DSP片內存儲器進行實時處理,因此如何實現多路海量數據傳輸,充分發揮DSP的數據處理能力,是實時數據處理系統的關鍵技術之一。
傳統基于DSP的數據傳輸方法一般采用中斷或者查詢方式實現,都是通過CPU控制程序來傳送數據,降低了CPU的使用效率。TI公司C6x系列DSP具有增強型直接存儲器訪問(EDMA)控制器[2],它在后臺控制數據讀寫,實現數據傳輸,不占用DSP的CPU資源,從而提高了DSP的數據處理能力。EDMA控制傳輸方法已應用于許多基于DSP的處理系統[3-4]中,但是,大多系統沒有使用EDMA傳輸鏈方式,參考文獻[4]雖采用了EDMA傳輸鏈技術,但它只是使用EDMA傳輸鏈實現其數據傳輸主通道EDMA參數的更新,是針對小量串數據傳輸設計的,不適用于多路大量數據傳輸。
本文提出一種EDMA多通道傳輸鏈乒乓結構的數據傳輸方式,實現多路大量數據的高效同步傳輸,大大提高了數據傳輸效率。
1 EDMA3控制機制[5]
EDMA3是TI公司的第三代直接存儲器訪問控制器,有64個通道,每個通道有一個特定的事件與之關聯,每個事件相當于一個同步信號,由這些事件觸發相應通道的數據傳輸。
1.1 EDMA3通道控制器
EDMA3通道控制器(EDMA3CC)可以捕獲多達64個事件,包括外部事件、直接寫事件寄存器或EDMA通道鏈事件。捕獲EDMA事件后,事件隊列邏輯根據對應通道設置給該事件分配隊列,隊列中事件按先進先出順序進行處理。隊列中先處理的事件根據其通道參數集配置發送傳輸請求,EDMA3傳輸控制器(EDMA3TC)接收到傳輸請求后啟動數據傳輸。
1.2 參數RAM (PaRAM參數集)
EDMA3控制器是基于RAM結構的,在DSP片內RAM 中采用統一地址空間存儲EDMA3通道參數,共有256個參數RAM(PaRAM參數集),每個參數集長度為8個32位數據,具體參數包括數據源地址、目的地址、傳輸數據大小、數據索引以及通道選項(OPT)等。參數結構如圖1所示。
1.3 EDMA的鏈接
當通道選項OPT中參數鏈接控制位STATIC設為0時,在一次傳輸申請后,EDMA控制器會自動根據鏈接地址裝載下一次傳輸需要的參數,這樣就可將不同的傳輸參數集鏈接起來,形成一個參數鏈,為同一個通道服務。當OPT中傳輸完成鏈接后使能位TCCHEN設為1,同時設置OPT中傳輸完成號字段TCC為需要鏈接的通道號N,在當前通道事件觸發EDMA控制傳輸完成后,就會觸發N通道事件,啟動該通道的EDMA控制數據傳輸,實現EDMA的多通道鏈傳輸。
2 基于EDMA傳輸鏈的多路數據傳輸方法
本方法實現的示意圖如圖2所示。在數據發送端,設計多個RAM 緩存對用于緩存多路數據,并根據多路數據間的關聯生成一個同步信號,鏈接到處理端DSP的EDMA通道1上,用于觸發該通道的數據傳輸。同時,在數據接收端DSP內,對應設計多個Buffer緩存對用于接收多路數據,并配置多個EDMA通道,每個EDMA通道控制1路數據傳輸,將數據傳輸方式設置為多通道傳輸鏈乒乓傳輸方式,通道1鏈接到通道2,通道2鏈接到通道3,通道3再鏈接到其他通道。
首先,在數據發送端,采用乒乓方式同時緩存多路數據,一個緩存用于數據接收緩存,另一個緩存用于數據發送。接收完數據后,產生的同步信號觸發處理端DSP的EDMA通道1控制數據傳輸。在數據處理端,同樣采用乒乓方式接收數據,一個用于緩存數據接收,另一個緩存中的數據可用于處理。通道1數據傳輸完成后啟動EDMA通道2數據傳輸,通道2數據傳輸完成后啟動EDMA通道3數據傳輸,實現多路數據的同步傳輸。
相對于通常采用的多個EDMA通道單獨控制傳輸方式,本方法主要優點是:(1)只需要一個同步事件,避免了多個EDMA同步事件傳輸競爭,使得數據傳輸有序而可靠。(2)一次同步傳輸只需一個傳輸完成中斷服務程序,節省了多個中斷服務程序所需時間。(3)數據處理端接收到的多路數據已經按EDMA事件同步,節省了數據同步處理時間,提高了系統的實時性。(4)本方法在數據發送與處理端都采用乒乓方式傳輸,確保數據傳輸的高效率與可靠性。
3 多路圖像處理系統的數據傳輸實現
3.1 系統工作原理
本圖像處理系統主要由DSP、FPGA和圖像源構成,其中DSP采用TI公司的TMS320C6455芯片,FPGA使用XC4VLX60芯片。整個系統的工作流程為:FPGA同時采集3路數字圖像,然后進行預處理,并產生同步信號,觸發DSP的EDMA控制3路圖像數據傳輸到DSP,在DSP中進行3路圖像數據的實時處理。為了提高系統的實時性,一次同步只連續傳輸3路圖像的16行數據,傳輸完的數據即可進行相關處理。該圖像處理系統工作原理如圖3所示。
3.2 系統數據傳輸的實現
在FPGA中設計3對PING/PONG緩存,分別用于存儲3路圖像數據,每個緩存的大小設為能存儲16行的圖像數據量;同時,設計了一個同步控制模塊,該模塊根據3路圖像的幀場同步與行計數產生一個同步信號,并將該信號連接到DSP的GPIO5上,用來觸發DSP的EDMA控制數據傳輸。同樣,在DSP中設計3對PING/PONG緩存分別用于接收3路圖像數據,同時設計3個通道分別控制3路數據傳輸,并將EDMA設為多通道傳輸鏈的工作模式。
FPGA以乒乓緩存方式分別接收完3路圖像16行數據后,產生一個同步信號,該信號觸發DSP的EDMA通道1進行圖像1數據傳輸;傳輸完該圖像16行數據后,EDMA自動鏈接到通道2傳輸圖像2數據;傳輸完圖像2數據后,EDMA又會自動鏈接到通道3傳輸圖像3數據,一次同步傳輸完成3路16行圖像數據傳輸。
3.3 EDMA多通道傳輸鏈的設計
FPGA輸出的同步信號鏈接到DSP的GPIO5、GPIO5事件對應的EMDA通道為53,用于控制圖像1數據傳輸;控制圖像2與圖像3的傳輸通道分別設為6與7通道。其中,53通道采用64與65參數集對(對應地址為0x02A04800和0x02A04820)配置EDMA實現數據乒乓傳輸。同樣,6通道采用72與73參數集對,7通道采用80與81參數集對。
本文EDMA參數集配置代碼采用TI公司提供的C6455片級支持庫CSL函數[6]進行設置。以53通道64參數集為例進行說明,其他通道參數設置類似。
其中53通道64乒參數集的關聯配置代碼如下:
chAttr.chaNum = 53;
hEdma3ChannelY = CSL_edma3ChannelOpen
(&InputChObjY, CSL_EDMA3, &chAttr, &status);
hParamY_Ping = CSL_edma3GetParamHandle
(hEdma3ChannelY, 64, &status);
將OPT的STATIC設置為0,實現EDMA通道的乒乓傳輸,并將53通道參數集OPT的TCCHEN設置為1,TCC設置為6,將53通道鏈接到6通道。同樣,將53通道的TCCHEN設置為1,TCC設置為7,將6通道鏈接到7通道;將7通道TCCHEN設置為0,TCC設置為0,關閉通道鏈接功能。具體EDMA多通道傳輸鏈示意圖如圖4所示。
其中53通道64參數集OPT字段的配置代碼如下:
myParamSetup.option =CSL_EDMA3_OPT_MAKE
(0,CSL_EDMA3_TCCH_ EN, 0,0,6,\
CSL_EDMA3_TCC_NORMAL, 3,\
CSL_EDMA3_STATIC_DIS,\
CSL_EDMA3_SYNC_A,0,0);
其他參數設計如下:SRC(通道源地址)設置為片外FPGA的3路緩存映射地址,乒乓緩存分別映射到DSP內存的不同空間;DST(通道目的地址)設置為Buffer-Ping/BufferPong地址,實現乒乓接收數據。本設計采用一維傳輸,只需設置ACNT、BCNT與CCNT值,其他BCNT、SRCBIDX等傳輸參數采用默認值0即可,一次傳輸16行圖像數據,需將3個通道的ACNT設置為16x720。LINK設置參數的連接地址,本軟件設計通過參數集句柄關聯方式設置LINK鏈接地址,53通道參數集對的鏈接句柄分別為hParamY_Pong與hParamY_Ping,對應的地址為0x04820和0x04800,其他通道設置類似。
其中53通道64參數集其他主要配置代碼如下:
myParamSetup.srcAddr = (uint32_t)RAM10;
myParamSetup.dstAddr = (uint32_t)BufferPing1;
myParamSetup.linkBcntrld =
CSL_EDMA3_LINKBCNTRLD_MAKE (hParamY_Pong, 1);
myParamSetup.cCnt =1;
myParamSetup.aCntbCnt =
CSL_EDMA3_CNT_MAKE(720*16,1);
4 實驗結果與分析
實驗測試平臺為基于TMS320C6455的實時圖像處理系統,系統時鐘為1 000 MHz,DSP與FPGA之間的傳輸速率為100 MHz,傳輸圖像大小為720×576,一次同步傳輸16×720個圖像1數據、16×720個圖像2數據以及16×720個圖像3數據。
實驗結果如表1所示。完成一次16行3路圖像數據傳輸,采用多個通道傳輸需要3個EDMA通道事件,并需要3個傳輸完成中斷服務程序,接收后需要做同步處理。而采用多通道鏈傳輸只需要1個EDMA通道事件以及1個傳輸完成中斷服務程序,接收后不需要做同步處理。
由表1實驗數據可知,采用EDMA多通道鏈傳輸方法,數據傳輸總體效率提高了18%。由于數據傳輸由EDMA在后臺控制完成,不占用 CPU資源, CPU資源節省率達到66%。
文中主要論述了基于DSP處理系統的多路數據傳輸方法與實現過程,創新地提出了一種EDMA多通道傳輸鏈乒乓傳輸方法,實現多路數據同步傳輸。實驗結果表明,采用該方法實現多路數據傳輸,能大大提高數據傳輸效率,節省CPU資源,減少系統時延,并且避免了多個EDMA事件與中斷的競爭,提高數據傳輸的可靠性與系統穩定性。
本文方法已成功應用到某型號無人機項目中,數據傳輸穩定可靠,可以廣泛應用在基于DSP的多路數據處理系統中。
參考文獻
[1] 李波,孟慶磊.基于通用DSP的多路視頻編碼器的優化實現[J].電子學報,2006,34(11):2104-2017.
[2] Texas Instruments Inc..TMS320C6000 DSP enhanced direct memory access(EDMA) controller reference guide[Z].2005.
[3] 陸軍,高樂,劉濤.基于DSP與FPGA的全景圖像處理系統設計與實現[J].電子技術應用,2012,38(6):24-26.
[4] 楊俊波,趙繼敏.基于TI6000系列DSP的多路信號采集系統[J].工業控制計算機,2008,21(1):56-59.
[5] Texas Instruments Inc..TMS320C6455 enhanced DMA(ED-MA3) controller user′s guide[Z].2007.
[6] Texas Instruments Inc..TMS320C6455 chip support library API reference guide[Z].2006.