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