DMA Controller (DMAC)
概述:
dma从源读然后写到目的地址,通过一个或者多个AMBA buses.
每个源目的对需要一个通道,最简单配置的dmac有一个主控接口和一个通道
每次dmac传输会有两次AMBA传输发生,
dmac通过apb接口配置

3 AHB-Lite 主接口
支持Peripheral-to-Memory, Memory-to-Peripheral, 
Peripheralto-Peripheral and Memory-to-Memory
从源到目的可独立运行在8 16 32 bit模式
硬件软件触发
多缓冲顺序操作支持
不同源目的支持自增自减不变寻址模式
仲裁模式Modified Round Robin and Fixed Priority
可配置长度 AMBA AHB Burst
用apb接口配置dmac
8通道 dmac0和dmac1

16请求线 dmac0

22 请求线dmac1

内置fifo

通道锁和总线锁

寄存器写保护

dmac处理外总线和内存的传输,

需要配置 SIF and/or DIF bitfields in the DMAC_CTRLBx和DSCR_IF,需要与MATRIX配置相适应

dmac0主要连接外总线和内存 接受apb0的触发
HSMCI0 Receive/transmit 0
SPI0 Transmit 1
SPI0 Receive 2
USART0 Transmit 3
USART0 Receive 4
USART1 Transmit 5
USART1 Receive 6
TWI0 Transmit 7
TWI0 Receive 8
TWI1 Transmit 9
TWI1 Receive 10
UART0 Transmit 11
UART0 Receive 12
SSC0 Transmit 13
SSC0 Receive 14
SMD Transmit 15
SMD Receive 16

dmac1主要连接外总线和内存 接受apb1的触发
HSMCI1 Receive/transmit 0
HSMCI2 Receive/transmit 1
ADC Receive 2
SSC1 Transmit 3
SSC1 Receive 4
UART1 Transmit 5
UART1 Receive 6
USART2 Transmit 7
USART2 Receive 8
USART3 Transmit 9
USART3 Receive 10
TWI2 Transmit 11
TWI2 Receive 12
DBGU Transmit 13
DBGU Receive 14
SPI1 Transmit 15
SPI1 Receive 16
SHA Transmit 17
AES Transmit 18
AES Receive 19
TDES Transmit 20
TDES Receive 21

dmac中断线连接中断控制器,需要配置

外部源,dmac读的挂在amba上面的设备,dmac会把读的数据放在fifo中,发送给目的

外部目的,把fifo中数据发送给的对象

内存,不需要握手的时刻就绪的源或者目的

可编程仲裁策略,Modified Round Robin and Fixed Priority可以在ARB_CFG bit in the Global Configuration Register (DMAC_GCFG)配置

固定优先级与通道号相对,数字越大优先越高

通道由一对源和目的组成,如果源或目的不是内存,则需要握手,握手接口可以编辑

dmac是ahb总线上的控制端,可以读写别的从设备

握手,用来请求,回答,控制dmac的传输,分为硬件握手,软件握手,可控制单一或者分块传输

硬件握手用硬件信号

软件握手用寄存器

内存传输,buffer直接转成一系列的AMBA bursts and AMBA single transfers.

非内存传输,buffer先转成DMAC transactions (single and chunks)然后是一系列的AMBA bursts and AMBA single transfers.

两种transaction  非内存

single transfer 长度为1
chunk transfer 长度可编辑,增量式传输,但不超过16beats

damc传输,软件控制buffer的数量,一旦damc传输完成,通道会被硬件关闭且产生中断,然后可以再次被编辑启用。

Multi-buffer DMAC transfer: 内存
chaining (linked list pointers), 由descriptor pointer (DSCR)指向内存中的linked list item (LLI),LLI用来告诉buffer的地址和下一个DSCR在哪

auto-reloading of channel registers, 自动在每个buffer传完后充填原来值。

contiguous buffers.下一个buffer的地址

画中画模式,每传输一定量的数据后,地址会自动的加一个被编辑的增量

通道锁,在传输的时候锁住控制端

总线锁,保持一个通道的对amba总线的主要控制权

内存传输没有握手,一旦使能立马就会开始,如果从设备没有准备好,会插入等待状态,最好不要超过16个

如果有握手,从设备会通知dmac,所以不需要等待状态

软件握手用寄存器,硬件握手用特定的接口。

软需要damc时,会产生中断,在中断处理函数中写寄存器来握手,此时从设备是控制端

The SRC_H2SEL/DST_H2SEL bit in the Channel Configuration Register (DMAC_CFGx) 要清除

如果从设备不是控制端,Software Last Transfer Flag Register (DMAC_LAST)没用,且相关寄存器也被忽视

Software Chunk Transfer Request Register (DMAC_CREQ[2x])写1,使能源数据块传输请求

DMAC_CREQ[2x+1]写1,使能目的数据块请求 ,x为通道号码

Software Single Request Register (DMAC_SREQ[2x]))写1,使能源单独传输请求

DMAC_SREQ[2x+1]写1,使能目的单独传输请求x为通道号码

DMAC_SREQ[x] or DMAC_SREQ[2x+1]会被硬件清除,当完成传输

