天天看點

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

本文主要介紹C6000系列的C64x TI DSP的EDMA和QDMA傳輸參數配置以及鍊式chain傳輸的配置,傳輸完成的訓示,事件驅動模式等。 關鍵字:EDMA 鍊式 QDMA IDMA EDMA3LLD ARM DSP C64

1)EDMA概要

    ①EDMA資料傳輸有兩種發起方式:

ü         CPU發起的EMDA資料傳輸(非同步方式):需要傳輸時,CPU設定ESR寄存器的相應位為1,進而觸發一個EDMA事件的産生,事件對應的通道參數被送往位址硬體并且完成相應的處理,這種非同步方式的實時資料傳輸無需設定EER寄存器;

ü         事件觸發方式EDMA資料傳輸(同步方式):ER寄存器儲存外設發送過來的事件,一旦CPU設定EER寄存器的相應位為1後,ER中的事件才會送出給事件編碼器(Event Encoder),并且進一步引起相關的傳輸參數的發送給位址産生硬體;如果EER中對應于某事件的位沒有置1,則ER寄存器中的事件将保留,一旦置1則觸發EDMA的傳輸,這種特性可以應用到EDMA Chain傳輸,需要EER和CCER結合使用;

②EDMA每個通道是和特定的系統事件綁定的,如下表所示:

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化
C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

③EDMA Chain Transfer:一個通道傳完繼續傳另一個通道;

④EDMA Link Tansfer:設定參數後,通道的資料傳輸傳完,再載入這個通道的其他參數設定,再進行資料傳輸;

(2)EDMA資料傳輸類型:

EDMA有兩種類型的資料傳輸:1D和2D的(OPT.2DS和OPT.DDS标示源位址和目的位址的資料傳輸類型,即有4種組合方式);資料的維數表明了資料的組成方式:

①1D資料

資料組成是"塊->幀->元素";一個塊中的每幀資料是獨立處理(即可以了解亦為2D資料,但是第二維永遠是1),每次處理是一個元素,是以一幀中的資料元素可以是在同一個記憶體位址、連續的位址或者是與同一幀中的前面的資料元素位址具有一定偏移(Offset,由ELEIDX通道參數指定)的某位址;不同幀之間的記憶體位址偏移由FRMIDX通道參數指定(兩幀的第一個元素之間的偏移或者後一幀的第一個元素的位址與前一幀的最後一個元素位址的偏移,具體依賴于通道參數FS的設定);每幀的資料元素個數可以不同,由通道參數ELECNT指定,傳完一幀資料後由ELERLD重新載入塊中的下一幀的資料元素個數ELECNT;塊中的幀的個數由通道參數FRMCNT指定;

1D資料傳輸有兩種同步方式:OPT.FS=0,元素同步方式;OPT.FS=1,幀同步方式;

元素同步時,一次同步事件引起一幀中的一個元素的傳輸,每傳輸一次ELECNT遞減1;當同步事件觸發時,ELECNT=1表明是一幀的最後一個資料元素,此時EDMA控制器除了完成最後這個元素的傳輸外,還需要重新載入ELECNT(通過ELERLD)并且FRMCNT遞減1;ELEIDX表示元素之間的偏移,FRMIDX表示一幀的最後一個元素和下一幀的第一個元素之間的偏移;如果OPT.LINK=1時,傳輸完成中斷産生(FRMCNT=0)就重新從PRAM中載入目前通道的其他參數;

幀同步時,一次同步事件引起一幀資料的傳輸,FRMIDX表示兩幀的第一個元素之間的偏移;

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化
C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

② 2D資料

資料組成為"塊->數組->元素",同一數組中的元素是連續存放的,是以ELEIDX無意義;數組中的元素素引表示2D的第一維,塊中的數組索引表示2D的第二維;FRMIDX的值依賴于OPT.FS的設定;

OPT.FS=0:表示一次同步事件傳輸一個數組,此時FRMIDX是數組首位址之間的偏移;每傳完一個數組,FRMCNT遞減1;當OPT.LINK=1并且FRMCNT遞減至0時,從PRAM的中重新載入目前通道的其他參數;

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化
C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

OPT.FS=1:表示一次同步事件傳輸一個塊;FRMIDX表示前一個數組的最後一個元素的位址與後一個數組的第一個元素的位址之間的偏移;如果OPT.LINK等于1,則當整塊資料傳完時,重新從PRAM中為目前通道載入新的參數;

(3)EDMA傳輸過程的源/目的位址的修改

    在每次同步事件觸發EDMA資料傳輸,并且傳輸完成後,需要對源/目的位址進行更新;位址的更新方式由SUM/DUM進行設定,并且和2DS、2DD以及FS是密切相關的;

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

(6)EDMA Linking Transfer

    當傳輸完成時(根據目前通道參數設定已經傳完所有資料了,具體條件如下表所示),并且OPT.LINK=1,EDMA控制器會根據通道參數LINK(非OPT.LINK,16bits)從PaRAM中的其他位置(以24個位元組對齊,因為通道參數為6WORD)重新載入目前傳輸通道的參數;可以連結到一個空的通道參數集(NULL Parameter)來停止EDMA傳輸,也可以自連結(用于循環緩沖處理或者重複的資料傳輸);Linking過程中不對相關寄存器作判定;

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

