資料介紹
DMA在DSP應用中至關重要,本文給出了DMA操作非阻塞的請求方法,針對TMS320C620x,實現了與CSL中DAT接口一致的驅動模塊QDAT,并指出了EDMA相關的高級特征。
在DSP中,DMA控制器實際是一個外設,與其他集成的串口、主機接口、片外內存接口等都在系統外設總線上,也與其他外設一樣有一組相關的控制/狀態/數據寄存器,CPU可以訪問。
非常重要的一點是,DMA通道能夠用于內存之間的數據傳送。這里內存都是統一編址的,包括:片上內存,程序和數據分立;接在EMIF上的片外內存,如SDRAM;外設的寄存器也都是內存映射的(memory-mapped),所以DMA通道也可以用于外設和內存之間,進行外設數據接收與發送。
在DSP的處理模型中,所有數據應位于片上供CPU處理,不鼓勵CPU直接訪問片外數據,因為CPU訪問片外資源的時間較長,周期數也不確定,對于實時性和確定性不利。片上內存有時也能夠配置成為緩存(cache),緩存控制器會根據一定策略、使用DMA方式切換片外的數據進出緩存,最終使得用戶能夠在片上訪問數據,這個過程對用戶是透明的。正因為緩存的機制是透明的,所以也是很難控制的。比如,一段調用頻率很高的代碼很可能被不常用的部分清出緩存,因為它們映射相同,但隨后又很快被調入,這樣會造成局部的效率降低。
所以,如果能夠明確掌握程序流或數據流的運轉特征,不使用緩存模式,用戶通過DMA進行自定義的調度,可能提高效率。有的處理器不具備緩存控制器,不支持片上內存作為緩存,如C6205的片上數據內存就不能夠配置為緩存,所以主動使用DMA移動數據不可避免。
DSP的DMA功能一般也都較為強大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D數據傳送,對DMA的合理使用可能替代相當的編程效果,如排序、采樣或裁剪。
TI的CSL(Chip Support Library,芯片支持庫)對于使用DMA給出了很好的支持,有專門的DMA模塊,便于對DMA的各個寄存器進行控制。還有一個DAT模塊,使用DMA進行內存數據傳送,函數DAT_copy()和DAT_fill()就像常用的內存操作memcpy()、memset()一樣,只需要在API接口指出源地址、目的地址和長度,或者其他的維數屬性等即可,不需要再去管具體的寄存器,非常方便。
視頻處理實例分析
DAT模塊易用,但因為是在CSL中,所以只能將DMA控制器直接的功能表達出來。對于灰度圖像處理(先不考慮將算法處理后的結果傳回片外的情況),在下面的處理框架中,每次DMA執行操作時,CPU在前臺還可以做算法處理任務。
。..
task=DAT_copy(。..);//啟動頭一個DAT任務
。..
while(not_finished){
DAT_wait(task); //本次task完成
task=DAT_copy(。..); //啟動下一次的DMA
pingpong_alg_process(。..); //對本次傳送的數據處理
}
當視頻為4:2:0 YUV圖像(planar模式)序列,需要處理某一區域時,實際上是在相同時機處理Y、U、V三塊數據,通常它們并不連續,也就是說,將會同時使用三個DMA操作。
這里可能可以同時啟動多條DMA通道,但有一些限制:
1. 有的處理器支持同時啟動的DMA通道數有限,有些DSP有4條通道,但寄存器集只能完整地支持兩條;
2. 由于共享總線和某些接口,同時工作的DMA通道數過多將可能增加訪問沖突,降低系統性能;
3. 有時多條通道又必須同時使用,比如系統視頻、音頻采集進入的數據必須占用獨立的通道。
所以,上面的任務能夠盡量使用一個DMA通道完成,不失一般性,DAT模塊的所有操作實際上是在一條打開的通道上完成的。
那么,對于YUV圖像,處理程序框架類似上面,可能如下,
。..
taskY = DAT_copy(。..);
taskU = DAT_copy(。..);
taskV = DAT_copy(。..);
。..
while(not_finished){
DAT_wait(taskY);
DAT_wait(taskU);
DAT_wait(taskV);
taskY = DAT_copy(。..);
taskU = DAT_copy(。..);
taskV = DAT_copy(。..);
YUV_pingpong_process(。..);
這時問題出現了:C620x的DMA通道一次只能接受一個傳送請求,也就是說,每次請求必須等到該通道空閑時才可能真正提交上去,這樣taskY和taskU在后臺操作時,前臺無法進行taskU和taskV的啟動,即實際上前臺沒有什么處理任務可做,浪費了效率。而這三個dat任務綁定在一起,啟動時機很難拆開。顯然,如果能夠允許DMA請求連續地提交,將提高效率。
DMA通道請求非阻塞提交的方法
把DMA通道看作一個單處理單元,每個DMA操作作為一個任務,這就形成了一個單處理多任務的模型,任務調度就是FIFO。不妨定義:
1. DMA通道請求上下文是一個數據結構,它包含啟動一次DMA傳送所需要設定的寄存器參數集合,如源、目的、長度、index寄存器(維數)等等;
2. DMA通道請求上下文隊列,一個DMA請求上下文的隊列用以緩存DMA請求;
DMA通道的使用和請求非阻塞的提交應有以下兩條原則:
a. 應用程序的使用DMA通道的方法:
提交DMA通道請求(無阻塞),獲得此次任務的id;在需要使用某任務的目標內存時,應檢查該id任務狀態直到完成;如果完成,即可進行相應的處理。
b. 無阻塞提交DMA通道請求的實現:標志此次DMA傳送任務正在進行;如果DMA通道空閑,設置寄存器啟動DMA操作,標志DMA通道正在工作;如果DMA通道正在工作,則將此次DMA請求插入上下文隊列。
3. DMA中斷服務程序(注:DAT模塊不使用ISR,只是查詢對應標志,確定DMA傳送是否完成):標志此次DMA傳送任務完成;如果DMA請求上下文隊列為空,標志DMA通道空閑;如果DMA請求上下文隊列非空,則從隊列中取出頭一個DMA請求上下文,用以設置相應的寄存器啟動DMA操作。
在DSP中,DMA控制器實際是一個外設,與其他集成的串口、主機接口、片外內存接口等都在系統外設總線上,也與其他外設一樣有一組相關的控制/狀態/數據寄存器,CPU可以訪問。
非常重要的一點是,DMA通道能夠用于內存之間的數據傳送。這里內存都是統一編址的,包括:片上內存,程序和數據分立;接在EMIF上的片外內存,如SDRAM;外設的寄存器也都是內存映射的(memory-mapped),所以DMA通道也可以用于外設和內存之間,進行外設數據接收與發送。
在DSP的處理模型中,所有數據應位于片上供CPU處理,不鼓勵CPU直接訪問片外數據,因為CPU訪問片外資源的時間較長,周期數也不確定,對于實時性和確定性不利。片上內存有時也能夠配置成為緩存(cache),緩存控制器會根據一定策略、使用DMA方式切換片外的數據進出緩存,最終使得用戶能夠在片上訪問數據,這個過程對用戶是透明的。正因為緩存的機制是透明的,所以也是很難控制的。比如,一段調用頻率很高的代碼很可能被不常用的部分清出緩存,因為它們映射相同,但隨后又很快被調入,這樣會造成局部的效率降低。
所以,如果能夠明確掌握程序流或數據流的運轉特征,不使用緩存模式,用戶通過DMA進行自定義的調度,可能提高效率。有的處理器不具備緩存控制器,不支持片上內存作為緩存,如C6205的片上數據內存就不能夠配置為緩存,所以主動使用DMA移動數據不可避免。
DSP的DMA功能一般也都較為強大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D數據傳送,對DMA的合理使用可能替代相當的編程效果,如排序、采樣或裁剪。
TI的CSL(Chip Support Library,芯片支持庫)對于使用DMA給出了很好的支持,有專門的DMA模塊,便于對DMA的各個寄存器進行控制。還有一個DAT模塊,使用DMA進行內存數據傳送,函數DAT_copy()和DAT_fill()就像常用的內存操作memcpy()、memset()一樣,只需要在API接口指出源地址、目的地址和長度,或者其他的維數屬性等即可,不需要再去管具體的寄存器,非常方便。
視頻處理實例分析
DAT模塊易用,但因為是在CSL中,所以只能將DMA控制器直接的功能表達出來。對于灰度圖像處理(先不考慮將算法處理后的結果傳回片外的情況),在下面的處理框架中,每次DMA執行操作時,CPU在前臺還可以做算法處理任務。
。..
task=DAT_copy(。..);//啟動頭一個DAT任務
。..
while(not_finished){
DAT_wait(task); //本次task完成
task=DAT_copy(。..); //啟動下一次的DMA
pingpong_alg_process(。..); //對本次傳送的數據處理
}
當視頻為4:2:0 YUV圖像(planar模式)序列,需要處理某一區域時,實際上是在相同時機處理Y、U、V三塊數據,通常它們并不連續,也就是說,將會同時使用三個DMA操作。
這里可能可以同時啟動多條DMA通道,但有一些限制:
1. 有的處理器支持同時啟動的DMA通道數有限,有些DSP有4條通道,但寄存器集只能完整地支持兩條;
2. 由于共享總線和某些接口,同時工作的DMA通道數過多將可能增加訪問沖突,降低系統性能;
3. 有時多條通道又必須同時使用,比如系統視頻、音頻采集進入的數據必須占用獨立的通道。
所以,上面的任務能夠盡量使用一個DMA通道完成,不失一般性,DAT模塊的所有操作實際上是在一條打開的通道上完成的。
那么,對于YUV圖像,處理程序框架類似上面,可能如下,
。..
taskY = DAT_copy(。..);
taskU = DAT_copy(。..);
taskV = DAT_copy(。..);
。..
while(not_finished){
DAT_wait(taskY);
DAT_wait(taskU);
DAT_wait(taskV);
taskY = DAT_copy(。..);
taskU = DAT_copy(。..);
taskV = DAT_copy(。..);
YUV_pingpong_process(。..);
這時問題出現了:C620x的DMA通道一次只能接受一個傳送請求,也就是說,每次請求必須等到該通道空閑時才可能真正提交上去,這樣taskY和taskU在后臺操作時,前臺無法進行taskU和taskV的啟動,即實際上前臺沒有什么處理任務可做,浪費了效率。而這三個dat任務綁定在一起,啟動時機很難拆開。顯然,如果能夠允許DMA請求連續地提交,將提高效率。
DMA通道請求非阻塞提交的方法
把DMA通道看作一個單處理單元,每個DMA操作作為一個任務,這就形成了一個單處理多任務的模型,任務調度就是FIFO。不妨定義:
1. DMA通道請求上下文是一個數據結構,它包含啟動一次DMA傳送所需要設定的寄存器參數集合,如源、目的、長度、index寄存器(維數)等等;
2. DMA通道請求上下文隊列,一個DMA請求上下文的隊列用以緩存DMA請求;
DMA通道的使用和請求非阻塞的提交應有以下兩條原則:
a. 應用程序的使用DMA通道的方法:
提交DMA通道請求(無阻塞),獲得此次任務的id;在需要使用某任務的目標內存時,應檢查該id任務狀態直到完成;如果完成,即可進行相應的處理。
b. 無阻塞提交DMA通道請求的實現:標志此次DMA傳送任務正在進行;如果DMA通道空閑,設置寄存器啟動DMA操作,標志DMA通道正在工作;如果DMA通道正在工作,則將此次DMA請求插入上下文隊列。
3. DMA中斷服務程序(注:DAT模塊不使用ISR,只是查詢對應標志,確定DMA傳送是否完成):標志此次DMA傳送任務完成;如果DMA請求上下文隊列為空,標志DMA通道空閑;如果DMA請求上下文隊列非空,則從隊列中取出頭一個DMA請求上下文,用以設置相應的寄存器啟動DMA操作。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- STM32F103DMA功能實現
- LMS自適應濾波器的MATLAB仿真和DSP實現 73次下載
- verilog中阻塞賦值和非阻塞賦值到底有什么區別 0次下載
- FPGA的視頻教程之Verilog中阻塞與非阻塞的詳細資料說明 2次下載
- TMS320DSP算法標準和指定的DMA架構的詳細描述概述 2次下載
- TMS320VC5505DSP直接存儲器存取(DMA)控制器特點和操作的概述 3次下載
- TMS320C6474 DSP 增強型DMA控制器用戶指南 6次下載
- 基于FPGA技術的無阻塞ATM交換技術結構的特點介紹 10次下載
- 淺談關于DSP的DMA控制技術 1次下載
- 基于STM32中采用DMA實現方波的產生和捕獲 23次下載
- 基于FPGA技術的CATV核心網絡無阻塞ATM交換結構 5次下載
- DSP芯片中雙通道DMA的研究與設計 51次下載
- 采用DSP的DMA控制技術分析 27次下載
- TMS320C6204DSP中DMA操作的無阻塞請求實現
- ADSP2116x中DMA的應用
- 在testbench中如何使用阻塞賦值和非阻塞賦值 1.1k次閱讀
- CKS32F107xx系列的DMA控制器簡介 1.4k次閱讀
- 無阻力導軌在工作中需要注意什么? 635次閱讀
- 什么是阻塞和非阻塞? 1.2k次閱讀
- 雅特力AT32F423 DMA使用指南 1.4k次閱讀
- 一種高性能多通道通用DMA設計與實現 1.1k次閱讀
- 基于STM32H7 EXTI+SPI+DMA雙緩沖應用演示 8.7k次閱讀
- Verilog中阻塞和非阻塞賦值金規 2.7k次閱讀
- STM8L051F3的DMA相關知識 2.9k次閱讀
- 時序邏輯中的阻塞和非阻塞 3.7k次閱讀
- 淺談鴻蒙內核源碼的原子操作 1.8k次閱讀
- VerilogHDL語言:清阻塞賦值和非阻塞賦值 1.5k次閱讀
- STM32單片機串口DMA解析 8.5k次閱讀
- 如何使用STM32單片機實現DMA的同時發送和接收 1.2w次閱讀
- S5935如何實現DMA傳輸的設計與研究 2.2k次閱讀
下載排行
本周
- 1MDD品牌三極管BC807數據手冊
- 3.00 MB | 次下載 | 免費
- 2MDD品牌三極管BC817數據手冊
- 2.51 MB | 次下載 | 免費
- 3MDD品牌三極管D882數據手冊
- 3.49 MB | 次下載 | 免費
- 4MDD品牌三極管MMBT2222A數據手冊
- 3.26 MB | 次下載 | 免費
- 5MDD品牌三極管MMBTA56數據手冊
- 3.09 MB | 次下載 | 免費
- 6MDD品牌三極管MMBTA92數據手冊
- 2.32 MB | 次下載 | 免費
- 7STM32G474 HRTIME PWM 丟波問題分析與解決
- 1.00 MB | 次下載 | 3 積分
- 8新能源電動汽車高壓線束的銅鋁連接解決方案
- 2.71 MB | 次下載 | 2 積分
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 3PC5502負載均流控制電路數據手冊
- 1.63 MB | 22次下載 | 免費
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
- 0.63 MB | 6次下載 | 1 積分
- 5UWB653Pro USB口測距通信定位模塊規格書
- 838.47 KB | 5次下載 | 免費
- 6技嘉H110主板IT8628E_BX IO電路圖資料
- 2.61 MB | 4次下載 | 1 積分
- 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 8蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發燒友App





創作
發文章
發帖
提問
發資料
發視頻
上傳資料賺積分
評論