RH850-F1KMS1 DMA数据转移

DMA简介

随着汽车电子系统和工业自动化的需求不断增长,DMA(Direct Memory Access,直接内存访问)技术在提高数据传输效率方面扮演着重要角色。在本篇文章中,我们将探讨RH850微控制器如何高效实现DMA传输,以减轻CPU负担并提升系统整体性能。

什么是DMA(Direct Memory Access)?

DMA(Direct Memory Access,直接内存访问)是一种可以在不占用CPU资源的情况下,在内存与外设或内存之间进行数据传输的技术。DMA控制器通过直接控制系统总线,将数据从一个位置快速传输到另一个位置,使得CPU可以专注于其他任务。这种机制特别适合数据密集型的应用场景,如ADC数据采集、SPI大批量数据转移等。

image-20241112103125300

在DMA传输中,DMA控制器充当了传输数据的管理者。它从CPU接收到传输请求后,通过设定的数据块大小、传输方向和目标地址等参数,完成数据的搬运工作。

对于RH850单片机来说,DMA的触发模式有以下几种:

  • Single Transfer:当接收到DMA传输请求时,仅执行一个DMA传输周期。该模式适用于传输较少数据的场景,可用于精细控制数据的流动,以避免不必要的资源占用。

  • Block Transfer 1:当接收到DMA传输请求时,执行多个DMA传输周期,其数量由传输计数寄存器中设定的值决定。此模式适用于较大数据块的传输,减少了请求频率,提高了数据传输效率。

  • Block Transfer 2:当接收到DMA传输请求时,根据地址重载计数器中的值执行指定数量的DMA传输周期。如果地址重载计数器的值大于传输计数寄存器中的值,则按照传输计数寄存器中的值执行传输。这种模式适用于需要动态调整数据传输长度的应用场景,可根据需求灵活控制传输数量。

image-20241112103532618

地址空间

RH850 对于地址空间的划分有很明确的说明,本地RAM可通过地址空间中的以下两个地址区域进行访问:

  • CPU1区域:CPU和DMA可访问的地址区域。
  • 自区域:镜像地址区域,仅供CPU访问,用于引用CPU的自身资源。

地址可访问性

image-20241112104421289

使用DMA前需要特别注意,需要使用DMA操作的地址段,DMA是否允许访问!

使用RH850-F1KMS1调用DMA进行数据转移

本章节我们将会使用RH850-F1KMS1调用DMA进行数据转移。

请添加图片描述

本次实验的平台是 霆宝科技 开发的RH850F1KM 评估板,TPD-R7F7016843AFP_v1.0.0。

功能设计

  1. 开发板上电后,通过串口打印“Running…”;

  2. 定义两个数组,src_arrdest_arr,使用DMA搬运src_arr的内容到des_arr,完成后产生中断;

  3. 产生DMA完成中断后,校验两个数组的内容是否一致,如是则串口打印“Success!”。

硬件连接

本次实验,会使用到UART0,按照原理图连接好跳线、仿真器、调试工具。

请添加图片描述

软件设计

本次实验的开发环境为CS+ for CC V8.11,可以拷贝一份我们提供的空白工程,然后使用Smart Configurator进行配置;

Smart Configurator配置

image-20241112105414010

CS+配置(重点)

对于默认的RAM地址段分配,data.R的基地址是0xFEDE8000,查阅地址可访问性表格可知,DMA并不能访问这个段。我们需要将这个地址改成0xFEBE8000

image-20241112105835544

这样默认的全局变量,也可以被DMA访问。在实际应用中,需要根据自己的应用去调整段的分配。

编写应用代码

生成代码之后,可以去查阅DMA的初始化代码部分:

image-20241112110524073

需要注意这三条语句,我们接下来需要复制这三条语句到我们的代码中,用于指定 DMA传输的源地址、目的地址、传输次数。

  • DSA:起始地址
  • DDA:目的地址
  • DTC:DMA传输次数

image-20241112111921124

定义需要使用的数组、标志位,编写代码:

image-20241112153640460

编写中断服务函数:

image-20241112112329079

调试

将调试工具连接电脑和开发板,启动设备,可以通过调试窗口看到,数据传输正确:

image-20241112113311057

image-20241112113748863

串口打印正确,至此实验完成。

联系我们

如您需要更多相关资料,请联系霆宝销售&FAE进行获取,邮件至sales@teampo.com,或致电0755-83187999。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16983.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MOSFET电路栅源极GS之间并联电容后,MOS炸管原因分析

1、前言 在介绍,在进行MOSFET相关的电路设计时,可能会遇到MOSFET误导通的问题,为了解决此问题,我们提出了两种方法,一种是增大MOSFET栅极串联电阻的阻值,另外一种是在MOSFET栅-源极之间并联一个电容&#…

Keil uvision的edition

0 Preface/Foreword 0.1 参考网址 https://zhuanlan.zhihu.com/p/456069876 1 Keil版本介绍 版本介绍: Keil Lite(免费版):最多32KB代码,无法使用中间件Keil Essential(基础版):没…

I/O文件:文件的关闭

int fclose(FILE *stream); 成功关闭返回1,关闭失败返回EOF即-1,并设置errno。 流关闭时自动刷新缓冲中的数据并释放缓冲区 当一个程序正常终止时,所有打开的流都会被关闭 流一旦关闭就不能执行任何操作。 运行结果: 若未成功打…

联邦学习的未来:深入剖析FedAvg算法与数据不均衡的解决之道

引言 随着数据隐私和数据安全法规的不断加强,传统的集中式机器学习方法受到越来越多的限制。为了在分布式数据场景中高效训练模型,同时保护用户数据隐私,联邦学习(Federated Learning, FL)应运而生。它允许多个参与方…

