DMA控制介面
- DMA控制器的一般結構和概要
- 1、DMA概述
- 2、DMA資料傳送的作業程序
- DMA控制器8237A的原理
- 1、DMA控制器8237A的編程結構
- 2、8237A的內部組成和結構
- 3、8237的外部結構
- 4、8237A的兩種作業狀態
- 5、8237的作業周期
- 6、8237A的作業方式
- 8237A的暫存器
- 1、基地址暫存器
- 2、基位元組數暫存器
- 3、當前地址暫存器
- 4、當前位元組數暫存器
- 5、地址暫存暫存器和位元組數暫存暫存器
- 6、模式暫存器
- 7、控制暫存器
- 8、請求暫存器
- 9、屏蔽暫存器
- 10、狀態暫存器
- 11、臨時暫存器**
DMA控制器的一般結構和概要
1、DMA概述
為了提高資料傳送的速率,人們提出了直接存盤器存取(DMA)的資料傳送控制方式,即在一定時間段內,由DMA控制器取代CPU,獲得總線控制權,來實作記憶體與外設或者記憶體的不同區域之間大量資料的快速傳送,
2、DMA資料傳送的作業程序
① 外設向DMAC發出DMA傳送請求,
② DMAC通過連接到CPU的HOLD信號向CPU提出DMA請求,
③ CPU在完成當前總線操作后會立即對DMA請求做出回應,CPU的回應包括兩個方面:
一方面,CPU將控制總線、資料總線和地址總線浮空,即放棄對這些總線的控制權;
另一方面,CPU將有效的HLDA信號加到DMAC上,用此來通知DMAC,CPU已經放棄了總線的控制權,
⑤ 待CPU將總線浮空,即放棄了總線控制權后,由DMAC接管系統總線的控制權,并向外設送出DMA的應答信號,
⑥ 由DMAC送出地址信號和控制信號,實作外設與記憶體或記憶體不同區域之間大量資料的快速傳送,
⑦ DMAC將規定的資料位元組傳送完之后,通過向CPU發HOLD信號,撤消對CPU的DMA請求,CPU收到此信號,一方面使HLDA無效,另一方面又重新開始控制總線,實作正常取指令、分析指令、執行指令的操作,

需要注意的是,在記憶體與外設之間進行DMA傳送期間,DMAC控制器只是輸出地址及控制信號,而資料傳送是直接在記憶體和外設埠之間進行的,并不經過DMAC;對于記憶體不同區域之間的DMA傳送,則應先用一個DMA存盤器讀周期將資料從記憶體的源區域讀出,存入到DMAC的內部資料暫存器中,再利用一個DMA存盤器寫周期將該資料寫到記憶體的目的區域中去,
DMA控制器8237A的原理

1、DMA控制器8237A的編程結構
- 含有4個相互獨立的通道,每個通道有獨立的地址暫存器和位元組數暫存器,而控制暫存器、狀態暫存器為四個通道所共用,
- 每個DMA通道具有不同的優先權
- 每個DMA通道可以分別允許和禁止
每個DMA通道有4種作業方式,分別為:單位元組傳送、資料塊傳送、請求傳送、級連方式, - 通道中地址暫存器的長度為16位,一次傳送的最大長度可達64KB
- 多個8237A芯片可以級連,擴展通道數
2、8237A的內部組成和結構

