各位专家好!
我在编写EDMA PingPong传输的测试程序时,Ping参数和Pong参数的设置如下所示,由于设置了两个源缓冲区srcBuff1、srcBuff2和对应的两个目的缓冲区dstBuff1、dstBuff2,所以在传输的时候srcBuff1中的数据往dstBuff1里传送,srcBuff2的数据往dstBuff2里传送
/***************************设置ping参数****************************************/
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_A, \
CSL_EDMA3_ADDRMODE_INCR, \
CSL_EDMA3_ADDRMODE_INCR );
myParamSetup.srcAddr = (Uint32)srcBuff1;
myParamSetup.aCntbCnt = CSL_EDMA3_CNT_MAKE(256,1);
myParamSetup.dstAddr = (Uint32)dstBuff1;
myParamSetup.srcDstBidx = CSL_EDMA3_BIDX_MAKE(1,1);
myParamSetup.linkBcntrld= CSL_EDMA3_LINKBCNTRLD_MAKE(hParamPong,0);//ping的参数链接地址是Pong的参数,只传输一帧数据,故下一块的ccnt为0
myParamSetup.srcDstCidx = CSL_EDMA3_CIDX_MAKE(0,1);
myParamSetup.cCnt = 1;
/* Ping setup*/
CSL_edma3ParamSetup(hParamPing,&myParamSetup);
/***************************设置pong参数****************************************/
myParamSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(hParamPing,0);//pong的参数链接地址是Ping的参数,只传输一帧数据,故下一块的ccnt为0
myParamSetup.option = CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS, \
CSL_EDMA3_TCCH_DIS, \
CSL_EDMA3_ITCINT_DIS, \
CSL_EDMA3_TCINT_EN,\
1, CSL_EDMA3_TCC_NORMAL,\
CSL_EDMA3_FIFOWIDTH_NONE, \
CSL_EDMA3_STATIC_EN, \
CSL_EDMA3_SYNC_A, \
CSL_EDMA3_ADDRMODE_INCR, \
CSL_EDMA3_ADDRMODE_INCR );
myParamSetup.srcAddr = (Uint32)srcBuff2;
myParamSetup.dstAddr = (Uint32)dstBuff2;
/* Pong setup */
CSL_edma3ParamSetup(hParamPong,&myParamSetup);
现在我需要将数据从一个外设往内存里面传输,希望只设置一个源缓冲区,而设置两个目的缓冲区,交替往两个目的缓冲区里传输数据,问题是,如果按照我上面的方法设置参数的话,由于PingPong两组参数通过link相互链接,这样会导致数据往一个目的缓冲区传输以后又往另一个目的缓冲区重新传输一遍,但我希望的是将其中一个目的缓冲区装满以后,继续将源缓冲区剩下的数据往另一个目的缓冲区传送,而不是重复传送同样的数据,请问应该怎么样设置参数呢?谢谢!