两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種實(shí)現(xiàn)軟/硬件復(fù)用的dma控制器和傳輸方法

文檔序號(hào):6608729閱讀:225來(lái)源:國(guó)知局
專利名稱:一種實(shí)現(xiàn)軟/硬件復(fù)用的dma控制器和傳輸方法
技術(shù)領(lǐng)域
本發(fā)明涉及DMA(Direct Memory Access Control,直接內(nèi)存訪問(wèn))傳輸,具體涉及一種實(shí)現(xiàn)軟/硬件復(fù)用的DMA控制器和傳輸方法。
背景技術(shù)
在含有中央處理器(CPU)的嵌入式系統(tǒng)中,為了提高內(nèi)存和CPU使用效率,在大量?jī)?nèi)存數(shù)據(jù)有規(guī)律的操作時(shí),通常采用直接內(nèi)存訪問(wèn)(DirectMemory Access Control,DMA)的方式對(duì)數(shù)據(jù)進(jìn)行操作。而DMA的操作是通過(guò)DMA控制器(DMA Controller,DMAC)來(lái)實(shí)現(xiàn)的。對(duì)于總線系統(tǒng)而言,DMA控制器既是總線的從設(shè)備,又與CPU一樣是總線的主設(shè)備(Master)。
現(xiàn)有的DMA控制器與CPU共同作為總線的主設(shè)備。如圖1所示,當(dāng)有輸入設(shè)備需要進(jìn)行DMA傳輸時(shí),其通過(guò)DMA請(qǐng)求觸發(fā)器向DMA控制器發(fā)出請(qǐng)求。在此之前CPU已經(jīng)將地址等控制信息配給DMA控制器內(nèi)的地址寄存器中。當(dāng)DMA控制器接到DMA傳輸請(qǐng)求時(shí),其向CPU發(fā)起總線占用請(qǐng)求。CPU通常在執(zhí)行完當(dāng)前的指令后將總線控制權(quán)交給DMA控制器。此時(shí)DMA控制器的控制、狀態(tài)寄存器發(fā)生變化,表明已獲得總線控制權(quán),并且發(fā)起一次DMA傳輸。通常DMA傳輸是從外設(shè)的數(shù)據(jù)緩沖區(qū)取數(shù)放到總線上的存儲(chǔ)器中。在傳輸?shù)倪^(guò)程中,計(jì)數(shù)器不斷計(jì)數(shù),直到計(jì)數(shù)器的記到傳輸長(zhǎng)度時(shí)停止計(jì)數(shù)并改變控制、狀態(tài)寄存器的內(nèi)容。DMA控制器此時(shí)向CPU歸還總線控制權(quán)。
這種DMA控制器已經(jīng)無(wú)法滿足日益增長(zhǎng)的對(duì)性能的需求。現(xiàn)在的應(yīng)用中,在很多的情況下,要求軟件能夠通過(guò)CPU配置寄存器直接發(fā)起一個(gè)DMA傳輸,而不是通過(guò)硬件來(lái)觸發(fā)。這就需要DMA控制器既能夠由CPU觸發(fā),也能夠由硬件觸發(fā),但兩者的觸發(fā)方式不一樣,硬件是通過(guò)發(fā)起信號(hào)來(lái)占用通道,發(fā)起DMA傳輸,而CPU是通過(guò)配置寄存器來(lái)發(fā)起,因此DMA控制器只能采用單一由硬件或軟件控制,如果要被軟/硬件復(fù)用,則需要在系統(tǒng)中配置兩套DMA控制器,這樣浪費(fèi)了大量的硬件資源。
另外,CPU發(fā)起的DMA傳輸通常是從內(nèi)存拷貝一段數(shù)據(jù)到內(nèi)存的另一段地址而無(wú)需中央處理器參與。為了能夠更高效的進(jìn)行數(shù)據(jù)傳輸,通常采取“突發(fā)”的傳輸方式。所謂“突發(fā)”的傳輸方式就是給一次地址及控制信號(hào)就可以進(jìn)行多個(gè)數(shù)據(jù)的傳輸,一次DMA傳輸中包括一次或多次“突發(fā)”傳輸。對(duì)于嵌入式系統(tǒng)而言,一次“突發(fā)”傳輸通常可以進(jìn)行半字、單字、4個(gè)、8個(gè)或16個(gè)“字”的傳輸,即“突發(fā)”傳輸?shù)臄?shù)據(jù)長(zhǎng)度依次為半字、單字、4字、8字和16字;突發(fā)傳輸模式是根據(jù)“突發(fā)”傳輸?shù)臄?shù)據(jù)長(zhǎng)度來(lái)定義的,如16字突發(fā)傳輸模式、8字突發(fā)傳輸模式等。對(duì)于支持“突發(fā)”傳輸?shù)膫鹘y(tǒng)的DMA控制器通常對(duì)傳輸長(zhǎng)度有限制。假設(shè)突發(fā)傳輸長(zhǎng)度為n個(gè)字,那么通過(guò)DMA傳輸?shù)臄?shù)據(jù)總長(zhǎng)度必須是4n的整數(shù)倍個(gè)字節(jié)。例如當(dāng)傳輸“突發(fā)”長(zhǎng)度為16個(gè)字時(shí),其一次DMA傳輸?shù)拈L(zhǎng)度需要是64(4×16)個(gè)字節(jié)的整數(shù)倍。然而這種要求會(huì)給CPU帶來(lái)額外的負(fù)擔(dān),CPU需要首先計(jì)算需要傳輸?shù)臄?shù)據(jù)的長(zhǎng)度,再進(jìn)行合適的裁減,多余的數(shù)據(jù)需要換模式再進(jìn)行一次DMA傳輸,或者由CPU直接搬運(yùn),嚴(yán)重影響了傳輸?shù)男省?br> 而且在現(xiàn)有技術(shù)中,外設(shè)發(fā)起的DMA傳輸通常是從外設(shè)的緩存中取數(shù)據(jù)放到總線上的存儲(chǔ)器中;比如當(dāng)有外設(shè)需要進(jìn)行DMA傳輸時(shí),當(dāng)其緩存裝滿數(shù)據(jù)后,其通過(guò)DMA請(qǐng)求觸發(fā)器向DMA控制器發(fā)起DMA傳輸請(qǐng)求。在此之前CPU已經(jīng)將地址等控制信息配給DMA控制器內(nèi)的地址寄存器中,當(dāng)DMA控制器接到DMA傳輸請(qǐng)求時(shí),其向CPU發(fā)起總線占用請(qǐng)求。CPU通常在執(zhí)行完當(dāng)前指令后將總線控制權(quán)交給DMA控制器。此時(shí)DMA控制器的控制、狀態(tài)寄存器發(fā)生變化,表明已獲得總線控制權(quán),開始進(jìn)行DMA傳輸。傳輸中用一個(gè)計(jì)數(shù)器對(duì)傳輸?shù)臄?shù)據(jù)量進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)達(dá)到外設(shè)緩存空間大小時(shí),DMA控制器向CPU歸還總線控制權(quán),完成本次DMA傳輸;即一次DMA傳輸只能完成一次外設(shè)的DMA傳輸請(qǐng)求。當(dāng)外設(shè)再次需要進(jìn)行DMA傳輸時(shí),就再發(fā)起一次DMA傳輸。雖然內(nèi)存中緩存空間相對(duì)而言較大,但每次還是只能傳輸相當(dāng)于外設(shè)緩存空間大小的數(shù)據(jù)量,不能充分利用內(nèi)存中緩存的空間。由于每次DMA傳輸?shù)臄?shù)據(jù)量受到外設(shè)緩存空間大小的限制,所以在傳輸大量數(shù)據(jù)時(shí),往往需要發(fā)起多次DMA傳輸,而每次DMA傳輸都必須等待CPU將總線控制權(quán)交給DMA控制器,因此傳輸效率低。另外,每進(jìn)行一次DMA傳輸,就會(huì)對(duì)內(nèi)存進(jìn)行一次訪問(wèn)。而內(nèi)存的效率由被訪問(wèn)次數(shù)決定,訪問(wèn)得越頻繁,內(nèi)存效率越低,而系統(tǒng)效率又與內(nèi)存效率直接相關(guān),這樣的工作方式在某種程度上降低了系統(tǒng)的工作效率。

