请问大家:(用的是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
TI中文支持网