DSP中DMA操作的無(wú)阻塞請求實(shí)現

發(fā)布時(shí)間:2010-9-26 14:08    發(fā)布者:eetech
關(guān)鍵詞: DMA , dsp , 請求 , 無(wú)阻塞
DMA在DSP應用中至關(guān)重要,本文給出了DMA操作非阻塞的請求方法,針對TMS320C620x,實(shí)現了與CSL中DAT接口一致的驅動(dòng)模塊QDAT,并指出了EDMA相關(guān)的高級特征。  

在DSP中,DMA控制器實(shí)際是一個(gè)外設,與其他集成的串口、主機接口、片外內存接口等都在系統外設總線(xiàn)上,也與其他外設一樣有一組相關(guān)的控制/狀態(tài)/數據寄存器,CPU可以訪(fǎng)問(wèn)。  

非常重要的一點(diǎn)是,DMA通道能夠用于內存之間的數據傳送。這里內存都是統一編址的,包括:片上內存,程序和數據分立;接在EMIF上的片外內存,如SDRAM;外設的寄存器也都是內存映射的(memory-mapped),所以DMA通道也可以用于外設和內存之間,進(jìn)行外設數據接收與發(fā)送。  

在DSP的處理模型中,所有數據應位于片上供CPU處理,不鼓勵CPU直接訪(fǎng)問(wèn)片外數據,因為CPU訪(fǎng)問(wèn)片外資源的時(shí)間較長(cháng),周期數也不確定,對于實(shí)時(shí)性和確定性不利。片上內存有時(shí)也能夠配置成為緩存(cache),緩存控制器會(huì )根據一定策略、使用DMA方式切換片外的數據進(jìn)出緩存,最終使得用戶(hù)能夠在片上訪(fǎng)問(wèn)數據,這個(gè)過(guò)程對用戶(hù)是透明的。正因為緩存的機制是透明的,所以也是很難控制的。比如,一段調用頻率很高的代碼很可能被不常用的部分清出緩存,因為它們映射相同,但隨后又很快被調入,這樣會(huì )造成局部的效率降低。  

所以,如果能夠明確掌握程序流或數據流的運轉特征,不使用緩存模式,用戶(hù)通過(guò)DMA進(jìn)行自定義的調度,可能提高效率。有的處理器不具備緩存控制器,不支持片上內存作為緩存,如C6205的片上數據內存就不能夠配置為緩存,所以主動(dòng)使用DMA移動(dòng)數據不可避免。  

DSP的DMA功能一般也都較為強大,TI C6000系列的DMA通道支持1D-1D、1D-2D、2D-1D以及常用的2D-2D數據傳送,對DMA的合理使用可能替代相當的編程效果,如排序、采樣或裁剪。  

TI的CSL(Chip Support Library,芯片支持庫)對于使用DMA給出了很好的支持,有專(zhuān)門(mén)的DMA模塊,便于對DMA的各個(gè)寄存器進(jìn)行控制。還有一個(gè)DAT模塊,使用DMA進(jìn)行內存數據傳送,函數DAT\_copy()和DAT\_fill()就像常用的內存操作memcpy()、memset()一樣,只需要在A(yíng)PI接口指出源地址、目的地址和長(cháng)度,或者其他的維數屬性等即可,不需要再去管具體的寄存器,非常方便。  

視頻處理實(shí)例分析  

DAT模塊易用,但因為是在CSL中,所以只能將DMA控制器直接的功能表達出來(lái)。對于灰度圖像處理(先不考慮將算法處理后的結果傳回片外的情況),在下面的處理框架中,每次DMA執行操作時(shí),CPU在前臺還可以做算法處理任務(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(...); //對本次傳送的數據處理  

}  

當視頻為4:2:0 YUV圖像(planar模式)序列,需要處理某一區域時(shí),實(shí)際上是在相同時(shí)機處理Y、U、V三塊數據,通常它們并不連續,也就是說(shuō),將會(huì )同時(shí)使用三個(gè)DMA操作。  

這里可能可以同時(shí)啟動(dòng)多條DMA通道,但有一些限制:  

1. 有的處理器支持同時(shí)啟動(dòng)的DMA通道數有限,有些DSP有4條通道,但寄存器集只能完整地支持兩條;  

2. 由于共享總線(xiàn)和某些接口,同時(shí)工作的DMA通道數過(guò)多將可能增加訪(fǎng)問(wèn)沖突,降低系統性能;  

3. 有時(shí)多條通道又必須同時(shí)使用,比如系統視頻、音頻采集進(jìn)入的數據必須占用獨立的通道。  

所以,上面的任務(wù)能夠盡量使用一個(gè)DMA通道完成,不失一般性,DAT模塊的所有操作實(shí)際上是在一條打開(kāi)的通道上完成的。  

那么,對于YUV圖像,處理程序框架類(lèi)似上面,可能如下,  

