九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 6915|回复: 1
打印 上一主题 下一主题

S3C2440的DMA控制

[复制链接]
跳转到指定楼层
楼主
发表于 2012-7-19 11:38:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SC2440支持位于系统总线与外围总线之间的四通道DMA控制。每一通道的DMA都可以处理一下四种情况:
1.        源和目的器件均可以在系统总线
2.        源器件在系统总线而目的器件在外围总线
3.        源器件在外围总线而目的器件在系统总线
4.        源和目的器件均可以在外围总线
DMA最大的有点就是可以在没有CPU干涉的情况下进行数据的传送。可以通过软件控制DMA启动,或者通过内部请求或者外部请求引脚启动。
DMA请求源
       DCON寄存器选择DMA请求方式为H/W时,每一通道的DMA控制器能在四个DMA请求源之中选择一种DMA。(注意:如果DCON寄存器选择的是S/W请求方式,DMA请求源是没有意义的)
每通道的DMA请求源
Source0
Source1
Source2
Source3
Source4
Source5
Source6
Ch-0
nXDREQ0
UART0
SDI
Timer
USBdevice EP1
I2SSDO
PCMIN
Ch-1
nXDREQ1
UART1
I2SSDI
SPI0
USBdevice EP2
PCMOUT
SDI
Ch-2
I2SSDO
I2SSDI
SDI
Timer
USBdevice EP3
PCMIN
MICIN
Ch-3
UART2
SDI
SPI1
Timer
USBdevice EP4
MICIN
PCMOUT
DMA控制
     DMA使用三态的有限状态机FSM(Finite State Machine),有限状态机制)对其进行控制,以下用三步进行描述:
l        状态1
在初始状态,DMA等待DMA请求。当DMA请求到达时,进入状态2。在这 阶段DMA ACKINT REQ均为0
l        状态2
在这个阶段,DMA ACK变成1以及计数器CURR_TCDCON[19:0]寄存器加载数据。(注意:DMA ACK保持1直到对其清零)
l        状态3
在这个阶段,DMA对进行原子操作(atomic operation)的子有限状态机(sub-FSM)进行初始化。sub-FSM从源地址读取数据以后并写进目的地址。在这个操作前,数据的大小和传输的大小均应给予考虑。在整体模式(Whole service mode)下的计数器(CURR_TC)0之前,数据传输的操作将会继续。当sub-FSM完成原子操作后,主FSM进行倒计。另外,在计数器CRRR_TC0以及中断设置DCON[29]寄存器被置1时,主FSM发出INT REQ信号。除此之外,同时清除DMA ACK。假如以下一种情况发生:
1.        在整体服务模式下计数器CURR_TC0
2.        在单一服务模式下原子操作的完成
(注意:在单一服务模式下,主FSM的三个状态在完成停止后,等待下一个DMA REQ。当有新的DMA REQ到来,就会重复三个状态)
有限状态机
  在数字电路系统中,有限状态机是一种十分重要的时序逻辑电路模块,它对数字系统的设计具有十分重要的作用。
  有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路。一般来说,除了输入部分和输出部分外,有限状态机还含有一组具有“记忆”功能的寄存器,这些寄存器的功能是记忆有限状态机的内部状态,它们常被称为状态寄存器。在有限状态机中,状态寄存器的的下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此有限状态机又可以认为是组合逻辑和寄存器逻辑的一种组合。其中,寄存器逻辑的功能是存储有限状态机的内部状态;而组合逻辑有可以分为次态逻辑和输出逻辑两部分,次态逻辑的功能是确定有限状态机的下一个状态,输出逻辑的功能是确定有限状态机的输出。
  在实际的应用中,根据有限状态机是否使用输入信号,设计人员经常将其分为Moore型有限状态机和Mealy型有限状态机两种类型。1 Moore型有限状态机 其输出信号仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的函数。2 Mealy型有限状态机 其输出信号不仅与当前状态有关,而且还与所有的输入信号有关,即可以把Mealy型有限状态机的输出看成是当前状态和所有输入信号的函数。
