0.前言

本文主要介绍DMA相关内容

1.简介

DMA模块包含:

1.一个DMA引擎

源和目的地址的计算

数据搬移

2.本地存储的传输控制描述TCD,对于16个传输通道中的每一个各对应一个TCD

1.1 总体框图

1.2 框图组件

1.DMA模块分为两个部分:DMA引擎和TCD

2.DMA引擎进一步分为4个子模块

3.TCD进一步分为两个部分

1.3 特性

  • 所有数据搬移都是基于两个地址
  • 16通道实现
  • TCD组织为嵌套的传输
  • 三个方法可以激活通道

(1)明确的软件启动

(2)为了连续传输,由通道到通道的链接机制启动

(3)外设硬件请求

  • 固定优先级和通道轮流
  • 通道传输完毕可以产生中断
  • 支持scatter/gatter机制
  • 支持复杂数据结构
  • 支持由软件取消传输

2 操作模式

3 内存映射和寄存器定义

  1. DMA编程模型主要包含两个区域:

(1)相关寄存器

(2)位于内存的TCD,每通道包含32字节,按通道号依次排放,每个TCD定义包含11个寄存器

每个通道需要32字节的TCD定义数据搬移操作。TCD被存放在本地内存,按照channel0  channel1 channel2...的顺序。

每个TCD都包含11个寄存器,寄存器大小是16bit或32bit

要在激活通道之前初始化TCD。

下面是TCD的结构:

4 功能描述

4.1 eDMA基本数据流

数据流被分为三个阶段:

4.2 Fault报告和处理

TODO

4.3 通道抢占

TODO

4.4 性能

TODO

5 初始化/应用信息

5.1 eDMA初始化

5.1.1 eDMA初始化

1.设置CR寄存器

2.设置DCHPRIn寄存器设置通道优先级

3.通过设置EEI 寄存器来使能错误中断

4.为每个通道写32字节TCD

5.设置ERQ寄存器来使能硬件请求

6.通过如下来发送请求服务

• Software: setting the TCDn_CSR[START]
• Hardware: slave device asserting its eDMA peripheral request signal

如下图所示,在没有CPU的干预下,一个DMA请求如何启动一个minor-loop传输。DMA仲裁可发生在每个minor loop后。

在一个major loop中minor loop的数目通过在BITER中指定

5.2 编程错误

TODO

5.3 仲裁模式

TODO

5.4 执行DMA传输的例子

5.4.1 单次请求

1.为了一次请求完成n字节的传输,通常设置major loop为1(TCDn_CITER = TCDn_BITER = 1)

2.通道服务请求得到回应且通道被选择执行后开启数据传输

3.传输完毕后TCDn_CSR[DONE] 备置位,如果中断使能的话会产生中断

4.举例:下面的TCD被配置成16字节数据用一次major迭代传输

(1)下面为TCD设置

(2)如上设置将产生如下的事件顺序

-用户写入TCDn_CSR[START] 请求DMA通道服务

-通道被仲裁选定开始服务

-TCDn_CSR[DONE] = 0, TCDn_CSR[START] = 0,TCDn_CSR[ACTIVE] = 1

-eDMA引擎从内存读取TCD写入到内部寄存器文件

-源到目的转换执行

-DMA引擎写TCDn_SADDR = 0x1000, TCDn_DADDR = 0x2000,TCDn_CITER = 1 (TCDn_BITER).

-DMA引擎写TCDn_CSR[ACTIVE] = 0, TCDn_CSR[DONE] = 1,INT[n] = 1

-通道退出,DMA进入idle或服务其它通道

5.4.2 多次请求

举例:与单次请求不同之处是传输32字节,通过两次major 迭代传输

(1)设置,与单次请求相比,则需要更改的部分如下,其它与单次请求相同:

(2)如上设置将产生如下的事件顺序

参考spec

5.4.3 Using the modulo feature

TODO

5.5 监控传输描述符状态

TODO

5.6 通道链接

TODO

5.7 动态编程

TODO

