嵌入式(九)DMA | 直接访问内存 特点 使用流程
文章目录
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 触发事件发生时,传送就开始了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!