参考:http://baike.baidu.com/view/115336.html?wtp=tt
Atomic operation
An atomic operation in computer sciencerefers to a set of operations that can be combined so that they appear to therest of the system to be a single operation with only two possible outcomes:success or failure.
1.    Until the entire set of operations completes, no other process can knowabout the changes being made (invisibility); and
2.    If any of the operations fail then the entire set of operations fails,and the state of the system is restored to the state it was in before any ofthe operations began.
Even without the complications of multipleprocessing units, this can be non-trivial to implement. As long as there is thepossibility of a change in the flow of control, without atomicity there is thepossibility that the system can enter an invalid state (invalid as defined bythe program, a so-called invariant).
原子操作
原子操作是计算机科学所指的可以结合起来的一组操作,使这些操作看起来像是系统的一个单独操作,然而操作的结果只有两个:成功或者失败。
为了能实现原子操作,必须满足两个条件:
1.        在整组操作没有完成之前,不能有其他进程能了解操作在发生的变化
2.        如果有任何一组操作失败,则一整组操作就失败,以及当前状态要被恢复到操作之前的状态。
外部DMADREQ/DACK 协议
      外部DMA有三种请求/应答协议:
1.        单一服务查询(Singleservice Demand,)
2.        单一服务握手(Singleservice Handshake)
3.        整体服务握手(Wholeservice Handshake)
每类定义的DMA请求和应答信号都与这些协议有关。
查询/请求(Demand/Handshake)模式的比较
查询/请求模式的区别在于XnXDREQ and XnXDACK
查询模式(DemandMode)
如果 XnXDREQ 保持低电平,下一个传输立即开始。否则等待 XnXDREQ 为低电平。
握手模式(HandshakeMode)
—如果 XnXDREQ 为高电平,DMA XnXDACK 的高电平维持2个周期。否则进入等待直到XnXDREQ 位高电平。
DMA专用寄存器
每通道DMA都有9个控制寄存器(总共有36个对四通道DMA控制的寄存器),其中6个是控制DMA传输的控制寄存器,另外3个是对DMA状态监视的控制器。
     6DMA控制传输的寄存器,可以进行读/
