1. 程式人生 > >TMS320C6474學習總結(十一)----EDMA3使用說明

TMS320C6474學習總結(十一)----EDMA3使用說明

1. 什麼是EDMA3控制器?

       EDMA3(Enhanced Direct Memory Access 3):增強型直接儲存器訪問的控制器。它是DSP中一個高效資料傳輸引擎,其結構適合資料的高速傳輸。直接儲存器訪問是一種重要的資料訪問方式,可以在沒有CPU參與的情況下,由控制器完成儲存空間的資料轉移,適用於軟體觸發的頁面傳輸(片外儲存空間與片記憶體儲空間間進行傳輸)、適用於事件觸發的外設(串列埠及介面UTOPIA)。利用EDMA3控制器對多變的資料結構進行子幀的提取及排列,減輕CPU在資料傳輸方面的負擔。

2. EDMA3的特徵

       ①提供三個維度完全正交的傳輸方式(三個維度之間不存在相互干擾);

              EDMA3支援一維傳輸(A同步傳輸:一次觸發只搬移ACNT個位元組的資料)和二維傳輸(A-B同步傳輸:一次觸發只搬運ACNT*BCNT個位元組資料)這兩種方式,不支援三維傳輸(A-B-C同步傳輸),但可以通過配置EDMA3為週期性事件觸發模式,同時配置好CCNT的值,就可以實現A-B-C的三維傳輸。

       ②可變的獨立源地址和目的地址;

              EDMA3在初始化時會設定源地址和目的地址,在EDMA3的傳輸過程中,其源地址和目的地址會不斷往後偏移,來實現資料從源地址+偏移位置往目的地址+偏移位置端轉移。

       ③支援事件同步傳輸、手動同步傳輸以及連結同步傳輸方式;

              事件同步傳輸:外設、系統或者外部產生的事件觸發產生髮送請求

              手動同步傳輸:CPU通過在對應的暫存器位(ESR/ESRH)上寫1來人為觸發產生髮送請求

              連結同步傳輸:一個傳送的完成來觸發另一次的傳送(要終止傳送,可以將OPT中的LINK設為NULL)

       ④EDMA3具有64個DMA通道,8個QDMA通道,256個PaRAM引數集,每一個通道都可以與給定的事件佇列和PaRAM相關聯。

       ⑤EDMA3主要包括EDMA3CC(通道控制器)和EDMA3TC(傳輸控制器),EDMA3CC是使用者控制EDMA控制器的介面,是EDMA3中使用者程式設計的一部分。EDMA3CC包括PaRAM引數、通道控制暫存器以及中斷控制暫存器。傳輸控制器EDMA3TC負責資料的搬移並分別向源地址和目的地址發出讀寫命令,源地址和目的地址是在EDMA3CC中設定的。

3. EDMA3CC主要以下幾個模組

       1. PaRAM:PaRAM引數設定了資料傳輸的一些資訊,例如源地址、目的地址、傳輸的資料大小,以及傳輸方式等資訊。

       2. EDMA3事件和中斷處理暫存器:實現事件和引數設定的對映,事件使能/去使能,中斷使能/去使能/清除中斷等。

       3. 事件佇列:事件佇列處於事件探測邏輯和傳送請求提交邏輯之間。

       4. 記憶體保護暫存器:記憶體保護暫存器定義了DMA通道陰影區域和PaRAM區域的入口。

       5. 區域暫存器:區域暫存器允許DMA源(DMA通道和中斷)被分配到獨特的區域。

       6. 除錯暫存器:除錯暫存器允許訪問可視的暫存器來讀取佇列狀態、控制器狀態和事件狀態。

4. PaRAM引數集

EDMA3共有256個PaRAM引數集,DMA和QDMA的通道傳輸內容(源/目的地址、數量、索引值等)都是在PaRAM中設定的。使用者可以將256個PaRAM對映到任意DMA通道或QDMA通道上,來控制傳輸控制器進行一定資料量的搬運。

PaRAM各欄位含義

欄位

含義

OPT

傳輸配置選項

SRC

資料來源端的位元組地址

ACNT

一個array中的連續位元組數

BCNT

一幀中的array數

DST

資料目的端的位元組地址

SRCBIDX

源BCNT索引值,用於指示傳輸幀中,

資料來源的陣列array的間隔

DSTBIDX

目的BCNT索引值,用於指示傳輸幀中,

資料目的端的陣列array的間隔

LINK

當前PaRAM耗盡時,用於LINK的PaRAM的地址

BCNTRLD

A同步傳輸時,BCNT耗盡時的過載值

SRCCIDX

源CCNT索引值,用於指示傳輸幀中,

資料來源的幀間的間隔

DSTCIDX

目的CCNT索引值,用於指示傳輸幀中,

資料目的端的幀間的間隔

CCNT

一個傳輸塊中的幀數

5. DMAQDMA的區別

       DMA和QDMA通道的不同之處在於使用的觸發條件不同。DMA的觸發方式有三種:主動觸發、事件觸發以及連結觸發。而QDMA的觸發方式是自動觸發和連結觸發模式,自動觸發是指只要配置了PaRAM引數就會自動觸發,連結觸發與DMA比較類似。QDMA只能傳送一維Array的資料格式,而DMA可以傳送一維、二維和三維的資料格式。

4. 配置EDMA3傳送的主要步驟

       1. DMA通道的初始化:

              a. 通道選擇,包括通道型別選擇以及通道號選擇,特別是事件觸發時,不同的事件綁定了不同的通道號(在主動觸發方式下,可以任意選擇通道號,但如果是事件觸發模式,必須使用觸發事件對應的通道號)。

                #define g_Edma3ChanNUM     20

                 #define g_PaRAMNum         30