(1)四個獨立的DMA通道
每個通道都有一個16位的基地址暫存器,一個16位的基位元組數計數器,一個16位的當前地址暫存器和一個16位的當前位元組數計數器及一個8位的方式暫存器,方式暫存器接收并保存來自于CPU的方式控制字,使本通道能夠作業于不同的方式下;
(2)定時及控制邏輯電路
對在DMA請求服務之前,CPU編程對給定的命令字和方式控制字進行譯碼,以確定DMA的作業方式,并控制產生所需要的定時信號;
(3)優先級編碼邏輯
對通道進行優先級編碼,確定在同時接收到不同通道的DMA請求時,能夠確定相應的先后次序,通道的優先級可以通過編程確定為是固定的或者是旋轉的;
(4)共用暫存器
除了每個通道中的暫存器之外,整個芯片還有一些共用的的暫存器:
- 1個16位的地址暫存暫存器
- 1個16位的位元組數暫存暫存器
- 1個8位的狀態暫存器
- 1個8位的命令暫存器
- 1個8位的暫存暫存器,
- 1個4位的屏蔽暫存器
- 1個4位的請求暫存器
8237的內部暫存器

(5)8237的三態緩沖器
8237的資料引線,地址引線都有三態緩沖器,因而可以接也可以釋放總線,
3、8237的外部結構
(1)請求與回應信號
- DREQ0~DREQ3:DMA通道請求,當外設需要請求DMA服務時,將DREQ信號置成有效電平,并要保持到產生回應信號,對應于四個獨立的通道,DREQ的有效電平可以通過編程來加以確定,優先級可以固定,也可以旋轉,
- HRQ:總線請求,8237A輸出有效的HRQ高電平,向CPU申請使用系統總線,
- HLDA:總線回應,8237A接受來自CPU的回應信號HLDA,取得了總線的控制權,
- DACK0~DACK3:DMA通道回應,8237A使請求服務的通道產生相應的DMA回應信號,
(2)DMA傳送控制信號
- A0~A7:地址線,輸出低8位存盤器地址,
- DB0~DB7:資料線,輸出高8位存盤器地址;存貯器與存貯器的傳送期間,用于資料傳送,
- ADSTB:地址選通,DMA傳送開始時,輸出高有效,把在DB0~DB7上輸出的高8位地址鎖存在外部鎖存器中,
- AEN:地址允許,輸出高有效,將鎖存的高8位地址送入系統總線,與芯片此時輸出的低8位地址組成16位存盤器地址,
- MEMR:存盤器讀,有效將資料從存盤器讀出
- MEMW:存盤器寫,有效將資料寫入存盤器
- IOR:I/O讀,有效將資料從外設讀出
- IOW:I/O寫,有效將資料寫入外設
- READY:準備好,DMA傳送的S3下降沿檢測到為低時,插入等待狀態Sw,直到READY為高才進入第4個時鐘周期S4,
- EOP:程序結束,DMA傳送程序結束,輸出一個低有效脈沖,外部輸入低脈沖信號,則終結DMA傳送,
(3)處理器介面信號
- CS:片選,低有效時,微處理器與8237A通過資料線通信,主要完成對8237A的編程,
- IOR:I/O讀,讀取8237A內部暫存器低電平有效的雙向三態信號引腳,在空閑周期,它是一條輸入控制信號,CPU利用 這個信號讀取8237內部狀態暫存器的內容;而在DMA傳送時,它是讀埠控制信號輸出引腳,與相配合,使資料由外設傳送到記憶體,
- IOW:I/O寫,寫入8237A內部暫存器,低電平有效的雙向三態信號引腳,其功能與相對應,
- DB0~DB7: 8條雙向資料線,用于8237A與微處理器進行資料交換,在CPU控制系統總線時,可以通過DB0~ DB7對8237編程或讀出8237的內部狀態暫存器的內容;在DMA操作期間,由DB0~ DB7輸出高8位地址信號A8~A15,并利用ADSTB信號鎖存該地址信號,
在進行記憶體不同區域之間的DMA傳送時,除了送出A8~A15地址信號外,還分時輸入從存盤器源區域讀出的資料,送入8237的暫存暫存器中,等到存盤器寫周期時,再將這些資料通過這8個引腳,由8237的暫存暫存器送到系統資料總線上,然后寫入到規定的存盤單元中去, - A3~A0:4條雙向三態的低位地址信號引腳,在空閑周期,接收來自于CPU的四位地址信號,用以尋址8237內部的不同的暫存器(組);在DMA傳送時,輸出要訪問的存盤單元或者I/O埠地址的低4位,
- A7~A4 :4條三態地址信號輸出引腳,在DMA傳送時,輸出要訪問的存盤單元或者I/O埠地址的中4位,
- CLK:時鐘信號輸入引腳,對于標準的8237,其輸入時鐘頻率為3MHz,對于8237-2,其輸入時鐘頻率可達5MHz,
- RESET:復位信號,輸入引腳,用來清除8237中的命令、狀態請求和臨時暫存器,且使位元組指標觸發器復位并置位屏蔽觸發器的所有位(即使所有通道作業在屏蔽狀態),在復位之后,8237作業于空閑周期SI,
4、8237A的兩種作業狀態
- 作為從模塊作業時(空閑周期):
當CPU把資料送到8237A的暫存器或者從8237A的暫存器取出時,8237如同介面一樣作為總線的從模塊作業,受CPU控制的作業狀態,
這時,8237A接收16位地址,用較高的12位地址產生片選信號,用底4位地址來選擇內部暫存器, - 作為主模塊作業時(有效周期):
當8237A作為主模塊作業時,它會往總線上提供要訪問的記憶體地址,地址的低8位放在A7~ A0,而地址的高8位放在D7~D0,
作為主模塊作業時,8237A還必須輸出必要的讀寫信號,IOR、IOW、MEMR、MEMW,
8237A引腳的兩種作用

