專利名稱:一種利用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控制器(Direct Memory Access,以下簡(jiǎn)稱DMA)的基本架構(gòu)如圖1所示,它主要由四個(gè)模塊組成AHB從器件接口模塊該模塊的主要功能是用來配置DMA控制器,外部程序可以對(duì)DMA控制器的寄存器組模塊進(jìn)行設(shè)置。
AHB主器件接口模塊該模塊可以完成向AHB總線發(fā)送地址、數(shù)據(jù)和控制信號(hào),實(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)先級(jí)模塊該模塊用于實(shí)現(xiàn)DMA控制器內(nèi)多個(gè)邏輯通道的優(yōu)先級(jí)判斷。在接到DMA申請(qǐng)時(shí),該模塊要判斷通道的優(yōu)先級(jí),以確定在當(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)的過程中,只需要對(duì)源地址寄存器或者目標(biāo)地址寄存器中的地址值遞增,就可以獲得下一個(gè)要訪問的存儲(chǔ)器地址。
然而在實(shí)際的操作過程中,往往會(huì)出現(xiàn)數(shù)據(jù)存放的存儲(chǔ)器空間是一個(gè)不連續(xù)的地址空間,比如在通訊領(lǐng)域普遍應(yīng)用的時(shí)分復(fù)用的情況,此時(shí)需要將多個(gè)邏輯通道(多個(gè)時(shí)隙,每個(gè)邏輯通道對(duì)應(yīng)著一個(gè)連續(xù)的存儲(chǔ)器地址空間)上的數(shù)據(jù)組合成一個(gè)完整的無線數(shù)據(jù)序列,或者將一個(gè)無線數(shù)據(jù)序列中的數(shù)據(jù)分解到多個(gè)邏輯通道上,如圖2所示。很顯然,現(xiàn)有技術(shù)只支持一維數(shù)據(jù)搬運(yùn)的DMA控制器無法完成這個(gè)工作。
因此,現(xiàn)有技術(shù)還有待于繼續(xù)改進(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)的方法,其增加設(shè)置源基地址寄存器、目標(biāo)基地址寄存器、界限寄存器、及步幅寄存器,其包括以下步驟A、給各寄存器賦值,將源地址、目標(biāo)地址、存儲(chǔ)器空間的數(shù)目和深度以及跳轉(zhuǎn)的步幅依次設(shè)置到相應(yīng)的寄存器中;B、所述DMA控制器從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),并判斷該存儲(chǔ)器空間是否為最后一塊存儲(chǔ)器空間,如果不是,則根據(jù)步幅寄存器中的值,計(jì)算出下一個(gè)要訪問的源地址,存放到源地址寄存器中;如果是,則要跳轉(zhuǎn)到第一塊存儲(chǔ)器空間的下一個(gè)地址,將該地址存放到源地址寄存器中;循環(huán)步驟B進(jìn)行數(shù)據(jù)搬運(yùn)。
所述的方法,其中,還包括步驟C、搬運(yùn)完最后一塊存儲(chǔ)器空間的最后一個(gè)數(shù)據(jù),判斷控制寄存器中的自動(dòng)加載位,如果設(shè)置為自動(dòng)加載,則自動(dòng)跳轉(zhuǎn)為源基地址寄存器中保存的地址值,并將該值保存到源地址寄存器中;如果沒有設(shè)置為自動(dòng)加載,則搬運(yùn)過程結(jié)束。
本發(fā)明所提供的一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,由于采用二維跳轉(zhuǎn)的方法,實(shí)現(xiàn)了DMA控制器支持二維數(shù)據(jù)搬運(yùn)過程。
圖1是現(xiàn)有技術(shù)的DMA控制器的基本架構(gòu)示意圖;圖2是現(xiàn)有技術(shù)的時(shí)分復(fù)用通信中多個(gè)邏輯通道數(shù)據(jù)組合示意圖;圖3是本發(fā)明方法的二維跳轉(zhuǎn)工作方法示意圖;圖4是本發(fā)明方法的二維跳轉(zhuǎn)工作方法數(shù)據(jù)搬運(yùn)流程圖。
具體實(shí)施例方式
以下結(jié)合附圖,將對(duì)本發(fā)明的各較佳實(shí)施例進(jìn)行更為詳細(xì)的說明。
本發(fā)明的利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,其采用二維跳轉(zhuǎn)方式,可以應(yīng)用在時(shí)分復(fù)用的情況,其跳轉(zhuǎn)方式如圖3所示,除了DMA控制器原有的源地址寄存器、目標(biāo)地址寄存器以及控制寄存器之外,另外再增加源基地址寄存器、目標(biāo)基地址寄存器、界限寄存器、步幅寄存器。各寄存器的描述如下源基地址寄存器該寄存器初值為要訪問的源存儲(chǔ)器空間的起始地址,在搬運(yùn)過程中,DMA控制器不會(huì)改變?cè)摷拇嫫髦械闹担?dāng)數(shù)據(jù)搬運(yùn)完成之后,如果在控制寄存器中設(shè)置了自動(dòng)加載位,則DMA控制器將該寄存器中的值拷貝到源地址寄存器。
目標(biāo)基地址寄存器該寄存器的初值為要訪問的目標(biāo)存儲(chǔ)器空間的起始地址,在搬運(yùn)過程中,DMA控制器不會(huì)改變?cè)摷拇嫫髦械闹?,?dāng)數(shù)據(jù)搬運(yùn)完成之后,如果在控制寄存器中設(shè)置了自動(dòng)加載位,則DMA控制器將該寄存器中的值拷貝到目標(biāo)地址寄存器。
界限寄存器該寄存器用來設(shè)定共有多少塊源存儲(chǔ)器空間(在圖3中以列來表示)以及這些源存儲(chǔ)器空間的深度(在圖3中以行來表示)。
步幅寄存器該寄存器用來設(shè)定在兩塊存儲(chǔ)器空間之間跳轉(zhuǎn)的步幅,在通常情況下,該步幅是與存儲(chǔ)器空間的深度相等的,即兩塊存儲(chǔ)器空間的地址是連續(xù)的。當(dāng)兩塊存儲(chǔ)器空間的地址不連續(xù)時(shí),步幅寄存器中的值與存儲(chǔ)器空間的深度則是不相等的。
本發(fā)明方法包括以下步驟A、給寄存器賦值,將源地址、目標(biāo)地址、存儲(chǔ)器空間的數(shù)目和深度以及跳轉(zhuǎn)的步幅依次設(shè)置到相應(yīng)的寄存器中。
B、DMA控制器開始搬運(yùn)數(shù)據(jù)時(shí),首先從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),然后判斷該存儲(chǔ)器空間是否為最后一塊存儲(chǔ)器空間,如果不是,則根據(jù)步幅寄存器中的值,計(jì)算出下一個(gè)要訪問的源地址,存放到源地址寄存器中;如果是,則要跳轉(zhuǎn)到第一塊存儲(chǔ)器空間的下一個(gè)地址,將該地址存放到源地址寄存器中。
如此往復(fù)搬運(yùn),直到搬運(yùn)完最后一塊存儲(chǔ)器空間的最后一個(gè)數(shù)據(jù),此時(shí)判斷控制寄存器中的自動(dòng)加載位,如果設(shè)置為自動(dòng)加載,則自動(dòng)跳轉(zhuǎn)為源基地址寄存器中保存的地址值,并將該值保存到源地址寄存器中;如果沒有設(shè)置為自動(dòng)加載,則搬運(yùn)過程結(jié)束。具體的數(shù)據(jù)搬運(yùn)流程如圖4所示。
通過上述二維跳轉(zhuǎn)的方法,就可以達(dá)到使用DMA控制器完成二維數(shù)據(jù)搬運(yùn)的目的。
以下舉具體實(shí)施例進(jìn)行說明本發(fā)明方法的步驟在通訊領(lǐng)域的速率匹配模式下,需要將三個(gè)時(shí)隙中的數(shù)據(jù)組合成一個(gè)完整的無線數(shù)據(jù)序列,三個(gè)時(shí)隙意味著有三塊源存儲(chǔ)器空間,假設(shè)源存儲(chǔ)器空間的起始地址為0x00000000,目標(biāo)地址為0x10000000,每塊存儲(chǔ)器空間的深度為10,數(shù)據(jù)寬度為32位,塊與塊之間的地址間隔為0x04。
首先,給寄存器賦值,將源地址0x00000000寫入源地址存儲(chǔ)器和源基地址寄存器中、目標(biāo)地址0x10000000寫入目標(biāo)地址寄存器和目標(biāo)基地址寄存器中、存儲(chǔ)器空間數(shù)目為3,深度為10寫入界限寄存器,跳轉(zhuǎn)的步幅0x28寫入步幅寄存器中。
DMA控制器首先從源地址寄存器中取出源地址0x00000000(對(duì)應(yīng)圖3中列1行1),獲取該地址所保存的數(shù)據(jù),然后根據(jù)步幅寄存器中的值0x28,計(jì)算出下一個(gè)要訪問的源地址為0x00000028,存放到源地址寄存器中。
DMA控制器從源地址寄存器中取出源地址0x00000028(對(duì)應(yīng)圖3中列2行1),獲取該地址所保存的數(shù)據(jù),然后根據(jù)步幅寄存器中的值0x28,計(jì)算出下一個(gè)要訪問的源地址為0x00000050,存放到源地址寄存器中。
DMA控制器從源地址寄存器中取出源地址0x00000050(對(duì)應(yīng)圖3中列n行1),獲取該地址所保存的數(shù)據(jù),因?yàn)樵摰刂肥堑谌龎K源存儲(chǔ)器空間,為最后一塊源存儲(chǔ)器空間,因此下一個(gè)源地址需要跳轉(zhuǎn)到第一塊源存儲(chǔ)器空間,則源地址為0x00000004(對(duì)應(yīng)圖3中列1行2),將該地址存放到源地址寄存器中。
如此往復(fù)搬運(yùn),直到搬運(yùn)完最后一塊存儲(chǔ)器空間的最后一個(gè)數(shù)據(jù)(對(duì)應(yīng)圖3中列n行n),此時(shí)判斷控制寄存器中的自動(dòng)加載位,如果設(shè)置為自動(dòng)加載,則自動(dòng)跳轉(zhuǎn)為源基地址寄存器中保存的地址值,并將該值保存到源地址寄存器中;如果沒有設(shè)置為自動(dòng)加載,則搬運(yùn)過程結(jié)束。
綜上,本發(fā)明方法實(shí)現(xiàn)了不連續(xù)存儲(chǔ)數(shù)據(jù)塊的二維數(shù)據(jù)的搬運(yùn)過程,但應(yīng)當(dāng)理解的是,上述針對(duì)具體實(shí)施例的說明較為具體,并不能因此理解為對(duì)本發(fā)明專利保護(hù)范圍的限制,本發(fā)明的專利保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,其增加設(shè)置源基地址寄存器、目標(biāo)基地址寄存器、界限寄存器、及步幅寄存器,其包括以下步驟A、給各寄存器賦值,將源地址、目標(biāo)地址、存儲(chǔ)器空間的數(shù)目和深度以及跳轉(zhuǎn)的步幅依次設(shè)置到相應(yīng)的寄存器中;B、所述DMA控制器從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),并判斷該存儲(chǔ)器空間是否為最后一塊存儲(chǔ)器空間,如果不是,則根據(jù)步幅寄存器中的值,計(jì)算出下一個(gè)要訪問的源地址,存放到源地址寄存器中;如果是,則要跳轉(zhuǎn)到第一塊存儲(chǔ)器空間的下一個(gè)地址,將該地址存放到源地址寄存器中;循環(huán)步驟B進(jìn)行數(shù)據(jù)搬運(yùn)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括步驟C、搬運(yùn)完最后一塊存儲(chǔ)器空間的最后一個(gè)數(shù)據(jù),判斷控制寄存器中的自動(dòng)加載位,如果設(shè)置為自動(dòng)加載,則自動(dòng)跳轉(zhuǎn)為源基地址寄存器中保存的地址值,并將該值保存到源地址寄存器中;如果沒有設(shè)置為自動(dòng)加載,則搬運(yùn)過程結(jié)束。
全文摘要
本發(fā)明公開了一種利用DMA控制器實(shí)現(xiàn)二維數(shù)據(jù)搬運(yùn)的方法,其增加設(shè)置源基地址寄存器、目標(biāo)基地址寄存器、界限寄存器、及步幅寄存器,其包括以下步驟所述DMA控制器從源地址寄存器中取出源地址,獲取該地址所保存的數(shù)據(jù),并判斷該存儲(chǔ)器空間是否為最后一塊存儲(chǔ)器空間,如果不是,則根據(jù)步幅寄存器中的值,計(jì)算出下一個(gè)要訪問的源地址,存放到源地址寄存器中;如果是,則要跳轉(zhuǎn)到第一塊存儲(chǔ)器空間的下一個(gè)地址,將該地址存放到源地址寄存器中。本發(fā)明方法由于采用二維跳轉(zhuǎn)的方法,實(shí)現(xiàn)了DMA控制器支持二維數(shù)據(jù)搬運(yùn)過程。
文檔編號(hào)G06F13/20GK101059784SQ20061006666
公開日2007年10月24日 申請(qǐng)日期2006年4月17日 優(yōu)先權(quán)日2006年4月17日
發(fā)明者汪堅(jiān), 林曉濤, 陳家錦 申請(qǐng)人:中興通訊股份有限公司