S3C2440的DMA控制

 

DMA的概述

 

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

USB device EP1

I2SSDO

PCMIN

Ch-1

nXDREQ1

UART1

I2SSDI

SPI0

USB device EP2

PCMOUT

SDI

Ch-2

I2SSDO

I2SSDI

SDI

Timer

USB device EP3

PCMIN

MICIN

Ch-3

UART2

SDI

SPI1

Timer

USB device 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 science refers to a set of operations that can be combined so that they appear to the rest 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 know about 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 of the operations began.

Even without the complications of multiple processing units, this can be non-trivial to implement. As long as there is the possibility of a change in the flow of control, without atomicity there is the possibility that the system can enter an invalid state (invalid as defined by the program, a so-called invariant).

 

原子操作

原子操作是计算机科学所指的可以结合起来的一组操作,使这些操作看起来像是系统的一个单独操作,然而操作的结果只有两个:成功或者失败。

为了能实现原子操作,必须满足两个条件:

1.         在整组操作没有完成之前,不能有其他进程能了解操作在发生的变化

2.         如果有任何一组操作失败,则一整组操作就失败,以及当前状态要被恢复到操作之前的状态。

 

 

外部DMA DREQ/DACK 协议

       外部DMA有三种请求/应答协议:

1.         单一服务查询(Single service Demand,)

2.         单一服务握手(Single service Handshake)

3.         整体服务握手(Whole service Handshake)

每类定义的DMA请求和应答信号都与这些协议有关。

 

 

查询/请求(Demand/Handshake)模式的比较

查询/请求模式的区别在于XnXDREQ and XnXDACK

 

查询模式(Demand Mode)

如果 XnXDREQ 保持低电平,下一个传输立即开始。否则等待 XnXDREQ 为低电平。

握手模式(Handshake Mode)

如果 XnXDREQ 为高电平,DMA XnXDACK 的高电平维持2个周期。否则进入等待直到XnXDREQ 位高电平。

S3C2440的DMA控制_第1张图片

 

 

DMA专用寄存器

每通道DMA都有9个控制寄存器(总共有36个对四通道DMA控制的寄存器),其中6个是控制DMA传输的控制寄存器,另外3个是对DMA状态监视的控制器。

 

      6DMA控制传输的寄存器,可以进行读/

l         DISRCnDMA INITIAL SOURCE (DISRC) REGISTER

l         DISRCCnDMA INITIAL SOURCE CONTROL (DISRCC) REGISTER

l         DIDSTnDMA INITIAL DESTINATION (DIDST) REGISTER

l         DIDSTCnDMA INITIAL DESTINATION CONTROL (DIDSTC) REGISTER

l         DCONnDMA CONTROL (DCON) REGISTER

l         DMASKTRIGnDMA MASK TRIGGER (DMASKTRIG) REGISTER

 

3个状态监视的寄存器,只能进行读

l         DSTATnDMA STATUS (DSTAT) REGISTER

l         DCSRCnDMA CURRENT SOURCE (DCSRC) REGISTER

l         DCDSTnCURRENT DESTINATION (DCDST) REGISTER

 

以下为DMA特殊寄存器的详细描述

l         DMA INITIAL SOURCE (DISRC) REGISTER

寄存器

地址

R/W

描述

初始值

DISRC0

0x4B000000

R/W

DMA 0 初始化源地址寄存器

0x00000000

DISRC1

0x4B000040

R/W

DMA 1 初始化源地址寄存器

0x00000000

DISRC2

0x4B000080

R/W

DMA 2 初始化源地址寄存器

0x00000000

DISRC3

0x4B0000C0

R/W

DMA 3 初始化源地址寄存器

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

DMA 0 初始化源地址控制寄存器

0x00000000

DISRCC1

0x4B000044

R/W

DMA 1 初始化源地址控制寄存器

0x00000000

DISRCC2

0x4B000084

R/W

DMA 2 初始化源地址控制寄存器

0x00000000

DISRCC3

0x4B0000C4

R/W

DMA 3 初始化源地址控制寄存器

0x00000000

 

DISRCCn

Bit

描述

初始值

LOC

[1]

Bit 1 是用于选择数据源的所在位置

0:数据源在系统总线(AHB)

1:数据源在外围总线(APB)

0

INC

[0]