l        DISRCnDMA INITIAL SOURCE(DISRC) REGISTER
l        DISRCCnDMA INITIALSOURCE CONTROL (DISRCC) REGISTER
l        DIDSTnDMA INITIALDESTINATION (DIDST) REGISTER
l        DIDSTCnDMA INITIALDESTINATION CONTROL (DIDSTC) REGISTER
l        DCONnDMA CONTROL(DCON) REGISTER
l        DMASKTRIGnDMA MASKTRIGGER (DMASKTRIG) REGISTER
3个状态监视的寄存器,只能进行读
l        DSTATnDMA STATUS(DSTAT) REGISTER
l        DCSRCnDMA CURRENTSOURCE (DCSRC) REGISTER
l        DCDSTnCURRENTDESTINATION (DCDST) REGISTER
以下为DMA特殊寄存器的详细描述
l        DMA INITIAL SOURCE (DISRC) REGISTER
寄存器
地址
R/W
描述
初始值
DISRC0
0x4B000000
R/W
DMA0 初始化源地址寄存器
0x00000000
DISRC1
0x4B000040
R/W
DMA1 初始化源地址寄存器
0x00000000
DISRC2
0x4B000080
R/W
DMA2 初始化源地址寄存器
0x00000000
DISRC3
0x4B0000C0
R/W
DMA3 初始化源地址寄存器
0x00000000
DISRCn
Bit
描述
初始值
S_ADDR
[30:0]
传输数据源的基地址(起始地址),只有当CURR_SRC0并且DMA ACK1时,这些位的值会被载入到CURR_SRC
0x00000000
l        DMA INITIAL SOURCE CONTROL (DISRCC) REGISTER
寄存器
地址
R/W
描述
初始值
DISRCC0
0x4B000004
R/W
DMA0 初始化源地址控制寄存器
0x00000000
DISRCC1
0x4B000044
R/W
DMA1 初始化源地址控制寄存器
0x00000000
DISRCC2
0x4B000084
R/W
DMA2 初始化源地址控制寄存器
0x00000000
DISRCC3
0x4B0000C4
R/W
DMA3 初始化源地址控制寄存器
0x00000000
DISRCCn
Bit
描述
初始值
LOC
[1]
Bit1 是用于选择数据源的所在位置
0:数据源在系统总线(AHB)
1:数据源在外围总线(APB)
0
INC
[0]
Bit0 是用于选择地址的增长数目
0 = 增加(Increment)   1 = 固定(Fixed)
如果为0,地址根据每次页或者单一数据传输模式的大小增长
如果为1,地址在传送后不变。(在页传输模式,地址在页传输时改变,但是地址的值在传输后被覆盖)
0
l        DMA INITIAL DESTINATION (DIDST) REGISTER
寄存器
地址
R/W
描述
初始值
DIDST0
0x4B000008
R/W
DMA0 初始化目的地址寄存器
0x00000000
DIDST1
0x4B000048
R/W
DMA1 初始化目的地址寄存器
0x00000000
DIDST2
0x4B000088
R/W
DMA2 初始化目的地址寄存器
0x00000000
DIDST3
0x4B0000C8
R/W
DMA3 初始化目的地址寄存器
0x00000000
DIDSTn
Bit
描述
初始值
D_ADDR
[30:0]
传输数据目的的基地址(起始地址),只有当CURR_SRC0并且DMA ACK1时,这些位的值会被载入到CURR_SRC
0x00000000
l        DMA INITIAL DESTINATION CONTROL (DIDSTC) REGISTER
寄存器
地址
R/W
描述
初始值
DIDSTC0
0x4B00000C
R/W
DMA0 初始化目的地址控制寄存器
0x00000000
DIDSTC1
0x4B00004C
R/W
DMA1 初始化目的地址控制寄存器
0x00000000
DIDSTC2
0x4B00008C
R/W
DMA2 初始化目的地址控制寄存器
0x00000000
DIDSTC3
0x4B0000CC
R/W
DMA3 初始化目的地址控制寄存器
0x00000000
DIDSTCn
Bit
描述
初始值
CHK_INT
[2]
自动加载设置后选择中断发生
0:当TC0时,发生中断
1:自动加载完成后,发生中断
0
LOC
[1]
Bit1 是用于选择数据源的所在位置
0:数据源在系统总线(AHB)
1:数据源在外围总线(APB)
0
INC
[0]
Bit0 是用于选择地址的增长数目
0 = 增加(Increment)   1 = 固定(Fixed)
如果为0,地址根据每次页或者单一数据传输模式的大小增长
如果为1,地址在传送后不变。(在页传输模式,地址在页传输时改变,但是地址的值在传输后被覆盖)
0
l         DMA CONTROL (DCON) REGISTER
寄存器
地址
R/W
描述
初始值
DCON0
0x4B000010
R/W
DMA0 控制寄存器
0x00000000
DCON1
0x4B000050
R/W
DMA1 控制寄存器
0x00000000
DCON2
0x4B000090
R/W
DMA2 控制寄存器
0x00000000
DCON3
0x4B0000D0
R/W
DMA3 控制寄存器
0x00000000
DCONn
Bit
描述
初始值
DMD_HS
[31]
选择查询模式(Demand mode)或者握手模式(Demand mode)
0:选择查询模式
1:选择握手模式
0
SYNC
[30]
选择 DREQ/DACK 的同步时钟
0DREQ/DACK PCLK 同步(APB clock)
1DREQ/DACK HCLK 同步(AHB clock)
0
INT
[29]
允许/禁止 CURR_TC 的中断设置
0:禁止 CURR_TC 中断。用户需要在状态寄存器监视传输数目
1:当所有传输完成时发生中断请求(CURR_TC0)
0
TSZ
[28]
选择传输的大小为原子传输(每次传输完成后DMA将占用的总线释放)
0:一个单元的传输完成
1:长度为4的一页传输完成
0
SERVMODE
[27]
选择单一服务模式或整体服务模式
0:在每次原子DMA传输停止,等待下一个DMA请求,单一服务模式被选中
1:由一次请求开始重复的原子传输知道传输计数器为0,整体服务被选中。
0
HWSRCSEL
[26:24]
为每个DMA选择请求源
DCON0:
000:nXDREQ0
001:UART0
010:SDI
011:Timer
100:USB device EP1
DCON1:
000:nXDREQ1
001:UART1
010:I2SSDI
011:SPI
100:USB device EP2
DCON2:
000:I2SSDO
001:I2SSDI
010:SDI
011:Timer
100:USB device EP3
DCON3:
000:UART2
001:SDI
010:SPI
011:Timer
100:USB device EP4
DCON0: 101:I2SSDO 110:PCMIN
DCON1: 101:PCMOUT 110:SDI
DCON2: 101:PCMIN 110:MICIN
DCON3: 101:MICIN 110:PCMOUT
00
SWHW_SEL
[23]
选择软件请求模式(S/W request mode)或硬件请求模式(H/W request mode)
0:软件请求模式,DMA触发通过设置DMASKTRIG寄存器的 SW_TRIG
1:通过设置[26:24]位设置DMA的触发源
0
RELOAD
[22]
重载 / 设置选项
0:当前传输计数器值为0时完成自动重载
1:当前传输计数器值为0DMA通道关闭。
通道 / ((DMASKTRIGn[1]))被置1,从而保护非有意的新一轮DMA控制开始。
0
DSZ
[21:20]
数据传输的大小
00 = 字节(Byte)    01 = 半字(Half word)
10 = (Word)     11 = 保留(reserved)
00
TC
[19:0]
初始化传输计数器
00000
l        DMA MASK TRIGGER (DMASKTRIG) REGISTER
寄存器
地址
R/W
描述
初始值
DMASKTRIG0
0x4B000020
R/W
DMA0 屏蔽触发寄存器
000
DMASKTRIG1
0x4B000060
R/W
DMA1 屏蔽触发寄存器
000
DMASKTRIG2
0x4B0000A0
R/W
DMA2 屏蔽触发寄存器
000
DMASKTRIG3
0x4B0000E0
R/W
DMA3 屏蔽触发寄存器
000
DMASKTRIGn
Bit
描述
初始值
STOP
[2]
停止DMA控制
1:当前原子传输结束后马上停止DMA。如果当前没有运行原子传输,DMA也会马上停止。CURR_TC, CURR_SRC, CURR_DST 将会被置0
0
ON_OFF
[1]
DMA通道 /
0DMA通道开启
1DMA通道开启以及处理DMA请求。
0
SW_TRIG
[0]
DMA通道在软件请求模式下(S/W request mode)触发
1:请求DMA控制这控制器
  0
