打印
[其它应用]

中颖DMA 介绍以及参数配置注意事项

[复制链接]
1551|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1. 概述
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须 CPU
干预,数据可以通过 DMA 快速地移动,这就节省了 CPU 的资源来做其它操作。DMA 控制器有 8 个通道,每
个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调 CPU 与 DMA 请求的
优先权。
2. DMA 与 CPU 关系
DMA 控制器能够独立操作数据收发,不需要 CPU 参与,但由于 DMA 也要占用系统总线,和 CPU 会存
在冲突,因此 DMA 和 CPU 一般是交替占用总线控制权。通过 BURSTIDLE 参数可调节 DMA 占用总线的强
度,数值越大强度越低,由于 BURSTIDLE 最小是 1,DMA 占用总线强度最高也就是和 CPU 以 1:1 方式交替
占用。但 DMA 是以 BURST 方式占用总线,如果 BURSTLEN 设置过大,则单次传输将占用总线时间较长,
某些情况下可能会影响 CPU 效率。
一般而言,DMA 发生频率低于 10%,可以小幅考虑对 CPU 影响,如低于 1%则可以忽略对 CPU 影响。
比如系统主频 120MHz,几个外设以 DMA 方式驱动, UART 以 115.2KBps 波特率运行,可以不考虑对
CPU 效率的影响。而 ADC 以 2MSPS 采样率运行,一次传输 8 个通道数据,则需要注意对 CPU 效率影响。
3. DMA 基本参数配置
DMA 基本参数包括传输数据量 NPKT 和自动重载 RELOAD、源和目标地址配置、数据位宽 SIZE、指针修改方式 SPTYP/DPTYP、触发方式 ONE-SHOT/TO-END、突发长度 BURSTLEN、释放长度 BURSTIDLE。
【注意】NPKT 是按照 n-1 方式进行配置的,如要进行 100 次传输,配置 NPKT=99。 另外,NPKT=0是一种特殊情况,在 DMA enable=0 时没有意义,在 enable=1 时表示传输 1 次。
【注意】DMA 传输数据量有 3 层含义:NPKT 定义传输的 burst 数量,BURSTLEN 定义 burst 长度(DMA 数据个数),SIZE 定义 DMA 数据位宽,分 1、2、4 字节。
【注意】RELOAD 会重新置位 DMA enable,并把 CPKT 计数器清零。但源和目标指针还是按照原来的方式进行修改,不会被清零。同时,如果是软件触发 DMA,RELOAD 并不会自动开启触发。
【注意】RELOAD 在硬件触发的传输中,可以做到不需 CPU 介入而无限传输, 而在软件触发的传输中,因为 RELOAD 重载计数器以后仍然需要软件介入开启软件触发控制位。
【注意】DMA 源和目标并没有限制,即可以配置到 flash 存储区、RAM 存储区、APB1 外设区、APB2外设区、AHB 外设区。支持存储区与外设区的相互传输。
【注意】如果 DMA 目标传输区是 flash 区域,DMA 控制器会自动屏蔽对 flash 的写入操作,flash 控制器不会送出 write error 信息,DMA 控制器也不会送出 DMA error 信息,DMA 会完成全部数据传输,但没有数据被写入 flash。
【注意】DMA 支持外设到外设的直接传输,此时一般以 DMA source 设备作为触发源,而将 DMA destination 设备作为一个普通外设地址,比如本章例程 2 中 UART1 的收发过程。 SH32F9B00 应用指南
【注意】如果 DMA 目标地址被配置到 GPIO 地址,则可以把 SRAM 中存储的数据通过 DMA 方式送到I/O 口上,可以产生一些特殊的波形而不需要 CPU 介入。
【注意】数据位宽有 1byte、2byte、4byte 三种,源和目标位宽不同时会有截取和补零操作,具体参考数据手册表 16-2。
【注意】指针修改方式有累加、累减、固定和循环四种,其中循环方式需配合突发传输一起考量,其循环周期等于突发长度。在无限传输中,循环指针方式特别有意义,可以避免 CPU 介入对指针的修改。
【注意】触发方式也是很直观的,one-shot 是每触发一次传输一个 burst,to-end 是每触发一次把所有burst 全部传输完成。
【注意】突发长度是当前 burst 包含 DMA 数据个数,burst 是 DMA 传输的基本单位,每一个 burst 传输都是无法被 CPU 中断的。突发长度越大,DMA 传输效率越高,但对 CPU 的中断时间越长。
【注意】释放长度是 DMA 释放总线给 CPU 所占时间,BURSTIDLE 最小值为 1 个周期,即 DMA 执行完成后最少释放 1 个周期给 CPU 执行,释放总线数值越大 CPU 获得执行占比越高。
【注意】burstidle 时间也包含在 burst 传输时间内,因此 DMA 仍然处于 busy 状态,但实际上此时 DMA控制器已经释放总线,允许 CPU 执行。由于 DMA busy 置位,DMA 无法切换到下一个 DMA 通道执行。

