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.

C6678 利用EDMA3 先读后写 应该如何配置?



我想用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,&regionIntr);

    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,&regionIntr);
    }
    while (!(regionIntr.intr & 0x1));

    CSL_edma3HwControl(hMoudle,CSL_EDMA3_CMD_INTRPEND_CLEAR,&regionIntr);

    CSL_edma3ChannelClose(hChannel);

    CSL_edma3Close(hMoudle);

    return 0;
    }

    主程序中我直接调用了写和读的函数,读函数我将源地址和目标地址调换并将Paraset与写函数的Para进行链接。

    Edma3OPT_W()

    Edma3OPT_R()

    得到的读时序如图:

    可以看到在读数据的时候,WE写使能也会有干扰,请问,出现这种情况是由于写还没完成我就进行读了么?如果要使用中断,该如何操作,谢谢解答!