l        DMA STATUS (DSTAT) REGISTER
寄存器
地址
R/W
描述
初始值
DSTAT0
0x4B000014
R
DMA0 计数寄存器
000000h
DSTAT1
0x4B000054
R
DMA1 计数寄存器
000000h
DSTAT2
0x4B000094
R
DMA2 计数寄存器
000000h
DSTAT3
0x4B0000D4
R
DMA3 计数寄存器
000000h
DSTATn
Bit
描述
初始值
STAT
[2]
DMA控制器的状态
00:表示DMA控制器真准备好下一次DMA请求
01:表示DMA控制器忙于传输数据
00b
CURR_TC
[19:0]
当前传输计数的值
注意:传输计数值在最开始被设置好,之后在每次原子传输完成之后递减
00000h
l        DMA CURRENT SOURCE (DCSRC) REGISTER
寄存器
地址
R/W
描述
初始值
DCSRC0
0x4B000018
R
DMA0 当前源寄存器
0x00000000
DCSRC1
0x4B000058
R
DMA1 当前源寄存器
0x00000000
DCSRC2
0x4B000098
R
DMA2 当前源寄存器
0x00000000
DCSRC3
0x4B0000D8
R
DMA3 当前源寄存器
0x00000000
DCSRCn
Bit
描述
初始值
CURR_SRC
[30:0]
当前 DMAn 的源地址
0x00000000
l        CURRENT DESTINATION (DCDST) REGISTER
寄存器
地址
R/W
描述
初始值
DCDST0
0x4B00001C
R
DMA0 当前目的寄存器
0x00000000
DCDST1
0x4B00005C
R
DMA1 当前目的寄存器
0x00000000
DCDST2
0x4B00009C
R
DMA2 当前目的寄存器
0x00000000
DCDST3
0x4B0000DC
R
DMA3 当前目的寄存器
0x00000000
DCDSTn
Bit
描述
初始值
CURR_SRC
[30:0]
当前 DMAn 的目的地址
0x00000000
作者:jammy_lee
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yexinghai/archive/2009/04/07/4054842.aspx

s3c2440学习系列6dma
之所以要介绍S3C2410 DMA,因为它对性能太重要了!只有活用了DMACPU的性能才能上去!S3C2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同,具体见Datasheet
    这里具体DMA CONTROL寄存器(DCON)的配置说明,进而引出DMA的各种工作方式。
