dma讀nand DMA直接記憶體訪問原理

2021-10-17 06:29:23 字數 2973 閱讀 2348

5.3dma控制器8237

8237在dma傳送時有四種工作方式。

1. 單位元組傳送方式

這種方式一次只傳送乙個位元組。資料傳送後位元組計數器減量,位址要相應修改(增量或減量取決於程式設計)。hro變為無效,釋放系統匯流排。若傳送使位元組數減為0,tc發生或者終結dma傳送,或重新初始化。

2.多位元組傳送方式

在這種傳送方式下,8237由dreq啟動後就連續地傳送資料,直至位元組數計數器減到零產生tc(terminal count),或者由外部輸入有效的eop訊號來終結dma傳送。

3.請求傳送方式

在這種工作方式下,8237可以進行連續的資料傳送。當出現以下三種情況之一時停止傳送。

1) 位元組數計數器減到0,發生tc;

2) 由外界送來乙個有效的eop訊號;

當由於第三種情況使傳送停下來時,8237釋放匯流排,cpu可以繼續操作。而8237的位址和位元組數的中間值,可以保持在相應通道的現行位址和位元組數暫存器中。只要外設準備好了要傳送的新的資料,由dreq再次有效就可以使傳送繼續下去。

4. 級連方式

第二級各個晶元的有限權等級與所連的通道相對應。在這種工作情況下,第一級只起優先權網路的作用,除了由某乙個二級的請求向cpu輸出hrq訊號外,並不輸出任何其他訊號。實際的操作是由第二級的晶元完成。若有需要還可由第二級擴充套件到第**等等。

8237共有9類暫存器,分別是現行位址暫存器、現行位元組數暫存器、基位址和基位元組數暫存器、命令暫存器、模式暫存器、請求暫存器、遮蔽暫存器、狀態暫存器、臨時暫存器。

1. 現行位址暫存器

每乙個通道有乙個16位的現行位址暫存器。在這個暫存器中儲存著用於dma傳送的位址值,在每次傳送後,這個暫存器的值自動增量或減量。這個暫存器的值 可由cpu寫入或讀出(分兩次連續操作)。若程式設計為自動初始化,則在每次eop後,將其初始值(即保持在基位址暫存器中的值)轉入暫存器。

2. 現行位元組數暫存器

每個通道有乙個16位的現行位元組數暫存器。它保持著要傳送的位元組數,在每次傳送後此暫存器減量。當這個暫存器的值減為零時,tc將產生。這個暫存器的值在程式設計狀態可由cpu讀出和寫入。在自動初始化情況下當eop產生時,它的值可初始化到其始狀態。

3. 基位址和基位元組數暫存器

每個通道有一對16位的基位址和基位元組數暫存器。它們存放著與現行暫存器相聯絡的初始值。在自動初始化情況下。這兩個暫存器中的值,用來恢復相應的現行暫存器中的初始值。在程式設計狀態,基暫存器與它們相應的現行暫存器是同時由cpu寫入的。這些暫存器的內容不能讀出。

4. 命令暫存器

這是乙個8位的暫存器,用以控制8237的工作命令字的格式如圖所示。

d0位用來規定是否工作在儲存器到儲存器傳送方式。

d4位用來選擇是固定優先權還是優先旋轉。8237有兩種優先權方式可供選擇,一種是固定優先權,在這種方式下通道的優先權是固定的,通道0的優先權最高,通道3的優先權最低;另一種方式是優先權旋轉,在這種方式下剛服務過的通道的優先權變為最低,其他通道的優先權

命令暫存器可由cpu寫入進行程式設計,復位訊號使其清零。

5. 模式暫存器

每個通道有一對8位的模式暫存器以規定通道的工作模式,如圖所示。

在程式設計時用最低兩位來選擇寫入哪個通道的模式暫存器。

最高兩位(d7、d6)規定了四種工作模式中的某一種,d3、d2兩位規定是dm讀還是dma寫或是校驗操作。

d5位用於規定位址是增量修改還是減量修改。

