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.

EDMA从L2到DDR3传不过去



请问大家:(用的是TMS6678,CCS5.2)

我用EDMA将数据从L2传到DDR3里面为什么总是传不过去,从MSMC到DDR3倒是可以随便传,改了很久,就是不知道错哪了 ,恳请大家帮我看看。

我用的是官方提供的memory_performance中的传递函数:

void edma_Throughput_Test (Uint32 src, Uint32 dst, Uint32 uiACount,
Uint32 uiBCount, Uint32 uiIndex, CSL_TpccRegs* EDMACCRegs, Uint32 TC_channel)
{

//Clear cache
CACHE_wbInvAllL2(CACHE_WAIT);
CACHE_wbInvAllL1d(CACHE_WAIT);

//clear completion flag
EDMACCRegs->TPCC_ICR=0xffffffff;

EDMACCRegs->PARAMSET[TC_channel].OPT=
CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS,
CSL_EDMA3_TCCH_DIS,
CSL_EDMA3_ITCINT_DIS,
CSL_EDMA3_TCINT_EN,
TC_channel,
CSL_EDMA3_TCC_NORMAL,
CSL_EDMA3_FIFOWIDTH_NONE,
CSL_EDMA3_STATIC_DIS,
CSL_EDMA3_SYNC_AB,
CSL_EDMA3_ADDRMODE_INCR,
CSL_EDMA3_ADDRMODE_INCR);
EDMACCRegs->PARAMSET[TC_channel].SRC= src;
EDMACCRegs->PARAMSET[TC_channel].A_B_CNT= (uiBCount<<16)|uiACount;
EDMACCRegs->PARAMSET[TC_channel].DST= dst;
EDMACCRegs->PARAMSET[TC_channel].SRC_DST_BIDX= (uiIndex<<16)|uiIndex;
EDMACCRegs->PARAMSET[TC_channel].LINK_BCNTRLD= (uiBCount<<16)|0xFFFF;
EDMACCRegs->PARAMSET[TC_channel].SRC_DST_CIDX= 0;
EDMACCRegs->PARAMSET[TC_channel].CCNT= 1;

/*Manually trigger the EDMA*/
EDMACCRegs->TPCC_ESR= 1<<(TC_channel);

return;

}

等待结束函数为:

void edma_waitover (CSL_TpccRegs* EDMACCRegs, Uint32 TC_channel)
{
/* Wait for completion */
while ((EDMACCRegs->TPCC_IPR&(1<<(TC_channel))) ==0);

//clear completion flag
EDMACCRegs->TPCC_ICR=0xffffffff;
}

调用方式为:

CSL_TpccRegs*  EDMACCRegs= gEDMACCRegs[0];

float *fAmpofDpca =(float*)0x8280000; //DDR3
float *amptemp = (float*)0x11800000; //L2

edma_Throughput_Test ((Uint32)(amptemp), (Uint32)(fAmpofDpca+8192*127), 8192,4, 0,EDMACCRegs, 0);

edma_waitover(EDMACCRegs,0);