嵌入式(九)DMA | 直接访问内存 特点 使用流程

2024-01-09 22:34:06

1 直接内存访问概述

是一种 不经过CPU而直接从内存存取数据的数据交换模式。在 DMA模式下,CPU只须向DMA控制器下达指令,让DMA 控制器来处理数据的传送,数据传送完毕再把信息反馈给 CPU

优点

减轻CPU资源占有率,同时保证在低功耗模式下的CPU与外设的传送单元数据,进而降低了整个系统的功耗

2 CC2530的DMA特点

1 多个独立的 DMA 通道

? 5个通道编号从0到4,每个通道可以实现DMA内存空间内的数据搬移

2 多个可以配置的 DMA 通道优先级 3个优先级

? 00:低级,CPU优先
? 01:保证级,DMA至少在每秒一次的尝试中优先
? 10:高级,DMA优先

3 32 个可以配置的传送触发事件

? 就是在这些事件发生的时候,进行DMA传输

? 例如 UART 传输、定时器溢出等等

? DMA 通道要使用的触发事件由 DMA 通道配置设置,因此直到配置被读取之后,才能知道。

? 为了通过 DMA 触发事件开始 DMA 传送,用户软 件也可以设置对应的 DMAREQ 位,强制使一个 DMA 传送开始。

4 源地址和目标地址的独立控制

5 多种传送模式——单独传送、数据块传送和重复传送模式

6 支持传输数据的长度域,设置可变传输长度

7 既可以工作在字模式,又可以工作在字节模式

3 使用流程

3.1 配置DMA通道

3.1.1 DMA 配置数据结构(配置参数)

就是DMA的一些参数设置

五个DMA通道都包括如下的参数设置

1 源地址:DMA通道要读的数据的首地址。

2 目标地址:DMA通道从源地址读出的要写数据的首地址。用户必须确认该目标地址可写。

3 传送长度:很好理解,长度可以在配置中定义,或可以如下所述定义为VLEN可变长度设置。

4 可变长度 ( VLEN) 设置: DMA通道可以利用源数据中的第一 个字节或字作为传送长度进行可变长度传输。使用可变长度传输 时,要给出关于如何计算要传输的字节数的各种选项。

5 优先级别: DMA通道的DMA传送的优先级别与CPU、其它DMA 通道和访问端口相关

3.1.2 DMA 寄存器配置

主要进行中断配置,传输完成等引发中断

3.2 进入工作状态

DMA通道通过将DMA通道的工作状态寄存器DMAARM中指定位置1

一个通道准备工作状态(即获得前面讲到的配置数据)的时间需要 9 个系统 时钟,因此如果相应的 DMAARM 位设置,触发在需要配置通道的时 间内出现,期望的触发将丢失。

如果多于一个 DMA 通道同时进入工作状态,所有通道配置的的时间 将长一些(按顺序读取内存) 。如果所有 5 个通道都进入工作状态 ,需要 45 个系统时钟,通道 1 首先准备好,然后是通道 2,最后是 通道 0(所有都在最后 8 个系统时钟内) 。

3.3 等待触发事件发生

一旦 DMA 通道进入工作状态,当配置的 DMA 触发事件发生时,传送就开始了

文章来源:https://blog.csdn.net/Q52099999/article/details/135490122
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。