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.

C6657的EDMA源地址为CONST模式时数据传输不正确



各位工程师你们好:

现在我遇到一个关于C6657  EDMA传输的问题,当设置EDMA的源地址和目的地址为INCR模式时,数据可以正确搬运,但当将源地址设置为CONST模式,目的地址为INCR模式,FIFO_16BIT时,目的地址接收到的数据全部为0。请问这是为什么呢?或者说当源地址为const模式时还需要设置其他一些地方?

另外,在测试时发现,如果源地址为寄存器地址(如0x2320000,GPIO相关寄存器)就能正确搬运,其余地址如L2(0x10800000)、DDR3都不能正确搬运(EDMA是动作了的,只是搬运的数据全部为0)!

  • 我的理解是只有FIFO才可以配置为CONST mode,对于一般的LL2,DDR等地址配置问INCR mode,你这里为何需要对LL2等使用CONST mode?

  • 我现在是需要使用EDMA来搬运EMIF16(与FPGA连接)的数据到DDR,但是现在EDMA无法正确搬运EMIF16的数据,EMIF16只使用一个地址(0x78000000)接收数据,当成FIFO使用(不知道这需要进行什么设置吗或者可以直接这样使用?)。我使用的芯片是C6657。EDMA配置如下:

     CSL_edma3Init(&context);

     hMoudle = CSL_edma3Open(&edmaObj,2,NULL,&status);

     chAttr.regionNum = CSL_EDMA3_REGION_GLOBAL;
     chAttr.chaNum = 0;
     hChannel = CSL_edma3ChannelOpen(&chObj,2,&chAttr,&status);

     CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_0);

     CSL_edma3MapDMAChannelToParamBlock(hMoudle,0,0);

     hParamPing = CSL_edma3GetParamHandle(hChannel,0,&status);

     regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
     regionIntr.intr = 0x1;
     regionIntr.intrh = 0x0;
     CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTR_ENABLE,&regionIntr);

     myParamSetup.option = 0x00100101;        //源地址是CONST模式,目的地址是INCR模式
     myParamSetup.srcAddr = (Uint32)srcbuf;
     myParamSetup.aCntbCnt = 0x00010400;
     myParamSetup.dstAddr = (Uint32)dstbuf;
     myParamSetup.srcDstBidx = 0x02;
     myParamSetup.linkBcntrld = 0x0000ffff;
     myParamSetup.srcDstCidx = 0x0;
     myParamSetup.cCnt = 0x00000001;
     CSL_edma3ParamSetup(hParamPing,&myParamSetup);

     CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);

     regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
     regionIntr.intr = 0x0;
     regionIntr.intrh = 0x0;
     do
     {
      CSL_edma3GetHwStatus(hMoudle,CSL_EDMA3_QUERY_INTRPEND,&regionIntr);
     }
     while (!(regionIntr.intr & 0x1));

    EMIF16的配置是NOR FLASH的配置。

    如果将源地址和目的地址都设置为INCR模式,这是可以正确搬运数据的。

    1、请问下这样的配置为什么不能搬运EMIF的数据呢,是配置有问题吗?

    2、在选择instNum和channelNum时有什么规则吗,或者需要注意些什么?

  • 可能是跟EMIF的工作模式配置有关,如果直接CPU去读写flash数据是ok的么?

    可以参考STK中EMIF例程进行读写flash。http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

  • 你好,EMIF16的CE1挂的nor flash是读写正确的,现在的情况是C6657的CE2接的FPGA,希望通过EMIF16实现DSP与FPGA通信。异步操作太慢了,所以想使用同步访问的方式搬运数据。

    还有一个问题想确认下:C6657的EMIF16支持同步访问吗?它只支持nor _asram_mode 和NAND MODE两种方式,而这两种方式都是异步的。

  • EMIF16只支持异步。

  • Hi MaoQTian,

    你的问题解决了么?我用C6747从FPGA读数据,和你的现象一样?可以分享一下你是怎么解决的么?多谢!

  • Hi Andy,

    我这边遇到同样的问题,我用的是C6747,通过EMIFA 连接FPGA.源地址设置为CONST模式,目的地址为INCR模式,FIFO_16BIT时,目的地址接收到的数据全部为0。请问这是为什么呢?或者说当源地址为const模式时还需要设置其他一些地方?

    有C6747 EMIF 做EDMA传输的相关资料嘛? 

  • 你好!有C6657的EDMA的EMIF16读写例程吗?最近在调试C6657 EMIF的FPGA通信,谢谢!