关于PingPong缓冲的困惑

请问在EDMA3里的PingPong缓冲机制中,ping缓冲区和pong缓冲区时存在于哪里?是通道控制器还是每一个通道都分为ping缓冲区和pong缓冲区?另外,在进行pingpong传输的时候用的是一个通道还是多个通道呢?在进行ping-pong传输的时候,既然有ping pong两个目的缓冲区,那么也对应着两个源缓冲区,这两个源缓冲区又存在于什么位置呢?最后,我看的C6678自带的EDMA的例子里面,只是简单的用dstbuff1dstbuff2代表ping/pong缓冲区,他们和实际的ping/pong缓冲区是怎么对应起来的呢?谢谢!


EDMA3中的ping pong机制是利用link transfer机制完成的。也可以实现三个或者以上的环形buffer的设计。具体可以看看下面文档中的“2.3.7 Linking Transfers”。pingpong机制,一般需要设置一个工作的参数表,一个ping参数表和一个pong参数表。附件是一个配置例子。


 我看了2.3.7关于linking的描述,我的理解是其实PingPong缓冲就是给一个通道设置Ping参数和Pong参数这两组相互链接的参数,然后利用这两组参数交替进行传输,请问我这样的理解是否正确?谢谢!

 现在有一个问题是,如果在某一个确定的外设和内存之间进行数据传输,采用PingPong机制,那么Ping参数里的源地址和Pong参数里的源地址是否都为外设的地址?Ping参数里的目的地址和Pong参数里的目的地址是否都为内存的地址?如果不是的话,那么Ping参数和Pong参数里的目的地址和源地址应该根据什么进行设置呢?谢谢!



你的理解正确。

可以在源地址使用两个buffer也可以在目的地址使用两个buffer,也可以同时都设置两个buffer。你假设的外设地址不变,目的buffer变化时一种常用的用法。



 根据你的截图来看,初始化参数和Ping参数、Pong参数的源地址是一样的,但是Ping参数和Pong参数的目的地址分别为两个不同的缓冲区地址,也就是说EDMA从同一个源地址读取数据进行传输,然后交替往Ping的缓冲区和Pong的缓冲区传输数据,那么请问,Ping缓冲区和Pong缓冲区是人为的将目标位置(比如说内存)进行划分后得到的吗?还是本来就存在,只不过需要人为的指出来然后使用就行了?谢谢!

 在执行EDMA的pingpong缓冲的时候设置了两组参数即ping参数和pong参数,请问触发传输的时候先加载哪一组参数呢?谢谢!


上面的图有三个参数表,一个存ping的配置,一个存pong的配置,还有一个叫working参数表。初始如果working表放PING的配置就从ping开始。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值