深入理解Flutter生命周期函数之StatefulWidget(一)

目录 前言 1.为什么需要生命周期函数 2.开发过程中常用的生命周期函数 1.initState() 2.didChangeDependencies() 3.build() 4.didUpdateWidget() 5.setState() 6.deactivate() 7.dispose() 3.Flutter生命周期总结 1.调用顺序 2.函数调用时机以及主要作用 4.生…

LoFTR: Detector-Free Local Feature Matching with Transformers

LoFTR: Detector-Free Local Feature Matching with Transformers 整体概括 Loftr特征点匹配算法与传统的特征点匹配算法的优势: 不需要先得到特征点,这也就解决了第一个问题End2End的方式,用起来比较方便,效果也更好 整体流程的…

免押租赁系统的优势与应用前景分析

内容概要 免押租赁系统是一种新兴的租赁形式,它利用了信用大数据与区块链技术的优势,帮助用户摆脱了传统租赁中常见的押金烦恼。通过这种方式,用户不仅可以体验到更低的租用门槛,还能享受到更顺畅的交易过程。用户只需提供基本的…

「Qt Widget中文示例指南」如何创建一个窗口标志?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 窗口标志要么是类型…

(附项目源码)Java开发语言,211 springboot 在线问诊系统的设计与实现,计算机毕设程序开发+文案(LW+PPT)

摘 要 针对医院门诊等问题,对在线问诊进行研究分析,然后开发设计出在线问诊系统以解决问题。在线问诊系统主要功能模块包括首页、轮播图管理、公告信息管理、资源管理、系统用户管理(管理员、患者用户、医生用户)、模块管理&#…

Vulnhub靶场 Billu_b0x 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件包含2. SQL注入3. 文件上传4. 反弹shell5. 提权(思路1:ssh)6. 提权(思路2:内核)7. 补充 0x04 总结 0x00 准备 下载链接&#…

Linux应用层学习——Day2(文件IO)

fopen #include <stdio.h>int main(int argc,char const *argv[]) {// FILE *fopen (const char *__restrict __filename&#xff1a;字符串要打开的文件名称,// const char *__restrict __modes&#xff1a;打开的模式// 1) r&#xff1a;只读模式&#xff0c;如果…

Java并发篇--ReentrantLock原理

ReentrantLock原理 非公平锁实现原理 加锁解锁流程 先从构造器开始看,默认为非公平锁 public ReentrantLock() {sync new NonfairSync(); }NonfairSync 继承自 AQS 没有竞争时 第一个竞争出现时 Thread-1执行了 1.CAS尝试将state由0改为1,结果失败 2.进入tryAcquire逻辑…

分析http话术异常挂断原因

用户反馈在与机器人通话时&#xff0c;自己明明有说话&#xff0c;但是通话还是被挂断了&#xff0c;想知道原因。 分析日志 我们根据用户提供的freeswitch日志分析&#xff1a;发现是因为超时导致话术执行hangup动作&#xff0c;结束了通话。 从这一行向上分析日志&#xff…

【Pikachu】PHP反序列化RCE实战

痛是你活着的证明 1.PHP反序列化概述 在理解 PHP 中 serialize() 和 unserialize() 这两个函数的工作原理之前&#xff0c;我们需要先了解它们各自的功能及其潜在的安全隐患。接下来&#xff0c;我会对相关概念做更详细的扩展解释。 1. 序列化 serialize() 序列化&#xff…

零基础Java第十八期:图书管理系统

目录 一、package book 1.1. Book 1.2. BookList 二、package user 2.1. User 2.2. NormalUser与AdminiUser 三、Main 四、NormalUser与AdminiUser的菜单界面 五、package operation 5.1. 设计管理员菜单 六、业务逻辑 七、完整代码 今天博主来带大家实现一个…

【每日题解】3239. 最少翻转次数使二进制矩阵回文 I

给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的&#xff0c;那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &#xff0c;也就是将格子里的值从 0 变成 1 &#xff0c;或者从 1 变成 0 。 请你返回 …

vue面试题9|[2024-11-15]

问题1&#xff1a;scoped原理 1.作用&#xff1a;让样式在本组件中生效&#xff0c;不影响其他组件 2.原理&#xff1a;给节点新增自定义属性&#xff0c;然后css根据属性选择器添加样式。 问题2&#xff1a;让css只在当前组件生效 <style scoped> 问题3&#xff1a;scss…

2024新版pycharm如何切换anaconda虚拟环境

2024新版pycharm如何切换anaconda虚拟环境 不得不说这界面改的真不错&#xff0c;看着很舒服。 回归正题&#xff0c; 导入项目后点击文件>设置&#xff0c;找到解释器。 添加解释器>添加本地解释器 以前是选择conda环境&#xff0c;现在直接就是Virtualenv 环境 看…

Codeforces Round 987 (Div. 2)(前四道)

A. Penchick and Modern Monument 翻译&#xff1a; 在繁华大都市马尼拉的摩天大楼中&#xff0c;菲律宾最新的 Noiph 购物中心刚刚竣工&#xff01;建筑管理方 Penchick 订购了一座由 n 根支柱组成的先进纪念碑。 纪念碑支柱的高度可以用一个由 n 个正整数组成的数组 h 来表示…

探索AI驱动的企业知识库:提升管理效率的新利器

对于企业而言&#xff0c;如何高效管理知识、提升团队协作、加速决策过程&#xff0c;已成为生存与发展的关键。而人工智能(AI)的迅速发展为解决这些问题提供了新的思路和工具。越来越多的企业开始构建AI驱动的知识库&#xff0c;以实现信息的智能管理与利用。本文将深入探讨AI…