...  

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í)問(wèn)題出現了:C620x的DMA通道一次只能接受一個(gè)傳送請求,也就是說(shuō),每次請求必須等到該通道空閑時(shí)才可能真正提交上去,這樣taskY和taskU在后臺操作時(shí),前臺無(wú)法進(jìn)行taskU和taskV的啟動(dòng),即實(shí)際上前臺沒(méi)有什么處理任務(wù)可做,浪費了效率。而這三個(gè)dat任務(wù)綁定在一起,啟動(dòng)時(shí)機很難拆開(kāi)。顯然,如果能夠允許DMA請求連續地提交,將提高效率。

DMA通道請求非阻塞提交的方法  

把DMA通道看作一個(gè)單處理單元,每個(gè)DMA操作作為一個(gè)任務(wù),這就形成了一個(gè)單處理多任務(wù)的模型,任務(wù)調度就是FIFO。不妨定義:  

1. DMA通道請求上下文是一個(gè)數據結構,它包含啟動(dòng)一次DMA傳送所需要設定的寄存器參數集合,如源、目的、長(cháng)度、index寄存器(維數)等等;  

2. DMA通道請求上下文隊列,一個(gè)DMA請求上下文的隊列用以緩存DMA請求;  

DMA通道的使用和請求非阻塞的提交應有以下兩條原則:  

a. 應用程序的使用DMA通道的方法:  

提交DMA通道請求(無(wú)阻塞),獲得此次任務(wù)的id;在需要使用某任務(wù)的目標內存時(shí),應檢查該id任務(wù)狀態(tài)直到完成;如果完成,即可進(jìn)行相應的處理。  

b. 無(wú)阻塞提交DMA通道請求的實(shí)現:標志此次DMA傳送任務(wù)正在進(jìn)行;如果DMA通道空閑,設置寄存器啟動(dòng)DMA操作,標志DMA通道正在工作;如果DMA通道正在工作,則將此次DMA請求插入上下文隊列。  

3. DMA中斷服務(wù)程序(注:DAT模塊不使用ISR,只是查詢(xún)對應標志,確定DMA傳送是否完成):標志此次DMA傳送任務(wù)完成;如果DMA請求上下文隊列為空,標志DMA通道空閑;如果DMA請求上下文隊列非空,則從隊列中取出頭一個(gè)DMA請求上下文,用以設置相應的寄存器啟動(dòng)DMA操作。  

QDAT:一個(gè)非阻塞的DMA模塊實(shí)現  

在TI C620x DSP上,一個(gè)非阻塞的DMA模塊QDAT根據以上原理得以實(shí)現。  

QDAT的API與DAT模塊的基本一致,優(yōu)點(diǎn)是使用上述的YUV圖像處理應用程序中,不會(huì )發(fā)生DMA請求阻塞;  

QDAT與DAT模塊功能相似,但屬于驅動(dòng)程序層次的實(shí)現,基于:CSL的DMA模塊;CSL的IRQ模塊;以及DSP/BIOS的QUE模塊。  

不過(guò)實(shí)現十分簡(jiǎn)便、輕盈。  

該模塊獨立于應用和算法,已經(jīng)在基于TI C620x DSP上的多個(gè)項目中使用,效果十分理想,特別是因為QDAT任務(wù)中的DMA操作經(jīng)過(guò)了串行化,也大大降低了在EMIF上訪(fǎng)問(wèn)內存時(shí)的沖突。  

EMDA的先進(jìn)特征  

這些項目向新的TI DM642媒體處理器上移植時(shí),以上的操作將利用EDMA的先進(jìn)特征, 因為T(mén)I C6x1x 和 C64x DSP開(kāi)始使用EDMA,值得注意的是,EDMA通道控制器(EDMACC)有專(zhuān)門(mén)的PRAM(parameter RAM)來(lái)緩存DMA請求參數,EDMA事件參數表中有標志以及LINK address,用來(lái)指示本次DMA傳送結束后, 是否有新的DMA請求參數需要重載入操作寄存器; 如果有,LINK address所指就是新的參數在PRAM的位置。 顯然因為這樣的鏈表機制,使用該通道連續兩次傳送之間無(wú)需中斷處理程序(CPU)介入隊列管理,效率將提高。 對于頻繁的內存數據傳送,如DAT操作一般使用QDMA, 它由CPU直接將傳送請求(TR)提交給傳送控制器(EDMATC),TC中有四個(gè)優(yōu)先級隊列,每個(gè)TR都將進(jìn)入其對應(已指定)的一個(gè)隊列。 對于不同的請求源,隊列的長(cháng)度可編程,每個(gè)隊列最多可以接收7個(gè)QDMA請求。 如果隊列有空,TR就可以進(jìn)入;若滿(mǎn)了,CPU將會(huì )停止(stall)幾個(gè)EDMA周期等待TC的執行,隊列隨即空出一個(gè)位置。  

總之,EDMA執行機構這種純硬件的隊列機制使得效率提升更加極大化, 減少了軟件對此的相關(guān)開(kāi)銷(xiāo)。
本文地址:http://selenalain.com/thread-29327-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页