5、8237的作業周期
空閑周期
當8237的任一通道都無DMA請求時,則其處于空閑周期或稱為SI狀態,空閑周期由一系列的時鐘周期組成,在空閑周期中的每一個時鐘周期,8237只做兩項作業:
- 8237A采樣CS片選信號,該信號有效,CPU就要對8237A進行讀/寫操作
- 8237A還采樣通道的請求輸入信號DREQ,該信號有效,就進入有效周期
有效周期
- 8237A采樣到外設有DMA請求,就脫離空閑周期進入有效周期
- 8237A作為系統的主控芯片,控制DMA傳送操作
- DMA傳送借用系統總線完成,其控制信號以及作業時序類似CPU總線周期


6、8237A的作業方式
DMA傳送方式:單位元組傳送方式、資料塊傳送方式、請求傳送方式、級連方式
DMA傳送型別:DMA讀、DMA寫、DMA檢驗
存盤器到存盤器的傳送
(1)DMA傳送
單位元組方式
- 每次DMA傳送時僅傳送一個位元組
- 傳送一個位元組之后,當前位元組數暫存器減1,當前地址暫存器加1或減1,HRQ變為無效
- 每傳送完這一個位元組, 8237A釋放系統總線, DMAC就將總線控制權交回CPU,
- 若傳送后使位元組數從0減到FFFFH,則終結DMA傳送或重新初始化
- 特點:
一次傳送一個位元組,效率略低
DMA傳送之間CPU有機會重新獲取總線控制權
資料塊方式
- 在這種傳送方式下,DMAC一旦獲得總線控制權,便開始連續傳送資料,每傳送一個位元組,自動修改當前地址及當前位元組數暫存器的內容,直到位元組數暫存器從0減到FFFFH終止計數,或由外部輸入EOP有效信號終結DMA傳送,將總線控制權交給CPU,
- 一次所傳送資料塊的最大長度可達64KB,資料塊傳送結束后可自動初始化,
DREQ只需維持有效到DACK有效 - 特點:
一次請求傳送一個資料塊,效率高
整個DMA傳送期間CPU長時間無法控制總線(無法回應其他DMA請求、無法處理中斷等)
請求方式
- DREQ信號有效就連續傳送資料
- DREQ信號無效,DMA傳送被暫時中止,8237A釋放總線,CPU可繼續操作
- DMA通道的地址和位元組數的中間值仍被保持
- DREQ信號再次有效,DMA傳送就繼續進行
- 如果位元組數暫存器從0減到FFFFH,或者由外部送來一個EOP有效的信號,將終止計數
- 特點:
DMA操作可由外設利用DREQ信號控制傳送的程序
級連方式
- 用于通過多個8237A級連以擴展通道
- 第二級的HRQ和HLDA信號連到第一級某個通道的DREQ和DACK上
- 第二級芯片的優先權等級與所連通道的優先權相對應
- 第一級只起優先權網路的作用,實際的操作由第二級芯片完成
- 還可由第二級擴展到第三級等

