DSP中DMA操作的無阻塞請求實現(xiàn)
發(fā)布時間:2007/8/23 0:00:00 訪問次數(shù):1025
DMA在DSP應(yīng)用中至關(guān)重要,本文給出了DMA操作非阻塞的請求方法,針對TMS320C620x,實現(xiàn)了與CSL中DAT接口一致的驅(qū)動模塊QDAT,并指出了EDMA相關(guān)的高級特征。
在DSP中,DMA控制器實際是一個外設(shè),與其他集成的串口、主機(jī)接口、片外內(nèi)存接口等都在系統(tǒng)外設(shè)總線上,也與其他外設(shè)一樣有一組相關(guān)的控制/狀態(tài)/數(shù)據(jù)寄存器,CPU可以訪問。
非常重要的一點是,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處理,不鼓勵CPU直接訪問片外數(shù)據(jù),因為CPU訪問片外資源的時間較長,周期數(shù)也不確定,對于實時性和確定性不利。片上內(nèi)存有時也能夠配置成為緩存(cache),緩存控制器會根據(jù)一定策略、使用DMA方式切換片外的數(shù)據(jù)進(jìn)出緩存,最終使得用戶能夠在片上訪問數(shù)據(jù),這個過程對用戶是透明的。正因為緩存的機(jī)制是透明的,所以也是很難控制的。比如,一段調(diào)用頻率很高的代碼很可能被不常用的部分清出緩存,因為它們映射相同,但隨后又很快被調(diào)入,這樣會造成局部的效率降低。
所以,如果能夠明確掌握程序流或數(shù)據(jù)流的運(yùn)轉(zhuǎn)特征,不使用緩存模式,用戶通過DMA進(jìn)行自定義的調(diào)度,可能提高效率。有的處理器不具備緩存控制器,不支持片上內(nèi)存作為緩存,如C6205的片上數(shù)據(jù)內(nèi)存就不能夠配置為緩存,所以主動使用DMA移動數(shù)據(jù)不可避免。
DSP的DMA功能一般也都較為強(qiáng)大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D數(shù)據(jù)傳送,對DMA的合理使用可能替代相當(dāng)?shù)木幊绦Ч,如排序、采樣或裁剪?/P>
TI的CSL(Chip Support Library,芯片支持庫)對于使用DMA給出了很好的支持,有專門的DMA模塊,便于對DMA的各個寄存器進(jìn)行控制。還有一個DAT模塊,使用DMA進(jìn)行內(nèi)存數(shù)據(jù)傳送,函數(shù)DAT\_copy()和DAT\_fill()就像常用的內(nèi)存操作memcpy()、memset()一樣,只需要在API接口指出源地址、目的地址和長度,或者其他的維數(shù)屬性等即可,不需要再去管具體的寄存器,非常方便。
視頻處理實例分析
DAT模塊易用,但因為是在CSL中,所以只能將DMA控制器直接的功能表達(dá)出來。對于灰度圖像處理(先不考慮將算法處理后的結(jié)果傳回片外的情況),在下面的處理框架中,每次DMA執(zhí)行操作時,CPU在前臺還可以做算法處理任務(wù)。
...
task=DAT_copy(...);//啟動頭一個DAT任務(wù)
...
while(not_finished){
DAT_wait(task); //本次task完成
task=DAT_copy(...); //啟動下一次的DMA
pingpong_alg_process(...); //對本次傳送的數(shù)據(jù)處理
}
當(dāng)視頻為4:2:0 YUV圖像(planar模式)序列,需要處理某一區(qū)域時,實際上是在相同時機(jī)處理Y、U、V三塊數(shù)據(jù),通常它們并不連續(xù),也就是說,將會同時使用三個DMA操作。
這里可能可以同時啟動多條DMA通道,但有一些限制:
1. 有的處理器支持同時啟動的DMA通道數(shù)有限,有些DSP有4條通道,但寄存器集只能完整地支持兩條;
2. 由于共享總線和某些接口,同時工作的DMA通道數(shù)過多將可能增加訪問沖突,降低系統(tǒng)性能;
3. 有時多條通道又必須同時使用,比如系統(tǒng)視頻、音頻采集進(jìn)入的數(shù)據(jù)必須占用獨立的通道。
所以,上面的任務(wù)能夠盡量使用一個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(...);
這時問題出現(xiàn)了:C620x的DMA通道一次只能接受一個傳送請求,也就是說,每次請求必須等到該通道空閑時才可能真正提交上去,這樣taskY和taskU在后臺操作時,前臺無
DMA在DSP應(yīng)用中至關(guān)重要,本文給出了DMA操作非阻塞的請求方法,針對TMS320C620x,實現(xiàn)了與CSL中DAT接口一致的驅(qū)動模塊QDAT,并指出了EDMA相關(guān)的高級特征。
在DSP中,DMA控制器實際是一個外設(shè),與其他集成的串口、主機(jī)接口、片外內(nèi)存接口等都在系統(tǒng)外設(shè)總線上,也與其他外設(shè)一樣有一組相關(guān)的控制/狀態(tài)/數(shù)據(jù)寄存器,CPU可以訪問。
非常重要的一點是,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處理,不鼓勵CPU直接訪問片外數(shù)據(jù),因為CPU訪問片外資源的時間較長,周期數(shù)也不確定,對于實時性和確定性不利。片上內(nèi)存有時也能夠配置成為緩存(cache),緩存控制器會根據(jù)一定策略、使用DMA方式切換片外的數(shù)據(jù)進(jìn)出緩存,最終使得用戶能夠在片上訪問數(shù)據(jù),這個過程對用戶是透明的。正因為緩存的機(jī)制是透明的,所以也是很難控制的。比如,一段調(diào)用頻率很高的代碼很可能被不常用的部分清出緩存,因為它們映射相同,但隨后又很快被調(diào)入,這樣會造成局部的效率降低。
所以,如果能夠明確掌握程序流或數(shù)據(jù)流的運(yùn)轉(zhuǎn)特征,不使用緩存模式,用戶通過DMA進(jìn)行自定義的調(diào)度,可能提高效率。有的處理器不具備緩存控制器,不支持片上內(nèi)存作為緩存,如C6205的片上數(shù)據(jù)內(nèi)存就不能夠配置為緩存,所以主動使用DMA移動數(shù)據(jù)不可避免。
DSP的DMA功能一般也都較為強(qiáng)大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D數(shù)據(jù)傳送,對DMA的合理使用可能替代相當(dāng)?shù)木幊绦Ч,如排序、采樣或裁剪?/P>
TI的CSL(Chip Support Library,芯片支持庫)對于使用DMA給出了很好的支持,有專門的DMA模塊,便于對DMA的各個寄存器進(jìn)行控制。還有一個DAT模塊,使用DMA進(jìn)行內(nèi)存數(shù)據(jù)傳送,函數(shù)DAT\_copy()和DAT\_fill()就像常用的內(nèi)存操作memcpy()、memset()一樣,只需要在API接口指出源地址、目的地址和長度,或者其他的維數(shù)屬性等即可,不需要再去管具體的寄存器,非常方便。
視頻處理實例分析
DAT模塊易用,但因為是在CSL中,所以只能將DMA控制器直接的功能表達(dá)出來。對于灰度圖像處理(先不考慮將算法處理后的結(jié)果傳回片外的情況),在下面的處理框架中,每次DMA執(zhí)行操作時,CPU在前臺還可以做算法處理任務(wù)。
...
task=DAT_copy(...);//啟動頭一個DAT任務(wù)
...
while(not_finished){
DAT_wait(task); //本次task完成
task=DAT_copy(...); //啟動下一次的DMA
pingpong_alg_process(...); //對本次傳送的數(shù)據(jù)處理
}
當(dāng)視頻為4:2:0 YUV圖像(planar模式)序列,需要處理某一區(qū)域時,實際上是在相同時機(jī)處理Y、U、V三塊數(shù)據(jù),通常它們并不連續(xù),也就是說,將會同時使用三個DMA操作。
這里可能可以同時啟動多條DMA通道,但有一些限制:
1. 有的處理器支持同時啟動的DMA通道數(shù)有限,有些DSP有4條通道,但寄存器集只能完整地支持兩條;
2. 由于共享總線和某些接口,同時工作的DMA通道數(shù)過多將可能增加訪問沖突,降低系統(tǒng)性能;
3. 有時多條通道又必須同時使用,比如系統(tǒng)視頻、音頻采集進(jìn)入的數(shù)據(jù)必須占用獨立的通道。
所以,上面的任務(wù)能夠盡量使用一個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(...);
這時問題出現(xiàn)了:C620x的DMA通道一次只能接受一個傳送請求,也就是說,每次請求必須等到該通道空閑時才可能真正提交上去,這樣taskY和taskU在后臺操作時,前臺無
熱門點擊
- 移相法用于SSB信號的調(diào)制
- ADSP-2106X SHARC DSPs軟
- DSP中DMA操作的無阻塞請求實現(xiàn)
- C5402 DSP自舉引導(dǎo)方法的分析與研究
- 由DSP芯片生成電壓空間矢量脈寬調(diào)制波
- 二進(jìn)制數(shù)折半查找算法在DSP上的實現(xiàn)
- 基于TMS320VC5402的音頻信號采集與
- DVB_C機(jī)頂盒中的視頻信號處理
- Blackfin處理器的調(diào)試功能對成功設(shè)計的
- 基于DSP的正弦信號發(fā)生器設(shè)計
推薦技術(shù)資料
- 業(yè)余條件下PCM2702
- PGM2702采用SSOP28封裝,引腳小而密,EP3... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究