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.

EDMA使用AB方式进行数据传输



TI工程师您好,

我使用的是C6678,参考C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\example\edma中的例程,

1、现想用AB同步传输的方式每次取出数据矩阵的两列,请问我该如何操作,现在edma_ping_pong_xfer_gbl_region函数基础上修改

  • 数据块大小由两列的数据矩阵大小决定。
    修改每次触发传输的数据大小Acnt*Bcnt,即修改opt中传输模式
    修改c索引为Acnt*Bcnt
    修改触发事件的次数Ccnt
    可以对照ti-processor-sdk\pdk\packages\ti\csl\docs\doxygen\html中对函数参数的说明进行修改。
  • 您好,我按照EDMA3的数据手册3.3节的Data Sorting Example对程序进行修改,参数集配置如下:

    /* Initialize data */
    for (loopIndex = 0; loopIndex < 20; loopIndex++)
    {
    srcBuff1[loopIndex] = loopIndex;
    srcBuff2[loopIndex] = loopIndex;
    dstBuff1[loopIndex] = 0;
    dstBuff2[loopIndex] = 0;
    }
    .......
    /* Setup the parameter entry parameters (Ping buffer) */
    myParamSetup.option = CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS, \
    CSL_EDMA3_TCCH_DIS, \
    CSL_EDMA3_ITCINT_DIS, \
    CSL_EDMA3_TCINT_EN, \
    0, CSL_EDMA3_TCC_NORMAL,\
    CSL_EDMA3_FIFOWIDTH_NONE, \
    CSL_EDMA3_STATIC_DIS, \
    CSL_EDMA3_SYNC_AB, \
    CSL_EDMA3_ADDRMODE_INCR, \
    CSL_EDMA3_ADDRMODE_INCR );
    myParamSetup.srcAddr = (Uint32)srcBuff1;
    myParamSetup.aCntbCnt = CSL_EDMA3_CNT_MAKE(4,5);//n*4 A的大小为NN个数,每一个数占4个字节
    myParamSetup.dstAddr = (Uint32)dstBuff1;
    myParamSetup.srcDstBidx = CSL_EDMA3_BIDX_MAKE(4,20); //这个地方的BIdx的单位是什么?32bit?
    myParamSetup.linkBcntrld= CSL_EDMA3_LINKBCNTRLD_MAKE(hParamPong,0);
    myParamSetup.srcDstCidx = CSL_EDMA3_CIDX_MAKE(20,4);
    myParamSetup.cCnt = 4;
    程序一次执行后,在
    do {
    CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,&regionIntr);//这一步过后数据传输
    } while (!(regionIntr.intr & 0x1));进入死循环
    srcBuff1传递数据0123到dstBuff1,每两个数之间间隔4,只传输了一次,麻烦您帮我看看这里有什么问题
  • CSL_EDMA3_BIDX_MAKE设置就是SRCBIDX和DSTBIDX索引值。单位是byte。
    It provides a byte address offset from the beginning of the source array to the beginning of the next source array.
    之前有实现过多次传输吗?还是改了程序之后只能传输一次?
  • 触发方式是什么?