DMA简介
随着汽车电子系统和工业自动化的需求不断增长,DMA(Direct Memory Access,直接内存访问)技术在提高数据传输效率方面扮演着重要角色。在本篇文章中,我们将探讨RH850微控制器如何高效实现DMA传输,以减轻CPU负担并提升系统整体性能。
什么是DMA(Direct Memory Access)?
DMA(Direct Memory Access,直接内存访问)是一种可以在不占用CPU资源的情况下,在内存与外设或内存之间进行数据传输的技术。DMA控制器通过直接控制系统总线,将数据从一个位置快速传输到另一个位置,使得CPU可以专注于其他任务。这种机制特别适合数据密集型的应用场景,如ADC数据采集、SPI大批量数据转移等。
在DMA传输中,DMA控制器充当了传输数据的管理者。它从CPU接收到传输请求后,通过设定的数据块大小、传输方向和目标地址等参数,完成数据的搬运工作。
对于RH850单片机来说,DMA的触发模式有以下几种:
-
Single Transfer:当接收到DMA传输请求时,仅执行一个DMA传输周期。该模式适用于传输较少数据的场景,可用于精细控制数据的流动,以避免不必要的资源占用。
-
Block Transfer 1:当接收到DMA传输请求时,执行多个DMA传输周期,其数量由传输计数寄存器中设定的值决定。此模式适用于较大数据块的传输,减少了请求频率,提高了数据传输效率。
-
Block Transfer 2:当接收到DMA传输请求时,根据地址重载计数器中的值执行指定数量的DMA传输周期。如果地址重载计数器的值大于传输计数寄存器中的值,则按照传输计数寄存器中的值执行传输。这种模式适用于需要动态调整数据传输长度的应用场景,可根据需求灵活控制传输数量。
地址空间
RH850 对于地址空间的划分有很明确的说明,本地RAM可通过地址空间中的以下两个地址区域进行访问:
- CPU1区域:CPU和DMA可访问的地址区域。
- 自区域:镜像地址区域,仅供CPU访问,用于引用CPU的自身资源。
地址可访问性
使用DMA前需要特别注意,需要使用DMA操作的地址段,DMA是否允许访问!
使用RH850-F1KMS1调用DMA进行数据转移
本章节我们将会使用RH850-F1KMS1调用DMA进行数据转移。
本次实验的平台是 霆宝科技 开发的RH850F1KM 评估板,TPD-R7F7016843AFP_v1.0.0。
功能设计
-
开发板上电后,通过串口打印“Running…”;
-
定义两个数组,
src_arr
和dest_arr
,使用DMA搬运src_arr
的内容到des_arr
,完成后产生中断; -
产生DMA完成中断后,校验两个数组的内容是否一致,如是则串口打印“Success!”。
硬件连接
本次实验,会使用到UART0
,按照原理图连接好跳线、仿真器、调试工具。
软件设计
本次实验的开发环境为CS+ for CC V8.11
,可以拷贝一份我们提供的空白工程,然后使用Smart Configurator
进行配置;
Smart Configurator配置
CS+配置(重点)
对于默认的RAM地址段分配,data.R
的基地址是0xFEDE8000
,查阅地址可访问性表格可知,DMA并不能访问这个段。我们需要将这个地址改成0xFEBE8000
:
这样默认的全局变量,也可以被DMA访问。在实际应用中,需要根据自己的应用去调整段的分配。
编写应用代码
生成代码之后,可以去查阅DMA的初始化代码部分:
需要注意这三条语句,我们接下来需要复制这三条语句到我们的代码中,用于指定 DMA传输的源地址、目的地址、传输次数。
- DSA:起始地址
- DDA:目的地址
- DTC:DMA传输次数
定义需要使用的数组、标志位,编写代码:
编写中断服务函数:
调试
将调试工具连接电脑和开发板,启动设备,可以通过调试窗口看到,数据传输正确:
串口打印正确,至此实验完成。
联系我们
如您需要更多相关资料,请联系霆宝销售&FAE进行获取,邮件至sales@teampo.com,或致电0755-83187999。