TI中文支持网
TI专业的中文技术问题搜集分享网站

EDMA3 数据转置

大家好,我遇到的问题是:使用EDMA3,对128*2k点的数据进行搬移的同时进行转置,用AB型传输,源地址与目标地址都在DDR3中。

但是测试结果显示,只有部分数据进行了转置。

当对5*4点的数据进行搬移转置时,可以成功搬移转置, 这是为什么? 

关于EDMA3的程序如下所示, 哪里有问题,需要更改?

#pragma DATA_SECTION (Data, ".fftc");volatile Cplx16Data[Data_Num];#pragma DATA_SECTION (Data_Twi, ".fftc");volatile Cplx16Data_Twi[Data_Num];volatile  inti, Result;uint32_tedma_ch_num= 1;uint32_tedma_tcc_num  = 1;uint32_tedma_evtq_num = 0;uint32_taCnt = 4;uint32_tbCnt = 128;//128uint32_tcCnt = 2048;EDMA3Init(CSL_EDMACC_0_REGS, 0);EDMA3RequestChannel(CSL_EDMACC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, edma_ch_num, edma_tcc_num, edma_evtq_num);edmaParam.opt= 0x00900004u;edmaParam.srcAddr  = (uint32_t) (&Data);edmaParam.destAddr = (uint32_t) (&Data_Twi);edmaParam.aCnt= aCnt;edmaParam.bCnt= bCnt;edmaParam.cCnt= cCnt;edmaParam.srcBIdx  = aCnt;//源地址 二维  aCntedmaParam.srcCIdx  = aCnt*bCnt;//源地址 三维  aCnt*bCntedmaParam.destBIdx = aCnt*cCnt;//目的地址 二维  aCnt*cCntedmaParam.destCIdx = aCnt;//目的地址 三维  aCntedmaParam.linkAddr = 0xFFFFu;EDMA3SetPaRAM(CSL_EDMACC_0_REGS, edma_ch_num, &edmaParam);for (i = 0; i < cCnt; i++){Result = EDMA3EnableTransfer(CSL_EDMACC_0_REGS, 1, EDMA3_TRIG_MODE_MANUAL);while (Result != 1) ;}

参数配置是根据下图:

Shine:

请问能转置了吗?看到您前一个帖说可以了。
e2echina.ti.com/…/170584

kang xiao:

回复 Shine:

小数据可以转置,大数据转置失败, 我看了一下资料,可能是中断的问题。

Shine:

回复 kang xiao:

看了一下EDMA文档上data sorting的例子有误,Figure 3-6. Data Sorting Example PaRAM Configuration里的SRCBIDX和DSTCIDX应该是4(ACNT),不是1。看一下是不是这个问题?

kang xiao:

回复 Shine:

你好, 我程序中SRCBIDX和DSTCIDX设置的就是4(ACNT),错误的原因可能是没有中断,Result = EDMA3EnableTransfer()这个函数是开始传输,并不代表传输成功,只有中断产生时传输才完成,我的理解对吗?

Shine:

回复 kang xiao:

小数组能转成功的话,那就慢慢往上加,看是哪里的问题。

user4683768:

您好,我现在也在做这个,想实现每次取矩阵的两列进行运算,AB模式,不知道该如何操作,可以分享一下吗

赞(0)
未经允许不得转载:TI中文支持网 » EDMA3 数据转置
分享到: 更多 (0)