專利名稱:一種利用dma控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)技術(shù)的DMA控制器方法,尤其涉及的是一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法。
背景技術(shù):
現(xiàn)有技術(shù)的DMA控制器的基本架構(gòu)如圖1所示,它主要由四個(gè)模塊組成AHB從器件接口模塊該模塊的主要功能是用來配置DMA控制器。外部程序可以對DMA控制器的寄存器組模塊進(jìn)行設(shè)置。
AHB主器件接口模塊該模塊可以完成向AHB總線發(fā)送地址、數(shù)據(jù)和控制信號,實(shí)現(xiàn)從源地址讀取數(shù)據(jù)放入目標(biāo)地址中。
寄存器組模塊該模塊包括源地址寄存器、目標(biāo)地址寄存器、控制寄存器以及其它一些相關(guān)的寄存器。源地址寄存器的初值為要訪問的源存儲(chǔ)器空間的起始地址,在搬運(yùn)過程中,DMA控制器把下一個(gè)要訪問的源地址保存在該寄存器中;目標(biāo)地址寄存器的初值為要訪問的目標(biāo)存儲(chǔ)器空間的起始地址,在搬運(yùn)過程中,DMA控制器把下一個(gè)要訪問的目標(biāo)地址保存在該寄存器中;控制寄存器用來設(shè)定DMA通道使能或者不使能,是否自動(dòng)加載起始地址等等。
通道優(yōu)先級模塊該模塊用于實(shí)現(xiàn)DMA控制器內(nèi)多個(gè)邏輯通道的優(yōu)先級判斷。在接到DMA申請時(shí),該模塊要判斷通道的優(yōu)先級,以確定在當(dāng)前情況下由哪個(gè)通道發(fā)起傳送。
在AMBA協(xié)議的AHB總線上,DMA控制器作為與ARM處理器并列的主器件出現(xiàn),在大多數(shù)情況下,DMA控制器可以替代ARM處理器進(jìn)行數(shù)據(jù)搬運(yùn)工作(包括存儲(chǔ)器到存儲(chǔ)器、存儲(chǔ)器到外圍設(shè)備、外圍設(shè)備到存儲(chǔ)器以及外圍設(shè)備之間的數(shù)據(jù)搬運(yùn)),從而保證ARM處理器在執(zhí)行指令期間不介入到具體的數(shù)據(jù)搬運(yùn)工作中,從而提高ARM處理器的工作效率。
目前AHB總線上廣泛應(yīng)用的DMA控制器一般都是進(jìn)行一維數(shù)據(jù)的搬運(yùn),即DMA控制器的源地址空間或者目標(biāo)地址空間是一段連續(xù)的存儲(chǔ)器空間,這種DMA控制器的寄存器組模塊中只有源地址寄存器、目標(biāo)地址寄存器以及控制寄存器這些主要的寄存器,在數(shù)據(jù)搬運(yùn)的過程中,只需要對源地址寄存器或者目標(biāo)地址寄存器中的地址值遞增,就可以獲得下一個(gè)要訪問的存儲(chǔ)器地址。
然而在實(shí)際的操作過程中,往往會(huì)出現(xiàn)數(shù)據(jù)存放的存儲(chǔ)器空間是一個(gè)不連續(xù)的地址空間,比如需要搬運(yùn)的數(shù)據(jù)存放在多個(gè)存儲(chǔ)器空間,每個(gè)存儲(chǔ)器空間內(nèi)部地址是連續(xù)的,但是存儲(chǔ)器空間之間的地址是不連續(xù)的,如圖2中的灰色部分所示。很顯然,只支持一維數(shù)據(jù)搬運(yùn)的DMA控制器無法對這種存儲(chǔ)在多個(gè)存儲(chǔ)器空間中的數(shù)據(jù)進(jìn)行連續(xù)搬運(yùn)。
因此,現(xiàn)有技術(shù)還有待于改進(jìn)和發(fā)展。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種利用DMA控制器進(jìn)行二維數(shù)據(jù)搬運(yùn)的方法,用以克服一維數(shù)據(jù)搬運(yùn)DMA控制器只能搬運(yùn)連續(xù)地址空間數(shù)據(jù)的缺點(diǎn)。
本發(fā)明的技術(shù)方案包括一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,其在DMA控制器中增加設(shè)置鏈表項(xiàng)地址寄存器,所述方法包括步驟A、給各寄存器賦值,將源地址、目標(biāo)地址、鏈表項(xiàng)地址依次設(shè)置到相應(yīng)的寄存器中;B、按照鏈表項(xiàng)的地址將每塊需要搬運(yùn)的存儲(chǔ)器空間所對應(yīng)的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值存放入存儲(chǔ)器中;C、所述DMA控制器從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),并地址遞增搬運(yùn)下一個(gè)數(shù)據(jù),直到當(dāng)前存儲(chǔ)器空間的數(shù)據(jù)搬運(yùn)完畢;D、所述DMA控制器通過鏈表項(xiàng)地址寄存器中的值去獲取表征下一塊存儲(chǔ)器空間的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值;反復(fù)搬運(yùn),直到當(dāng)前的鏈表項(xiàng)地址寄存器的值為0。
所述的方法,其中,所述鏈表項(xiàng)地址寄存器中的一個(gè)鏈表項(xiàng)都包括4個(gè)word,以下列方式進(jìn)行排列a、源地址寄存器的值,用于記錄下一個(gè)源存儲(chǔ)器空間的起始地址;b、目標(biāo)地址寄存器的值,用于記錄下一個(gè)目標(biāo)存儲(chǔ)空間的起始地址;c、鏈表項(xiàng)地址寄存器的值,用于記錄下一個(gè)鏈表項(xiàng)地址;d、控制寄存器的值,用于記錄進(jìn)行下一次數(shù)據(jù)搬運(yùn)時(shí)的控制寄存器的值。
所述的方法,其中,所述DMA控制器通過DMA通道中的鏈表項(xiàng)地址寄存器中提供的地址到存儲(chǔ)器空間中去訪問這4個(gè)word,并且這4個(gè)word在存儲(chǔ)器空間連續(xù)排放。
本發(fā)明所提供的一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,由于采用Scatter/Gather鏈表項(xiàng)的方法,使DMA控制器支持二維數(shù)據(jù)搬運(yùn)。
圖1是現(xiàn)有技術(shù)的DMA控制器的基本架構(gòu)示意圖;圖2是現(xiàn)有技術(shù)的通信技術(shù)中非連續(xù)存儲(chǔ)器空間示意圖;圖3是本發(fā)明方法的Scatter/Gather鏈表項(xiàng)工作方法示意圖;圖4是本發(fā)明方法的Scatter/Gather鏈表項(xiàng)工作方法數(shù)據(jù)搬運(yùn)流程圖。
具體實(shí)施例方式
以下結(jié)合附圖,將對本發(fā)明的具體較佳實(shí)施例進(jìn)行更為詳細(xì)的說明。
本發(fā)明的利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法中,采用的Scatter/Gather鏈表項(xiàng)方法可以用來對存儲(chǔ)在多個(gè)存儲(chǔ)器空間中的數(shù)據(jù)進(jìn)行連續(xù)搬運(yùn),其具體工作方式如圖3所示,除了DMA控制器原有的源地址寄存器、目標(biāo)地址寄存器以及控制寄存器之外,另外再增加鏈表項(xiàng)地址寄存器。
該鏈表項(xiàng)地址寄存器的描述如下該寄存器用來設(shè)定該DMA通道的下一個(gè)鏈表項(xiàng)地址,當(dāng)當(dāng)前存儲(chǔ)器空間的數(shù)據(jù)搬運(yùn)完畢之后,DMA控制器可以通過該鏈表項(xiàng)地址去獲取表征下一塊存儲(chǔ)器空間的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值。當(dāng)該寄存器的值為0時(shí),表明數(shù)據(jù)搬運(yùn)完畢。
從上面的描述可以看出,每一個(gè)鏈表項(xiàng)都包括4個(gè)word(32位),這4個(gè)word可以以下列方式進(jìn)行排列a、源地址寄存器的值(下一個(gè)源存儲(chǔ)器空間的起始地址)b、目標(biāo)地址寄存器的值(下一個(gè)目標(biāo)存儲(chǔ)空間的起始地址)c、鏈表項(xiàng)地址寄存器的值(下一個(gè)鏈表項(xiàng)地址)d、控制寄存器的值(進(jìn)行下一次數(shù)據(jù)搬運(yùn)時(shí)的控制寄存器的值)本發(fā)明所述DMA控制器通過DMA通道中的鏈表項(xiàng)地址寄存器中提供的地址到存儲(chǔ)器空間中去訪問這4個(gè)word,因此這4個(gè)word在存儲(chǔ)器空間中必須是連續(xù)排放的。
本發(fā)明方法的具體步驟包括A、給寄存器賦值,將源地址、目標(biāo)地址、鏈表項(xiàng)地址依次設(shè)置到相應(yīng)的寄存器中。
B、按照鏈表項(xiàng)的地址將每塊需要搬運(yùn)的存儲(chǔ)器空間所對應(yīng)的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值存放入存儲(chǔ)器中。
C、DMA控制器開始搬運(yùn)數(shù)據(jù)時(shí),首先從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),然后地址遞增搬運(yùn)下一個(gè)數(shù)據(jù),直到當(dāng)前存儲(chǔ)器空間的數(shù)據(jù)搬運(yùn)完畢,此時(shí)DMA控制器可以通過鏈表項(xiàng)地址寄存器中的值去獲取表征下一塊存儲(chǔ)器空間的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值。
如此往復(fù)搬運(yùn),直到當(dāng)前的鏈表項(xiàng)地址寄存器的值為0,即表示所有數(shù)據(jù)搬運(yùn)完畢。具體的數(shù)據(jù)搬運(yùn)流程如圖4所示。
通過上述Scatter/Gather鏈表項(xiàng)的方法,就可以達(dá)到使用DMA控制器完成二維數(shù)據(jù)搬運(yùn)的目的。
以下說明本發(fā)明的一具體實(shí)施例DMA控制器需要從兩塊不連續(xù)的存儲(chǔ)器空間搬運(yùn)數(shù)據(jù),假設(shè)第一塊源存儲(chǔ)器空間的起始地址為0x00000000,目標(biāo)存儲(chǔ)器空間的起始地址為0x10000000;第二塊源存儲(chǔ)器空間的起始地址為0x00010000,目標(biāo)存儲(chǔ)器空間的起始地址為0x10010000;每塊存儲(chǔ)器空間的深度為10,數(shù)據(jù)寬度為32位。
第二塊源存儲(chǔ)器空間的起始地址為0x00010000,目標(biāo)存儲(chǔ)器空間的起始地址為0x10010000,鏈表項(xiàng)地址寄存器值為0。將這些值按照上述的順序存放到存儲(chǔ)器中,起始地址為0x20000000。
首先給寄存器賦值,將源地址0x00000000寫入源地址存儲(chǔ)器中、目標(biāo)地址0x10000000寫入目標(biāo)地址寄存器、將鏈表項(xiàng)地址0x20000000寫入鏈表項(xiàng)地址寄存器。
DMA控制器從源地址寄存器中取出源地址0x00000000,獲取該地址所保存的數(shù)據(jù),然后地址遞增為0x00000004,再獲取下一個(gè)數(shù)據(jù),直到當(dāng)前存儲(chǔ)器空間的數(shù)據(jù)搬運(yùn)完畢。
本發(fā)明方法的DMA控制器通過鏈表項(xiàng)地址寄存器中的值0x20000000去獲取表征下一塊存儲(chǔ)器空間的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值。獲得的源地址寄存器的值為0x00010000、目標(biāo)地址寄存器的值為0x10010000,鏈表項(xiàng)地址寄存器的值為0。
重復(fù)上述操作,直到該存儲(chǔ)器空間的數(shù)據(jù)搬運(yùn)完畢,此時(shí)鏈表項(xiàng)地址寄存器的值為0,表示所有數(shù)據(jù)都已經(jīng)搬運(yùn)完畢。
由此,本發(fā)明方法實(shí)現(xiàn)了對二維數(shù)據(jù)的搬運(yùn),其實(shí)現(xiàn)簡單。但應(yīng)當(dāng)理解的是,上述針對具體實(shí)施例的描述較為詳細(xì),并不能因此而理解為對本發(fā)明專利保護(hù)范圍的限制,本發(fā)明的專利保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,其在DMA控制器中增加設(shè)置鏈表項(xiàng)地址寄存器,所述方法包括步驟A、給各寄存器賦值,將源地址、目標(biāo)地址、鏈表項(xiàng)地址依次設(shè)置到相應(yīng)的寄存器中;B、按照鏈表項(xiàng)的地址將每塊需要搬運(yùn)的存儲(chǔ)器空間所對應(yīng)的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值存放入存儲(chǔ)器中;C、所述DMA控制器從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),并地址遞增搬運(yùn)下一個(gè)數(shù)據(jù),直到當(dāng)前存儲(chǔ)器空間的數(shù)據(jù)搬運(yùn)完畢;D、所述DMA控制器通過鏈表項(xiàng)地址寄存器中的值去獲取表征下一塊存儲(chǔ)器空間的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值;反復(fù)搬運(yùn),直到當(dāng)前的鏈表項(xiàng)地址寄存器的值為0。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述鏈表項(xiàng)地址寄存器中的一個(gè)鏈表項(xiàng)都包括4個(gè)word,以下列方式進(jìn)行排列a、源地址寄存器的值,用于記錄下一個(gè)源存儲(chǔ)器空間的起始地址;b、目標(biāo)地址寄存器的值,用于記錄下一個(gè)目標(biāo)存儲(chǔ)空間的起始地址;c、鏈表項(xiàng)地址寄存器的值,用于記錄下一個(gè)鏈表項(xiàng)地址;d、控制寄存器的值,用于記錄進(jìn)行下一次數(shù)據(jù)搬運(yùn)時(shí)的控制寄存器的值。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述DMA控制器通過DMA通道中的鏈表項(xiàng)地址寄存器中提供的地址到存儲(chǔ)器空間中去訪問這4個(gè)word,并且這4個(gè)word在存儲(chǔ)器空間連續(xù)排放。
全文摘要
本發(fā)明公開了一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,其在DMA控制器中增加設(shè)置鏈表項(xiàng)地址寄存器,所述方法包括步驟給各寄存器賦值,將源地址、目標(biāo)地址、鏈表項(xiàng)地址依次設(shè)置到相應(yīng)的寄存器中;按照鏈表項(xiàng)的地址將每塊需要搬運(yùn)的存儲(chǔ)器空間所對應(yīng)的源地址寄存器、目標(biāo)地址寄存器、鏈表項(xiàng)地址寄存器以及控制寄存器的值存放入存儲(chǔ)器中;所述DMA控制器從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),并地址遞增搬運(yùn)下一個(gè)數(shù)據(jù),直到當(dāng)前存儲(chǔ)器空間的數(shù)據(jù)搬運(yùn)完畢。本發(fā)明方法由于采用Scatter/Gather鏈表項(xiàng)的方法,使DMA控制器支持二維數(shù)據(jù)搬運(yùn)。
文檔編號G06F13/20GK101059785SQ20061006666
公開日2007年10月24日 申請日期2006年4月17日 優(yōu)先權(quán)日2006年4月17日
發(fā)明者汪堅(jiān), 林曉濤, 陳家錦 申請人:中興通訊股份有限公司