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.

C6455: problems in EDMA3 and the timing of EMIFA



我的project是外部GPIO4中断触发edma,edma从EMIFA CE2搬运数据至L2 SRAM。EMIFA配置成64位数据宽度,同步FIFO读模式,时钟为100MHz。利用Chipscope查看EMIFA的时序存在一个奇怪的问题。EMIFA的时序受edma搬运的数据量影响。当一次的edma的数据量小于1024*64bits,EMIFA的时序正常;当一次的edma的数据量大于等于1024*64bits,EMIFA的时序出现问题,尤其是CE2和OE信号,这两个信号每隔15个数据点停一个周期,如图所示。

在正常情况下,CE2和OE信号应该保持低电平直到一次传输完毕,而上图显示的情况则是一次传输中会有多次停顿。

EMIFA配置成64位数据宽度,同步FIFO读模式,时钟为100MHz。下面是EMIFA的配置。

CSL_EmifaSync  syncMem = { (Uint8)CSL_EMIFA_SYNCCFG_READBYTEEN_DEFAULT, \

(Uint8)CSL_EMIFA_SYNCCFG_CHIPENEXT, \

(Uint8)CSL_EMIFA_SYNCCFG_READEN, \

(Uint8)CSL_EMIFA_SYNCCFG_WLTNCY_DEFAULT, \

(Uint8)CSL_EMIFA_SYNCCFG_RLTNCY_1CYCLE, \

(Uint8)CSL_EMIFA_SYNCCFG_SBSIZE_64BIT \

};

/* setting for synchronous type */

syncVal.ssel = 1;  //EMIFA_MEMTYPE_SYNC

syncVal.async = NULL;

syncVal.sync = &syncMem;

/* setup the hardware parameters */

hwSetup.asyncWait = NULL;

hwSetup.ceCfg[0] = &syncVal;    //CE2

hwSetup.ceCfg[1] = NULL; //CE3

hwSetup.ceCfg[2] = NULL;     //CE4

hwSetup.ceCfg[3] = NULL;        //CE5    

EDMA每次传输1024个64bit数据。下面是EDMA的配置。

   /* Setup the first param set */

   myParamSetup.option = CSL_EDMA3_OPT_MAKE (CSL_EDMA3_ITCCH_DIS, \

                                             CSL_EDMA3_TCCH_DIS, \

                                             CSL_EDMA3_ITCINT_DIS, \

                                             CSL_EDMA3_TCINT_EN,\

                                             0, CSL_EDMA3_TCC_NORMAL,\

                                             CSL_EDMA3_FIFOWIDTH_NONE, \

                                             CSL_EDMA3_STATIC_EN, \

                                             CSL_EDMA3_SYNC_AB, \

                                             CSL_EDMA3_ADDRMODE_INCR, \

                                             CSL_EDMA3_ADDRMODE_INCR  

                                            );          

   myParamSetup.srcAddr = EMIFA_CE2_BASE_ADDR;        

   myParamSetup.aCntbCnt =  CSL_EDMA3_CNT_MAKE(8,1024);  

   myParamSetup.dstAddr = L2_DATA_ADDR;        

   myParamSetup.srcDstBidx = CSL_EDMA3_BIDX_MAKE(8,8);    

   myParamSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(CSL_EDMA3_LINK_NULL,0);    

   myParamSetup.srcDstCidx = CSL_EDMA3_CIDX_MAKE(0,0);    

   myParamSetup.cCnt = 1;

如果将传输数据量改成1-1023之间任何数,EMIFA的时序都是正确的。如果数据量设置成大于等于1024,EMIFA的时序出现问题。

I need your help, thanks for your reply!