原创 对S3C2410数据手册中DMA部分的解读

2010-3-17 16:09 3226 4 4 分类: MCU/ 嵌入式
之所以要介绍DMA,因为它对性能太重要了!只有活用了DMA,CPU的性能才能上去!S3c2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同。

解读S3C2410数据手册中DMA部分:

DMA请求源:通过设置DCON[23]位SWHW_SEL值,选择硬/软件请求,并可进一步通过设置HWSRCSEL[26:24]位选择HW模式下的每个DMA通道的请求源


DMA工作过程:使用三态FSM(有限状态机)进行操作,分三步操作:

Stage-1 初始状态,等待DMA请求,若请求到达,进入Stage-2。此阶段,DMA ACK和INT REQ都为0。

Stage-2 DMA ACK变为1,计数器CURR_TC从DCON[19:0]加载数值。注意:此时DMA ACK仍然为1,知道它随后在stage-3中被清0。

Stage-3 在此状态,对DMA进行原子操作的sub-FSM(子状态机)被初始化它从源地址读取数据然后写入目的地址(此操作需要考虑数据大小和传输尺寸)。


每一次DMA传输,必须先得到请求。

有两种请求模式:Demand和Handshake。差别在于是否等待DREQ信号无效:

Handshake模式下,DMA控制器在开始下一次传输之前要一直等待直到DREQ信号无效。如果DREQ信号无效了,DMA 控制器使DACK无效后继续等待下一次DREQ信号有效,之后又开始数据传输,且使DACK信号有效。
Demand模式下,DMA控制器不等待DREQ信号无效。如果传输完毕后DREQ还是继续有效,DMA控制器只是先无效DACK信号,然后又开始新一轮的传输。数据手册上建议对外部DMA请求使用Handshake模式,以避免不经意的开始新一轮数据传输。

S3C2410 ARM9 ARM9开发板 DMA ARM开发板

有两种传输模式:Single service和Whole service。差别在于三态FSM操作的Stage-3:

在Stage-3状态,对DMA进行原子操作的Sub-FSM被初始化,它从源地址读取数据然后写入目的地址(此操作需要考虑数据大小和传输尺寸)。

Whole service模式下,这种读、写操作重复进行直到计数器(CURR_TC)变为0;而Single service模式下读和写操作只进行一次。


数据手册上提醒注意:就算是Whole service传输模式,每一次sub-fsm的原子传输后DMA也会释放总线,然后再试图重新获得总线,以保证其他设备能够有机会获得总线使用权。


每次原子传输(Sub-FSM中)的单元尺寸分为Unit(1次读和写操作,单块数据)和Burst4(分别执行4次连续读、写操作,4块数据)。

在整体服务模式下,使用传统的DMA 计数器,状态机会停留在状态三,直到DMA计数器的值减为零,再回到状态一,等待下一次DMA请求。2410 DMA 数据传输模式:共有两种数据传输模式:

单位数据传输模式:执行一次读操作和一次写操作。
并发数据传输模式:执行四次读操作和四次写操作。2410 DMA 的基本时序:nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输。2410 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
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条