This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c6678 edma搬运



各位专家与高手:

在使用官方提供的C6678开发包K1_STK_v1.1内示例程序进行EDMA测试时发现了以下现象:

EDMA调用接口:

void edma_3D_Test (Uint32 src, Uint32 dst, Uint32 uiACount,

    Uint32 uiBCount, Uint32 uiCCount, Uint32 uiBIndex, Uint32 uiCIndex,

    CSL_TpccRegs*  EDMACCRegs, Uint32 TC_channel)

调用实例(连续搬运1M数据):

void edma_3D_Test (0x90000000, 0x80000000, 32768,32, 1, 32768, 0,  CSL_TpccRegs*  EDMACCRegs, Uint32 TC_channel);

现象1:

当DMA的原地址或者目的地址位于0x80000000到0x80100000这1M byte的DDR空间范围内,EDMA搬运完成时间特别长,做过如下测试(连续搬运1M bytes数据):前三项测试我们认为DMA数据搬运的速度是正常的,但是后三项测试,源地址或目的地址都有落在0x80000000到0x80100000区间内的情况,DMA搬运则耗时过长。

起始地址

目标地址

完成时间(cycle,1G主频)

带宽

0x90000000

0x80100000

320814

3117M bytes/s

0x90000000

0x0C200000

116142

8610M bytes/s

0x80100000

0x0C200000

116220

8604M bytes/s

0x80080000

0x0C200000

130007280

7.69M bytes/s

0x90000000

0x80080000

130115856

7.68M bytes/s

0x80000000

0x0C200000

268558212

3.72M bytes/s

现象2:

C6678片内有4M bytes的共享内存MSMC(0x0C000000到0x0C400000),当DMA的源地址和目的地址为0x0C000000时,会触发Exception,具体打印信息如下:

External exception happened. MEXPFLAG[2]=0x80000000.

  EDMA module 0 error

    TC 0 error happened

      EDMA3TC has detected an error at source or destination address.

      write error (9). TCC= 0. TCINTEN= 1. TCCHEN= 0

NRP=0x8514d4, NTSR=0x1000d, IRP=0x856fb8, ITSR=0xd, TSCH= 0x0, TSCL= 0x351fd306

 B3=0x85154c, A4=0x0, B4= 0x0, B14= 0xc207188, B15= 0xc205920

 

希望给我专家和高手给点调试建议。

  • 1. 请问使用的是自己的板子还是EVM板?是多核一起搬运还是单核搬运?如果少搬点数据也会有这个问题吗?

    2. 为什么要源地址和目的地址要设成一个地址?

  • 1 使用的是自制板卡;

    2 EDMA是从DDR往片内搬运数据;

    问题基本定位,参考下面的帖子:

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/89549.aspx

    主要是EDMA参数设置时,BINDEX和CINDEX是16位有符号整数,程序将其作为16无符号整数赋值;