資料介紹
DMA在DSP應(yīng)用中至關(guān)重要,本文給出了DMA操作非阻塞的請(qǐng)求方法,針對(duì)TMS320C620x,實(shí)現(xiàn)了與CSL中DAT接口一致的驅(qū)動(dòng)模塊QDAT,并指出了EDMA相關(guān)的高級(jí)特征。
在DSP中,DMA控制器實(shí)際是一個(gè)外設(shè),與其他集成的串口、主機(jī)接口、片外內(nèi)存接口等都在系統(tǒng)外設(shè)總線上,也與其他外設(shè)一樣有一組相關(guān)的控制/狀態(tài)/數(shù)據(jù)寄存器,CPU可以訪問。
非常重要的一點(diǎn)是,DMA通道能夠用于內(nèi)存之間的數(shù)據(jù)傳送。這里內(nèi)存都是統(tǒng)一編址的,包括:片上內(nèi)存,程序和數(shù)據(jù)分立;接在EMIF上的片外內(nèi)存,如SDRAM;外設(shè)的寄存器也都是內(nèi)存映射的(memory-mapped),所以DMA通道也可以用于外設(shè)和內(nèi)存之間,進(jìn)行外設(shè)數(shù)據(jù)接收與發(fā)送。
在DSP的處理模型中,所有數(shù)據(jù)應(yīng)位于片上供CPU處理,不鼓勵(lì)CPU直接訪問片外數(shù)據(jù),因?yàn)镃PU訪問片外資源的時(shí)間較長,周期數(shù)也不確定,對(duì)于實(shí)時(shí)性和確定性不利。片上內(nèi)存有時(shí)也能夠配置成為緩存(cache),緩存控制器會(huì)根據(jù)一定策略、使用DMA方式切換片外的數(shù)據(jù)進(jìn)出緩存,最終使得用戶能夠在片上訪問數(shù)據(jù),這個(gè)過程對(duì)用戶是透明的。正因?yàn)榫彺娴臋C(jī)制是透明的,所以也是很難控制的。比如,一段調(diào)用頻率很高的代碼很可能被不常用的部分清出緩存,因?yàn)樗鼈冇成湎嗤?,但隨后又很快被調(diào)入,這樣會(huì)造成局部的效率降低。
所以,如果能夠明確掌握程序流或數(shù)據(jù)流的運(yùn)轉(zhuǎn)特征,不使用緩存模式,用戶通過DMA進(jìn)行自定義的調(diào)度,可能提高效率。有的處理器不具備緩存控制器,不支持片上內(nèi)存作為緩存,如C6205的片上數(shù)據(jù)內(nèi)存就不能夠配置為緩存,所以主動(dòng)使用DMA移動(dòng)數(shù)據(jù)不可避免。
DSP的DMA功能一般也都較為強(qiáng)大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D數(shù)據(jù)傳送,對(duì)DMA的合理使用可能替代相當(dāng)?shù)?a target='_blank' class='arckwlink_none'>編程效果,如排序、采樣或裁剪。
TI的CSL(Chip Support Library,芯片支持庫)對(duì)于使用DMA給出了很好的支持,有專門的DMA模塊,便于對(duì)DMA的各個(gè)寄存器進(jìn)行控制。還有一個(gè)DAT模塊,使用DMA進(jìn)行內(nèi)存數(shù)據(jù)傳送,函數(shù)DAT_copy()和DAT_fill()就像常用的內(nèi)存操作memcpy()、memset()一樣,只需要在API接口指出源地址、目的地址和長度,或者其他的維數(shù)屬性等即可,不需要再去管具體的寄存器,非常方便。
視頻處理實(shí)例分析
DAT模塊易用,但因?yàn)槭窃贑SL中,所以只能將DMA控制器直接的功能表達(dá)出來。對(duì)于灰度圖像處理(先不考慮將算法處理后的結(jié)果傳回片外的情況),在下面的處理框架中,每次DMA執(zhí)行操作時(shí),CPU在前臺(tái)還可以做算法處理任務(wù)。
。..
task=DAT_copy(。..);//啟動(dòng)頭一個(gè)DAT任務(wù)
。..
while(not_finished){
DAT_wait(task); //本次task完成
task=DAT_copy(。..); //啟動(dòng)下一次的DMA
pingpong_alg_process(。..); //對(duì)本次傳送的數(shù)據(jù)處理
}
當(dāng)視頻為4:2:0 YUV圖像(planar模式)序列,需要處理某一區(qū)域時(shí),實(shí)際上是在相同時(shí)機(jī)處理Y、U、V三塊數(shù)據(jù),通常它們并不連續(xù),也就是說,將會(huì)同時(shí)使用三個(gè)DMA操作。
這里可能可以同時(shí)啟動(dòng)多條DMA通道,但有一些限制:
1. 有的處理器支持同時(shí)啟動(dòng)的DMA通道數(shù)有限,有些DSP有4條通道,但寄存器集只能完整地支持兩條;
2. 由于共享總線和某些接口,同時(shí)工作的DMA通道數(shù)過多將可能增加訪問沖突,降低系統(tǒng)性能;
3. 有時(shí)多條通道又必須同時(shí)使用,比如系統(tǒng)視頻、音頻采集進(jìn)入的數(shù)據(jù)必須占用獨(dú)立的通道。
所以,上面的任務(wù)能夠盡量使用一個(gè)DMA通道完成,不失一般性,DAT模塊的所有操作實(shí)際上是在一條打開的通道上完成的。
那么,對(duì)于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(。..);
這時(shí)問題出現(xiàn)了:C620x的DMA通道一次只能接受一個(gè)傳送請(qǐng)求,也就是說,每次請(qǐng)求必須等到該通道空閑時(shí)才可能真正提交上去,這樣taskY和taskU在后臺(tái)操作時(shí),前臺(tái)無法進(jìn)行taskU和taskV的啟動(dòng),即實(shí)際上前臺(tái)沒有什么處理任務(wù)可做,浪費(fèi)了效率。而這三個(gè)dat任務(wù)綁定在一起,啟動(dòng)時(shí)機(jī)很難拆開。顯然,如果能夠允許DMA請(qǐng)求連續(xù)地提交,將提高效率。
DMA通道請(qǐng)求非阻塞提交的方法
把DMA通道看作一個(gè)單處理單元,每個(gè)DMA操作作為一個(gè)任務(wù),這就形成了一個(gè)單處理多任務(wù)的模型,任務(wù)調(diào)度就是FIFO。不妨定義:
1. DMA通道請(qǐng)求上下文是一個(gè)數(shù)據(jù)結(jié)構(gòu),它包含啟動(dòng)一次DMA傳送所需要設(shè)定的寄存器參數(shù)集合,如源、目的、長度、index寄存器(維數(shù))等等;
2. DMA通道請(qǐng)求上下文隊(duì)列,一個(gè)DMA請(qǐng)求上下文的隊(duì)列用以緩存DMA請(qǐng)求;
DMA通道的使用和請(qǐng)求非阻塞的提交應(yīng)有以下兩條原則:
a. 應(yīng)用程序的使用DMA通道的方法:
提交DMA通道請(qǐng)求(無阻塞),獲得此次任務(wù)的id;在需要使用某任務(wù)的目標(biāo)內(nèi)存時(shí),應(yīng)檢查該id任務(wù)狀態(tài)直到完成;如果完成,即可進(jìn)行相應(yīng)的處理。
b. 無阻塞提交DMA通道請(qǐng)求的實(shí)現(xiàn):標(biāo)志此次DMA傳送任務(wù)正在進(jìn)行;如果DMA通道空閑,設(shè)置寄存器啟動(dòng)DMA操作,標(biāo)志DMA通道正在工作;如果DMA通道正在工作,則將此次DMA請(qǐng)求插入上下文隊(duì)列。
3. DMA中斷服務(wù)程序(注:DAT模塊不使用ISR,只是查詢對(duì)應(yīng)標(biāo)志,確定DMA傳送是否完成):標(biāo)志此次DMA傳送任務(wù)完成;如果DMA請(qǐng)求上下文隊(duì)列為空,標(biāo)志DMA通道空閑;如果DMA請(qǐng)求上下文隊(duì)列非空,則從隊(duì)列中取出頭一個(gè)DMA請(qǐng)求上下文,用以設(shè)置相應(yīng)的寄存器啟動(dòng)DMA操作。
在DSP中,DMA控制器實(shí)際是一個(gè)外設(shè),與其他集成的串口、主機(jī)接口、片外內(nèi)存接口等都在系統(tǒng)外設(shè)總線上,也與其他外設(shè)一樣有一組相關(guān)的控制/狀態(tài)/數(shù)據(jù)寄存器,CPU可以訪問。
非常重要的一點(diǎn)是,DMA通道能夠用于內(nèi)存之間的數(shù)據(jù)傳送。這里內(nèi)存都是統(tǒng)一編址的,包括:片上內(nèi)存,程序和數(shù)據(jù)分立;接在EMIF上的片外內(nèi)存,如SDRAM;外設(shè)的寄存器也都是內(nèi)存映射的(memory-mapped),所以DMA通道也可以用于外設(shè)和內(nèi)存之間,進(jìn)行外設(shè)數(shù)據(jù)接收與發(fā)送。
在DSP的處理模型中,所有數(shù)據(jù)應(yīng)位于片上供CPU處理,不鼓勵(lì)CPU直接訪問片外數(shù)據(jù),因?yàn)镃PU訪問片外資源的時(shí)間較長,周期數(shù)也不確定,對(duì)于實(shí)時(shí)性和確定性不利。片上內(nèi)存有時(shí)也能夠配置成為緩存(cache),緩存控制器會(huì)根據(jù)一定策略、使用DMA方式切換片外的數(shù)據(jù)進(jìn)出緩存,最終使得用戶能夠在片上訪問數(shù)據(jù),這個(gè)過程對(duì)用戶是透明的。正因?yàn)榫彺娴臋C(jī)制是透明的,所以也是很難控制的。比如,一段調(diào)用頻率很高的代碼很可能被不常用的部分清出緩存,因?yàn)樗鼈冇成湎嗤?,但隨后又很快被調(diào)入,這樣會(huì)造成局部的效率降低。
所以,如果能夠明確掌握程序流或數(shù)據(jù)流的運(yùn)轉(zhuǎn)特征,不使用緩存模式,用戶通過DMA進(jìn)行自定義的調(diào)度,可能提高效率。有的處理器不具備緩存控制器,不支持片上內(nèi)存作為緩存,如C6205的片上數(shù)據(jù)內(nèi)存就不能夠配置為緩存,所以主動(dòng)使用DMA移動(dòng)數(shù)據(jù)不可避免。
DSP的DMA功能一般也都較為強(qiáng)大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D數(shù)據(jù)傳送,對(duì)DMA的合理使用可能替代相當(dāng)?shù)?a target='_blank' class='arckwlink_none'>編程效果,如排序、采樣或裁剪。
TI的CSL(Chip Support Library,芯片支持庫)對(duì)于使用DMA給出了很好的支持,有專門的DMA模塊,便于對(duì)DMA的各個(gè)寄存器進(jìn)行控制。還有一個(gè)DAT模塊,使用DMA進(jìn)行內(nèi)存數(shù)據(jù)傳送,函數(shù)DAT_copy()和DAT_fill()就像常用的內(nèi)存操作memcpy()、memset()一樣,只需要在API接口指出源地址、目的地址和長度,或者其他的維數(shù)屬性等即可,不需要再去管具體的寄存器,非常方便。
視頻處理實(shí)例分析
DAT模塊易用,但因?yàn)槭窃贑SL中,所以只能將DMA控制器直接的功能表達(dá)出來。對(duì)于灰度圖像處理(先不考慮將算法處理后的結(jié)果傳回片外的情況),在下面的處理框架中,每次DMA執(zhí)行操作時(shí),CPU在前臺(tái)還可以做算法處理任務(wù)。
。..
task=DAT_copy(。..);//啟動(dòng)頭一個(gè)DAT任務(wù)
。..
while(not_finished){
DAT_wait(task); //本次task完成
task=DAT_copy(。..); //啟動(dòng)下一次的DMA
pingpong_alg_process(。..); //對(duì)本次傳送的數(shù)據(jù)處理
}
當(dāng)視頻為4:2:0 YUV圖像(planar模式)序列,需要處理某一區(qū)域時(shí),實(shí)際上是在相同時(shí)機(jī)處理Y、U、V三塊數(shù)據(jù),通常它們并不連續(xù),也就是說,將會(huì)同時(shí)使用三個(gè)DMA操作。
這里可能可以同時(shí)啟動(dòng)多條DMA通道,但有一些限制:
1. 有的處理器支持同時(shí)啟動(dòng)的DMA通道數(shù)有限,有些DSP有4條通道,但寄存器集只能完整地支持兩條;
2. 由于共享總線和某些接口,同時(shí)工作的DMA通道數(shù)過多將可能增加訪問沖突,降低系統(tǒng)性能;
3. 有時(shí)多條通道又必須同時(shí)使用,比如系統(tǒng)視頻、音頻采集進(jìn)入的數(shù)據(jù)必須占用獨(dú)立的通道。
所以,上面的任務(wù)能夠盡量使用一個(gè)DMA通道完成,不失一般性,DAT模塊的所有操作實(shí)際上是在一條打開的通道上完成的。
那么,對(duì)于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(。..);
這時(shí)問題出現(xiàn)了:C620x的DMA通道一次只能接受一個(gè)傳送請(qǐng)求,也就是說,每次請(qǐng)求必須等到該通道空閑時(shí)才可能真正提交上去,這樣taskY和taskU在后臺(tái)操作時(shí),前臺(tái)無法進(jìn)行taskU和taskV的啟動(dòng),即實(shí)際上前臺(tái)沒有什么處理任務(wù)可做,浪費(fèi)了效率。而這三個(gè)dat任務(wù)綁定在一起,啟動(dòng)時(shí)機(jī)很難拆開。顯然,如果能夠允許DMA請(qǐng)求連續(xù)地提交,將提高效率。
DMA通道請(qǐng)求非阻塞提交的方法
把DMA通道看作一個(gè)單處理單元,每個(gè)DMA操作作為一個(gè)任務(wù),這就形成了一個(gè)單處理多任務(wù)的模型,任務(wù)調(diào)度就是FIFO。不妨定義:
1. DMA通道請(qǐng)求上下文是一個(gè)數(shù)據(jù)結(jié)構(gòu),它包含啟動(dòng)一次DMA傳送所需要設(shè)定的寄存器參數(shù)集合,如源、目的、長度、index寄存器(維數(shù))等等;
2. DMA通道請(qǐng)求上下文隊(duì)列,一個(gè)DMA請(qǐng)求上下文的隊(duì)列用以緩存DMA請(qǐng)求;
DMA通道的使用和請(qǐng)求非阻塞的提交應(yīng)有以下兩條原則:
a. 應(yīng)用程序的使用DMA通道的方法:
提交DMA通道請(qǐng)求(無阻塞),獲得此次任務(wù)的id;在需要使用某任務(wù)的目標(biāo)內(nèi)存時(shí),應(yīng)檢查該id任務(wù)狀態(tài)直到完成;如果完成,即可進(jìn)行相應(yīng)的處理。
b. 無阻塞提交DMA通道請(qǐng)求的實(shí)現(xiàn):標(biāo)志此次DMA傳送任務(wù)正在進(jìn)行;如果DMA通道空閑,設(shè)置寄存器啟動(dòng)DMA操作,標(biāo)志DMA通道正在工作;如果DMA通道正在工作,則將此次DMA請(qǐng)求插入上下文隊(duì)列。
3. DMA中斷服務(wù)程序(注:DAT模塊不使用ISR,只是查詢對(duì)應(yīng)標(biāo)志,確定DMA傳送是否完成):標(biāo)志此次DMA傳送任務(wù)完成;如果DMA請(qǐng)求上下文隊(duì)列為空,標(biāo)志DMA通道空閑;如果DMA請(qǐng)求上下文隊(duì)列非空,則從隊(duì)列中取出頭一個(gè)DMA請(qǐng)求上下文,用以設(shè)置相應(yīng)的寄存器啟動(dòng)DMA操作。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- STM32F103DMA功能實(shí)現(xiàn)
- LMS自適應(yīng)濾波器的MATLAB仿真和DSP實(shí)現(xiàn) 64次下載
- verilog中阻塞賦值和非阻塞賦值到底有什么區(qū)別 0次下載
- FPGA的視頻教程之Verilog中阻塞與非阻塞的詳細(xì)資料說明 2次下載
- TMS320DSP算法標(biāo)準(zhǔn)和指定的DMA架構(gòu)的詳細(xì)描述概述 2次下載
- TMS320VC5505DSP直接存儲(chǔ)器存?。?b class="flag-6" style="color: red">DMA)控制器特點(diǎn)和操作的概述 3次下載
- TMS320C6474 DSP 增強(qiáng)型DMA控制器用戶指南 6次下載
- 基于FPGA技術(shù)的無阻塞ATM交換技術(shù)結(jié)構(gòu)的特點(diǎn)介紹 10次下載
- 淺談關(guān)于DSP的DMA控制技術(shù) 1次下載
- 基于STM32中采用DMA實(shí)現(xiàn)方波的產(chǎn)生和捕獲 23次下載
- 基于FPGA技術(shù)的CATV核心網(wǎng)絡(luò)無阻塞ATM交換結(jié)構(gòu) 5次下載
- DSP芯片中雙通道DMA的研究與設(shè)計(jì) 51次下載
- 采用DSP的DMA控制技術(shù)分析 27次下載
- TMS320C6204DSP中DMA操作的無阻塞請(qǐng)求實(shí)現(xiàn)
- ADSP2116x中DMA的應(yīng)用
- 什么是阻塞和非阻塞? 358次閱讀
- 雅特力AT32F423 DMA使用指南 470次閱讀
- 一種高性能多通道通用DMA設(shè)計(jì)與實(shí)現(xiàn) 1064次閱讀
- 基于STM32H7 EXTI+SPI+DMA雙緩沖應(yīng)用演示 4014次閱讀
- 基于SPI配合DMA實(shí)現(xiàn)理論速度性能 3943次閱讀
- Verilog中阻塞和非阻塞賦值金規(guī) 929次閱讀
- 如何使用 ESP-AT實(shí)現(xiàn)HTTP請(qǐng)求 1065次閱讀
- STM8L051F3的DMA相關(guān)知識(shí) 1425次閱讀
- 時(shí)序邏輯中的阻塞和非阻塞 2851次閱讀
- 淺談鴻蒙內(nèi)核源碼的原子操作 1199次閱讀
- VerilogHDL語言:清阻塞賦值和非阻塞賦值 1062次閱讀
- STM32單片機(jī)串口DMA解析 7908次閱讀
- 如何使用STM32單片機(jī)實(shí)現(xiàn)DMA的同時(shí)發(fā)送和接收 1w次閱讀
- STM32中DMA模塊的使用 6338次閱讀
- S5935如何實(shí)現(xiàn)DMA傳輸?shù)脑O(shè)計(jì)與研究 1667次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1489次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 91次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關(guān)電源原理及各功能電路詳解
- 0.38 MB | 9次下載 | 免費(fèi)
- 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
- 7基于單片機(jī)和 SG3525的程控開關(guān)電源設(shè)計(jì)
- 0.23 MB | 3次下載 | 免費(fèi)
- 8基于單片機(jī)的紅外風(fēng)扇遙控
- 0.23 MB | 3次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30319次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論
查看更多