專利名稱:一種dma的數(shù)據(jù)傳輸方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及DMA數(shù)據(jù)傳輸?shù)募夹g(shù)領(lǐng)域,尤其涉及一種DMA的數(shù)據(jù)傳輸方 法和系統(tǒng)。
背景技術(shù):
DMA (Direct Memory Access,直接存儲器存取)是指在存儲器與I/O設(shè)備 間直接傳送數(shù)據(jù),是一種完全由硬件完成輸入輸出操作的方式。采用DMA方 式傳輸數(shù)據(jù)時,需要一個專門的器件來協(xié)調(diào)外設(shè)接口和內(nèi)存儲器的數(shù)據(jù)傳輸, 這個專門的器件稱為DMA控制器,簡稱DMAC。 DMAC從CPU完全接管對總 線的控制,數(shù)據(jù)交換不經(jīng)過CPU,而直接在內(nèi)存和I/0設(shè)備之間進行。在DMAC 的內(nèi)部,有若干個寄存器地址寄存器,存放DMA傳輸時存放IO數(shù)據(jù)的存儲 單元地址;字節(jié)計數(shù)器,存放DMA傳輸?shù)淖止?jié)數(shù);控制寄存器,存放由CPU 設(shè)定的DMA傳輸方式,控制命令等;狀態(tài)寄存器存放DMAC當(dāng)前的狀態(tài), 包括有無DMA請求,是否結(jié)束等。
目前,DMA控制器大都采用以下兩種方式,進行數(shù)據(jù)傳輸
l)停止CPU訪問內(nèi)存當(dāng)外部設(shè)備要求傳送一批數(shù)據(jù)時,由DMA控制器 發(fā)一個信號給CPU, CPU獲得該信號后,讓出總線的控制權(quán),這時DMA控制 器就獲得總線控制權(quán),之后,開始進行數(shù)據(jù)傳送; 一批數(shù)據(jù)傳送完畢后,DMA 控制器通知CPU可以使用內(nèi)存,并把總線控制權(quán)交還給CPU。
2 )周期挪用當(dāng)1/0設(shè)備沒有DMA請求時,CPU按程序要求訪問內(nèi)存, 一旦I/0設(shè)備有DMA請求,則DMA控制器挪用一個或幾個CPU周期,但I/0設(shè) 備每一次周期挪用都有申請總線控制權(quán)、建立總線控制權(quán)和歸還總線控制權(quán)的 過程。
可以看出,由于DMA設(shè)置在CPU的外部,因而DMA與CPU需要經(jīng)過 總線來完成訪問控制權(quán)的交替。而總線的帶寬是有限的,當(dāng)需要傳輸?shù)臄?shù)據(jù)量 很大時,CPU就得要等待較長的時間才能重獲總線控制權(quán),而當(dāng)CPU處理的程序占用資源較多時,DMA也需要等待較長時間才能獲得總線控制權(quán)。并且, 為了保證CPU與DMA在總線上進行數(shù)據(jù)的有效傳輸,無論采用上述哪種 DMA的傳輸方式,DMA都需要在數(shù)據(jù)傳輸完成后向CPU歸還總線控制權(quán), 例如,以中斷方式通知CPU,在這種情況下,如果DMA需要傳輸多段數(shù)據(jù), 則會在每段數(shù)據(jù)傳輸結(jié)束后都通知CPU,從而極大影響了 CPU的工作效率。
總之,本領(lǐng)域技術(shù)人員迫切需要發(fā)展出一種DMA的數(shù)據(jù)傳輸方法,以減 少總線帶寬的占用,提高DMA的數(shù)據(jù)傳輸效率和并保證CPU的工作效率。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種DMA的數(shù)據(jù)傳輸方法和系統(tǒng),能 減少總線帶寬的占用,提高DMA的數(shù)據(jù)傳輸效率和并保證CPU的工作效率。
為了解決上述問題,本發(fā)明公開了一種DMA的數(shù)據(jù)傳輸方法,包括以下 步驟
步驟Sl、 CPU配置其內(nèi)部DMA的數(shù)據(jù)傳輸信息,所述數(shù)據(jù)傳輸信息包 括第一l殳數(shù)據(jù)的源地址和目標(biāo)地址,源地址增量參數(shù)及目標(biāo)地址增量參數(shù),數(shù) 據(jù)初始長度和數(shù)據(jù)長度增量參數(shù),以及,傳輸段數(shù)值;
步驟S2、 DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地址,所述傳 輸?shù)牡?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;
步驟S3、更新所述傳輸段數(shù)值,并判斷更新后的傳輸段數(shù)值是否滿足結(jié) 束閾值;若是,則通知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行以下步驟;
步驟S4、依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算下一段數(shù) 據(jù)傳輸?shù)脑吹刂?,以及,依?jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量參數(shù) 計算下一段數(shù)據(jù)傳輸?shù)哪繕?biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù) 計算下 一段數(shù)據(jù)的傳輸長度;
步驟S5、完成下一段數(shù)據(jù)的傳輸,并返回步驟S3。
優(yōu)選的,所述更新傳輸段數(shù)值的步驟包括每傳輸完一段數(shù)據(jù),傳輸段數(shù) 值遞增。
優(yōu)選的,所述更新傳輸段數(shù)值的步驟包括每傳輸完一段數(shù)據(jù),傳輸段數(shù)值遞減。
進一步,所述源地址為CPU外部源地址,所述目標(biāo)地址為CPU內(nèi)部目標(biāo)地址。
優(yōu)選的,所述通知CPU的方式為中斷方式。
本發(fā)明還公開了 一種DMA的數(shù)據(jù)傳輸系統(tǒng),包括CPU與設(shè)置于CPU內(nèi) 部的DMA,所述CPU包括
配置單元,用于配置CPU內(nèi)部DMA的數(shù)據(jù)傳輸信息,所述數(shù)據(jù)傳輸信 息包括第一段數(shù)據(jù)的源地址和目標(biāo)地址,源地址增量參數(shù)及目標(biāo)地址增量參 數(shù),數(shù)據(jù)初始長度和數(shù)據(jù)長度增量參數(shù),以及,傳輸段數(shù)值;
所述DMA包括
第一傳輸單元,用于DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地 址,所述傳輸?shù)牡?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;
計數(shù)更新單元,用于更新所述傳輸段數(shù)值,并觸發(fā)判斷單元;
判斷單元,用于判斷更新后的傳輸l殳數(shù)值是否滿足結(jié)束閾值;若是,則通 知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行計算單元;
計算單元,用于依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算下一 段數(shù)據(jù)的源地址,以及,依據(jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量參數(shù) 計算下一段數(shù)據(jù)的目標(biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù)計算
下一段數(shù)據(jù)的傳輸長度;
第二傳輸單元,用于完成下一段數(shù)據(jù)的傳輸,并調(diào)用計數(shù)更新單元。
優(yōu)選的,所述計數(shù)更新單元更新傳輸段數(shù)值的步驟包括每傳輸完一段數(shù) 據(jù),傳輸段數(shù)值遞增。
優(yōu)選的,所述計數(shù)更新單元更新傳輸段數(shù)值的步驟包括每傳輸完一段數(shù) 據(jù),傳輸段數(shù)值遞減。
進一步,所述源地址為CPU外部源地址,所述目標(biāo)地址為CPU內(nèi)部目標(biāo) 地址。
本發(fā)明公開了一種DMA,所述DMA設(shè)置于CPU內(nèi)部,包括
7源地址寄存器,用于保存配置的第一段數(shù)據(jù)的源地址; 目標(biāo)地址寄存器,用于保存配置的第一段數(shù)據(jù)的目標(biāo)地址; 源地址增量寄存器,用于保存配置的源地址增量參數(shù); 目標(biāo)地址增量寄存器,用于保存配置的目標(biāo)地址增量參ft; 傳輸段數(shù)寄存器,用于保存配置的傳輸段數(shù)值; 數(shù)據(jù)長度寄存器,用于保存數(shù)據(jù)初始長度; 數(shù)據(jù)長度增量寄存器,用于保存配置的數(shù)據(jù)長度增量參數(shù); 所述DMA還包括
第一傳輸單元,用于DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地 址,所述傳輸?shù)捏?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;
計數(shù)更新單元,用于更新所述傳輸段數(shù)值,并觸發(fā)判斷單元;
判斷單元,用于判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是,則通 知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行計算單元;
計算單元,用于依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算下一
段數(shù)據(jù)的源地址,以及,依據(jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量參數(shù) 計算下一段數(shù)據(jù)的目標(biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù)計算
下一段數(shù)據(jù)的傳輸長度;
第二傳輸單元,用于完成下一段數(shù)據(jù)的傳輸,并調(diào)用計數(shù)更新單元。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點
本發(fā)明的DMA控制器設(shè)于CPU內(nèi)部,這樣在進行數(shù)據(jù)傳輸時,DMA控制 器與CPU之間通過CPU內(nèi)部的連接線路就完成了訪問控制權(quán)的交替,從而節(jié)約 了總線資源,減少了總線帶寬的占用,另外通過CPU配置DMA控制器傳輸所 需的參數(shù)和在DMA控制器內(nèi)部增加計數(shù)更新、判斷、計算等單元實現(xiàn)了DMA 控制器打斷一次CPU就完成多段數(shù)據(jù)的傳輸,提高了CPU和DMA的工作效率。
圖1為本發(fā)明 一種DMA的數(shù)據(jù)傳輸方法實施例的流程圖; 圖2為本發(fā)明 一種DMA的數(shù)據(jù)傳輸系統(tǒng)實施例的結(jié)構(gòu)框圖;圖3為本發(fā)明應(yīng)用圖2所示的系統(tǒng)進行DMA數(shù)據(jù)傳輸實施例的流程圖; 圖4為本發(fā)明 一種內(nèi)部設(shè)有DMA的CPU實施例的結(jié)構(gòu)框圖。
具體實施例方式
下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式
作進一步詳細(xì)描述。以 下實例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
本發(fā)明實施例的核心構(gòu)思在于將設(shè)置有傳輸、計算更新、判斷、計算等 單元的DMA控制器設(shè)置在CPU內(nèi)部,實現(xiàn)了 CPU同DMA控制器的訪問權(quán)的交 替不需要通過總線就可以完成,節(jié)約了總線資源,并且實現(xiàn)了DMA控制器打 斷一次CPU就完成多段數(shù)據(jù)的傳輸,提高了 CPU和DMA的工作效率。
參考圖l,示出了本發(fā)明的一種DMA的數(shù)據(jù)傳輸方法實施例1的步驟流程 圖,具體可以包括以下步驟
步驟101 、 CPU配置其內(nèi)部DMA的數(shù)據(jù)傳輸信息,所述數(shù)據(jù)傳輸信息包 括第一段數(shù)據(jù)的源地址和目標(biāo)地址,源地址增量參數(shù)及目標(biāo)地址增量參數(shù),數(shù) 據(jù)初始長度和數(shù)據(jù)長度增量參數(shù),以及,傳輸段數(shù)值;
將DMA控制器設(shè)置在CPU內(nèi)部,在進行數(shù)據(jù)傳輸時,DMA控制器與 CPU之間通過CPU內(nèi)部的連接線路就完成了訪問控制權(quán)的交替,節(jié)約了總線 資源。
步驟102、 DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地址,所述 傳輸?shù)牡?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;
第一段數(shù)據(jù)的源地址和第一段數(shù)據(jù)將要傳輸?shù)降哪繕?biāo)地址是已知的,CPU 根據(jù)第一段傳輸數(shù)據(jù)存儲的源地址來配置第一段數(shù)據(jù)的源地址參數(shù),CPU根 據(jù)預(yù)先設(shè)置的存儲第一段數(shù)據(jù)的目標(biāo)地址來配置第一段數(shù)據(jù)的目標(biāo)地址;數(shù)據(jù) 初始長度的信息是已知的,由CPU配置給DMA。
DMA從第 一段數(shù)據(jù)的源地址處提取該段數(shù)據(jù),并將該段數(shù)據(jù)傳輸至CPU 配置的第一段數(shù)據(jù)的目標(biāo)地址。依據(jù)數(shù)據(jù)初始長度信息,DMA從第一段數(shù)據(jù) 的源地址處提取符合數(shù)據(jù)初始長度信息的數(shù)據(jù),并將提取的符合數(shù)據(jù)初始長度 的數(shù)據(jù)傳輸至CPU配置的第一段數(shù)據(jù)的目標(biāo)地址。
步驟103、更新所述傳輸段數(shù)值,并判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是,則通知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行以下步驟;
通知CPU數(shù)據(jù)傳輸完畢的方式可以采用中斷的方式。
在進行數(shù)據(jù)傳輸前,傳輸?shù)臄?shù)據(jù)段數(shù)也是已知的,根據(jù)已知的段數(shù)CPU 配置其內(nèi)部的DMA的傳輸段數(shù)值,根據(jù)已知的段數(shù)來配置傳輸段數(shù)值。
在本發(fā)明的另一個優(yōu)選實施例中,更新傳輸段數(shù)值的步驟包括傳輸完一 段數(shù)據(jù),傳輸段數(shù)值遞增。假設(shè)結(jié)束閾值為10,傳輸段數(shù)值為5,每傳輸完一 段數(shù)據(jù),傳輸l殳數(shù)值加l,即傳輸完第一段數(shù)據(jù)后,傳輸段數(shù)值為6,當(dāng)傳完 5段數(shù)據(jù)后,傳輸段數(shù)值為10。
在本發(fā)明的另一個優(yōu)選實施例中,更新傳輸段數(shù)值的步驟包括傳輸完一 段數(shù)據(jù),傳輸段數(shù)值遞減。假設(shè)結(jié)束閾值為0,傳輸段數(shù)值為5,每傳輸完一 段數(shù)據(jù),傳輸段數(shù)值減l,即傳輸完第一段數(shù)據(jù)后,傳輸段數(shù)值為4,當(dāng)傳完 5段數(shù)據(jù)后,傳輸段數(shù)值為0。
當(dāng)然,本領(lǐng)域技術(shù)人員采用現(xiàn)有技術(shù)中的任一種計數(shù)更新方式都是可行 的,例如,采用計數(shù)器的方法,這里就不再贅述。
步驟104、依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算下一段數(shù) 據(jù)傳輸?shù)脑吹刂罚约?,依?jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量參數(shù) 計算下一段數(shù)據(jù)傳輸?shù)哪繕?biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù) 計算下 一段數(shù)據(jù)的傳輸長度;
可以依據(jù)公式下一段數(shù)據(jù)傳輸?shù)脑吹刂?上一段數(shù)據(jù)傳輸?shù)脑吹刂?源 地址增量參數(shù),得到下一段數(shù)據(jù)傳輸?shù)脑吹刂?;也就?br>
第二段數(shù)據(jù)傳輸?shù)脑吹刂?第 一段數(shù)據(jù)傳輸?shù)脑吹刂?源地址增量參數(shù);
同理,
第二段數(shù)據(jù)傳輸?shù)哪繕?biāo)地址=第一段數(shù)據(jù)傳輸?shù)哪繕?biāo)地址+源地址增量參
數(shù),
可以依據(jù)公式下一段數(shù)據(jù)的傳輸長度=上一段數(shù)據(jù)的傳輸長度+數(shù)據(jù)長 度增量參數(shù),得到下一段數(shù)據(jù)的傳輸長度;
第二段數(shù)據(jù)的傳輸長度=數(shù)據(jù)初始長度+數(shù)據(jù)長度增量參數(shù)。 步驟105、完成下一段數(shù)據(jù)的傳輸,并返回步驟103。整個的數(shù)據(jù)傳輸中,所述的源地址為CPU的外部源地址,所述目標(biāo)地址
為CPU內(nèi)部目標(biāo)地址。
為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下通過一個具體的例子進一步
說明本發(fā)明實施例DMA數(shù)據(jù)傳輸過程。
首先,CPU配置內(nèi)部DMA的源地址為0x10000000,目標(biāo)地址為 0x00000000,源地址增量為0x10000000,目標(biāo)地址增量為0x00001000,數(shù)據(jù) 初始長度為0x100, 256字節(jié),數(shù)據(jù)長度增量為0x100,傳輸段數(shù)值為0x2。
即第 一 次凄t據(jù)傳輸時,乂人CPU外部地址0xl0000000向內(nèi)部地址 0x00000000傳送一段數(shù)據(jù),數(shù)據(jù)長度為0x100, 256字節(jié);第一次數(shù)據(jù)傳輸結(jié) 束后,傳輸段數(shù)值減l,傳輸段數(shù)值更新為0xl;第二次數(shù)據(jù)傳輸時從CPU外 部地址0x20000000向內(nèi)部地址0x00001000傳送一段數(shù)據(jù),數(shù)據(jù)長度為0x200, 512字節(jié),數(shù)據(jù)傳輸結(jié)束后,傳輸段數(shù)值減1,這時傳輸段數(shù)值更新為0,滿 足預(yù)置的結(jié)束閾值,通過中斷方式通知CPU, CPU處理中斷得知完成了一次 DMA操作。
參考圖2,示出了本發(fā)明的一種DMA的數(shù)據(jù)傳輸系統(tǒng)實施例的結(jié)構(gòu)框圖, 具體可以包括以下單元
所述CPU包括CPU配置單元201,用于配置CPU內(nèi)部DMA的數(shù)據(jù)傳 輸信息,所述數(shù)據(jù)傳輸信息包括第一段數(shù)據(jù)的源地址和目標(biāo)地址,源地址增量 參數(shù)及目標(biāo)地址增量參數(shù),數(shù)據(jù)初始長度和數(shù)據(jù)長度增量參數(shù),以及,傳輸段 數(shù)值;
所述DMA包括
第 一傳輸單元202,用于DMA將所述第 一段數(shù)據(jù)從所述源地址傳輸至目 標(biāo)地址,所述傳輸?shù)牡谝欢螖?shù)據(jù)長度符合所述數(shù)據(jù)初始長度;
計數(shù)更新單元203,用于更新所述傳輸段數(shù)值,并觸發(fā)判斷單元;
判斷單元204,用于判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是, 則通知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行計算單元;
計算單元205,用于依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算 下一段數(shù)據(jù)的源地址,以及,依據(jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量
ii參數(shù)計算下一段數(shù)據(jù)的目標(biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù) 計算下一段數(shù)據(jù)的傳輸長度;
第二傳輸單元206,用于完成下一段數(shù)據(jù)的傳輸,并調(diào)用計數(shù)更新單元
203。
在本發(fā)明的另 一個優(yōu)選實施例中,所述計數(shù)更新單元203更新傳輸段數(shù)值 的步驟包括傳輸完一段數(shù)據(jù),傳輸段數(shù)值遞增。假設(shè)結(jié)束閾值為10,傳輸 段數(shù)值為5,每傳輸完一段數(shù)據(jù),傳輸段數(shù)值加l,即傳輸完第一段數(shù)據(jù)后, 傳輸段數(shù)值為6,當(dāng)傳完5段數(shù)據(jù)后,傳輸段數(shù)值為10。
在本發(fā)明的另 一個優(yōu)選實施例中,所述計數(shù)更新單元203更新傳輸段數(shù)值 的步驟包括傳輸完一段數(shù)據(jù),傳輸段數(shù)值遞減。假設(shè)結(jié)束閾值為O,傳輸段 數(shù)值為5,每傳輸完一段數(shù)據(jù),傳輸段數(shù)值減l,即傳輸完第一段數(shù)據(jù)后,傳 輸段數(shù)值為4,當(dāng)傳完5段數(shù)據(jù)后,傳輸段數(shù)值為0。
參考圖3,示出了應(yīng)用圖2所示的優(yōu)選實施例進行DMA數(shù)據(jù)傳輸?shù)牧鞒?圖,具體可以包括以下步驟
步驟301、所述CPU的配置單元,配置CPU內(nèi)部DMA的數(shù)據(jù)傳輸信息, 所述數(shù)據(jù)傳輸信息包括第一段數(shù)據(jù)的源地址和目標(biāo)地址,源地址增量參數(shù)及目 標(biāo)地址增量參數(shù),數(shù)據(jù)初始長度和數(shù)據(jù)長度增量參數(shù),以及,傳輸段數(shù)值;
步驟302、所述DMA的第一傳輸單元將所述第一段數(shù)據(jù)從所述源地址傳 輸至目標(biāo)地址,所述傳輸?shù)牡?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;
步驟303、計數(shù)更新單元更新所述傳輸段數(shù)值,并觸發(fā)判斷單元^l行步驟
304;
步驟304、判斷單元判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是, 則通知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行計算單元;
步驟305,計算單元,用于依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參 數(shù)計算下一段數(shù)據(jù)的源地址,以及,依據(jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地
址增量參數(shù)計算下一段數(shù)據(jù)的目標(biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增 量參數(shù)計算下 一段數(shù)據(jù)的傳輸長度;步驟306,第二傳輸單元,用于完成下一段數(shù)據(jù)的傳輸,并調(diào)用計數(shù)更新單元。
參考圖4,示出了一種內(nèi)部設(shè)有DMA的CPU實施例的結(jié)構(gòu)框圖,具體可 以包括
源地址寄存器401,用于保存配置的第 一段數(shù)據(jù)的源地址; 目標(biāo)地址寄存器402,用于保存配置的第一段數(shù)據(jù)的目標(biāo)地址; 源地址增量寄存器403,用于保存配置的源地址增量參數(shù); 目標(biāo)地址增量寄存器404,用于保存配置的目標(biāo)地址增量參數(shù); 傳輸段數(shù)寄存器405,用于保存配置的傳輸段數(shù)值; 數(shù)據(jù)長度寄存器411 ,用于保存數(shù)據(jù)初始長度; 數(shù)據(jù)長度增量寄存器412,用于保存配置的數(shù)據(jù)長度增量參數(shù); 所述DMA還包括
第一傳輸單元406,用于DMA將所述第 一段數(shù)據(jù)從所述源地址傳輸至目 標(biāo)地址,所述傳輸?shù)牡?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;
計數(shù)更新單元407,用于更新所述傳輸段數(shù)值,并觸發(fā)判斷單元408;
判斷單元408,用于判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是, 則通知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行計算單元409;
計算單元409,用于依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算 下一段數(shù)據(jù)的源地址,以及,依據(jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量 參數(shù)計算下一段數(shù)據(jù)的目標(biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù) 計算下一段數(shù)據(jù)的傳輸長度;
第二傳輸單元410,用于完成下一段數(shù)據(jù)的傳輸,并調(diào)用計數(shù)更新單元。 以下通過一個具體例子對應(yīng)用本發(fā)明的DMA進行數(shù)據(jù)傳輸?shù)倪^程進行說
配置目標(biāo)地址為0x00000000并存儲在目標(biāo)地址寄存器402,源地址增量為 0x10000000存儲在源地址增量寄存器403,目標(biāo)地址增量為0x00001000存儲 在目標(biāo)地址增量寄存器404,數(shù)據(jù)初始長度為0x100, 256字節(jié),存儲在數(shù)據(jù)長度寄存器411,數(shù)據(jù)長度增量為0x100,存儲在數(shù)據(jù)長度增量寄存器412, 數(shù)據(jù)傳輸段數(shù)值為0x2存儲在傳輸段數(shù)寄存器。
即第一次數(shù)據(jù)傳輸時,從源地址寄存器401中調(diào)出源地址0x10000000, 依據(jù)該源地址取出存儲的數(shù)據(jù),從目標(biāo)地址寄存器402中調(diào)出目標(biāo)地址 0x00000000,從數(shù)據(jù)長度寄存器411中調(diào)出數(shù)據(jù)初始長度信息,從源地址 0x10000000向目標(biāo)地址0x00000000傳送一段數(shù)據(jù),數(shù)據(jù)長度為0x100, 256 字節(jié);第一次數(shù)據(jù)傳輸結(jié)束后,傳輸段數(shù)寄存器405中的傳輸段數(shù)值減1并更 新為0xl;第二次數(shù)據(jù)傳輸時依據(jù)源地址寄存器401、源地址增量寄存器403 以及數(shù)據(jù)長度增量寄存器412中調(diào)出存儲的參數(shù),依據(jù)這些參數(shù)可以通過公 式
下一段數(shù)據(jù)源地址=上一段數(shù)據(jù)的源地址+源地址增量參數(shù),得到第二段 傳輸數(shù)據(jù)的源地址。
依據(jù)目標(biāo)地址寄存器402和目標(biāo)地址增量寄存器404中存儲的參數(shù),依據(jù) 這些參數(shù)可以通過公式
下一段數(shù)據(jù)目標(biāo)地址=上一段數(shù)據(jù)的目標(biāo)地址+目標(biāo)地址增量參數(shù),得到 第二段傳輸數(shù)據(jù)的目標(biāo)地址。
依據(jù)數(shù)據(jù)長度寄存器411和存儲在數(shù)據(jù)長度增量寄存器412中存儲的參 數(shù),依據(jù)這些參數(shù)可以通過公式
下一段數(shù)據(jù)的傳輸長度=上一段數(shù)據(jù)的傳輸長度+數(shù)據(jù)長度增量參數(shù),得 到下一段數(shù)據(jù)的傳輸長度。
從CPU第二段數(shù)的源地址0x20000000向第二^殳數(shù)據(jù)的目標(biāo)地址 0x00001000傳送一段數(shù)據(jù),數(shù)據(jù)長度為0x200, 512字節(jié),數(shù)據(jù)傳輸結(jié)束后, 傳輸段數(shù)寄存器405中的傳輸段數(shù)值減1并更新為0,滿足預(yù)設(shè)的結(jié)束閾值, 通過中斷方式通知CPU, CPU處理中斷得知完成了 一次DMA才喿作。
本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的 都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即 可。對于系統(tǒng)實施例而言,由于其與方法實施例基本相似,所以描述的比較筒 單,相關(guān)之處參見方法實施例的部分說明即可。以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通 技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進和潤 飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
權(quán)利要求
1、一種DMA的數(shù)據(jù)傳輸方法,其特征在于,所述DMA為設(shè)置于CPU內(nèi)部的DMA,所述方法包括步驟S1、CPU配置其內(nèi)部DMA的數(shù)據(jù)傳輸信息,所述數(shù)據(jù)傳輸信息包括第一段數(shù)據(jù)的源地址和目標(biāo)地址,源地址增量參數(shù)及目標(biāo)地址增量參數(shù),數(shù)據(jù)初始長度和數(shù)據(jù)長度增量參數(shù),以及,傳輸段數(shù)值;步驟S2、DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地址,所述傳輸?shù)牡谝欢螖?shù)據(jù)長度符合所述數(shù)據(jù)初始長度;步驟S3、更新所述傳輸段數(shù)值,并判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是,則通知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行以下步驟;步驟S4、依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算下一段數(shù)據(jù)傳輸?shù)脑吹刂罚约?,依?jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量參數(shù)計算下一段數(shù)據(jù)傳輸?shù)哪繕?biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù)計算下一段數(shù)據(jù)的傳輸長度;步驟S5、完成下一段數(shù)據(jù)的傳輸,并返回步驟S3。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于所述更新傳輸段數(shù)值的步 驟包括每傳輸完一段數(shù)據(jù),傳輸段數(shù)值遞增。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于所述更新傳輸段數(shù)值的步 驟包括每傳輸完一段數(shù)據(jù),傳輸段數(shù)值遞減。
4、 根據(jù)權(quán)利要求1-3所述的任一項方法,其特征在于所述源地址為CPU 外部源地址,所述目標(biāo)地址為CPU內(nèi)部目標(biāo)地址。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述通知CPU的方式為中 斷方式。
6、 一種DMA的數(shù)據(jù)傳輸系統(tǒng),其特征在于,包括CPU與設(shè)置于CPU 內(nèi)部的DMA,所述CPU包括配置單元,用于配置CPU內(nèi)部DMA的數(shù)據(jù)傳輸信息,所述數(shù)據(jù)傳輸信 息包括第一段數(shù)據(jù)的源地址和目標(biāo)地址,源地址增量參數(shù)及目標(biāo)地址增量參數(shù),數(shù)據(jù)初始長度和數(shù)據(jù)長度增量參數(shù),以及,傳輸段數(shù)值; 所述DMA包括第一傳輸單元,用于DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地 址,所述傳輸?shù)牡?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;計數(shù)更新單元,用于更新所述傳輸段數(shù)值,并觸發(fā)判斷單元;判斷單元,用于判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是,則通 知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行計算單元;計算單元,用于依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算下一段數(shù)據(jù)的源地址,以及,依據(jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量參數(shù) 計算下一段數(shù)據(jù)的目標(biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù)計算 下一段數(shù)據(jù)的傳輸長度;第二傳輸單元,用于完成下一段數(shù)據(jù)的傳輸,并調(diào)用計數(shù)更新單元。
7、 根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于所述計數(shù)更新單元更新傳 輸段數(shù)值的步驟包括每傳輸完一段數(shù)據(jù),傳輸段數(shù)值遞增。
8、 根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于所述計數(shù)更新單元更新傳 輸段數(shù)值的步驟包括每傳輸完一段數(shù)據(jù),傳輸段數(shù)值遞減。
9、 根據(jù)權(quán)利要求6-8所述的任一項系統(tǒng),其特征在于所述源地址為CPU 外部源地址,所述目標(biāo)地址為CPU內(nèi)部目標(biāo)地址。
10、 一種DMA,其特征在于,所述DMA設(shè)置于CPU內(nèi)部,包括 源地址寄存器,用于保存配置的第一段數(shù)據(jù)的源地址;目標(biāo)地址寄存器,用于保存配置的第一段數(shù)據(jù)的目標(biāo)地址; 源地址增量寄存器,用于保存配置的源地址增量參數(shù); 目標(biāo)地址增量寄存器,用于保存配置的目標(biāo)地址增量參數(shù); 傳輸段數(shù)寄存器,用于保存配置的傳輸段數(shù)值; 數(shù)據(jù)長度寄存器,用于保存數(shù)據(jù)初始長度; 數(shù)據(jù)長度增量寄存器,用于保存配置的數(shù)據(jù)長度增量參數(shù); 所述DMA還包括第一傳輸單元,用于DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地 址,所述傳輸?shù)牡?一段數(shù)據(jù)長度符合所述數(shù)據(jù)初始長度;計數(shù)更新單元,用于更新所述傳輸段數(shù)值,并觸發(fā)判斷單元;判斷單元,用于判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是!則通 知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行計算單元;計算單元,用于依據(jù)所述第一段數(shù)據(jù)的源地址及源地址增量參數(shù)計算下一段數(shù)據(jù)的源地址,以及,依據(jù)所述第一段數(shù)據(jù)的目標(biāo)地址及目標(biāo)地址增量參數(shù) 計算下一段數(shù)據(jù)的目標(biāo)地址,依據(jù)所述數(shù)據(jù)初始長度及數(shù)據(jù)長度增量參數(shù)計算 下一段數(shù)據(jù)的傳輸長度;第二傳輸單元,用于完成下一段數(shù)據(jù)的傳輸,并調(diào)用計數(shù)更新單元。
全文摘要
本發(fā)明公開了一種DMA的數(shù)據(jù)傳輸方法,所述方法包括步驟S1、CPU配置其內(nèi)部DMA的數(shù)據(jù)傳輸信息;步驟S2、DMA將所述第一段數(shù)據(jù)從所述源地址傳輸至目標(biāo)地址,所述傳輸?shù)牡谝欢螖?shù)據(jù)長度符合所述數(shù)據(jù)初始長度;步驟S3、更新所述傳輸段數(shù)值,并判斷更新后的傳輸段數(shù)值是否滿足結(jié)束閾值;若是,則通知CPU數(shù)據(jù)傳輸完畢;若否,則執(zhí)行以下步驟;步驟S4、計算下一段數(shù)據(jù)傳輸?shù)脑吹刂泛湍繕?biāo)地址以及數(shù)據(jù)傳輸長度;步驟S5、完成下一段數(shù)據(jù)的傳輸,并返回步驟S3。
文檔編號G06F13/28GK101452428SQ20081022666
公開日2009年6月10日 申請日期2008年11月19日 優(yōu)先權(quán)日2008年11月19日
發(fā)明者艷 石 申請人:北京紅旗勝利科技發(fā)展有限責(zé)任公司