软件可以轮询这些寄存器,当寄存器对都为零,传输完成

然后是各种类型源和目的的组合配置方法

杂记:Atmel sama5d3 DMA Controller (DMAC)相关推荐

  1. Atmel SAMA5D3 U-Boot 启动流程简单分析

    处理器              ATSAMA5D3x 硬件平台          SAMA5D3x-EK u-boot 版本     u-boot-2012.10 先阅读链接脚本 arch/arm/ ...

  2. AT91SAM9X5EK移植linux4sam6.1包,buildroot制作ubifs挂载成功,执行/sbin/init时提示init (1): undefined instruction

    AT91Bootstrap 3.8.13 (Thu Oct 17 17:21:19 CST 2019) 1-Wire: Loading 1-Wire information - 1-Wire: ROM ...

  3. RK3228H开发之3328芯片手册简单分析

    一.引言 因为RK3328的芯片手册比较庞大,且为英文版,故今天来一起分析下 二.目录结构 目录(在此之详细分析常用模块) part 1 figure index :手册内所有的结构示意图 table ...

  4. [linux kernel]内核移植过程记录

    系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 - ...

  5. 【杂记随笔】专业名词

    作者 作者:卢冬冬 邮箱:ezrobot@163.com 平台 注意 内容 6LoWPAN IPv6 over Low power Wireless Personal Area Networks AC ...

  6. 续说零拷贝(Zero-Copy) - DMA技术

    如果想理解Kafaka为什么这么快,得先看DMA是什么. DMA: 无论 I/O 速度如何提升,比起 CPU,总还是太慢.SSD 硬盘的 IOPS 可以到 2 万.4 万,但是我们 CPU 的主频有 ...

  7. Linux下DMA添加两个channel,基于Linux嵌入式系统的ISA总线DMA的实现

    1.DMA概述本文引用地址:http://www.eepw.com.cn/article/151577.htm DMA是外设与主存之间的一种数据传输机制.一般来说,外设与主存之间存在两种数据传输方法: ...

  8. 48 | DMA:为什么 Kafka 这么快?

    48 | DMA:为什么 Kafka 这么快? 过去几年里,整个计算机产业界,都在尝试不停地提升 I/O 设备的速度.把 HDD 硬盘换成 SSD 硬盘,我们仍然觉得不够快:用 PCI Express ...

  9. 深入浅出计算机组成原理学习笔记:DMA:为什么Kafka这么快?(第48讲)

    一.引子 过去几年里,整个计算机产业届,都在尝试不停地提升I/O设备的速度.把HDD硬盘换成SSD硬盘,我们仍然觉得不够快:用PCI Express接口的SSD硬盘替代SATA接口的SSD硬盘, 我们 ...

  10. 【48】DMA:为什么Kafka这么快?

    [计算机组成原理]学习笔记--总目录 [48]DMA:为什么Kafka这么快? 引言 一.理解 DMA,一个协处理器 1.简介+应用场景 2.具体使用原理 二.为什么那么快?一起来看 Kafka 的实 ...

最新文章

  1. graphs菜单_图形用户界面菜单全面解析
  2. R语言ggplot2可视化密度图(density plot)、改变密度图下的填充色实战
  3. 怎样去判断一个网站是不是伪静态网站
  4. Struts2使用Interceptor实现权限控制的应用实例详解
  5. MKNetwork网络请求过程中onCompletion调用两次的问题
  6. 利用SAP 0day,四分钟内黑掉华尔街
  7. CoolFire系列讲座 第7讲
  8. GitHub:新浪微博爬虫,用Python采集新浪微博数据
  9. 一位硕士毕业生三个月求职经历与经验的结晶
  10. 书摘---创业36条军规7:业务的五个问题
  11. 【PHP编程】WebCat,手机搭建PHP运行环境及项目运行
  12. android webview 手机兼容问题
  13. 非官方新人参考之quake3入门碎解
  14. 学好MySQL增删查改,争取不做CURD程序员【上篇】
  15. HC32L136/HC32L176开发之硬件IIC驱动AT24C64
  16. nsis安装包(四)_软件环境
  17. Maven下的Mybatis基本配置和使用
  18. 2.1致远OA二次开发如何搭建服务器开发环境
  19. 玩玩阅读器:写在前面的话
  20. navicat持续试用

热门文章

  1. 基于FPGA的AD9854并行接口驱动(VerilogHDL语言)
  2. U3D DotH教程
  3. TSE2019-The Art, Science, and Engineering of Fuzzing: A Survey
  4. python数字及字母的分离_Python 分割文本使得 字母和数字 分开?
  5. VMware Horizon 8 2106 -- 用于管理虚拟桌面 (VDI)、应用和在线服务的领先平台
  6. “蔚来杯“2022牛客暑期多校训练营5:A Don‘t Starve
  7. c语言我喜欢你,【幻 仿】UC启动时的我喜欢你
  8. 装机不求人,10 分钟完成电脑配置挑选
  9. OpenGL学习例程精析(3d纹理)
  10. 数据库—Mysql相关