我想用EDMA3实现DSP和FPGA之间的通信,目前利用EDMA3从ddr到FPGA进行传数据,时序是正确的,反过来也是正确的,但是当我把2者通过链接参数链接到一起时,时序就不对了,在网上查了一些资料,说是要用中断,请问,我该如何配置?用哪个中断。多谢解答!
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.
我想用EDMA3实现DSP和FPGA之间的通信,目前利用EDMA3从ddr到FPGA进行传数据,时序是正确的,反过来也是正确的,但是当我把2者通过链接参数链接到一起时,时序就不对了,在网上查了一些资料,说是要用中断,请问,我该如何配置?用哪个中断。多谢解答!
不好意思,这两天出去出差没有及时更新。
下面是我测试的子程序
int Edma3OPT_W()
{
CSL_Edma3Obj edmaObj;
CSL_Edma3ChannelObj chObj;
CSL_Edma3CmdIntr regionIntr;
CSL_Edma3Context context;
CSL_Edma3ChannelAttr chAttr;
CSL_Status status;
unsigned char channelNum = 0;
unsigned char instNum = 1;
CSL_edma3Init(&context);
hMoudle = CSL_edma3Open(&edmaObj,instNum,NULL,&status);
chAttr.regionNum = CSL_EDMA3_REGION_GLOBAL;
//chAttr.regionNum = CSL_EDMA3_REGION_0 ;
chAttr.chaNum = channelNum;
hChannel = CSL_edma3ChannelOpen(&chObj,instNum,&chAttr,&status);
CSL_edma3HwChannelSetupQue(hChannel,CSL_EDMA3_QUE_0);
CSL_edma3MapDMAChannelToParamBlock(hMoudle,channelNum,0);
hParamPing = CSL_edma3GetParamHandle(hChannel,0,&status);
regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
// regionIntr.region = CSL_EDMA3_REGION_0;
regionIntr.intr = 0x1;
regionIntr.intrh = 0x0;
CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTR_ENABLE,®ionIntr);
myParamSetup.option = 0x00100008; //block move
myParamSetup.srcAddr = (Uint32)srcbuf;
myParamSetup.aCntbCnt = 0x00010200;
myParamSetup.dstAddr = (Uint32)dstbuf;
myParamSetup.srcDstBidx = 0x0;
myParamSetup.linkBcntrld= CSL_EDMA3_LINKBCNTRLD_MAKE(hParamPong,0); //通过这里和读进行链接
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.region = CSL_EDMA3_REGION_0;
regionIntr.intr = 0x0;
regionIntr.intrh = 0x0;
// for(;FLAG_TAG!=1;){}
do
{
CSL_edma3GetHwStatus(hMoudle,CSL_EDMA3_QUERY_INTRPEND,®ionIntr);
}
while (!(regionIntr.intr & 0x1));
CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTRPEND_CLEAR,®ionIntr);
CSL_edma3ChannelClose(hChannel);
CSL_edma3Close(hMoudle);
return 0;
}
主程序中我直接调用了写和读的函数,读函数我将源地址和目标地址调换并将Paraset与写函数的Para进行链接。
Edma3OPT_W()
Edma3OPT_R()
得到的读时序如图:
可以看到在读数据的时候,WE写使能也会有干扰,请问,出现这种情况是由于写还没完成我就进行读了么?如果要使用中断,该如何操作,谢谢解答!