当前位置: 首页 > news >正文

十八、从0开始卷出一个新项目之瑞萨RZN2L使用ADC+DMA接收数据流

目录

一、概述

二、对比stm32 adc+dma“双buf模式”

三、瑞萨rzn2l dma寄存器模式(双配置模式)

四、例程源码

五、总结


一、概述

  • 嵌入式科普(34)通过对比看透DMA的本质
  • 如何高效的、无损的接收adc的连续数据流,分享RZN2L使用DMA连续接收ADC数据的例程源码

  • 对比stm32 dma所谓的“循环/双buf模式”,和TI dma所的的“pingpong模式”。rzn2l如何实现?优劣势又是什么?

二、对比stm32 adc+dma“双buf模式”

  • 网上非常多的文章介绍,其核心就是DMA的“循环/双buf模式”
    https://blog.csdn.net/sherlock_cp/article/details/128308375

    图片

图片

图片

三、瑞萨rzn2l dma寄存器模式(双配置模式)

  • 但是rzn2l dma没有“循环/双buf模式”

  • 如何按照“双buf模式”,去分析dma框图,很可能会造成思路混乱、逻辑不通。因为只有一张单方向传输的框图。

  • 个人总结rzn2l dma的“双buf模式”应该叫“双配置模式

    图片

四、例程源码

图片

__asm volatile ("cpsie i");// Must be before dma cfg!!!!!!!!!!!!g_adc103.p_api->open(g_adc103.p_ctrl, g_adc103.p_cfg);#if ENABLE_DMAg_transfer0.p_api->open(g_transfer0.p_ctrl, g_transfer0.p_cfg);g_transfer0_ctrl.p_cfg->p_info->p_src = (void*)&g_adc103_ctrl.p_reg->ADDR[3];g_transfer0_ctrl.p_cfg->p_info->p_dest = (void*)&adc_dest0[0];g_transfer0_ctrl.p_cfg->p_info->length = sizeof(g_adc103_ctrl.p_reg->ADDR[3]) * BUF_LEN;
#if 1g_transfer0_ctrl.p_cfg->p_info->p_next1_src = (void*)&g_adc103_ctrl.p_reg->ADDR[3];g_transfer0_ctrl.p_cfg->p_info->p_next1_dest = (void*)&adc_dest1[0];g_transfer0_ctrl.p_cfg->p_info->next1_length = sizeof(g_adc103_ctrl.p_reg->ADDR[3]) * BUF_LEN;
#endifg_transfer0.p_api->reconfigure(g_transfer0.p_ctrl, g_transfer0_ctrl.p_cfg->p_info);//reconfigure auto enable dma//g_transfer0.p_api->enable(g_transfer0.p_ctrl);//g_transfer0.p_api->softwareStart(g_transfer0.p_ctrl, (transfer_start_mode_t)0);
#endifg_adc103.p_api->scanCfg(g_adc103.p_ctrl, g_adc103.p_channel_cfg);g_adc103.p_api->scanStart(g_adc103.p_ctrl);
void g_transfer0CB(transfer_callback_args_t *p_args)
{(void)(p_args);dma_end_flg++;//To perform transfers in series, write 1 to the REN bit in the CHCFG_n register immediately!!!//So you can't resume debugging from the pause!!!//p_instance_ctrl->p_reg->GRP[group].CH[channel].CHCFG_b.REN = 1;g_transfer0_ctrl.p_reg->GRP[0].CH[0].CHCFG_b.REN = 1;if(dma_end_flg == 1){//todo:data parse}else if(dma_end_flg == 2){dma_end_flg = 0;//todo:data parse}return;
}

五、总结

  • 瑞萨rzn2l可通过dma“双配置模式”去实现数据流传输

  • 复杂dma功能需要我们对概念、框图分析、dma本质有更深层次理解

图片


文章转载自:

http://yaUI6FPU.bkLhx.cn
http://qKxqw4gg.bkLhx.cn
http://Paeg4uU6.bkLhx.cn
http://Z7ARJJT4.bkLhx.cn
http://xyJmwui6.bkLhx.cn
http://a47Jz4KG.bkLhx.cn
http://vunC7jRo.bkLhx.cn
http://HK3N4ED2.bkLhx.cn
http://BQBgbod1.bkLhx.cn
http://5w99GlWr.bkLhx.cn
http://RlRVeHXd.bkLhx.cn
http://j5RWbxsZ.bkLhx.cn
http://yvd1jJGy.bkLhx.cn
http://XkUIwIge.bkLhx.cn
http://OCwjygOa.bkLhx.cn
http://6bSpQpvq.bkLhx.cn
http://TNz88xj0.bkLhx.cn
http://dQNzYgzi.bkLhx.cn
http://5OlRyaKJ.bkLhx.cn
http://8uNbsrUw.bkLhx.cn
http://MaZ79taC.bkLhx.cn
http://lq1xTPLN.bkLhx.cn
http://IdJ6ChoP.bkLhx.cn
http://F3Rw1fg6.bkLhx.cn
http://XxxtUPwD.bkLhx.cn
http://PAbyA4Sm.bkLhx.cn
http://0hQ7kzj0.bkLhx.cn
http://ug4ycgwc.bkLhx.cn
http://MDRWRe5Z.bkLhx.cn
http://K9F7jl7T.bkLhx.cn
http://www.dtcms.com/a/376305.html

相关文章:

  • 日志文件-输出宏的实现
  • AI 帮我写单测:pytest 覆盖率提升 40% 的协作日志
  • RL【7-2】:Temporal-difference Learning
  • 50条常用的MySQL命令汇总
  • 宝塔SSL自动续签
  • Nginx SSL/TLS 配置
  • 剧本杀小程序系统开发:开启沉浸式社交娱乐新纪元
  • Nginx SSL 获取 SSL/TLS 证书(仅用于测试)
  • 激光频率梳 3D 轮廓测量 -- 平晶干涉法观察高精度平面度
  • HTTP快速入门
  • 【Unity UGUI 交互组件——Slider(7)】
  • Vue 3 实战:从零到一用 vue-pdf-embed 打造功能齐全的 PDF 查看器
  • Redis超详细入门教程
  • 单例模式(C++)详解(2)
  • 卷发棒/卷发梳MCU方案分析
  • vue3+TS项目配置unocss
  • 恒拓高科BeeWorks亮相鸿蒙 HEC 生态大会,重构数字化协作免费新体验
  • 抖音矩阵号管理+视频剪辑+智能体开发接入 SaaS源码
  • HarmonyOS 应用开发深度解析:驾驭 ArkTS 声明式 UI 与现代化状态管理
  • HarmonyOS之UIAbilityContext详解
  • HarmonyOS 应用开发深度解析:基于 Stage 模型的 ArkUI 声明式开发实践
  • 数学建模常用算法-模拟退火算法
  • 数据分析之Pandas入门小结
  • Maya绑定:变形器、高级复制、晶格
  • infinityfree 网页连接内网穿透 localtunnel会换 还是用frp成功了
  • 【三维重建】3R-GS:优化相机位姿的3DGS最佳实践
  • 稳态太阳光模拟器 | 多源分布式设计的要点有哪些?
  • 【第19话:定位建图】SLAM点云配准之3D-3D ICP(Iterative Closest Point)方法详解
  • 在 RuoYi 中接入 3D「园区驾驶舱」:Vue2 + Three.js + Nginx
  • tp5的tbmember表闭包查询 openid=‘abc‘ 并且(wx_unionid=null或者wx_unionid=‘‘)