3、DMA方式的工作流程
DMA工作方式下的流程見(jiàn)圖2具體可以劃分為如下4個(gè):主要部 分。

1) DMA傳送開(kāi)始前的準(zhǔn)備工作
內(nèi)核開(kāi)始進(jìn)行DMA傳送之前,首先執(zhí)行一系列的IO指令用來(lái)檢測(cè)外設(shè)的狀態(tài),初始化寄存器。根據(jù)設(shè)備傳輸速度的不同。在控制寄存器中設(shè)置是否需要等待外設(shè)請(qǐng)求信號(hào)進(jìn)行同步。
在設(shè)計(jì)中,采用兩種請(qǐng)求方式來(lái)開(kāi)啟DMA傳送:軟件DMA請(qǐng)求和硬件DMA請(qǐng)求。軟件DMA請(qǐng)求一般用來(lái)進(jìn)行速度較快的設(shè)備之間的數(shù)據(jù)傳送,假定設(shè)備一直處于準(zhǔn)備好狀態(tài)可以隨時(shí)進(jìn)行數(shù)據(jù)的傳輸,比如存儲(chǔ)器;硬件DMA請(qǐng)求則需要等待外設(shè)的請(qǐng)求信號(hào)到來(lái)時(shí)才能進(jìn)行DMA傳輸,一般用于速度較慢的設(shè)備之間的數(shù)據(jù)傳輸。在這種方式下,DMA響應(yīng)設(shè)備的請(qǐng)求之后,還會(huì)發(fā)送響應(yīng)信號(hào)給等待的外設(shè)。通過(guò)在控制寄存器里面設(shè)置一個(gè)信息位,預(yù)先設(shè)置好當(dāng)前通道的傳輸是否需要硬件請(qǐng)求信號(hào),即可實(shí)現(xiàn)這兩種方式的傳輸。寄存器還設(shè)置地址改變的方式。數(shù)據(jù)傳送的大小等等信息,初始化完畢后,內(nèi)核維續(xù)執(zhí)行其他操作,等待外設(shè)數(shù)據(jù)準(zhǔn)備好或者等待DMA控制發(fā)送總線請(qǐng)求信號(hào)。
2) 獲取總線使用權(quán)
DMA跟CPU共用一套總線,并且二者都可以作為總線的主控設(shè)備,因此,在進(jìn)行訪問(wèn)的時(shí)候,需要考慮到總線使用權(quán)的問(wèn)題,獲得總線使用權(quán)的設(shè)備占用總線進(jìn)行傳輸,其余設(shè)備等待。DMA通道使能信號(hào)有效或者外圍設(shè)備發(fā)送DMA請(qǐng)求信號(hào)的時(shí)候,DMA發(fā)送總線請(qǐng)求信號(hào)給內(nèi)核。要求獲得總線的使用權(quán)。
內(nèi)核響應(yīng)總線請(qǐng)求信號(hào)以后,如果存在多個(gè)模需要先進(jìn)行優(yōu)先級(jí)模塊同時(shí)請(qǐng)求DMA訪問(wèn)的時(shí)候,判斷。通道之間的優(yōu)先級(jí)可通過(guò)寄存器編程,具有最高優(yōu)先級(jí)的通道獲得總線的使用權(quán),發(fā)送響應(yīng)信號(hào)給對(duì)應(yīng)外設(shè),并發(fā)送總線忙信號(hào)告知其他模塊總線正在被占用。這時(shí),CPU的操作仍可繼續(xù)進(jìn)行,遇到需要使用該總線就進(jìn)入等待。
3)驅(qū)動(dòng)地址、數(shù)據(jù)總線進(jìn)行DMA傳送
獲得總線使用權(quán)的通道通過(guò)地址寄存器驅(qū)動(dòng)地址總線,選擇源設(shè)備與目的設(shè)備,并發(fā)送讀寫(xiě)控制信號(hào),同時(shí)通過(guò)數(shù)據(jù)總線發(fā)送或者接收數(shù)據(jù)。
DMA的數(shù)據(jù)傳輸方式有兩種:存儲(chǔ)轉(zhuǎn)發(fā)方式和直接數(shù)據(jù)傳輸方式。對(duì)于慢速的設(shè)備,采用存儲(chǔ)轉(zhuǎn)發(fā)的模式,即先將數(shù)據(jù)接收到控制器中的數(shù)據(jù)緩沖器,然后再將數(shù)據(jù)發(fā)送到目的設(shè)備;對(duì)于高速的外圍設(shè)備,當(dāng)源地址跟目的地址指向的不是同一設(shè)備時(shí),可以采取直接數(shù)據(jù)傳輸?shù)哪J?,?shù)據(jù)直接從源設(shè)備讀出并寫(xiě)往目的設(shè)備,這樣可以有效地節(jié)省時(shí)間,最佳的使用方案是將這兩種方式有效結(jié)合起來(lái)進(jìn)行傳輸。
每傳輸完一次數(shù)據(jù),源地址。目的地址相應(yīng)改變。計(jì)數(shù)器遞減,如果數(shù)據(jù)沒(méi)有傳輸完,維續(xù)進(jìn)行傳送,否則,轉(zhuǎn)入下一步操作。DMA傳送完畢后的處理工作
4)通道上的數(shù)據(jù)傳輸完畢后,DMA控制器釋放總線,總線請(qǐng)求信號(hào)??偩€忙信號(hào)無(wú)效,并采用專門(mén)的機(jī)制向內(nèi)核提出中斷,以便內(nèi)核處理器重新獲得總線的使用權(quán)并執(zhí)行相應(yīng)的操作。
但是,中斷提出并被響應(yīng)以后,處理器就要轉(zhuǎn)向執(zhí)行中斷服務(wù)子程序,需要占用處理器的執(zhí)行時(shí)間。一種有效的方法是對(duì)每個(gè)通道設(shè)置中斷屏蔽寄存位,數(shù)據(jù)傳輸完畢的時(shí)候,在不要處理器響應(yīng)時(shí)禁止通道提出中斷請(qǐng)求。每一個(gè)通道都有對(duì)應(yīng)的狀態(tài)寄存器,用來(lái)表示當(dāng)前數(shù)據(jù)是否傳輸完畢。只有通道的數(shù)據(jù)傳輸完畢,并且該通道對(duì)應(yīng)的屏蔽位無(wú)效的時(shí)候,該通道的中斷請(qǐng)求信號(hào)才有效,,各個(gè)通道中斷請(qǐng)求信號(hào)相或,如果結(jié)果有效,就向內(nèi)核發(fā)送中斷請(qǐng)求,否則DMA傳輸繼續(xù)進(jìn)行。
4、DMA控制器設(shè)計(jì)實(shí)現(xiàn)
基于前面對(duì)DMA控制器工作流程的詳細(xì)分析。運(yùn)用SystemC 語(yǔ)言,建立DMA控制器的Cye le-Accurat級(jí)參考模型??刂破饔梢韵聨讉€(gè)模塊組成:寄存器賦值、狀態(tài)轉(zhuǎn)換。輸出模塊和頂層模塊。具體工作過(guò)程可以參考如圖3所示的有限狀態(tài)機(jī)。

5 結(jié)束語(yǔ)
設(shè)計(jì)完畢,采用Mode1Sim61進(jìn)行系統(tǒng)功能仿真驗(yàn)證。片內(nèi)存儲(chǔ)器采用工具生成的SRAM模塊,輸入激勵(lì)中需要的地址。數(shù)據(jù)均采用隨機(jī)生成的方式進(jìn)行,對(duì)各個(gè)通道的寄存器進(jìn)行隨機(jī)的初始化賦值后,發(fā)送DMA傳送請(qǐng)求信號(hào),分析讀寫(xiě)的數(shù)據(jù)是否正確,進(jìn)行驗(yàn)證。結(jié)果表明,文中設(shè)計(jì)的DMA控制器功能正確并且具有較好的性能。
電子發(fā)燒友App





















評(píng)論