TI论坛
直播中

曹雪琰

7年用户 214经验值
私信 关注
[问答]

C6657的EDMA源地址设置为CONST模式时接收到的数据全部为0

各位工程师你们好:
现在我遇到一个关于C6657  EDMA传输的问题,当设置EDMA的源地址和目的地址为INCR模式时,数据可以正确搬运,但当将源地址设置为CONST模式,目的地址为INCR模式,FIFO_16BIT时,目的地址接收到的数据全部为0。请问这是为什么呢?或者说当源地址为const模式时还需要设置其他一些地方?
另外,在测试时发现,如果源地址为寄存器地址(如0x2320000,GPIO相关寄存器)就能正确搬运,其余地址如L2(0x10800000)、DDR3都不能正确搬运(EDMA是动作了的,只是搬运的数据全部为0)!

回帖(8)

杨娟

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

举报

曹雪琰

2019-1-11 09:47:28
引用: zbb9612 发表于 2019-1-11 09:29
我的理解是只有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,®ionIntr);
 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,®ionIntr);
 ]
 while (!(regionIntr.intr & 0x1));
EMIF16的配置是NOR FLASH的配置。
如果将源地址和目的地址都设置为INCR模式,这是可以正确搬运数据的。
1、请问下这样的配置为什么不能搬运EMIF的数据呢,是配置有问题吗?
2、在选择instNum和channelNum时有什么规则吗,或者需要注意些什么?
举报

杨娟

2019-1-11 10:07:24
引用: 脑洞大赛15 发表于 2019-1-11 09:47
我现在是需要使用EDMA来搬运EMIF16(与FPGA连接)的数据到DDR,但是现在EDMA无法正确搬运EMIF16的数据,EMIF16只使用一个地址(0x78000000)接收数据,当成FIFO使用(不知道这需要进行什么设置吗或者可以直接这样使用?)。我使用的芯片是C6657。EDMA配置如下:
 CSL_edma3Init(&context);
 hMoudle = CSL_edma3Open(&edm ...

可能是跟EMIF的工作模式配置有关,如果直接CPU去读写flash数据是ok的么?
可以参考STK中EMIF例程进行读写flash。http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx
                                                                          

举报

曹雪琰

2019-1-11 10:16:28
你好,EMIF16的CE1挂的nor flash是读写正确的,现在的情况是C6657的CE2接的FPGA,希望通过EMIF16实现DSP与FPGA通信。异步操作太慢了,所以想使用同步访问的方式搬运数据。
还有一个问题想确认下:C6657的EMIF16支持同步访问吗?它只支持nor _asram_mode 和NAND MODE两种方式,而这两种方式都是异步的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分