/*EDMA364DMA通道,8QDMA通道,可任意選擇通道號,但主要不要衝突*/

/*PaRAM共有256個引數集,可任意對映至DMA通道和QDMA通道,注意不要衝突*/

              b. 通道對映,配置DCHMAP暫存器,指定PaRAM引數地址對映到使用的通道號

      *(Edma3_DCHMAP0 + 4 * g_Edma3ChanNUM) = g_PaRAMNum << 5;

 /*PaRAM 30 對映到DMA通道20 */

此處暫存器中顯示可以配置0-511PaRAM,但實際上只有256PaRAM

              c. EDMA通道分割槽設定,EDMA3通道控制器暫存器分為全域性暫存器、全域性區域暫存器和陰影區域暫存器,如果將某個通道設定為陰影區域,那麼後續操作必須使用陰影區域的暫存器(一般不用陰影區域,可以不用配置)。

              d. 陰影區域通道使能,開啟相應的DMA通道中斷使能;

/*如果使用的通道為陰影區域,則需要置位對應陰影通道的使能暫存器*/

              e. 將選擇的EDMA通道設定到需要的佇列上,每個佇列的優先順序是不同的。

                               *Edma3_DMAQNUM0 = 0x44444444; 

/*將選擇的通道設定到佇列4上,EDMA3CC共有8個佇列,每個佇列深度是16個事件,也就是說一個佇列可以配置16個通道的佇列號*/

       2. PaRAM引數配置

              根據搬移的資料型別,參照PaRAM各欄位含義,將PaRAM的引數寫入與使用通道繫結的PaRAM中。

                                  *t_PARAM_ADDR ++ = 0x0010000C;       //寫入OPT

                                  *t_PARAM_ADDR++ = (UINT)0x00801000;        //寫入SRC

                                  *t_PARAM_ADDR++ = (16<<16) + 16;        //寫入BCNT ACNT

                                 *t_PARAM_ADDR++ = (UINT)0x00802000;      //寫入DST

                                *t_PARAM_ADDR++ = (16<<16) + 16;        //寫入STBIDX   SRCBIDX

                                *t_PARAM_ADDR++ = 0x0001FFFF;     //寫入BCNTRLD   LINK

                                *t_PARAM_ADDR++ = 0x0000000;        //寫入DSTCIDX   SRCCIDX

                                *t_PARAM_ADDR++ = 0x00000001;           //寫入Rsvd   CCNT

       3. 中斷配置

              PaRAM中的OPT欄位中應該使能相應的中斷,另外需要通過設定IESR/IESRH使能中斷相應。

       4. 觸發傳輸

              a. 事件觸發,通道如果觸發源是事件,即當外部事件發生時,EDMA3自動傳輸一次資料。

              b. 手動傳輸,通過CPU手動配置ESR暫存器觸發

                         *Edma3_ESR = 0x1<<g_Edma3ChanNUM; //觸發傳輸

              c. 連結觸發,當上一個通道的傳輸完成碼等於下一DMA通道時,上一通道傳輸完成將觸發下一通道傳輸資料。

       5. 等待完成

              a. 在中斷復位函式中等待,如果按照3中的設定,那麼當傳輸完成後,EDMA3會給CPU產生中斷,中斷函式中必須將IPR/IPRH清零,方便下次實用性相同的標誌位。

              b. 輪詢暫存器,如果未使能中斷相應,那麼可以等待相應的IPR/IPRH位置1,表示傳輸完成,IPR/IPRH必須清零,方便下次使用相同的標誌位。

附表:EDMA3通道同步事件對照表

EDMA3 Channel Synchronization Events

Channel

Event

30

TCP2_A Receive Event

0

HPI/PCI-to-DSP Event

31

TCP2_A Transmit Event

1

Timer 0 Lower Counter Event

32

UTOPIA Receive Event

2

Timer 0 Higher Counter Event

33

TCP2_B Receive Event

3-8

None

34

TCP2_B Transmit Event

9

Embedded Trace Buffer (ETB) is Half Full

35-39

None

10

Embedded Trace Buffer (ETB) is Full

40

UTOPIA Transmit Event

11

Embedded Trace Buffer (ETB) Acquisition is Complete

41-43

None

12

MCBSP0 Transmit Event

44

I2C Receive Event

13

MCBSP0 Receive Event

45

I2C Transmit Event

14

MCBSP1 Transmit Event

46-47

None

15

MCBSP1 Receive Event

48

GPIO Event 0

16

Timer1 Lower Counter Event

49

GPIO Event 1

17

Timer1 Higher Counter Event

50

GPIO Event 2

18

None

51

GPIO Event 3

19

RapidIO Interrupt 0

52

GPIO Event 4

20

RapidIO Interrupt 1

53

GPIO Event 5

21

RapidIO Interrupt 2

54

GPIO Event 6

22

RapidIO Interrupt 3

55

GPIO Event 7

23

RapidIO Interrupt 4

56

GPIO Event 8

24

RapidIO Interrupt 5

57

GPIO Event 9

25

RapidIO Interrupt 6

58

GPIO Event 10

26-27

None

59

GPIO Event 11

28

VCP2 Receive Event

60

GPIO Event 12

29

VCP2 Transmit Event

61

GPIO Event 13

30

TCP2_A Receive Event

62

GPIO Event 14

31

TCP2_A Transmit Event

63

GPIO Event 15