之所以要介紹S3C2410 DMA,因?yàn)樗鼘?duì)性能太重要了!只有活用了DMA,CPU的性能才能上去!S3C2410有四個(gè)DMA,每個(gè)DMA支持工作方式基本相同,但支持的source Dest可能略有不同,具體見(jiàn)Datasheet。
這里具體DMA CONTROL寄存器(DCON)的配置說(shuō)明,進(jìn)而引出DMA的各種工作方式。
Atomic transfer:指的是DMA的單次原子操作,它可以是Unit模式(傳輸1個(gè)data size),也可以是burst模式(傳輸4個(gè)data size),具體對(duì)應(yīng)DCON[28]。
Data Size:指的是單次原子操作的數(shù)據(jù)位寬,8、16、32,具體對(duì)應(yīng)DCON[21:20]。
Request Source:DMA請(qǐng)求的來(lái)源有兩種,軟件&硬件模塊,由DCON[23]控制;當(dāng)為前者時(shí),由軟件對(duì)DMASKTRIG寄存器的位0置位觸發(fā)一次 DMA 操作。當(dāng)為后者時(shí),具體來(lái)源由DCON[26:24]控制,不同硬件模塊的某時(shí)間觸發(fā)一次DMA操作,具體要見(jiàn)不同的硬件模塊。
DMA service mode:DMA的工作模式有兩種,單一服務(wù)模式&整體服務(wù)模式。前一模式下,一次DMA請(qǐng)求完成一項(xiàng)原子操作,并且transfer count的值減1。后一模式下,一次DMA請(qǐng)求完成一批原子操作,直到transfer count等于0表示完成一次整體服務(wù)。具體對(duì)應(yīng)DCON[27]。
RELOAD:在reload模式下,當(dāng)transfer count的值變?yōu)榱銜r(shí),將自動(dòng)加src、dst、TC的值加載到CURR_DST、CURR_SRC、CURR_TC,并開(kāi)始一次新的DMA傳輸。該模式一般和整體服務(wù)模式一起使用,也就是說(shuō)當(dāng)一次整體服務(wù)開(kāi)始后,src、dst、TC的值都已經(jīng)被加載,因此可以更改為下一次服務(wù)的地址,2410說(shuō)明文檔中建議加入以下語(yǔ)句來(lái)判斷當(dāng)前的服務(wù)開(kāi)始,src、dst、TC的值可以被更改了:while((rDSTATn & 0xfffff) == 0) ;
Req&Ack:DMA請(qǐng)求和應(yīng)答的協(xié)議有兩種,Demard mode 和 Handshake mode。兩者對(duì)Request和Ack的時(shí)序定義有所不同:在Demard模式下,如果DMA完成一次請(qǐng)求如果Request仍然有效,那么DMA就認(rèn)為這是下一次DMA請(qǐng)求;在Handshake模式下,DMA完成一次請(qǐng)求后等待Request信號(hào)無(wú)效,然后把ACK也置無(wú)效,再等待下一次 Request。這個(gè)設(shè)計(jì)外部DMA請(qǐng)求時(shí)可能要用到。
傳輸總長(zhǎng)度:DMA一次整體服務(wù)傳輸?shù)目傞L(zhǎng)度為:
Data Size × Atomic transfer size × TC(字節(jié))。
S3C2410的DMA支持四類DMA傳輸:
系統(tǒng)總線到系統(tǒng)總線(ASB/AHB to ASB/AHB)
系統(tǒng)總線到外設(shè)總線(ASB/AHB to APB)
外設(shè)總線到系統(tǒng)總線(APB to ASB/AHB)
外設(shè)總線到外設(shè)總線(APB to APB)。
S3C2410共有四條DMA通道,每條通道5個(gè)請(qǐng)求源。
Ch0:nXDREQ0,UART0,SDI,Timer,USB EP1
Ch1: nXDREQ1,UART1,I2SSDI,SPI0,USB EP2
Ch2:I2SSDO,I2SSDI,SDI,Timer, USB EP3
Ch3:UART1,SDI,SPI1,Timer, USB EP4
S3C2410 DMA 三個(gè)比較重要的信號(hào),引用2410官方文檔:
DMA REQ: In the Single service mode, these three states of main FSM are performed and then stops, and waits for another DMA REQ. And if DMA REQ comes in, all three states are repeated.
DMA ACK: DMA ACK is asserted and then deasserted for each atomic transfer. In contrast, in the Whole service mode, main FSM waits at state-3 until CURR_TC becomes 0. Therefore, DMA ACK is asserted during all the transfers and then deasserted when TC reaches 0.
INT REQ: INT REQ is asserted only if CURR_TC becomes 0 regardless of the service mode (Single service mode or Whole service mode).
S3C2410 DMA狀態(tài)機(jī):
S3C2410 的DMA使用一個(gè)具有三個(gè)狀態(tài)的有限狀態(tài)機(jī)進(jìn)行DMA 傳輸?shù)牧鞒炭刂?,引?410官方文檔:
State-1. As an initial state, the DMA waits for a DMA request. If it comes, it goes to state-2. At this state, DMA ACK and INT REQ are 0.
State-2. In this state, DMA ACK becomes 1 and the counter (CURR_TC) is loaded from DCON[19:0] register. Note that the DMA ACK remains 1 until it is cleared later.
State-3. In this state, sub-FSM handling the atomic operation of DMA is initiated. The sub-FSM reads the data from the source address and then writes it to destination address. In this operation, data size and transfer size(single or burst) are considered.
每當(dāng)一次DMA操作結(jié)束,不管是使用什么服務(wù)模式,DMA狀態(tài)機(jī)都會(huì)自動(dòng)地從狀態(tài)三回到狀態(tài)一,開(kāi)始另一次操作。注意這里信號(hào)是DMA REQ 和 DMA ACK,而最終引腳信號(hào)是nXDREQ 和 nXDACK,所以最后實(shí)際輸出的電平與這里的描述是相反的。
S3C2410 DMA 的服務(wù)模式:
共有兩種服務(wù)模式,一種是單一服務(wù)模式(single service),另外一種是整體服務(wù)模式(whole service)。
在單一服務(wù)模式下,不使用傳統(tǒng)的DMA計(jì)數(shù)器,三個(gè)DMA狀態(tài)被順序執(zhí)行一次后停止,等待DMA 請(qǐng)求再一次來(lái)臨后再重新開(kāi)始另一次循環(huán)。
在整體服務(wù)模式下,使用傳統(tǒng)的DMA 計(jì)數(shù)器,狀態(tài)機(jī)會(huì)停留在狀態(tài)三,直到DMA計(jì)數(shù)器的值減為零,再回到狀態(tài)一,等待下一次DMA請(qǐng)求。
S3C2410 DMA 數(shù)據(jù)傳輸模式:
共有兩種數(shù)據(jù)傳輸模式:
單位數(shù)據(jù)傳輸模式:執(zhí)行一次讀操作和一次寫(xiě)操作。
并發(fā)數(shù)據(jù)傳輸模式:執(zhí)行四次讀操作和四次寫(xiě)操作。
S3C2410 DMA 的基本時(shí)序:
nXDREQ請(qǐng)求生效并經(jīng)過(guò)2CLK周期同步后,nXDACK響應(yīng)并開(kāi)始生效,但至少還要經(jīng)過(guò)3CLK的周期延遲,DMA控制器才可獲得總線的控制權(quán),并開(kāi)始數(shù)據(jù)傳輸。
S3C2410 DMA 的兩種協(xié)議模式:
請(qǐng)求模式:If XnXDREQ remains asserted, the next transfer starts immediately. Otherwise it waits for XnXDREQ to be asserted.
握手模式:If XnXDREQ is deasserted, DMA deasserts XnXDACK in 2cycles. Otherwise it waits until XnXDREQ is deasserted.
S3C2410 DMA REQ與ACK 協(xié)議類型:
共有三種協(xié)議類型:
單一服務(wù)請(qǐng)求:
單一服務(wù)握手:
整體服務(wù)握手:
根據(jù)上面所說(shuō)的服務(wù)模式和協(xié)議模式,很容易推知這三種協(xié)議的時(shí)序分別是什么。