k64 datasheet学习笔记22---Direct Memory Access Controller (eDMA)的更多相关文章

  1. k64 datasheet学习笔记1---概述

    1.前言 k64 datasheet描述了Freescale MCU的特性.架构和编程模型,主要是面向使用MCU的系统架构和软件应用开发人员. 2.模块划分 datasheet主要按功能对模块进行划分 ...

  2. k64 datasheet学习笔记45---10/100-Mbps Ethernet MAC(ENET)之功能描述

    1.前言 本文是对K64 datasheet 之ENET部分的功能描述,将对每个部分进行详细说明 2.Ethernet MAC frame formats MAC帧组成格式 (1)7字节前导码:如按最 ...

  3. k64 datasheet学习笔记4---Memory Map

    1.前言 本文主要介绍K64地址空间的映射 2. System Memory Map 3. K64地址映射 4. Armv7m地址映射 4.1 Armv7M.System地址段(0XE0000000~ ...

  4. k64 datasheet学习笔记21--Direct Memory Access Multiplexer (DMAMUX)

    0.前言 本章主要介绍DMA MUX的相关内容 1.简介 1.1 概述 用来路由DMA源到16路DMA通道: 1.2 特性 1.52个外设slot和10个常开slot可以路由到16路DMA通道 2.1 ...

  5. k64 datasheet学习笔记45---10/100-Mbps Ethernet MAC(ENET)之概述

    1.前言 k64 ENET CORE 实现了10M/100Mbps的Ethernet MAC,与IEEE802.3-2002标准兼容. MAC层与全双工/半双工的10M/100Mbps以太网兼容: M ...

  6. k64 datasheet学习笔记52---Universal Asynchronous Receiver/Transmitter (UART)

    1.前言 UART实现与外设或CPU的通信 2. UART概述 2.1基本特性 (1)Full-duplex operation (2)Standard mark/space non-return-t ...

  7. k64 datasheet学习笔记4---Clock distribution

    1.前言 本文主要讲述K64时钟配置相关的内容. 2.clock overview 2.1 clock diagram 2.2 对clock diagram的信号说明 (1)MCG决定哪个clock ...

  8. k64 datasheet学习笔记3---Chip Configuration之Analog

    1.前言 本文主要讲述K64芯片配置,关于模拟部分的内容,主要包括:ADC, CMP, DAC, VREF 2.16bit SAR ADC 从上图可以看出ADC主要挂在外设总线0上,由于ADC的输入引 ...

  9. k64 datasheet学习笔记25--Multipurpose Clock Generator (MCG)

    0.前言 MCG模块为MCU提供了几种可选时钟源.模块包含一个FLL和一个PLL.FLL使用内部或外部参考时钟是可控的,PLL受外部参考时钟控制 模块可以选择FLL或PLL输出时钟,或内/外部参考时钟 ...

随机推荐

  1. 如何在Jupyter里以不同的运行模式使用Pyspark

    假设你的环境已经安装好了以下东西,如何详细的安装它们不在本文的讨论范围之内 具体的可疑参考三分钟搞定jupyter和pyspark整合 anaconda2 findspark pyspark 这里多说 ...

  2. 排序学习实践---ranknet方法

    要: 1 背景      随着移动互联网的崛起,越来越多的用户开始习惯于从手机完成吃.喝.玩.乐.衣.食.住.行等各个方面的需求.打开手机,点开手淘.美团等APP,商品玲玲满目,而让用户将所有商品一页 ...

  3. iOS 钥匙串存储用户数据

    参考: http://www.jianshu.com/p/f6d40065bb6c #import <Foundation/Foundation.h> #import <Securi ...

  4. VS2010创建MVC4项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral,

    在安装VS2010时没有安装MVC4,于是后面自己下载安装了(居然还要安装VS2010 SP1补丁包).装完后新建MVC项目时却提示: 错误: 此模板尝试加载组件程序集 “NuGet.VisualSt ...

  5. 【学习总结】GirlsInAI ML-diary day-12-for循环

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day12 认识for循环执行 ps: range()函数 python range() 函数可创建一个整数列表,一般用在 ...

  6. php_network_getaddresses: getaddrinfo failed 原因

    一般在调用外部服务请求时候,有时由于配置问题无法访问,phph会报一个php_network_getaddresses: getaddrinfo failed: Name or servicenot ...

  7. Unit 6.标准文档流,浮动,清除浮动以及margin塌陷问题

    一. 什么是标准文档流 文本流其实就是文档的读取和输出顺序,也就是我们通常看到的由左到右.由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而float和position两个 ...

  8. Python——匿名函数

    一.定义: 是指一类无需定义标识符(函数名)的函数或子程序 二.语法格式: lambda 参数:表达式 三.注意事项: lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值 ...

  9. Quartus13.1全编译出现引脚错误(神级bug)

    BUG现象:分配完管脚后全编译出现如下错误. Error (171172):Detected confilicting assignments for the following nodes.Erro ...

  10. 帝国cms 不能正常显示最新文章

    后台能正常刷新,但前台就是不能正常显示, 把网站从c盘换到d盘,好了,原来是权限的问题