关于PingPong缓冲的困惑
請問在EDMA3里的PingPong緩沖機制中,ping緩沖區和pong緩沖區時存在于哪里?是通道控制器還是每一個通道都分為ping緩沖區和pong緩沖區?另外,在進行pingpong傳輸的時候用的是一個通道還是多個通道呢?在進行ping-pong傳輸的時候,既然有ping?pong兩個目的緩沖區,那么也對應著兩個源緩沖區,這兩個源緩沖區又存在于什么位置呢?最后,我看的C6678自帶的EDMA的例子里面,只是簡單的用dstbuff1和dstbuff2代表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開始。
總結
以上是生活随笔為你收集整理的关于PingPong缓冲的困惑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十条趣味经济学
- 下一篇: 通过rootkit隐蔽行踪 Linux提