歡迎您光臨本站 登入註冊首頁

S3C2410 DMA詳解

admin @ 2014-03-25 , reply:0

概述

   之所以要介紹S3C2410DMA,因為它對性能太重要了!只有活用了DMA,CPU的性能才能上去!S3C2410有四個DMA,每個DMA支持工作方式基本相同,但支持的……

    之所以要介紹S3C2410 DMA,因為它對性能太重要了!只有活用了DMA,CPU的性能才能上去!S3C2410有四個DMA,每個DMA支持工作方式基本相同,但支持的source Dest可能略有不同,具體見Datasheet。
    這裡具體DMA CONTROL寄存器(DCON)的配置說明,進而引出DMA的各種工作方式。

  • Atomic transfer:指的是DMA的單次原子操作,它可以是Unit模式(傳輸1個data size),也可以是burst模式(傳輸4個data size),具體對應DCON[28]。
  • Data Size:指的是單次原子操作的數據位寬,8、16、32,具體對應DCON[21:20]。
  • Request Source:DMA請求的來源有兩種,軟體&硬體模塊,由DCON[23]控制;當為前者時,由軟體對DMASKTRIG寄存器的位0置位觸發一次DMA 操作。當為後者時,具體來源由DCON[26:24]控制,不同硬體模塊的某時間觸發一次DMA操作,具體要見不同的硬體模塊。
  • DMA service mode:DMA的工作模式有兩種,單一服務模式&整體服務模式。前一模式下,一次DMA請求完成一項原子操作,並且transfer count的值減1。后一模式下,一次DMA請求完成一批原子操作,直到transfer count等於0表示完成一次整體服務。具體對應DCON[27]。
  • RELOAD:在reload模式下,當transfer count的值變為零時,將自動加src、dst、TC的值載入到CURR_DST、CURR_SRC、CURR_TC,並開始一次新的DMA傳輸。該模式一般和整體服務模式一起使用,也就是說當一次整體服務開始后,src、dst、TC的值都已經被載入,因此可以更改為下一次服務的地址,2410說明文檔中建議加入以下語句來判斷當前的服務開始,src、dst、TC的值可以被更改了:while((rDSTATn & 0xfffff) == 0) ;
  • Req&Ack:DMA請求和應答的協議有兩種,Demard mode 和 Handshake mode。兩者對Request和Ack的時序定義有所不同:在Demard模式下,如果DMA完成一次請求如果Request仍然有效,那麼DMA就認為這是下一次DMA請求;在Handshake模式下,DMA完成一次請求后等待Request信號無效,然後把ACK也置無效,再等待下一次Request。這個設計外部DMA請求時可能要用到。

傳輸總長度:DMA一次整體服務傳輸的總長度為:
    Data Size × Atomic transfer size × TC(位元組)。

S3C2410的DMA支持四類DMA傳輸:

  • 系統匯流排到系統匯流排(ASB/AHB to ASB/AHB)
  • 系統匯流排到外設匯流排(ASB/AHB to APB)
  • 外設匯流排到系統匯流排(APB to ASB/AHB)
  • 外設匯流排到外設匯流排(APB to APB)。

S3C2410共有四條DMA通道,每條通道5個請求源。

  • 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 三個比較重要的信號,引用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狀態機:
S3C2410 的DMA使用一個具有三個狀態的有限狀態機進行DMA 傳輸的流程式控制制,引用2410官方文檔:

  • 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.

每當一次DMA操作結束,不管是使用什麼服務模式,DMA狀態機都會自動地從狀態三回到狀態一,開始另一次操作。注意這裡信號是DMA REQ 和 DMA ACK,而最終引腳信號是nXDREQ 和 nXDACK,所以最後實際輸出的電平與這裡的描述是相反的。

S3C2410 DMA 的服務模式:
共有兩種服務模式,一種是單一服務模式(single service),另外一種是整體服務模式(whole service)。
在單一服務模式下,不使用傳統的DMA計數器,三個DMA狀態被順序執行一次后停止,等待DMA 請求再一次來臨后再重新開始另一次循環。
在整體服務模式下,使用傳統的DMA 計數器,狀態機會停留在狀態三,直到DMA計數器的值減為零,再回到狀態一,等待下一次DMA請求。

S3C2410 DMA 數據傳輸模式:
共有兩種數據傳輸模式:

  • 單位數據傳輸模式:執行一次讀操作和一次寫操作。
  • 併發數據傳輸模式:執行四次讀操作和四次寫操作。

S3C2410 DMA 的基本時序:
nXDREQ請求生效並經過2CLK周期同步后,nXDACK響應並開始生效,但至少還要經過3CLK的周期延遲,DMA控制器才可獲得匯流排的控制權,並開始數據傳輸。
 

S3C2410 DMA 的兩種協議模式:
 

  • 請求模式: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 協議類型:
共有三種協議類型:

  • 單一服務請求:
     
  • 單一服務握手:
     
  • 整體服務握手:
     

根據上面所說的服務模式和協議模式,很容易推知這三種協議的時序分別是什麼。


[admin via 研發互助社區 ] S3C2410 DMA詳解已經有2873次圍觀

http://cocdig.com/docs/show-post-42179.html