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

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);

Shine:

请问你的代码是在核1上跑的?DDR3的地址不对。
float *fAmpofDpca =(float*)0x8280000; //DDR3
float *amptemp = (float*)0x11800000; //L2

赞(0)
未经允许不得转载:TI中文支持网 » EDMA从L2到DDR3传不过去
分享到: 更多 (0)