發(fā)明內(nèi)容
針對(duì)以上不足,本發(fā)明提供了一種實(shí)現(xiàn)軟/硬件復(fù)用的DMA控制器,既能夠由硬件發(fā)起DMA傳輸,也可以由CPU發(fā)起DMA傳輸。
本發(fā)明采用的技術(shù)方案是一種實(shí)現(xiàn)軟/硬件復(fù)用的直接內(nèi)存訪問(wèn)DMA控制器,包括DMA控制模塊,用于控制DMA傳輸;其特征在于所述DMA控制模塊用于接收硬件的DMA傳輸請(qǐng)求,并判斷是否可以進(jìn)行硬件請(qǐng)求;如果可以則進(jìn)行所述硬件發(fā)起的DMA傳輸;還用于在CPU需要發(fā)出DMA傳輸請(qǐng)求時(shí),向CPU提供傳輸資源的使用信息;并在接收CPU的DMA傳輸請(qǐng)求后,利用CPU所選擇的空閑傳輸資源進(jìn)行DMA傳輸,同時(shí)停止處理對(duì)該傳輸資源的硬件請(qǐng)求直到所述CPU發(fā)起的DMA傳輸完成或終止。
進(jìn)一步的,所述DMA控制器還包括硬件請(qǐng)求使能狀態(tài)寄存器,用于存放表示硬件請(qǐng)求使能狀態(tài)的數(shù)值;包括“允許硬件使能”和“不允許硬件使能”的值;由CPU在發(fā)起DMA傳輸時(shí)配置為“不允許硬件使能”的值;通道狀態(tài)寄存器,用于存放表示通道狀態(tài)的數(shù)值,包括表示“通道被占用”的值和表示“通道可用”的值;DMA控制模塊還用于在要進(jìn)行DMA傳輸時(shí),探詢通道狀態(tài)寄存器的值是否為“通道可用”,如果是則通過(guò)該通道進(jìn)行DMA傳輸,并將所述通道狀態(tài)寄存器的值置為表示“通道被占用”的值;否則繼續(xù)探詢所述通道狀態(tài)寄存器的值;并當(dāng)該通道上的DMA傳輸完成或中斷后,將通道狀態(tài)寄存器的值置為表示“通道可用”的值;所述DMA控制模塊判斷是否可以進(jìn)行硬件請(qǐng)求是指探詢硬件請(qǐng)求使能寄存器的值,如果為“允許硬件請(qǐng)求”的值則表示可以進(jìn)行硬件請(qǐng)求;否則不處理所述硬件請(qǐng)求,繼續(xù)探詢;所述DMA控制模塊向CPU提供傳輸資源的使用信息是指通過(guò)所述通道狀態(tài)寄存器的值告知CPU通道是否空閑;所述DMA控制模塊在完成或中斷CPU發(fā)起的DMA傳輸后將硬件使能寄存器的值置為“允許硬件使能”。
進(jìn)一步的,所述DMA控制器還包括軟件請(qǐng)求寄存器,用于存放表示CPU是否發(fā)起DMA傳輸請(qǐng)求的數(shù)值,包括表示“有軟件請(qǐng)求”和“無(wú)軟件請(qǐng)求”的值,由CPU在發(fā)起DMA傳輸時(shí)配置為“有軟件請(qǐng)求”的值;所述DMA控制模塊在CPU發(fā)起的DMA傳輸完成后將該通道的軟件請(qǐng)求寄存器的值置為“無(wú)軟件請(qǐng)求”,還用于當(dāng)傳輸過(guò)程中軟件請(qǐng)求寄存器的值被CPU置為“無(wú)軟件請(qǐng)求”時(shí),終止該通道的DMA傳輸;所述DMA控制模塊接收CPU的DMA傳輸請(qǐng)求是指監(jiān)控軟件請(qǐng)求寄存器,當(dāng)其值被CPU配置為表示“有軟件請(qǐng)求”的值時(shí),表示接收到CPU所發(fā)起的DMA傳輸請(qǐng)求。
進(jìn)一步的,所述DMA控制模塊控制各通道以時(shí)分復(fù)用的方式占用總線。
進(jìn)一步的,所述DMA控制器還包括數(shù)據(jù)長(zhǎng)度計(jì)算模塊和至少一個(gè)自適應(yīng)模塊;所述DMA控制模塊還用于在進(jìn)行突發(fā)傳輸時(shí)控制所述數(shù)據(jù)長(zhǎng)度計(jì)算模塊計(jì)算待傳輸數(shù)據(jù)的長(zhǎng)度,并發(fā)送給自適應(yīng)模塊;并根據(jù)所述自適應(yīng)模塊選擇的突發(fā)傳輸模式進(jìn)行突發(fā)傳輸;至少一個(gè)自適應(yīng)模塊,用于根據(jù)傳輸數(shù)據(jù)的長(zhǎng)度自動(dòng)選擇效率最高的突發(fā)傳輸模式并輸出給所述DMA控制模塊。
進(jìn)一步的,所述自適應(yīng)模塊包括N組選擇單元,N的值為突發(fā)傳輸可采用的傳輸模式種類數(shù)減一;每個(gè)選擇單元用于根據(jù)傳輸數(shù)據(jù)的長(zhǎng)度在第一傳輸模式和第二傳輸模式中選擇一種;其中,第二傳輸模式的效率高于第一傳輸模式;當(dāng)數(shù)據(jù)長(zhǎng)度第二傳輸模式一次所能傳輸?shù)臄?shù)據(jù)長(zhǎng)度時(shí),選擇第二傳輸模式;否則選擇第一傳輸模式;第一個(gè)選擇單元中,第一傳輸模式為效率最低的傳輸模式;第二傳輸模式為效率倒數(shù)第二低的傳輸模式;其它各選擇單元的第一傳輸模式為前一單元所選的傳輸模式;最后一個(gè)選擇單元的第二傳輸模式為最佳的傳輸模式;所述最后一個(gè)選擇單元輸出所選的傳輸模式給DMA控制模塊。
進(jìn)一步的,各選擇單元包括一個(gè)減法器、一個(gè)比較器和一個(gè)選擇器;所述選擇器有一個(gè)輸出端,第一、第二輸入端和一個(gè)選擇端,選擇器根據(jù)選擇端的信號(hào),選擇第一、第二輸入端中的一路信號(hào)進(jìn)行輸出;所述選擇器的第一輸入端輸入第一傳輸模式的使能信號(hào);第二輸入端輸入第二傳輸模式的使能信號(hào);最后一個(gè)選擇單元的選擇器輸出端與DMA控制模塊相連;除此之外,其它各選擇單元的選擇器的輸出端與下一選擇單元選擇器的第一輸入端相連;所述減法器用于得到數(shù)據(jù)長(zhǎng)度值與第二傳輸模式所能傳輸字節(jié)數(shù)的差值,并輸出給比較器;所述比較器將所述差值與0進(jìn)行比較,并輸出相應(yīng)信號(hào)給所述選擇器的選擇端;如果該差值大于等于0,則輸出讓選擇器選擇第一輸入端的信號(hào),否則輸出讓選擇器選擇第二輸入端的信號(hào)。
進(jìn)一步的,所述DMA控制模塊在外設(shè)與內(nèi)存間進(jìn)行DMA傳輸期間,當(dāng)外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)達(dá)到外設(shè)緩存空間大小時(shí),給外設(shè)完成本次外設(shè)與DMA控制器間的DMA傳輸請(qǐng)求的信號(hào);當(dāng)DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)達(dá)到內(nèi)存緩存空間大小時(shí),向CPU發(fā)出通道完成傳輸中斷請(qǐng)求。
進(jìn)一步的,所述DMA控制器還包括外設(shè)緩存大小寄存器,用于存放外設(shè)的緩存空間大小的數(shù)值;內(nèi)存緩存大小寄存器,用于存放內(nèi)存中緩存空間大小的數(shù)值;第一計(jì)數(shù)器,用于在一次外設(shè)與DMA控制器間的DMA傳輸中對(duì)外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);第二計(jì)數(shù)器,用于在一次DMA傳輸中對(duì)DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);所述DMA控制模塊通過(guò)判斷第一計(jì)數(shù)器的計(jì)數(shù)值是否小于外設(shè)緩存大小寄存器中的數(shù)值,來(lái)判斷外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)是否達(dá)到外設(shè)緩存空間的大小;通過(guò)比較第二計(jì)數(shù)器的計(jì)數(shù)值是否小于內(nèi)存緩存大小寄存器中的數(shù)值,來(lái)判斷DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到內(nèi)存緩存空間的大小。
進(jìn)一步的,所述DMA控制器還包括源地址變化方式寄存器,用于存放表示傳輸中源地址變化方式的數(shù)值;目的地址變化方式寄存器用于存放表示傳輸中目的地址變化方式的數(shù)值;比如1表示增加,2表示減少,其它數(shù)值表示不變;第三計(jì)數(shù)器,用于存放DMA傳輸?shù)脑吹刂罚坏谒挠?jì)數(shù)器,用于存放DMA傳輸?shù)哪康牡刂罚凰鯠MA控制模塊按照第三計(jì)數(shù)器中的源地址和第四計(jì)數(shù)器中存放的目的地址進(jìn)行DMA傳輸;還用于根據(jù)源地址變化方式寄存器及目的地址變化方式寄存器的值來(lái)控制第三、第四計(jì)數(shù)器中的源/目的地址的數(shù)值遞增、或遞減、或不變。
本發(fā)明還提供了一種在上述DMA控制器中進(jìn)行DMA傳輸?shù)姆椒?,包括?dāng)CPU要進(jìn)行DMA傳輸時(shí)的步驟為
(A)CPU在DMA控制器中選擇一個(gè)空閑通道;(B)CPU關(guān)閉所選通道的硬件請(qǐng)求使能,并向DMA控制模塊發(fā)出DMA傳輸請(qǐng)求;(C)DMA控制模塊判斷通道是否空閑,如果不空閑則返回(C);否則,執(zhí)行步驟(D)(D)DMA控制模塊在步驟(A)所選的通道中進(jìn)行DMA傳輸,傳輸完成后執(zhí)行步驟(E);(E)開放所述通道的硬件使能;當(dāng)硬件要進(jìn)行DMA傳輸時(shí)的步驟為(a)硬件向DMA控制模塊請(qǐng)求進(jìn)行DMA傳輸;(b)DMA控制模塊判斷能否可以進(jìn)行硬件請(qǐng)求;如果硬件請(qǐng)求被關(guān)閉則返回(b);否則執(zhí)行下一步;(c)DMA控制模塊判斷通道是否空閑,如果不空閑則返回(c);否則執(zhí)行步驟(d)(d)DMA控制模塊進(jìn)行DMA傳輸,直到傳輸完成。
進(jìn)一步的,所述DMA控制器還包括步驟(C)中,如果CPU發(fā)出取消DMA傳輸?shù)囊?,則DMA控制模塊終止傳輸,執(zhí)行(E)。
采用了本發(fā)明所提供的方案后,由于DMA控制器的每一個(gè)通道既可以支持硬件請(qǐng)求的DMA操作又可以支持CPU發(fā)起的DMA操作,因此能夠?qū)崿F(xiàn)用對(duì)DMA控制器的軟/硬件復(fù)用。采用優(yōu)化方案后,在進(jìn)行“突發(fā)”傳輸時(shí),本DMA控制器可以根據(jù)傳輸數(shù)據(jù)的總長(zhǎng)度自適應(yīng)調(diào)整傳輸類型,以保證DMA傳輸總能以最高效的方式進(jìn)行;而且在進(jìn)行外設(shè)與內(nèi)存間的傳輸時(shí),每次傳輸?shù)臄?shù)據(jù)量不再受限于外設(shè)的緩存大小,提高了傳輸效率。


