转载于:http://www.cnblogs.com/dubingsky/archive/2010/04/11/1709488.html

之所以要介绍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 协议类型: 
共有三种协议类型:

  • 单一服务请求: 
  • 单一服务握手: 
  • 整体服务握手: 

根据上面所说的服务模式和协议模式,很容易推知这三种协议的时序分别是什么。

转载于:https://www.cnblogs.com/tureno/articles/6042997.html

DMA(2) S3C2410 DMA详解(其它的其实类似)相关推荐

  1. php 有indexof函数吗,详解PHP处理字符串类似indexof的方法函数

    详解PHP处理字符串类似indexof的方法函数 这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来! PHP 开源脚本语言 PHP(外文名: Hypertext Preprocessor,中文名: ...

  2. STM32DMA功能详解

    目录 一.DMA的基本介绍 1. 什么是DMA (DMA的基本定义) 2. DMA传输参数 3. DMA的主要特征 二.DMA功能框图 1. DMA请求 2. 通道 3. 仲裁器 三.DMA 数据配置 ...

  3. 7.Linux文本查看(cat more head tail)详解

    文章目录 前言 一.cat详解 二.more详解 三.head详解 四.less详解 五.tail命令详解 总结 友情链接 前言 本小节会详细讲解如何查看文件,及简单的处理文本:涉及到的命令包括cat ...

  4. stm32 DMA使用详解

    转自:http://www.cnblogs.com/121792730applllo/p/3154447.html STM32 DMA使用详解 DMA部分我用到的相对简单,当然,可能这是新东西,我暂时 ...

  5. DMA RDMA 技术详解

    DMA 技术是一个 直接内存访问技术. 在传统的linux 内存读写操作都必须经过cpu,读写寻址都是有cpu 完成的, 现在有一中技术 让数据读写完全由网卡自己完成. 这样就必须有硬件支持,及系统必 ...

  6. STM32从零到一,从标准库移植到HAL库,UART串口1以DMA模式收发不定长数据代码详解+常见问题 一文解析

    前言 本文的参考资料 感谢提供标准库版本的CSDN同学:这两篇文章至少是我看过的最详细的标准库配置DMA版本.而且代码实测稳定能用. STM32 | DMA配置和使用如此简单(超详细)_...| .. ...

  7. Linux之DMA详解

    Linux之DMA详解 1.什么是DMA? DMA全称Direct Memory Access(直接访问存储器).这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据. 2.为什么需要 ...

  8. 【STM32】DMA详解

    00. 目录 文章目录 00. 目录 01. DMA简介 02. DMA主要特性 03. DMA框图 04. DMA事务 05. 通道选择 06. 仲裁器 07. DMA数据流 08. DMA中断 0 ...

  9. DSP的DMA流程详解(状态图)

    DMA传输涉及到的概念 关于DMA传输中的burst.transfer.wrap等概念,请参考上一篇: https://blog.csdn.net/booksyhay/article/details/ ...

最新文章

  1. python 快速排序
  2. android的辅助代码,跟App相关的Android辅助类
  3. 无线路由能当AP用吗?
  4. 【干货】前端单元测试入门
  5. Java实现飞机大战(详细思路与过程,含源代码)
  6. ImageList00
  7. 诺基亚PC套件界面设计
  8. 7450清零_联想M7450F打印机加粉清零方法
  9. 台式网卡计算机,台式机万能网卡驱动,教您如何给台式机安装万能网卡驱动
  10. vue全屏组件vue-fullscreen使用
  11. flash写保护原理_Flash存储原理
  12. seo关键词扩展-自动关键词拓展软件免费下载
  13. Matlab中用Simulink快速画Bode图及 .m 文件画Bode图
  14. Robosense速腾激光雷达使用坐标变换功能
  15. 韩国多佑集团软件和服务外包基地纳米大厦大连揭幕
  16. 一级计算机字处理知识点,全国计算机等级考试一级word文字处理题考点
  17. 高效的使用DOM操作
  18. JavaScript画漂亮的心形图案
  19. 程序员如何保持学习成长?
  20. Linux系统中svn服务器设置开机启动

热门文章

  1. matlab 高级函数
  2. 块级,行内(内联)对比笔记
  3. html元素两种分类。替换元素和不可替换元素;块级元素和行内元素
  4. realloc() 用法详解
  5. STM32L之可编程电压检测(PVD)
  6. 温度记录仪开发_TinkerNode NBIoT物联网开发板
  7. (0)PCIE接口目录(学无止境)
  8. (213)initial是否可综合?
  9. (20)VHDL移位寄存器
  10. (34)System Verilog类的多对象详解