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.

EDMA3 数据转置



大家好,我遇到的问题是:使用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) ;
        }

参数配置是根据下图: