我现在是需要使用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时有什么规则吗,或者需要注意些什么?