d4位規定是否允許自動初始化。若工作在自動初始化方式,則每當產生eop訊號時(不論是由內部的tc產生或是由外界產生)都是基位址暫存器和基位元組數寄 存器的內容,使相應的現行暫存器恢復初始值。而現行暫存器和基暫存器的內容,是由cpu程式設計時同時寫入的,但在dma傳送過程中,現行暫存器的內容是不斷 修改的,而基暫存器的內容則維持不變(除非重新程式設計)。在自動初始化以後通道就做好了進行另一次dma傳送的準備。

6. 請求暫存器

8237的每個通道有一條硬體的dreq請求線,當工作在資料塊傳送方式時,也可以由軟體發出dreq請求。所以,在8237中有一種請求暫存器,如圖5-10所示。

每個通道的軟體請求可以分別設定。軟體請求是非遮蔽的,它們的優先權同樣受優先權邏輯的控制。

軟體請求位由tc或外部的eop復位。reset訊號使整個暫存器清除。

只有在資料塊傳送方式,才允許使用軟體請求,若用於儲存器到儲存器傳送,則0通道必須用軟體請求,以啟動傳送過程。

7. 遮蔽暫存器

每個通道外設通過dreq發出的請求,可以單獨地遮蔽或允許,所以在8237中有乙個遮蔽暫存器,如圖所示。

在reset訊號作用後,四個通道全置於遮蔽狀態,所以,必須在程式設計時,根據需要復位遮蔽位。當某乙個通道進行dma傳送後,產生eop訊號,如果不是工作在自動初始化方式,則這一通道的遮蔽位置位,必須再次程式設計為允許,才能進行下一次的dma傳送。

也可以用如圖(b)所示的格式,在乙個命令字中對4個通道的遮蔽情況進行程式設計。

8. 狀態暫存器

8237中有乙個可由cpu讀取的狀態暫存器,如圖所示。

狀態暫存器中的低4位,反映了在讀命令這個瞬間,每個通道的位元組數是否已減到零。高4位反映每個通道的請求情況。

9. 臨時暫存器

在儲存器到儲存器的傳送方式下,臨時暫存器儲存從源單元讀出的資料,又由它寫入至目的單元。在傳送完成時,它保留傳送的最後乙個位元組,此位元組可由cpu讀出。ready訊號使其復位。

如上所術,8237內部存暫存器可以分成兩大類,一類是通道暫存器,即每個通道都有的現行位址暫存器,現行位元組數暫存器和基位址及基位元組數暫存器;另一類是控制和狀態暫存器。這些暫存器是由最低4位位址a3-a0以及讀寫命令來區分的。

控制和狀態暫存器的定址如下表所示。

暫存器操作

訊號#cs #ior #iow a3 a2 a1 a0命令寫

0   1  0  1 0 0 0模式寫

0   1  0  1 0 1 1請求寫

0   1  0  1 0 0 1

遮蔽置位/復位

0   1  0  1 0 1 0遮蔽寫

0   1  0  1 1 1 1臨時讀

0   0  1  1 1 0 1狀態讀

0   0  1  1 0 0 0

直接記憶體訪問(DMA)初探

1.dma簡介 dma direct memory access 直譯為直接記憶體訪問,是一種無需cpu的參與就可以讓外設與系統記憶體之間進行雙向資料傳輸的硬體機制。使用dma可以使系統cpu從實際的i o資料傳輸過程中擺脫出來,從而大大提高系統的吞吐率。2.dma工作過程 dma方式的資料傳輸由d...

直接儲存器訪問DMA

原理 允許不同硬體裝置溝通,而不需要依賴cpu的大量中斷負載 對於cpu來說 需要從 吧每一片斷的資料複製到暫存器,然後把他們寫到新的地方,期間,cpu對於其它的工作就無法使用.對於dma傳輸 將資料從乙個位址空間複製到另乙個位址空間。而cpu只需初始化這個傳輸動作.在實現dma傳輸時,是由dma控...

DMA 直接儲存器訪問

dma 全稱是direct memory access,即直接儲存器訪問。dma傳輸將資料從乙個位址空間複製到另乙個位址空間,尤其適合解決批量資料的輸入 輸出問題。dma的出現主要是為了解決程式程式傳輸方式和中斷傳輸方式效率低下的問題,提高cpu的執行效率。下面分別聊一聊什麼是程式傳輸方式 中斷傳輸...