Atomic transfer:指的是DMA的单次原子操作,它可以是Unit模式(传输1data size),也可以是burst模式(传输4data size),具体对应DCON[28]
Data Size:指的是单次原子操作的数据位宽,81632,具体对应DCON[21:20]
Request SourceDMA请求的来源有两种,软件&硬件模块,由DCON[23]控制;当为前者时,由软件对DMASKTRIG寄存器的位0置位触发一次DMA 操作。当为后者时,具体来源由DCON[26:24]控制,不同硬件模块的某时间触发一次DMA操作,具体要见不同的硬件模块。
DMA service modeDMA的工作模式有两种,单一服务模式&整体服务模式。前一模式下,一次DMA请求完成一项原子操作,并且transfercount的值减1。后一模式下,一次DMA请求完成一批原子操作,直到transfer count等于0表示完成一次整体服务。具体对应DCON[27]
RELOAD:在reload模式下,当transfercount的值变为零时,将自动加srcdstTC的值加载到CURR_DSTCURR_SRCCURR_TC,并开始一次新的DMA传输。该模式一般和整体服务模式一起使用,也就是说当一次整体服务开始后,srcdstTC的值都已经被加载,因此可以更改为下一次服务的地址,2410说明文档中建议加入以下语句来判断当前的服务开始,srcdstTC的值可以被更改了:while((rDSTATn & 0xfffff) == 0) ;
Req&AckDMA请求和应答的协议有两种,Demardmode Handshakemode。两者对RequestAck的时序定义有所不同:在Demard模式下,如果DMA完成一次请求如果Request仍然有效,那么DMA就认为这是下一次DMA请求;在Handshake模式下,DMA完成一次请求后等待Request信号无效,然后把ACK也置无效,再等待下一次Request。这个设计外部DMA请求时可能要用到。
传输总长度:DMA一次整体服务传输的总长度为:
   Data Size × Atomictransfer size × TC(字节)。
S3C2410DMA支持四类DMA传输:
系统总线到系统总线(ASB/AHBto ASB/AHB)
系统总线到外设总线(ASB/AHBto APB)
外设总线到系统总线(APBto ASB/AHB)
外设总线到外设总线(APBto 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
S3C2410DMA 三个比较重要的信号,引用2410官方文档:
DMA REQ: In the Single service mode, thesethree states of main FSM are performed and then stops, and waits for anotherDMA REQ. And if DMA REQ comes in, all three states are repeated.
DMA ACK: DMA ACK is asserted and thendeasserted 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 isasserted during all the transfers and then deasserted when TC reaches 0.
INT REQ: INT REQ is asserted only ifCURR_TC becomes 0 regardless of the service mode (Single service mode or Wholeservice mode).
S3C2410DMA状态机:
S3C2410DMA使用一个具有三个状态的有限状态机进行DMA 传输的流程控制,引用2410官方文档:
State-1. As an initial state, the DMA waitsfor a DMA request. If it comes, it goes to state-2. At this state, DMA ACK andINT REQ are 0.
State-2. In this state, DMA ACK becomes 1and the counter (CURR_TC) is loaded from DCON[19:0] register. Note that the DMAACK remains 1 until it is cleared later.
State-3. In this state, sub-FSM handlingthe atomic operation of DMA is initiated. The sub-FSM reads the data from thesource address and then writes it to destination address. In this operation,data size and transfer size(single or burst) are considered.
每当一次DMA操作结束,不管是使用什么服务模式,DMA状态机都会自动地从状态三回到状态一,开始另一次操作。注意这里信号是DMAREQ DMA ACK,而最终引脚信号是nXDREQ nXDACK,所以最后实际输出的电平与这里的描述是相反的。
S3C2410DMA 的服务模式:
共有两种服务模式,一种是单一服务模式(single service),另外一种是整体服务模式(whole service)。
在单一服务模式下,不使用传统的DMA计数器,三个DMA状态被顺序执行一次后停止,等待DMA 请求再一次来临后再重新开始另一次循环。
在整体服务模式下,使用传统的DMA计数器,状态机会停留在状态三,直到DMA计数器的值减为零,再回到状态一,等待下一次DMA请求。
S3C2410DMA 数据传输模式:
共有两种数据传输模式:
单位数据传输模式:执行一次读操作和一次写操作。
并发数据传输模式:执行四次读操作和四次写操作。
S3C2410DMA 的基本时序:
nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输。
S3C2410DMA 的两种协议模式:
请求模式:IfXnXDREQ remains asserted, the next transfer starts immediately. Otherwise itwaits for XnXDREQ to be asserted.
握手模式:IfXnXDREQ is deasserted, DMA deasserts XnXDACK in 2cycles. Otherwise it waitsuntil XnXDREQ is deasserted.
S3C2410DMA REQACK 协议类型:
共有三种协议类型:
单一服务请求:
单一服务握手:
整体服务握手:
根据上面所说的服务模式和协议模式,很容易推知这三种协议的时序分别是什么。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-4-20 13:45 , Processed in 0.040318 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表