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

目录

[二、对策:通过rx full elc gpt判断串口空闲](#二、对策:通过rx full elc gpt判断串口空闲)

[2.1 用户手册](#2.1 用户手册)

[2.2 框图](#2.2 框图)

[2.3 fsp配置](#2.3 fsp配置)

[2.4 源码](#2.4 源码)

三、测试效果

四、DTC和DMA的主要差别

五、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的主要差别

  • 使用中的差别:

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

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

    • dtc和dma都无需cpu参与

    • dtc使用额外的内存(DTCVBR_SEC):gp_dtc_vector_tableDTC_VECTOR_TABLE_ENTRIES BSP_ALIGN_VARIABLE(1024);dma无需

    • dtc延迟大于dma

    • dtc低配版dma?

五、DMA的主要作用

  • 无需cpu参与

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

  • 链式DMA等高级功能

相关推荐
LCG元23 分钟前
STM32 USB CDC 虚拟串口开发实战:从 CubeMX 配置到 printf 重定向与稳定收发
stm32·单片机·嵌入式硬件
AAA代码批发商40 分钟前
Days 39 Linux C 开发之 SQLite 数据库完整学习笔记
linux·c语言·数据库
zcmodeltech1 小时前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件
一条破秋裤1 小时前
17_ADC原理与转换模式
笔记·stm32·学习
Brilliantwxx2 小时前
【STM32】 深度详解总线架构 哈佛总线结构
stm32·嵌入式硬件·架构
恶魔泡泡糖2 小时前
stm32F103C8T6标准库DWT应用DHT11温湿度传感器数据手册说明
stm32·单片机·嵌入式硬件
单片机仿真设计2 小时前
【Proteus 仿真】基于 STM32 单片机鸡舍环境监控系统设计(仿真 + 源码)
stm32·单片机·嵌入式硬件·proteus·毕设
卢锡荣2 小时前
单芯掌控多口互联|乐得瑞 LDR6020 PD3.1 多通道 Type‑C 控制 SOC 芯片
c语言·开发语言
wuminyu2 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++
susplus3 小时前
【HTTP协议】HTTP介绍及基础【C语言爬虫实现】
c语言·爬虫·http·万维网