十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长

devtools/2024/12/26 21:24:31/

目录

二、对策:通过rx full elc gpt判断串口空闲

2.1 用户手册

2.2 框图

2.3 fsp配置

2.4 源码

三、测试效果

四、DTC和DMA的主要差别

五、DMA的主要作用


一、概述

  • 关键原理:串口空闲中断,stm32利用空闲中断来处理串口dma接收不定长度,可用hal库api

  • 瑞萨RA使用gpt定时器和elc来硬件检测串口空闲。但是:1、fsp没有sci+dma的api,需要自己封装;2:dma接收不定长的实现

  • 参考野火:

    • https://www.bilibili.com/video/BV17u4m1c7Xg/?spm_id_from=333.788&vd_source=21efa952a2d53fd4f04dc76ba0278b18

    • https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter20/chapter20.html#dtc-uart

    • 但是野火不建议dtc接收(不确定接收长度,无法完成中断),这是错误的理解,dma接收不是一样不确定长度么?

参考资料:

  • STM32之串口DMA接收不定长数据:https://shequ.stmicroelectronics.cn/thread-617564-1-1.html

图片

  • 基于RA2L1实现串口DTC数据接收

  • RA串口通信空闲中断

  • RX系列MCU串口+DMA接收数据完成的空闲判断方法

二、对策:通过rx full elc gpt判断串口空闲

2.1 用户手册

图片

图片

2.2 框图

图片

2.3 fsp配置

图片

图片

图片

2.4 源码

void hal_entry(void)
{/* TODO: add your own code here */LED_Init();         // LED 初始化Debug_UART4_Init(); // SCI4 UART 调试串口初始化/* 使能DTC */R_DTC_Enable(g_uart4.p_cfg->p_transfer_rx->p_ctrl);printf("\r\n实验4:DTC+UART串口收发\r\n");R_ELC_Open(&g_elc_ctrl, &g_elc_cfg);R_ELC_Enable(&g_elc_ctrl);R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);R_GPT_Enable(&g_timer0_ctrl);/* 发送数据到串口(通过DTC发送) */// 可以尝试在 configuration.xml 中将 DTC 模块去除,再进行代码调试,看看会有什么区别R_SCI_UART_Write(g_uart4.p_ctrl,(uint8_t *)(uart4_dtc_tx_data),sizeof(uart4_dtc_tx_data)/sizeof(uart4_dtc_tx_data[0]));/* 串口的数据发送完成中断依旧会产生 */if (uart_send_complete_flag == true){//LED1_TOGGLE;uart_send_complete_flag = false;}R_SCI_UART_Read(g_uart4.p_ctrl, (uint8_t *)(uart4_dtc_rx_data), RX_MAX);while(1){// 以下是LED闪烁LED2_TOGGLE;R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);}
}
/***/
void g_timer0CB(timer_callback_args_t *p_args)
{if(p_args->event == TIMER_EVENT_CYCLE_END){transfer_properties_t p_properties;g_transfer1_dtc_uart4_rx.p_api->infoGet(g_transfer1_dtc_uart4_rx.p_ctrl, &p_properties);R_SCI_UART_Write(g_uart4.p_ctrl, (uint8_t *)(uart4_dtc_rx_data), RX_MAX - p_properties.transfer_length_remaining);R_SCI_UART_Read(g_uart4.p_ctrl, (uint8_t *)(uart4_dtc_rx_data), RX_MAX);}
}Cnt++;//for test
}

三、测试效果

四、DTC和DMA的主要差别

  • 野火DMAC和DTC关键特性对比:https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter20/chapter20.html#id19

图片

  • 使用中的差别:

    • fsp的串口默认支持dtc(有api),fsp的串口默认不支持dma(无api)

    • dtc数据与外设中断匹配,dma只有固定通道数量

    • dtc和dma都无需cpu参与

    • dtc使用额外的内存(DTCVBR_SEC):gp_dtc_vector_table[DTC_VECTOR_TABLE_ENTRIES] BSP_ALIGN_VARIABLE(1024);dma无需

    • dtc延迟大于dma

    • dtc低配版dma?

五、DMA的主要作用

  • 无需cpu参与

  • 无需频繁中断,数据“凑整”

  • 链式DMA等高级功能

图片


http://www.ppmy.cn/devtools/145629.html

相关文章

Chapter 03 复合数据类型-1

1.列表 Python内置的一种有序、可变的序列数据类型; 列表的定义: [ ]括起来的逗号分隔的多个元素组成的序列 列表对象的创建: (1)直接赋值 >>> list1 []#创建一个空列表赋值给list1 >>> list…

架构师之路--达梦数据库执行计划与索引优化

达梦数据库执行计划与索引优化:解锁高效数据查询的密码 在数据库的世界里,数据量呈爆炸式增长,如何快速、精准地从海量数据中获取所需信息成为了关键挑战。达梦数据库作为一款功能强大的国产数据库,为我们提供了诸多工具和技术来…

IntelliJ IDEA Docker集成

一、概述 Docker是一种用于在隔离和可复制环境中部署和运行可执行文件的工具。这可能很有用,例如,在与生产相同的环境中测试代码。 IntelliJ IDEA集成了Docker功能,并为创建Docker映像、运行Docker容器、管理Docker Compose应用程序、使用公…

理解并使用 Linux 内核的字符设备

理解并使用 Linux 内核的字符设备 1. 引言 1.1 什么是字符设备 字符设备是 Linux 中的一类设备,支持以字符为单位进行数据传输。与块设备不同,字符设备不需要缓冲区,即数据是逐字节直接传递的。典型的字符设备包括串口、键盘、鼠标、伪终端…

微信小程序页面之间的传值方式

在微信小程序的开发过程中,页面之间的传值是一个常见的操作。根据多年的实践,我就我所知道的小程序页面之间的传值方式,进行简单的总结。希望能够帮助大家。 一、URL参数传递 原理 这种方式类似于网页开发中的URL传参。在微信小程序中&…

面试题整理15----K8s常见的网络插件有哪些

面试题整理15----K8s常见的网络插件有哪些 常见的K8s网络插件有Flannel,Calico,Cilium,Weave,Antrea,Kube-OVN等.其中Calico, Flannel, 和 Cilium较为常用. Flannel: 实现方式: 基于 VXLAN 或 UDP 隧道在节点之间创建网络覆盖。相对简单易于理解和部署。功能: 提供基本的网络连…

基于深度学习(HyperLPR3框架)的中文车牌识别系统-前言

参考链接: GitHub - szad670401/HyperLPR: 基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework.基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework. - szad670401/HyperL…

Pyside6 在 pycharm 中的配置

打开文件->设置 找到 工具->外部工具 点击 号 创建一个外部工具 QtDesigner 名称:QtDesigner 程序:D:\miniconda\envs\ergoAI-qt\Lib\site-packages\PySide6\designer.exe 实参:$FileName$ 工作目录:$FileDir$ PyUIC 名称&#xf…