(2)DMA傳輸型別 - DMA讀——把資料由存盤器傳送到外設
由MEMR有效從存盤器讀出資料,由IOW有效把這一資料寫入外設 - DMA寫——把外設輸入的資料寫入存盤器
由IOR有效從外設輸入資料,由MEMW有效把這一資料寫入存盤器, - DMA檢驗——空操作
8237A不進行任何檢驗
外設可以進行DMA校驗
存盤器和I/O控制線保持無效,不進行傳送
(3)存盤器到存盤器的傳送
- 固定使用通道0和通道1
- 通道0的地址暫存器存源區地址
- 通道1的地址暫存器存目的區地址,通道1的位元組數暫存器存傳送的位元組數
- 傳送由設定通道0的軟體請求啟動
- 每傳送一位元組需用8個時鐘周期
前4個時鐘周期用通道0地址暫存器的地址從源區讀資料送入8237A的臨時暫存器
后4個時鐘周期用通道1地址暫存器的地址把臨時暫存器中的資料寫入目的區
(4)DMA通道的優先權方式
- 固定優先權方式——優先權固定
通道0優先權最高,通道1其次,通道2再次,通道3最低 - 回圈優先權方式——優先權回圈變化
最近一次服務的通道在下次回圈中變成最低優先權,其他通道依次輪流相應的優先權 - DMA傳送不存在嵌套
(5)自動初始化方式
- 每當DMA程序結束信號EOP產生時(不論是內部終止計數還是外部輸入該信號)
- 用基地址暫存器和基位元組數暫存器的內容,使相應的現行暫存器恢復為初始值,包括恢復屏蔽位、允許DMA請求
- 這樣就作好了下一次DMA傳送的準備
8237A的暫存器
- 8237A共有10種內部暫存器,對它們的操作有時需要配合3個軟體命令
- 8237A的“軟體命令”
不需要通過資料總線寫入控制字
直接由地址和控制信號譯碼實作
1、基地址暫存器
用以存放16位地址,只可寫入而不能讀出,
在編程時,它與當前地址暫存器被同時寫入某一起始地址,可用作記憶體區域的首地址或末地址,
在8237進行DMA資料傳送的工作程序中,其內容不發生變化,只是在自動預置時,其內容可被重新寫到當前地址暫存器中去,
2、基位元組數暫存器
- 用以存放相應通道需要傳送資料的位元組數,只可寫入而不能讀出,
- 在編程時它與當前位元組數暫存器被同時寫入要傳送資料的位元組數,
- 在8237進行DMA資料傳送的作業程序中,其內容保持不變,只是在自動預置時,其內容可以被重新寫到當前位元組數暫存器中去,
3、當前地址暫存器
- 保持DMA傳送的當前地址值
- 每次傳送后該暫存器的值自動加1或減1
- CPU可以對其進行讀寫操作,
- 在選擇自動預置時,每當位元組計數值減為0或外部有效后,就會自動將基地址暫存器的內容寫入當前地址暫存器中,恢復其初始值,
4、當前位元組數暫存器
- 保持DMA傳送的剩余位元組數
- 每次傳送后,該暫存器的值減1
- 這個暫存器的值可由CPU寫入和讀出
- 該暫存器的值減至0,再減1(從0減到FFFFH)時,終止計數
5、地址暫存暫存器和位元組數暫存暫存器
這兩個16位的暫存器和CPU不直接發生關系,我們也不必要對其進行讀/寫操作,因而對如何使用8237沒有影響,
6、模式暫存器
每個通道有一個8位的模式暫存器,但是它們占用同一個埠地址,用來存放方式字,依靠方式控制字本身的特征位來區分寫入不同的通道,用來規定通道的作業方式,各位的作用如下:
方式字格式:

自動預置就是當某一通道按要求將資料傳送完后,又能自動預置初始地址和傳送的位元組數,而后重復進行前面已進行過的程序,
校驗傳送就是實際并不進行傳送,只產生地址并回應EOP信號,不產生讀寫控制信號,用以校驗8237的功能是否正常,
7、控制暫存器
- 存放8237A的命令字
- 設定8237A芯片的操作方式
- 影響每個DMA通道
- 復位時使命令暫存器清零
- 設定D2=1才使8237A可以作為DMA控制器
命令字格式

命令字說明
- D0位用以規定是否允許采用存盤器到存盤器的傳送方式,若允許這樣做,則利用通道0和通道1來實作,
- D1位用以規定通道0的地址是否保持不變,如前所述,在存盤器到存盤器傳送中,源地址由通道0提供,讀出資料到暫存暫存器,而后,由通道l送出目的地址,將資料寫入目的區域;若命令字中D1=0,則在整個資料塊傳送中(塊長由通道1決定)保持記憶體源區域地址不變,因此,就會把同一個資料寫入到整個目的存盤器區域中,
- D2位是允許或禁止8237芯片作業的控制位,
- D3位用于選擇總線周期中寫信號的定時,例如,PC機中動態存盤器寫是由寫信號的上升沿啟動的,若在DMA周期中寫信號來得太早,可能造成錯誤,所以PC機選擇D3=0,
- D5位用于選擇是否擴展寫信號,在D3=0(正常時序)時,如果外設速度較慢,有些外設是用8237A送出的和信號的下降沿來產生的READY信號的,為提高傳送速度,能夠使READY信號早些到來,須將和信號加寬,以使它們提前到來,因此,可以通過令D5=1使和信號擴展2個時鐘周期提前到來,
8、請求暫存器
- 用于在軟體控制下產生一個DMA請求
- 除硬體DMA請求外,當作業在資料塊傳送方式時也可以通過軟體發出DMA請求
- 若是存貯器到存貯器傳送,則必須由軟體請求啟動通道0

9、屏蔽暫存器
控制外設硬體DMA請求是否被回應(為0允許),各個通道互相獨立,3種方法:
- 單通道屏蔽字只對一個DMA通道屏蔽位進行設定
- 主屏蔽字對4個DMA通道屏蔽位同時進行設定
- 清屏蔽暫存器命令使4個屏蔽位都清零(允許)
復位使4個通道全置于屏蔽狀態;
當一個通道的DMA程序結束,如果不是作業在自動初始化方式,則這一通道的屏蔽位置位,必須再次編程為允許,才能進行下次DMA傳送,
單通道屏蔽字格式:

主屏蔽字格式

10、狀態暫存器
可由CPU讀取;
低4位反映讀命令這個瞬間每個通道是否產生TC(為1,表示該通道傳送結束);
高4位反映每個通道的DMA請求情況(為1,表示該通道有請求);
狀態位在復位或被讀出后,均被清零,
8237的狀態暫存器:

11、臨時暫存器**
在存盤器到存盤器的傳送方式下,臨時暫存器保存從源存盤單元讀出的資料,該資料又被寫入到目的存盤單元;
傳送完成,臨時暫存器只會保留最后一個位元組,可由CPU讀出;
復位使臨時暫存器內容為零,
以上內容參考自唐老師的PPT ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/400368.html
標籤:其他