Bit 0 是用于选择地址的增长数目

0 = 增加(Increment)   1 = 固定(Fixed)

如果为0,地址根据每次页或者单一数据传输模式的大小增长

如果为1,地址在传送后不变。(在页传输模式,地址在页传输时改变,但是地址的值在传输后被覆盖)

0

 

 

l         DMA INITIAL DESTINATION (DIDST) REGISTER

寄存器

地址

R/W

描述

初始值

DIDST0

0x4B000008

R/W

DMA 0 初始化目的地址寄存器

0x00000000

DIDST1

0x4B000048

R/W

DMA 1 初始化目的地址寄存器

0x00000000

DIDST2

0x4B000088

R/W

DMA 2 初始化目的地址寄存器

0x00000000

DIDST3

0x4B0000C8

R/W

DMA 3 初始化目的地址寄存器

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

DMA 0 初始化目的地址控制寄存器

0x00000000

DIDSTC1

0x4B00004C

R/W

DMA 1 初始化目的地址控制寄存器

0x00000000

DIDSTC2

0x4B00008C

R/W

DMA 2 初始化目的地址控制寄存器

0x00000000

DIDSTC3

0x4B0000CC

R/W

DMA 3 初始化目的地址控制寄存器

0x00000000

 

DIDSTCn

Bit

描述

初始值

CHK_INT

[2]

自动加载设置后选择中断发生

0:当TC0时,发生中断

1:自动加载完成后,发生中断

0

LOC

[1]

Bit 1 是用于选择数据源的所在位置

0:数据源在系统总线(AHB)

1:数据源在外围总线(APB)

0

INC

[0]

Bit 0 是用于选择地址的增长数目

0 = 增加(Increment)   1 = 固定(Fixed)

如果为0,地址根据每次页或者单一数据传输模式的大小增长

如果为1,地址在传送后不变。(在页传输模式,地址在页传输时改变,但是地址的值在传输后被覆盖)

0

 

l         DMA CONTROL (DCON) REGISTER

寄存器

地址

R/W

描述

初始值

DCON0

0x4B000010

R/W

DMA 0 控制寄存器

0x00000000

DCON1

0x4B000050

R/W

DMA 1 控制寄存器

0x00000000

DCON2

0x4B000090

R/W

DMA 2 控制寄存器

0x00000000

DCON3

0x4B0000D0

R/W

DMA 3 控制寄存器

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

DMA 0 屏蔽触发寄存器

000

DMASKTRIG1

0x4B000060

R/W

DMA 1 屏蔽触发寄存器

000

DMASKTRIG2

0x4B0000A0

R/W

DMA 2 屏蔽触发寄存器

000

DMASKTRIG3

0x4B0000E0

R/W

DMA 3 屏蔽触发寄存器

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

DMA 0 计数寄存器

000000h

DSTAT1

0x4B000054

R

DMA 1 计数寄存器

000000h

DSTAT2

0x4B000094

R

DMA 2 计数寄存器

000000h

DSTAT3

0x4B0000D4

R

DMA 3 计数寄存器

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

DMA 0 当前源寄存器

0x00000000

DCSRC1

0x4B000058

R

DMA 1 当前源寄存器

0x00000000

DCSRC2

0x4B000098

R

DMA 2 当前源寄存器

0x00000000

DCSRC3

0x4B0000D8

R

DMA 3 当前源寄存器

0x00000000

 

DCSRCn

Bit

描述

初始值

CURR_SRC

[30:0]

当前 DMAn 的源地址

0x00000000

 

l         CURRENT DESTINATION (DCDST) REGISTER

寄存器

地址

R/W

描述

初始值

DCDST0

0x4B00001C

R

DMA 0 当前目的寄存器

0x00000000

DCDST1

0x4B00005C

R

DMA 1 当前目的寄存器

0x00000000

DCDST2

0x4B00009C

R

DMA 2 当前目的寄存器

0x00000000

DCDST3

0x4B0000DC

R

DMA 3 当前目的寄存器

0x00000000

 

DCDSTn

Bit

描述

初始值

CURR_SRC

[30:0]

当前 DMAn 的目的地址

0x00000000

 

作者:jammy_lee  

链接:http://blog.163.com/jammy_lee/blog/static/10119547820091454933811/

你可能感兴趣的:(c,timer,service,REST,System,processing)