圖1是現(xiàn)有技術(shù)中DMA控制器的工作原理示意圖;
圖2是本發(fā)明的DMA控制器的具體實(shí)施的示意圖;圖3是本發(fā)明的DMA控制器中自適應(yīng)模塊的具體實(shí)施的邏輯電路圖。
具體實(shí)施例方式
一種實(shí)現(xiàn)軟/硬件復(fù)用的DMA控制器,如圖2所示,包括至少一個(gè)自適應(yīng)模塊、至少一個(gè)通道、DMA控制模塊、數(shù)據(jù)長(zhǎng)度計(jì)算模塊、寄存器組及若干個(gè)計(jì)數(shù)器。
每個(gè)通道分別通過(guò)不同的接口與一個(gè)硬件相連。
所述寄存器組包括外設(shè)緩存大小寄存器,用于存放外設(shè)的緩存空間大小的數(shù)值;內(nèi)存緩存大小寄存器,用于存放內(nèi)存中緩存空間大小的數(shù)值;每個(gè)通道的硬件請(qǐng)求使能狀態(tài)寄存器,用于存放表示硬件請(qǐng)求使能狀態(tài)的數(shù)值;比如1表示允許硬件請(qǐng)求,其它數(shù)值表示不允許硬件請(qǐng)求;該寄存器默認(rèn)的初始值為表示“允許硬件請(qǐng)求”的值;每個(gè)通道的通道狀態(tài)寄存器,用于存放表示通道狀態(tài)的數(shù)值;比如1表示通道被占用,其它數(shù)值表示通道可用;每個(gè)通道的軟件請(qǐng)求寄存器,用于存放表示CPU是否發(fā)起DMA傳輸請(qǐng)求的數(shù)值,比如1表示有軟件請(qǐng)求;其它數(shù)值表示無(wú)軟件請(qǐng)求。
當(dāng)軟件要發(fā)起DMA傳輸請(qǐng)求時(shí),先隨機(jī)選擇一個(gè)通道并對(duì)其通道狀態(tài)寄存器的值進(jìn)行判斷,如果為“通道被占用”,則重新選擇;如果為“通道可用”,說(shuō)明通道空閑,則CPU將該通道的硬件請(qǐng)求使能寄存器的值置為“不允許硬件請(qǐng)求”的值,并配置軟件請(qǐng)求寄存器的值為“有軟件請(qǐng)求”;每個(gè)通道的源地址變化方式寄存器,用于存放表示傳輸中源地址變化方式的數(shù)值;比如1表示增加,2表示減少,其它數(shù)值表示不變;每個(gè)通道的目的地址變化方式寄存器用于存放表示傳輸中目的地址變化方式的數(shù)值;比如1表示增加,2表示減少,其它數(shù)值表示不變;在進(jìn)行DMA傳輸?shù)倪^(guò)程中,對(duì)于地址的變化存在著多種需求。例如,當(dāng)需要從一個(gè)FIFO中取數(shù),存到一片內(nèi)存中時(shí),就需要源地址不變,而目的地址增加;當(dāng)從內(nèi)存中取數(shù)存到FIFO中時(shí),則需要源地址增加,目的地址不變。實(shí)際應(yīng)用中,源地址變化方式寄存器和目的地址變化方式寄存器的值由CPU根據(jù)DMA傳輸?shù)男枨笈渲谩?br> 所述計(jì)數(shù)器包括第一計(jì)數(shù)器,用于在一次外設(shè)與DMA控制器間的DMA傳輸中對(duì)外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);第二計(jì)數(shù)器,用于在一次DMA傳輸中對(duì)DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);第三計(jì)數(shù)器,用于存放DMA傳輸?shù)脑吹刂?;第四?jì)數(shù)器,用于存放DMA傳輸?shù)哪康牡刂贰?br> 所述DMA控制模塊用于接收硬件的DMA傳輸請(qǐng)求,并判斷其相連通道的硬件請(qǐng)求使能寄存器的值是否為“允許硬件請(qǐng)求”的值,如果是則進(jìn)行該硬件發(fā)起的DMA傳輸;否則不處理硬件請(qǐng)求,繼續(xù)探詢所述硬件請(qǐng)求使能寄存器的值,直到CPU發(fā)起的DMA傳輸結(jié)束,DMA控制模塊將硬件請(qǐng)求使能寄存器的值置為“允許硬件請(qǐng)求”為止。
所述DMA控制模塊還用于監(jiān)控各通道的軟件請(qǐng)求寄存器,當(dāng)其值被CPU配置為表示“有軟件請(qǐng)求”的值時(shí),通過(guò)該通道進(jìn)行CPU所發(fā)起的DMA傳輸;并在傳輸完成后將該通道的軟件請(qǐng)求寄存器的值置為“無(wú)軟件請(qǐng)求”,將硬件使能寄存器的值置為“允許硬件使能”;還用于當(dāng)傳輸過(guò)程中軟件請(qǐng)求寄存器的值被CPU置為“無(wú)軟件請(qǐng)求”時(shí),終止該通道的DMA傳輸,并將硬件使能寄存器的值置為“允許硬件使能”。
所述DMA控制模塊在要進(jìn)行DMA傳輸時(shí),首先探詢通道狀態(tài)寄存器的值是否為“通道可用”,如果是則通過(guò)該通道進(jìn)行DMA傳輸,并將所述通道狀態(tài)寄存器的值置為表示“通道被占用”的值;否則繼續(xù)探詢所述通道狀態(tài)寄存器的值。
DMA控制模塊用于在開始DMA傳輸后,將所用傳輸通道的通道狀態(tài)寄存器的值置為“通道被占用”;當(dāng)該通道上的DMA傳輸完成或終止后,將通道狀態(tài)寄存器的值置為表示“通道可用”的值。
這樣一來(lái),本DMA控制器的每一個(gè)通道既可以接收硬件請(qǐng)求的DMA操作又可以接收CPU發(fā)起的DMA操作,即能同時(shí)支持軟件和硬件的請(qǐng)求,并且提高了DMA硬件資源的使用率。當(dāng)一個(gè)通道相連的硬件不需要進(jìn)行DMA傳輸時(shí),就可以由CPU通過(guò)配置寄存器占用該通道來(lái)發(fā)起一次DMA傳輸。若CPU因?yàn)槿魏卧蛟趥鬏斍盎騻鬏斶^(guò)程中需要取消之前請(qǐng)求的DMA傳輸也可以通過(guò)CPU配寄存器來(lái)取消之前請(qǐng)求的DMA傳輸操作。CPU可以在外設(shè)的FIFO滿時(shí)發(fā)起外設(shè)到內(nèi)存的傳輸,在外設(shè)的FIFO不滿時(shí)發(fā)起內(nèi)存到外設(shè)的傳輸,而不用等待硬件來(lái)控制和請(qǐng)求DMA傳輸。
DMA控制模塊控制各通道以時(shí)分復(fù)用的方式占用總線。這樣當(dāng)一個(gè)通道在進(jìn)行DMA傳輸時(shí),其它通道就可以對(duì)需要進(jìn)行DMA傳輸?shù)臄?shù)據(jù)進(jìn)行準(zhǔn)備和處理;提高了系統(tǒng)的傳輸效率。
所述DMA控制模塊還用于在進(jìn)行突發(fā)傳輸時(shí)控制所述數(shù)據(jù)長(zhǎng)度計(jì)算模塊計(jì)算待傳輸數(shù)據(jù)的長(zhǎng)度——即數(shù)據(jù)共有多少個(gè)字節(jié)——并發(fā)送給自適應(yīng)模塊;并根據(jù)所述自適應(yīng)模塊輸出的突發(fā)傳輸模式進(jìn)行突發(fā)傳輸。
所述DMA控制模塊還在進(jìn)行DMA傳輸期間,控制所述第一、第二計(jì)數(shù)器進(jìn)行計(jì)數(shù);并通過(guò)判斷第一計(jì)數(shù)器的計(jì)數(shù)值是否小于外設(shè)緩存大小寄存器中的數(shù)值,來(lái)判斷外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)是否達(dá)到外設(shè)緩存空間的大小,達(dá)到時(shí)給外設(shè)完成本次外設(shè)與DMA控制器間的DMA傳輸請(qǐng)求的信號(hào);還用于通過(guò)比較第二計(jì)數(shù)器的計(jì)數(shù)值是否小于內(nèi)存緩存大小寄存器中的數(shù)值,來(lái)判斷DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到內(nèi)存緩存空間的大小,達(dá)到時(shí)向CPU發(fā)出通道完成傳輸中斷請(qǐng)求,并將所述硬件請(qǐng)求使能狀態(tài)寄存器的值配置為“不允許硬件請(qǐng)求”的值;當(dāng)接收到內(nèi)存的緩存數(shù)據(jù)處理完的信號(hào)時(shí)——即當(dāng)內(nèi)存又可以接收或發(fā)送數(shù)據(jù)時(shí),將所述硬件請(qǐng)求使能狀態(tài)寄存器的值配置為“允許硬件請(qǐng)求”的值;以繼續(xù)進(jìn)行外設(shè)與內(nèi)存間的DMA傳輸。
所述一次DMA傳輸是指從DMA控制器向CPU發(fā)起請(qǐng)求并獲得總線控制權(quán)開始,到DMA控制器發(fā)出中斷為止進(jìn)行的傳輸;在一次DMA傳輸中,DMA控制器只需訪問(wèn)一次內(nèi)存,所傳輸?shù)臄?shù)據(jù)量為內(nèi)存中緩存空間的大小。
所述一次外設(shè)與DMA控制器間的DMA傳輸是指從外設(shè)與DMA控制器之間進(jìn)行數(shù)據(jù)交換的傳輸過(guò)程,所傳輸?shù)臄?shù)據(jù)量為外設(shè)的緩存空間大??;內(nèi)存中緩存空間的大小通常是外設(shè)緩存大小的整數(shù)倍;本發(fā)明里,一次DMA傳輸中可以包括多次外設(shè)與DMA控制器間的DMA傳輸。
另外,所述DMA控制模塊按照第三計(jì)數(shù)器中的源地址和第四計(jì)數(shù)器中存放的目的地址進(jìn)行DMA傳輸;還用于根據(jù)源地址變化方式寄存器及目的地址變化方式寄存器的值來(lái)控制第三、第四計(jì)數(shù)器中的源/目的地址的數(shù)值遞增、或遞減、或不變。
比如當(dāng)從內(nèi)存?zhèn)鬏敂?shù)據(jù)到一個(gè)FIFO時(shí),目的地址變化方式寄存器的值表示“不變”的值;比如,內(nèi)存每次傳輸8字節(jié)的數(shù)據(jù)給FIFO,每傳輸一次就將第三計(jì)數(shù)器的值加上8,然后下次傳輸中將該值作為新的源地址。
在實(shí)際應(yīng)用時(shí),當(dāng)需要將內(nèi)存中的一個(gè)數(shù)覆蓋到一片內(nèi)存中時(shí),也可以采用該方法,固定源地址,增加目的地址即可。
所述自適應(yīng)模塊用于根據(jù)傳輸數(shù)據(jù)的長(zhǎng)度自動(dòng)選擇效率最高的突發(fā)傳輸模式;其輸入端與DMA控制器里的數(shù)據(jù)長(zhǎng)度計(jì)算模塊相連,根據(jù)輸入的傳輸數(shù)據(jù)長(zhǎng)度選擇效率最高的突發(fā)傳輸模式,將所選擇的傳輸模式輸出給DMA控制模塊,使DMA控制模塊根據(jù)該模式進(jìn)行突發(fā)傳輸。
如圖3所示,所述自適應(yīng)模塊包括N組選擇單元,N的值為突發(fā)傳輸可采用的傳輸模式種類數(shù)減1。
每個(gè)選擇單元用于根據(jù)傳輸數(shù)據(jù)的長(zhǎng)度在第一傳輸模式和第二傳輸模式中選擇一種;其中,第二傳輸模式的效率高于第一傳輸模式;當(dāng)數(shù)據(jù)長(zhǎng)度第二傳輸模式一次所能傳輸?shù)臄?shù)據(jù)長(zhǎng)度時(shí),選擇第二傳輸模式;否則選擇第一傳輸模式。
第一個(gè)選擇單元中,第一傳輸模式為效率最低的傳輸模式;第二傳輸模式為效率倒數(shù)第二低的傳輸模式;其它各選擇單元的第一傳輸模式為前一單元所選的傳輸模式;最后一個(gè)選擇單元的第二傳輸模式為最佳的傳輸模式;所述最后一個(gè)選擇單元輸出所選的傳輸模式給DMA控制模塊;各選擇單元包括一個(gè)減法器、一個(gè)比較器和一個(gè)選擇器;所述選擇器有一個(gè)輸出端,第一、第二輸入端和一個(gè)選擇端,選擇器根據(jù)選擇端的信號(hào),選擇第一、第二輸入端中的一路信號(hào)進(jìn)行輸出,比如當(dāng)選擇端輸入高電平時(shí)輸出第一輸入端的信號(hào),當(dāng)選擇端輸入低電平時(shí)輸出第二輸入端的信號(hào)。
所述選擇器的第一輸入端輸入第一傳輸模式的使能信號(hào);第二輸入端輸入第二傳輸模式的使能信號(hào);最后一個(gè)選擇單元的選擇器輸出端與DMA控制模塊相連;除此之外,其它各選擇單元的選擇器的輸出端與下一選擇單元選擇器的第一輸入端相連。
所述減法器用于得到數(shù)據(jù)長(zhǎng)度值(以字節(jié)為單位)與第二傳輸模式所能傳輸字節(jié)數(shù)的差值,并輸出給比較器;所述比較器將所述差值與0進(jìn)行比較,并輸出相應(yīng)信號(hào)給所述選擇器的選擇端;如果該差值大于等于0,則輸出讓選擇器選擇第一輸入端的信號(hào),否則輸出讓選擇器選擇第二輸入端的信號(hào)。
在下文中,以傳輸模式有6種,N=5為例進(jìn)行更詳細(xì)的說(shuō)明。
6種傳輸模式分別是16字、8字、4字、1字、半字和單字節(jié)傳輸模式,其中16字傳輸模式為最佳傳輸模式。
電路中共有減法器、比較器和選擇器各5個(gè);其中,減法器S1~S5的輸出端各與比較器C1~C5的輸入端相連;C1~C5的輸出端分別與選擇器E1~E5的選擇端相連;各選擇器E1~E5的輸入端所接信號(hào)如下E1第一輸入端為單字節(jié)傳輸方式的使能信號(hào);第二輸入端為半字傳輸方式的使能信號(hào);E2第一輸入端連接E1的輸出端;第二輸入端為1字傳輸模式的使能信號(hào);E3第一輸入端連接E2的輸出端;第二輸入端為4字傳輸模式的使能信號(hào);
E4第一輸入端連接E3的輸出端;第二輸入端為8字傳輸模式的使能信號(hào);E5第一輸入端連接E4的輸出端;第二輸入端為最佳傳輸模式——即16字傳輸模式的使能信號(hào);E5的輸出端接DMA控制模塊,該模塊根據(jù)E5的輸出信號(hào)采用相應(yīng)的傳輸模式進(jìn)行突發(fā)傳輸。
首先,當(dāng)要進(jìn)行突發(fā)傳輸時(shí),DMA控制模塊控制數(shù)據(jù)長(zhǎng)度計(jì)算模塊計(jì)算需要傳輸?shù)臄?shù)據(jù)的長(zhǎng)度(以字節(jié)為單位),并將該長(zhǎng)度值送入各減法器的輸入端;減法器S1~S5分別用該長(zhǎng)度值減去2字節(jié)、4字節(jié)、16字節(jié)、32字節(jié)和64字節(jié),所得到的差值分別相應(yīng)送給比較器C1~C5的輸入端;各比較器將輸入的差值與0進(jìn)行比較,如果大于等于0,則輸出給選擇器的信號(hào)為選擇第二輸入端的信號(hào);否則輸出選擇第一輸入端的信號(hào)。
本次“突發(fā)”傳輸結(jié)束后,由數(shù)據(jù)長(zhǎng)度計(jì)算單元計(jì)算剩余數(shù)據(jù)的長(zhǎng)度,然后再將長(zhǎng)度輸入給自適應(yīng)模塊。
當(dāng)如圖1所示的電路產(chǎn)生作用時(shí),任意長(zhǎng)度的傳輸都可以被DMA控制器接受。當(dāng)剩余傳輸長(zhǎng)度大于16字時(shí),DMA控制器自動(dòng)選擇效率最高的16字突發(fā)傳輸模式。當(dāng)剩余傳輸長(zhǎng)度不足16字,但是大于8字時(shí),DMA控制器自動(dòng)調(diào)整為傳輸效率較高的8字突發(fā)傳輸模式,依此類推。當(dāng)剩余的長(zhǎng)度不足一個(gè)字時(shí),DMA控制器也會(huì)根據(jù)剩余的傳輸長(zhǎng)度自動(dòng)調(diào)整為半字或單字節(jié)的傳輸模式。由此可知,本DMA控制器可以根據(jù)傳輸?shù)目傞L(zhǎng)度自適應(yīng)調(diào)整傳輸類型,以保證DMA傳輸總能以最高效的方式進(jìn)行。
在實(shí)際應(yīng)用中,可以為每個(gè)總線接口各配置一個(gè)自適應(yīng)模塊。
本發(fā)明還提供了一種在上述軟/硬件復(fù)用的DMA控制器中的DMA傳輸方法,包括當(dāng)CPU要進(jìn)行DMA傳輸時(shí)的步驟為(A)CPU在DMA控制器中選擇一個(gè)空閑通道——即通道狀態(tài)寄存器的值表示“通道可用”的通道;
(B)CPU通過(guò)將該通道的硬件請(qǐng)求使能狀態(tài)寄存器的值置為表示“不允許硬件使能”的值,來(lái)關(guān)閉該通道的硬件請(qǐng)求使能;并通過(guò)將軟件請(qǐng)求寄存器的值置為“有軟件請(qǐng)求”,來(lái)向DMA控制模塊發(fā)出DMA傳輸請(qǐng)求;當(dāng)DMA控制模塊軟件請(qǐng)求寄存器的值改變?yōu)椤坝熊浖?qǐng)求”時(shí),執(zhí)行(C);(C)DMA控制模塊根據(jù)通道狀態(tài)寄存器的值判斷通道是否空閑,當(dāng)通道狀態(tài)寄存器的值為“通道被占用”時(shí),返回(C),即繼續(xù)探詢通道狀態(tài)寄存器的值;否則,執(zhí)行步驟(D);(D)在步驟(A)所選的通道中進(jìn)行DMA傳輸,并將通道狀態(tài)寄存器的值置為“通道被占用”;在傳輸過(guò)程中,如果CPU要取消傳輸,則將軟件請(qǐng)求寄存器的值置為“無(wú)軟件請(qǐng)求”;當(dāng)DMA控制模塊發(fā)現(xiàn)軟件請(qǐng)求寄存器的值改變?yōu)椤盁o(wú)軟件請(qǐng)求”時(shí),或傳輸完成后執(zhí)行步驟(E);(E)DMA控制模塊將硬件請(qǐng)求使能狀態(tài)寄存器的值置為“允許硬件請(qǐng)求”的值;將通道狀態(tài)寄存器的值置為“通道可用”;將軟件請(qǐng)求寄存器的值置為“無(wú)軟件請(qǐng)求”。
當(dāng)硬件要進(jìn)行DMA傳輸時(shí)的步驟為(a)硬件向DMA控制模塊請(qǐng)求進(jìn)行DMA傳輸;(b)DMA控制模塊根據(jù)硬件請(qǐng)求使能狀態(tài)寄存器的值判斷能否可以進(jìn)行硬件請(qǐng)求;如果硬件請(qǐng)求使能狀態(tài)寄存器的值為“允許硬件請(qǐng)求”,則執(zhí)行下一步;否則返回(b),即繼續(xù)探詢硬件請(qǐng)求使能狀態(tài)寄存器的值;(c)DMA控制模塊根據(jù)通道狀態(tài)寄存器的值判斷通道是否空閑,當(dāng)通道狀態(tài)寄存器的值為“通道被占用”時(shí),返回(c),即繼續(xù)探詢通道狀態(tài)寄存器的值;否則執(zhí)行步驟(d);(d)在硬件相連的通道中進(jìn)行DMA傳輸,并將通道狀態(tài)寄存器的值置為“通道被占用”;傳輸完成后,將通道狀態(tài)寄存器的值置為“通道可用”。
當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種實(shí)現(xiàn)軟/硬件復(fù)用的直接內(nèi)存訪問(wèn)DMA控制器,包括DMA控制模塊,用于控制DMA傳輸;其特征在于所述DMA控制模塊用于接收硬件的DMA傳輸請(qǐng)求,并判斷是否可以進(jìn)行硬件請(qǐng)求;如果可以則進(jìn)行所述硬件發(fā)起的DMA傳輸;還用于在CPU需要發(fā)出DMA傳輸請(qǐng)求時(shí),向CPU提供傳輸資源的使用信息;并在接收CPU的DMA傳輸請(qǐng)求后,利用CPU所選擇的空閑傳輸資源進(jìn)行DMA傳輸,同時(shí)停止處理對(duì)該傳輸資源的硬件請(qǐng)求直到所述CPU發(fā)起的DMA傳輸完成或終止。
2.如權(quán)利要求1所述的DMA控制器,其特征在于,還包括硬件請(qǐng)求使能狀態(tài)寄存器,用于存放表示硬件請(qǐng)求使能狀態(tài)的數(shù)值;包括“允許硬件使能”和“不允許硬件使能”的值;由CPU在發(fā)起DMA傳輸時(shí)配置為“不允許硬件使能”的值;通道狀態(tài)寄存器,用于存放表示通道狀態(tài)的數(shù)值,包括表示“通道被占用”的值和表示“通道可用”的值;DMA控制模塊還用于在要進(jìn)行DMA傳輸時(shí),探詢通道狀態(tài)寄存器的值是否為“通道可用”,如果是則通過(guò)該通道進(jìn)行DMA傳輸,并將所述通道狀態(tài)寄存器的值置為表示“通道被占用”的值;否則繼續(xù)探詢所述通道狀態(tài)寄存器的值;并當(dāng)該通道上的DMA傳輸完成或中斷后,將通道狀態(tài)寄存器的值置為表示“通道可用”的值;所述DMA控制模塊判斷是否可以進(jìn)行硬件請(qǐng)求是指探詢硬件請(qǐng)求使能寄存器的值,如果為“允許硬件請(qǐng)求”的值則表示可以進(jìn)行硬件請(qǐng)求;否則不處理所述硬件請(qǐng)求,繼續(xù)探詢;所述DMA控制模塊向CPU提供傳輸資源的使用信息是指通過(guò)所述通道狀態(tài)寄存器的值告知CPU通道是否空閑;所述DMA控制模塊在完成或中斷CPU發(fā)起的DMA傳輸后將硬件使能寄存器的值置為“允許硬件使能”。
3.如權(quán)利要求2所述的DMA控制器,其特征在于,還包括軟件請(qǐng)求寄存器,用于存放表示CPU是否發(fā)起DMA傳輸請(qǐng)求的數(shù)值,包括表示“有軟件請(qǐng)求”和“無(wú)軟件請(qǐng)求”的值,由CPU在發(fā)起DMA傳輸時(shí)配置為“有軟件請(qǐng)求”的值;所述DMA控制模塊在CPU發(fā)起的DMA傳輸完成后將該通道的軟件請(qǐng)求寄存器的值置為“無(wú)軟件請(qǐng)求”,還用于當(dāng)傳輸過(guò)程中軟件請(qǐng)求寄存器的值被CPU置為“無(wú)軟件請(qǐng)求”時(shí),終止該通道的DMA傳輸;所述DMA控制模塊接收CPU的DMA傳輸請(qǐng)求是指監(jiān)控軟件請(qǐng)求寄存器,當(dāng)其值被CPU配置為表示“有軟件請(qǐng)求”的值時(shí),表示接收到CPU所發(fā)起的DMA傳輸請(qǐng)求。
4.如權(quán)利要求1所述的DMA控制器,其特征在于所述DMA控制模塊控制各通道以時(shí)分復(fù)用的方式占用總線。
5.如權(quán)利要求1所述的DMA控制器,其特征在于還包括數(shù)據(jù)長(zhǎng)度計(jì)算模塊和至少一個(gè)自適應(yīng)模塊;所述DMA控制模塊還用于在進(jìn)行突發(fā)傳輸時(shí)控制所述數(shù)據(jù)長(zhǎng)度計(jì)算模塊計(jì)算待傳輸數(shù)據(jù)的長(zhǎng)度,并發(fā)送給自適應(yīng)模塊;并根據(jù)所述自適應(yīng)模塊選擇的突發(fā)傳輸模式進(jìn)行突發(fā)傳輸;至少一個(gè)自適應(yīng)模塊,用于根據(jù)傳輸數(shù)據(jù)的長(zhǎng)度自動(dòng)選擇效率最高的突發(fā)傳輸模式并輸出給所述DMA控制模塊。
6.如權(quán)利要求3所述的DMA控制器,其特征在于所述自適應(yīng)模塊包括N組選擇單元,N的值為突發(fā)傳輸可采用的傳輸模式種類數(shù)減一;每個(gè)選擇單元用于根據(jù)傳輸數(shù)據(jù)的長(zhǎng)度在第一傳輸模式和第二傳輸模式中選擇一種;其中,第二傳輸模式的效率高于第一傳輸模式;當(dāng)數(shù)據(jù)長(zhǎng)度第二傳輸模式一次所能傳輸?shù)臄?shù)據(jù)長(zhǎng)度時(shí),選擇第二傳輸模式;否則選擇第一傳輸模式;第一個(gè)選擇單元中,第一傳輸模式為效率最低的傳輸模式;第二傳輸模式為效率倒數(shù)第二低的傳輸模式;其它各選擇單元的第一傳輸模式為前一單元所選的傳輸模式;最后一個(gè)選擇單元的第二傳輸模式為最佳的傳輸模式;所述最后一個(gè)選擇單元輸出所選的傳輸模式給DMA控制模塊。
7.如權(quán)利要求4所述的DMA控制器,其特征在于各選擇單元包括一個(gè)減法器、一個(gè)比較器和一個(gè)選擇器;所述選擇器有一個(gè)輸出端,第一、第二輸入端和一個(gè)選擇端,選擇器根據(jù)選擇端的信號(hào),選擇第一、第二輸入端中的一路信號(hào)進(jìn)行輸出;所述選擇器的第一輸入端輸入第一傳輸模式的使能信號(hào);第二輸入端輸入第二傳輸模式的使能信號(hào);最后一個(gè)選擇單元的選擇器輸出端與DMA控制模塊相連;除此之外,其它各選擇單元的選擇器的輸出端與下一選擇單元選擇器的第一輸入端相連;所述減法器用于得到數(shù)據(jù)長(zhǎng)度值與第二傳輸模式所能傳輸字節(jié)數(shù)的差值,并輸出給比較器;所述比較器將所述差值與0進(jìn)行比較,并輸出相應(yīng)信號(hào)給所述選擇器的選擇端;如果該差值大于等于0,則輸出讓選擇器選擇第一輸入端的信號(hào),否則輸出讓選擇器選擇第二輸入端的信號(hào)。
8.如權(quán)利要求1所述的DMA控制器,其特征在于所述DMA控制模塊在外設(shè)與內(nèi)存間進(jìn)行DMA傳輸期間,當(dāng)外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)達(dá)到外設(shè)緩存空間大小時(shí),給外設(shè)完成本次外設(shè)與DMA控制器間的DMA傳輸請(qǐng)求的信號(hào);當(dāng)DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)達(dá)到內(nèi)存緩存空間大小時(shí),向CPU發(fā)出通道完成傳輸中斷請(qǐng)求。
9.如權(quán)利要求6所述的DMA控制器,其特征在于,還包括外設(shè)緩存大小寄存器,用于存放外設(shè)的緩存空間大小的數(shù)值;內(nèi)存緩存大小寄存器,用于存放內(nèi)存中緩存空間大小的數(shù)值;第一計(jì)數(shù)器,用于在一次外設(shè)與DMA控制器間的DMA傳輸中對(duì)外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);第二計(jì)數(shù)器,用于在一次DMA傳輸中對(duì)DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)進(jìn)行計(jì)數(shù);所述DMA控制模塊通過(guò)判斷第一計(jì)數(shù)器的計(jì)數(shù)值是否小于外設(shè)緩存大小寄存器中的數(shù)值,來(lái)判斷外設(shè)與DMA控制器間傳輸?shù)淖止?jié)數(shù)是否達(dá)到外設(shè)緩存空間的大小;通過(guò)比較第二計(jì)數(shù)器的計(jì)數(shù)值是否小于內(nèi)存緩存大小寄存器中的數(shù)值,來(lái)判斷DMA控制器與內(nèi)存間傳輸?shù)淖止?jié)數(shù)是否達(dá)到內(nèi)存緩存空間的大小。
10.如權(quán)利要求1所述的DMA控制器,其特征在于,還包括源地址變化方式寄存器,用于存放表示傳輸中源地址變化方式的數(shù)值;目的地址變化方式寄存器用于存放表示傳輸中目的地址變化方式的數(shù)值;比如1表示增加,2表示減少,其它數(shù)值表示不變;第三計(jì)數(shù)器,用于存放DMA傳輸?shù)脑吹刂罚坏谒挠?jì)數(shù)器,用于存放DMA傳輸?shù)哪康牡刂?;所述DMA控制模塊按照第三計(jì)數(shù)器中的源地址和第四計(jì)數(shù)器中存放的目的地址進(jìn)行DMA傳輸;還用于根據(jù)源地址變化方式寄存器及目的地址變化方式寄存器的值來(lái)控制第三、第四計(jì)數(shù)器中的源/目的地址的數(shù)值遞增、或遞減、或不變。
11.一種在權(quán)利要求1所述的DMA控制器中進(jìn)行DMA傳輸?shù)姆椒?,包括?dāng)CPU要進(jìn)行DMA傳輸時(shí)的步驟為(A)CPU在DMA控制器中選擇一個(gè)空閑通道;(B)CPU關(guān)閉所選通道的硬件請(qǐng)求使能,并向DMA控制模塊發(fā)出DMA傳輸請(qǐng)求;(C)DMA控制模塊判斷通道是否空閑,如果不空閑則返回(C);否則,執(zhí)行步驟(D)(D)DMA控制模塊在步驟(A)所選的通道中進(jìn)行DMA傳輸,傳輸完成后執(zhí)行步驟(E);(E)開放所述通道的硬件使能;當(dāng)硬件要進(jìn)行DMA傳輸時(shí)的步驟為(a)硬件向DMA控制模塊請(qǐng)求進(jìn)行DMA傳輸;(b)DMA控制模塊判斷能否可以進(jìn)行硬件請(qǐng)求;如果硬件請(qǐng)求被關(guān)閉則返回(b);否則執(zhí)行下一步;(c)DMA控制模塊判斷通道是否空閑,如果不空閑則返回(c);否則執(zhí)行步驟(d)(d)DMA控制模塊進(jìn)行DMA傳輸,直到傳輸完成。
12.如權(quán)利要求11所述的方法,其特征在于,步驟(C)中,如果CPU發(fā)出取消DMA傳輸?shù)囊?,則DMA控制模塊終止傳輸,執(zhí)行(E)。
全文摘要
本發(fā)明公開了一種實(shí)現(xiàn)軟/硬件復(fù)用的DMA控制器及傳輸方法;DMA控制器中包括DMA控制模塊,用于接收硬件的DMA傳輸請(qǐng)求,并判斷是否可以進(jìn)行硬件請(qǐng)求;如果可以則進(jìn)行所述硬件發(fā)起的DMA傳輸;還用于在CPU需要發(fā)出DMA傳輸請(qǐng)求時(shí),向CPU提供傳輸資源的使用信息;并在接收CPU的DMA傳輸請(qǐng)求后,利用CPU所選擇的空閑傳輸資源進(jìn)行DMA傳輸,同時(shí)停止處理對(duì)該傳輸資源的硬件請(qǐng)求直到所述CPU發(fā)起的DMA傳輸完成或終止。采用了本發(fā)明所提供的方案后,由于DMA控制器的每一個(gè)通道既可以支持硬件請(qǐng)求的DMA操作又可以支持CPU發(fā)起的DMA操作,因此能夠?qū)崿F(xiàn)用對(duì)DMA控制器的軟/硬件復(fù)用。
文檔編號(hào)G06F13/28GK101034383SQ200710098670
公開日2007年9月12日 申請(qǐng)日期2007年4月24日 優(yōu)先權(quán)日2007年4月24日
發(fā)明者鄒楊 申請(qǐng)人:北京中星微電子有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
铅山县| 射洪县| 保靖县| 蕉岭县| 阿图什市| 肥乡县| 房产| 遵化市| 安泽县| 嘉兴市| 古田县| 福州市| 平谷区| 芜湖县| 梁山县| 乌拉特后旗| 抚顺县| 抚顺市| 平湖市| 石棉县| 五寨县| 特克斯县| 宣城市| 息烽县| 离岛区| 闵行区| 昭通市| 平度市| 凭祥市| 聊城市| 小金县| 剑阁县| 乐山市| 南部县| 大足县| 永平县| 泰兴市| 株洲县| 讷河市| 甘洛县| 大方县|