TI工程师您好,
我使用的是C6678,参考C:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\example\edma中的例程,
1、现想用AB同步传输的方式每次取出数据矩阵的两列,请问我该如何操作,现在edma_ping_pong_xfer_gbl_region函数基础上修改
user4683768:
回复 Nancy Wang:
您好,我按照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,®ionIntr);//这一步过后数据传输} while (!(regionIntr.intr & 0x1));进入死循环
srcBuff1传递数据0123到dstBuff1,每两个数之间间隔4,只传输了一次,麻烦您帮我看看这里有什么问题
Nancy Wang:
回复 user4683768:
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.
之前有实现过多次传输吗?还是改了程序之后只能传输一次?
Nancy Wang:
回复 user4683768:
触发方式是什么?