大家好,我遇到的问题是:使用EDMA3,对128*2k点的数据进行搬移的同时进行转置,用AB型传输,源地址与目标地址都在DDR3中。
但是测试结果显示,只有部分数据进行了转置。
当对5*4点的数据进行搬移转置时,可以成功搬移转置, 这是为什么?
关于EDMA3的程序如下所示, 哪里有问题,需要更改?
#pragma DATA_SECTION (Data, ".fftc");
volatile Cplx16 Data[Data_Num];
#pragma DATA_SECTION (Data_Twi, ".fftc");
volatile Cplx16 Data_Twi[Data_Num];
volatile int i, Result;
uint32_t edma_ch_num = 1;
uint32_t edma_tcc_num = 1;
uint32_t edma_evtq_num = 0;
uint32_t aCnt = 4;
uint32_t bCnt = 128; //128
uint32_t cCnt = 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; //源地址 二维 aCnt
edmaParam.srcCIdx = aCnt*bCnt; //源地址 三维 aCnt*bCnt
edmaParam.destBIdx = aCnt*cCnt; //目的地址 二维 aCnt*cCnt
edmaParam.destCIdx = aCnt; //目的地址 三维 aCnt
edmaParam.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) ;
}
参数配置是根据下图: