專利名稱:一種直接內存訪問控制器及其實現內存批處理的方法
技術領域:
本發明涉及直接內存訪問控制器(DMA控制器),尤其涉及一種直接內存訪問控制器及其實現內存批處理的方法。
背景技術:
在含有中央處理器(CPU)的系統中,為了提高內存和CPU使用效率,在大量內存數據有規律的操作時,通常采用直接內存訪問(Direct MemoryAccess Control,DMA)的方式對數據進行操作。而DMA的操作是通過DMA控制器(DMA Controller,DMAC)來實現的。
當軟件加載操作系統后,內存中真實的物理地址被虛擬物理地址所取代。當虛擬物理地址連續時,真實物理地址未必連續。在現有技術中,DMA控制器只能針對真實物理地址工作,如果需要傳輸內存中真實物理地址并不連續的數據,就必須由CPU發起多次DMA傳輸;DMA控制器每次只能傳輸一段真實物理地址連續的數據,然后就要通過CPU的控制再傳輸下一段數據;無法實現內存批處理功能。
發明內容
針對上述不足,本發明提供了一種直接內存訪問控制器及其實現內存批處理的方法,使內存中不連續的數據可以完全通過DMA控制器進行傳輸。
本發明采用的技術方案是一種直接內存訪問DMA控制器,其特征在于,包括主控制模塊、鏈表控制模塊、總線控制模塊和寄存器組;所述寄存器組用于存放鏈表的入口地址,以及內存批處理過程中的傳輸參數;
所述主控制模塊用于在接收中央處理器開始內存批處理的指令后,向鏈表控制模塊發送尋址指令;接收到鏈表控制模塊的尋址完成信號后向總線控制模塊發送開始傳輸指令;在當前鏈表對應的數據傳輸完后發給總線控制模塊停止傳輸指令并發給鏈表控制模塊尋址指令;接收鏈表控制模塊的傳輸完成信號,結束本次內存批處理操作;所述鏈表控制模塊用于接收所述主控制模塊的尋址指令,根據所述寄存器組中保存的入口地址在內存中找到相應鏈表,讀入該鏈表中的傳輸參數及下一鏈表的入口地址并用其更新所述寄存器組后,發給主控制模塊尋址完成信號;當寄存器組中的入口地址為終止符時,發給主控制模塊傳輸完成信號;所述總線控制模塊接收所述主控制模塊的開始傳輸指令,按照所述寄存器組中保存的傳輸參數進行DMA傳輸;并接收所述主控制模塊的停止傳輸指令停止DMA傳輸。
進一步地,所述寄存器組包括源地址寄存器、目的地址寄存器、傳輸長度寄存器和入口地址寄存器;所述源地址寄存器用于存放本次傳輸內存數據的源地址;所述目的地址寄存器用于存放本次傳輸內存數據的目的地址;所述傳輸長度寄存器用于存放本次傳輸的數據的長度值;所述入口地址寄存器用于存放傳輸鏈表的入口地址;首鏈表的入口地址由中央處理器提供;所述鏈表控制模塊讀入鏈表中的傳輸控制信息數據后用該數據中本次傳輸的源地址、目的地址、傳輸長度和下一個鏈表的入口地址相應更新源地址寄存器、目的地址寄存器、傳輸長度寄存器及入口地址寄存器。
進一步地,所述的直接內存訪問控制器還包括一個計數器,用于當進行DMA傳輸時對當前傳輸的數據量進行計數;所述主控制模塊監視所述計數器的計數,當其達到所述傳輸長度寄存器的值時,認為已將當前鏈表對應的內存數據傳輸完。
進一步地,所述主控制模塊接收中央處理器發送的終止內存批處理的指令后結束本次內存批處理操作。
進一步地,所述的直接內存訪問控制器還包括傳輸類型寄存器、啟動傳輸寄存器和終止傳輸寄存器;所述主控制模塊根據所述啟動傳輸寄存器和傳輸類型寄存器的值接收開始內存批處理的指令;根據所述終止傳輸寄存器的值接收終止內存批處理的指令。
本發明還提供了一種直接內存訪問控制器實現內存批處理的方法,其特征在于,包括(a)中央處理器發起內存批處理操作,并提供首個鏈表的入口地址;直接內存訪問控制器根據該入口地址找到首個鏈表;(b)直接內存訪問控制器根據當前鏈表中的傳輸參數對該鏈表所對應的數據進行DMA傳輸,傳輸完后執行(c);(c)直接內存訪問控制器判斷是否已將需要內存批處理的數據都傳輸完,是則結束本次內存批處理操作;否則根據當前鏈表中的下一鏈表的入口地址找到下一個鏈表并返回(b)。
進一步地,步驟(b)中,直接內存訪問控制器將當前鏈表中的傳輸控制信息數據讀入,并用該數據中的本次傳輸的源地址、目的地址、傳輸長度和下一個鏈表的入口地址相應更新源地址寄存器、目的地址寄存器、傳輸長度寄存器及入口地址寄存器;DMA控制器根據所述源地址寄存器、目的地址寄存器及傳輸長度寄存器中存放的數值對當前鏈表所對應的內存數據進行DMA傳輸。
進一步地,中央處理器提供首個鏈表的入口地址的方法是將其存放在入口地址寄存器中;直接內存訪問控制器根據所述入口地址寄存器中的入口地址找到相應鏈表;當所述入口地址寄存器中的值為終止符時,直接內存訪問控制器認為已將需要內存批處理的數據都傳輸完,結束本次內存批處理操作。
進一步地,步驟(b)中,在進行DMA傳輸時,用計數器對當前傳輸的數據量進行計數,直接內存訪問控制器監視計數器的計數,當其與所述傳輸長度寄存器中的數值相等時認為已將當前鏈表對應的數據傳輸完。
進一步地,內存批處理過程中,所述直接內存訪問控制器隨時根據CPU的終止指令終止本次內存批處理操作。
采用了本發明的方案后,可以使DMA控制器完全不用CPU的控制而自行解析內存數據并發起傳輸。而不再局限于針對真實物理地址工作,因此,本發明的方案能用DMA控制器實現內存中大量不連續數據的傳輸,即實現內存批處理操作。
圖1是內存中鏈表結構及鏈表內容含義的示意圖;圖2是本發明的DMA控制器的結構示意圖;圖3是本發明的DMA控制器實現內存批處理的流程圖。
具體實施例方式
下面將結合附圖及實施例對本發明的技術方案進行更詳細的說明。
首先介紹一下內存中鏈表的結構和作用,當需要傳輸數據時,CPU會在內存中建立若干個用于存放本次傳輸控制信息的鏈表,如圖1所示,這里說的內存不僅包括傳統意義上的系統內的存儲器,也包括ROM/FLASH等斷電不丟失數據的存儲器——即非易失性存儲器,內存中每段真實物理地址連續的待傳輸數據都與一個鏈表相對應,每個鏈表都存儲著所對應的那段內存數據的傳輸控制信息數據。
如圖1所示,每個鏈表里存儲有4段各32位的傳輸控制信息數據,即4個字的數據,第一到第三個字依次為本次傳輸內存數據源地址、本次傳輸內存數據目的地址和本次傳輸長度,這三個字的數據合稱為傳輸參數;第四個字為下個傳輸鏈表的入口地址。下個傳輸鏈表入口地址為終止符——比如0時,表示整個傳輸過程結束。在內存中,所述源地址和傳輸長度定義的是本內存中一段真實物理地址連續的存儲空間,或是其它內存中一段真實物理地址連續的存儲空間,其中存放有待傳輸的數據;而所述目的地址和傳輸長度定義了內存中另一段真實物理地址連續的存儲空間,該空間為待傳輸數據的傳輸目的空間,即準備存放將要傳輸來的數據的存儲空間。鏈表一一順序相連,從而將一段段并不連續的存儲空間在邏輯上連在了一起。
一種DMA控制器,如圖2所示,包括鏈表控制模塊、總線控制模塊、主控制模塊、FIFO(先進先出寄存器)、通道、計數器和寄存器組;所述寄存器組包括每個通道的源地址寄存器、目的地址寄存器、傳輸長度寄存器、入口地址寄存器、傳輸類型寄存器、啟動傳輸寄存器和終止傳輸寄存器;所述源地址寄存器用于存放本次傳輸內存數據的源地址;所述目的地址寄存器用于存放本次傳輸內存數據的目的地址;所述傳輸長度寄存器用于存放本次傳輸的數據的長度值;所述入口地址寄存器用于存放下個傳輸鏈表的入口地址;其中首鏈表的地址由CPU在發起內存批處理時提供。
所述傳輸類型寄存器用于存放表示傳輸類型的數值,比如1對應內存批處理,2對應普通DMA傳輸等;所述啟動傳輸寄存器用于存放表示啟動或不啟動當前通道的數值,比如1指示啟動通道,其它數值指示不啟動;所述終止傳輸寄存器用于存放表示終止或不終止當前通道的數值,比如1指示終止通道,其它數值指示不終止;以上三個寄存器由CPU(中央處理器)配置,來發起或終止DMA控制器進行內存批處理操作。
所述主控制模塊根據啟動傳輸寄存器和傳輸類型寄存器的值來接收CPU開始內存批處理的指令,比如當CPU要進行內存批處理時,會配置啟動傳輸寄存器和傳輸類型寄存器,也就是改變它們的值,當主控制模塊檢測到啟動傳輸寄存器的值改變后,得知要進行傳輸,然后根據傳輸類型寄存器的值得知要進行的是內存批處理操作;接收開始指令后,主控制模塊發給鏈表控制模塊尋址指令;接收鏈表控制模塊的尋址完成信號并發給總線控制模塊開始傳輸指令,該指令中指明進行傳輸的通道;
所述主控制模塊還根據終止傳輸寄存器的值接收CPU終止內存批處理的指令并結束本次內存批處理,如果此時正在進行傳輸,則發給總線控制模塊停止傳輸指令;監視計數器的計數,當其達到傳輸長度寄存器的值時,認為已將當前鏈表對應的數據傳輸完,發給總線控制模塊停止傳輸指令并發給鏈表控制模塊尋址指令;接收鏈表控制模塊的傳輸完成信號,結束本次內存批處理操作,向CPU發出中斷,返還總線控制權。
所述計數器用于在對每個鏈表所對應的數據進行DMA傳輸的過程中,對當前傳輸通道DMA傳輸的數據量進行計數。
所述鏈表控制模塊接收所述主控制模塊的尋址指令,按照CPU寫在入口地址寄存器中的值,即入口地址在內存中找到相應鏈表,讀入當前鏈表中的傳輸控制信息數據并用該數據的第一到第四個字依次更新當前傳輸通道的源地址寄存器、目的地址寄存器、傳輸長度寄存器及入口地址寄存器后,發給主控制模塊尋址完成信號;以及當入口地址寄存器中的值為終止符時,發給主控制模塊傳輸完成信號。
所述總線控制模塊接收所述主控制模塊的開始傳輸指令,按照相應通道的源地址寄存器、目的地址寄存器的值,通過所述通道對鏈表所對應的數據進行DMA傳輸,其過程是先根據所述源地址寄存器中的值找到待傳輸數據的源地址,再根據所述目的地址寄存器中的值找到傳輸的目的地址,然后將從源地址開始的存儲空間中的數據,先依次讀入FIFO中,再相應地依次放入從目的地址開始的存儲空間里;并接收所述主控制模塊的停止傳輸指令停止DMA傳輸。
一種所述DMA控制器實現內存批處理的方法,如圖3所示,包括以下步驟(a1)CPU發起內存批處理操作,具體步驟是CPU先將要進行內存批處理的數據的首個鏈表的入口地址存放在DMA控制器一個通道的的入口地址寄存器中,然后配置該通道的傳輸類型寄存器,指示該通道將進行的是內存批處理操作,接著像發起普通DMA傳輸時那樣,配置該通道的啟動傳輸寄存器啟動DMA控制器工作;
(a2)DMA控制器檢測到啟動傳輸寄存器的值改變后得知要要進行傳輸,并根據所述通道的傳輸類型寄存器的值得知要進行的是內存批處理,于是忽略源地址寄存器、目的地址寄存器、傳輸長度寄存器DMA控制器的值,直接根據入口地址寄存器中的入口地址在內存中找到本次傳輸中的首個鏈表;(b1)DMA控制器按字讀入當前鏈表——即找到的鏈表——中存儲的傳輸控制信息數據,并用讀入數據的第一到第四個字依次更新當前傳輸通道——即CPU指示啟動內存批處理操作的通道——的源地址寄存器、目的地址寄存器、傳輸長度寄存器及入口地址寄存器;所述“更新”即用讀入數據取代寄存器中原來的值;(b2)DMA控制器根據所述寄存器中的傳輸控制信息數據中的傳輸參數——即源地址、目的地址和傳輸長度對當前鏈表所對應的數據進行DMA傳輸;進行DMA傳輸的具體步驟同上文所寫,不再贅述。
在傳輸的同時用初始值為0的計數器對當前傳輸通道傳輸的數據量進行計數;傳輸過程中,DMA控制器一直監視是否已將當前鏈表對應的那一段數據傳輸完,即傳輸的數據量——也就是計數器的計數是否已經達到所述傳輸長度寄存器中的數值;當達到時即完成當前鏈表所對應的那一段內存數據的DMA傳輸,將計數器的計數恢復為0并執行(c);(c)DMA控制器判斷是否已將需要內存批處理的數據傳輸完,判斷方法是看入口地址寄存器中的數據是否為結束符,是則說明本次內存批處理操作中所有鏈表對應的數據都已傳輸完,這時結束本次內存批處理操作,向CPU發起中斷,返還總線占用權;否則按照入口地址寄存器中的地址在內存中找到下一個鏈表,并返回(b1),即進行下一段內存數據的DMA傳輸;所述結束符通常用0表示。
在整個內存批處理的過程中,CPU隨時可以通過配置當前通道的終止傳輸寄存器來指示終止內存批處理操作,相當于發起一次意外中斷。DMA控制器在內存批處理過程中始終監視所述終止傳輸寄存器的狀態,一旦發現其為終止狀態,就終止本次內存批處理操作。
在實際應用中,只要是這種有規律的不連續數據傳輸,比如TV數據,都可以使用本發明提出的DMA控制器。另外,本發明中所述鏈表可以在內存中的任意位置,傳輸的源地址和目的地址也可以是內存中的任意位置。
上述為本發明的最優實施方式,在不背離本發明精神及其實質的情況下,熟悉本領域的技術人員可根據本發明作出各種相應的變形,但這些相應的變形都應屬于本發明所附權利要求所保護的范圍內。
權利要求
1.一種直接內存訪問DMA控制器,其特征在于,包括主控制模塊、鏈表控制模塊、總線控制模塊和寄存器組;所述寄存器組用于存放鏈表的入口地址,以及內存批處理過程中的傳輸參數;所述主控制模塊用于在接收中央處理器開始內存批處理的指令后,向鏈表控制模塊發送尋址指令;接收到鏈表控制模塊的尋址完成信號后向總線控制模塊發送開始傳輸指令;在當前鏈表對應的數據傳輸完后發給總線控制模塊停止傳輸指令并發給鏈表控制模塊尋址指令;接收鏈表控制模塊的傳輸完成信號,結束本次內存批處理操作;所述鏈表控制模塊用于接收所述主控制模塊的尋址指令,根據所述寄存器組中保存的入口地址在內存中找到相應鏈表,讀入該鏈表中的傳輸參數及下一鏈表的入口地址并用其更新所述寄存器組后,發給主控制模塊尋址完成信號;當寄存器組中的入口地址為終止符時,發給主控制模塊傳輸完成信號;所述總線控制模塊接收所述主控制模塊的開始傳輸指令,按照所述寄存器組中保存的傳輸參數進行DMA傳輸;并接收所述主控制模塊的停止傳輸指令停止DMA傳輸。
2.如權利要求1所述的直接內存訪問控制器,其特征在于,所述寄存器組包括源地址寄存器、目的地址寄存器、傳輸長度寄存器和入口地址寄存器;所述源地址寄存器用于存放本次傳輸內存數據的源地址;所述目的地址寄存器用于存放本次傳輸內存數據的目的地址;所述傳輸長度寄存器用于存放本次傳輸的數據的長度值;所述入口地址寄存器用于存放傳輸鏈表的入口地址;首鏈表的入口地址由中央處理器提供;所述鏈表控制模塊讀入鏈表中的傳輸控制信息數據后用該數據中本次傳輸的源地址、目的地址、傳輸長度和下一個鏈表的入口地址相應更新源地址寄存器、目的地址寄存器、傳輸長度寄存器及入口地址寄存器。
3.如權利要求2所述的直接內存訪問控制器,其特征在于,還包括一個計數器,用于當進行DMA傳輸時對當前傳輸的數據量進行計數;所述主控制模塊監視所述計數器的計數,當其達到所述傳輸長度寄存器的值時,認為已將當前鏈表對應的內存數據傳輸完。
4.如權利要求1所述的直接內存訪問控制器,其特征在于,所述主控制模塊接收中央處理器發送的終止內存批處理的指令后結束本次內存批處理操作。
5.如權利要求1所述的直接內存訪問控制器,其特征在于,還包括傳輸類型寄存器、啟動傳輸寄存器和終止傳輸寄存器;所述主控制模塊根據所述啟動傳輸寄存器和傳輸類型寄存器的值接收開始內存批處理的指令;根據所述終止傳輸寄存器的值接收終止內存批處理的指令。
6.一種直接內存訪問控制器實現內存批處理的方法,包括(a)中央處理器發起內存批處理操作,并提供首個鏈表的入口地址;直接內存訪問控制器根據該入口地址找到首個鏈表;(b)直接內存訪問控制器根據當前鏈表中的傳輸參數對該鏈表所對應的數據進行DMA傳輸,傳輸完后執行(c);(c)直接內存訪問控制器判斷是否已將需要內存批處理的數據都傳輸完,是則結束本次內存批處理操作;否則根據當前鏈表中的下一鏈表的入口地址找到下一個鏈表并返回(b)。
7.如權利要求6所述的方法,其特征在于步驟(b)中,直接內存訪問控制器將當前鏈表中的傳輸控制信息數據讀入,并用該數據中的本次傳輸的源地址、目的地址、傳輸長度和下一個鏈表的入口地址相應更新源地址寄存器、目的地址寄存器、傳輸長度寄存器及入口地址寄存器;DMA控制器根據所述源地址寄存器、目的地址寄存器及傳輸長度寄存器中存放的數值對當前鏈表所對應的內存數據進行DMA傳輸。
8.如權利要求7所述的方法,其特征在于中央處理器提供首個鏈表的入口地址的方法是將其存放在入口地址寄存器中;直接內存訪問控制器根據所述入口地址寄存器中的入口地址找到相應鏈表;當所述入口地址寄存器中的值為終止符時,直接內存訪問控制器認為已將需要內存批處理的數據都傳輸完,結束本次內存批處理操作。
9.如權利要求7所述的方法,其特征在于,步驟(b)中,在進行DMA傳輸時,用計數器對當前傳輸的數據量進行計數,直接內存訪問控制器監視計數器的計數,當其與所述傳輸長度寄存器中的數值相等時認為已將當前鏈表對應的數據傳輸完。
10.如權利要求7所述的方法,其特征在于,內存批處理過程中,所述直接內存訪問控制器隨時根據CPU的終止指令終止本次內存批處理操作。
全文摘要
一種直接內存訪問控制器及其實現內存批處理的方法;直接內存訪問控制器包括主控制模塊、鏈表控制模塊、總線控制模塊和寄存器組;該直接內存訪問控制器實現內存批處理的方法,包括a.中央處理器發起內存批處理操作,并提供首個鏈表的入口地址;b.直接內存訪問控制器根據該入口地址找到首個鏈表;直接內存訪問控制器根據當前鏈表中的傳輸參數對該鏈表所對應的數據進行DMA傳輸;c.直接內存訪問控制器判斷是否已將需要內存批處理的數據都傳輸完,是則結束本次內存批處理操作;否則根據當前鏈表中的下一鏈表的入口地址找到下一個鏈表并返回b。采用了本發明的方案后,可以使DMA控制器完全不用CPU的控制而自行解析內存數據并發起傳輸。
文檔編號G06F13/28GK101030183SQ200710065108
公開日2007年9月5日 申請日期2007年4月3日 優先權日2007年4月3日
發明者鄒楊 申請人:北京中星微電子有限公司