(7)EDMA中斷

    C64X DSP的EDMA控制器的所有64個通道隻産生一種中斷:EDMA_INT。如果需要讓第n個EDMA通道(或者QDMA請求)可以在傳輸完成時可以産生中斷通知CPU的話,應該如下設定:

u       OPT.TCINT=1:表示啟用傳輸完成中斷

u       OPT.TCC=n:在傳輸完成時,CIPR[TCC]=1,用于标記對應通道的傳輸完成,即便對應的CIER位沒有啟動,傳輸完成事件還是會在CIPR記錄,即挂起的含義所在;

u       OPT.CIER[n]=1:表示立即允許挂起的第n個通道傳輸完成事件觸發EDMA_INT中斷發送給CPU;

其中,TCC用于表示的通道的位數不夠時,可以擴充使用TCCM(即TCCM:TCC),CIPR和CIER均由兩個寄存器組成:CIPRL+CIPRH以及CIERL+CIERH。

中斷服務例程ISR讀取CIPR,确定哪一個通道完成了資料傳輸,進行相應的處理。ISR在進行處理之前需要清除CIPR中确定了通道的位(寫入1到相關位清除,寫入0不起作用),目的是記錄以後的傳輸完成事件的發生。在中斷服務例程對某通道的傳輸完成中斷進行服務後,因為期間有可能有其他通道傳輸完成了,也已經設定了CIPR中的相應位,或者也有可能本來有好幾個中斷挂起了并且現在觸發了,是以中斷服務例程必須檢查所有的CIPR并全部完成中斷服務才行。當CIPR[n]&CIER[n]=1時,則設定對應的IFR為1,防止在退出ISR時丢失中斷并且使得可以多次調用ISR。中斷服務例程的一個任務是清除CIPR和CIER中的與通道對應的位。

C64X DSP除了傳輸完成中斷外,還有交替性傳輸完成中斷,即在傳輸過程中完成一個傳輸子過程(如傳完一個資料元素、傳完一個幀/數組資料;2D幀同步傳輸沒有交替性傳輸完成中斷)給CPU發送一個中斷,相應的設定由OPT.ATINT、OPT.ATCC設定,處理過程和傳輸完成中斷雷同,差別隻是在傳輸還沒全部完成的過程中進行中斷處理而已。

8)QDMA

    QDMA資料傳輸總是幀同步的,即對于1D資料傳輸而言每次同步事件傳輸一幀資料,對于2D資料傳輸而言每次同步事件傳輸一塊資料。是以,QOPT.FS對于QDMA是無意義的。另外,QDMA是一次性快速傳輸的,是以也沒有中間傳輸過程這個概念,即沒有交替性傳輸完成中斷。

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

     QDMA沒有Linking方式的傳輸,但是有Chaining方式的傳輸。QDMA有兩組記憶體映射寄存器用于設定通道參數,如下圖所示:

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

    其中,QDMA寄存器集隻用于配置,QDMA psedudo寄存器集可以用于送出QDMA請求。

(9)EDMA控制器的請求送出

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

    請求包括L2控制器(Cache服務、通路未Cache的記憶體以及QDMA傳輸)、EDMA通道、HPI/PCI。Transfer Crossbar為請求排定優先級。

(10) Event Encoder 事件編碼器

    事件寄存器ER(包括ERL和ERH)用于捕獲對應于64個EDMA通道的事件。在事件編碼器中隻是負責送出請求,事件的優先局依賴于EDMA通道參數的設定,并且在Transfer Crossbar中才正式排定。

(11)Parameter RAM

    Parameter RAM位于EDMA控制器内部,隻有裝置總線可以對之進行通路。PRAM表大小為2KB,其組成為:

①     64個24位元組(即每項6個32bits的字WORD)的表項,用于儲存64個通道的參數,也可作為儲存Linking時候需要進行重載的通道參數;

②     21個24位元組(即每項6個32bits的字WORD)的表項,用于儲存Linking時候需要進行重載的通道參數;

③     剩餘的8個位元組;

    每個通道參數(6WORDS)如下:

C6000系列C64X DSP EDMA/QDMA小結——資料傳輸和優化

(12)EDMA Chaining 傳輸

    Chaining傳輸的含義是當一個EDMA通道傳輸完成時,觸發另一個EDMA通道的傳輸。

    TCINT需要設為1,根據目前通道的(TCCM:)TCC值,設定CCER(CCERL+CCERH)的)(TCCM:)TCC位的值,表示目前通道傳輸完成後觸發(TCCM:)TCC通道的資料傳輸。

    Chaining傳輸也可以交替性傳輸完成,使用ATTC指定要觸發的通道。

Reference:

http://www.blog.163.com/houh-1984/

http://en.wikipedia.org/wiki/EDMA

http://processors.wiki.ti.com/index.php/Reconfiguring_EDMA_channel_allocation_on_ARM

http://processors.wiki.ti.com/index.php/Programming_EDMA_without_EDMA3LLD_package

 關鍵字:EDMA 鍊式 QDMA IDMA EDMA3LLD ARM DSP C64;本文主要介紹C6000系列的C64x TI DSP的EDMA和QDMA傳輸參數配置以及鍊式chain傳輸的配置,傳輸完成的訓示,事件驅動模式等