使用特权

评论回复
沙发
AdaMaYun|  楼主 | 2023-3-23 08:34 | 只看该作者
4. DMA 通道配置和请求映像表
DMA 的 8 个通道完全独立,相互之间有优先级控制,有硬件优先级和软件优先级,先软件再硬件。 每次burst 传输后都会进行优先级轮换,两个触发源都在排队时刚才已经传输过的通道优先级低于未传输过的通道。优先级轮换的目的是避免高优先级的通道时钟抢占低优先级通道。引入优先级轮换后高低优先级的差异只在burst 层面的先后传输,而整体 DMA 总数传输的机会是均等的。
【注意】优先级轮换只在同优先级中间进行,不同优先级仍然遵循高优先于低的原则。举例来说,通道 1,3,5 为高优先级,2,4,6 为低优先级,都为 one-shot 触发。
(1)1,3 触发同时发生,由于是同优先级,先传输通道 1 的 burst,再传输 3 的 burst;
(2)之后 3,5 同时发生,由于 3 已经传输过一次,因此先传输通道 5 的 burst,再传输 3 的 burst;
(3)之后 1,3,5 同时发生,按照轮换,有 1>>5>>3;
(4)之后 1,2,3,4 同时发生,则 1>>3>>2>>4,即低优先级通道 4 最后执行。假如通道 4 开始前,1,2,6 又发生了,那么通道 1 高优先级会插入通道 4 之前,而通道 2、4、6 则按照硬件优先级和优先级轮换处理,有 4>>6>>2, 完整的传输顺序 1>>3>>2>>1>>4>>6>>2。DMA 请求映像参考表 16-4,要开启 DMA 触发,除了在 DMA 模块内配置 STRMSEL 选定触发源外,还需要在对应模块内配置开启 DMA 触发功能,比如 UART 模块是 DMAT&DMAR 控制位,ADC 模块是 ADDE控制位。
5. DMA 中断
DMA 的 4 种事件都可引起中断,8 个 DMA 通道有 3 个中断入口,分别为 DMA_CH0、DMA_CH1、DMA_CH2_7。
4 种事件中 DMA 传输完成和 DMA 传输过半常用于 DMA 流程控制中,做一些类似“乒乓”操作的加载,以保持数据流的连续性,如图所示:


Buffer 1Buffer 2 DMA HT Interrupt Pointer 1Pointer 2 DMA TC Interrupt Source Destination DMA CPU process processDMA 把外部数据传输到 SRAM 中,后者分成 2 个 buffer, CPU 按照“乒乓”操作从 buffer 中取数据,当HT 中断发生时,CPU 从 Buffer 1 中取数据,当 TC 中断发生时,CPU 从 Buffer 2 中取数据,这在一些高速连续数据流操作中是很有意义的。




使用特权

评论回复
板凳
OKAKAKO| | 2023-11-12 19:18 | 只看该作者
DMA注意事项很重要

使用特权

评论回复
地板
中国龙芯CDX| | 2023-11-12 19:35 | 只看该作者
DMA 控制器能够独立操作数据收发,不需要 CPU 参与

使用特权

评论回复
5
szt1993| | 2023-11-12 20:20 | 只看该作者
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

172

主题

1194

帖子

3

粉丝