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

目录

一、概述

二、rzn2l的elc不支持sci

[三、对策:通过rx引脚下降沿elc gpt](#三、对策:通过rx引脚下降沿elc gpt)

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

[3.2 框图](#3.2 框图)

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

[3.4 源码](#3.4 源码)

四、测试效果

五、RZN2L限制


一、概述

参考资料:

二、rzn2l的elc不支持sci

  • rzn2l的elc基本不支持通信等类的外设,只支持定时器adc等类的外设

三、对策:通过rx引脚下降沿elc gpt

3.1 用户手册

  • RX p16-6--->ELC single port0--->LLPP GPT event A(GPT_SOURCE_GPT_A)--->GTSSR(Start Source)

  • RX p16-6--->ELC single port0--->LLPP GPT event B(GPT_SOURCE_GPT_B)--->GTCSR(clear Source)

3.2 框图

3.3 fsp配置

3.4 源码

复制代码
void hal_entry(void)
{
    /* TODO: add your own code here */
    fsp_err_t err = g_uart0.p_api->open(g_uart0.p_ctrl, g_uart0.p_cfg);
    FSP_PARAMETER_NOT_USED(err);

    __asm volatile ("cpsie i");

    g_uart0.p_api->write(g_uart0.p_ctrl, (uint8_t *)"hello world!\n", sizeof("hello world!\n"));

    g_timer0.p_api->open(g_timer0.p_ctrl, g_timer0.p_cfg);
    g_timer0.p_api->enable(g_timer0.p_ctrl);

    g_elc.p_api->open(g_elc.p_ctrl, g_elc.p_cfg);
    g_elc.p_api->enable(g_elc.p_ctrl);

    g_timer0_ctrl.p_reg->GTSSR = GPT_SOURCE_GPT_A;//SCI RX p16-6--->ELC single port0--->LLPP GPT event A(GPT_SOURCE_GPT_A)--->GTSSR(Start Source)
    g_timer0_ctrl.p_reg->GTCSR = GPT_SOURCE_GPT_B;//SCI RX p16-6--->ELC single port0--->LLPP GPT event B(GPT_SOURCE_GPT_B)--->GTCSR(clear Source)

    R_SCI_UART_Read(&g_uart0_ctrl, (uint8_t*)g_receive_buffer, TEXT_LENGTH);//start uart0 dma rx

    while(1)
    {
        R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
    }
}

void g_timer0CB(timer_callback_args_t *p_args)
{
    FSP_PARAMETER_NOT_USED(p_args);

    transfer_properties_t p_info;
    R_DMAC_InfoGet (g_transfer1.p_ctrl, &p_info);//rx dma

    uint8_t len = (uint8_t)(TEXT_LENGTH - p_info.transfer_length_remaining);//buf max - remaining = current recv len

    if(len > 0)
    {
        R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)g_receive_buffer, TEXT_LENGTH - p_info.transfer_length_remaining);//for test

        R_SCI_UART_Read(&g_uart0_ctrl, (uint8_t*)g_receive_buffer, TEXT_LENGTH);//start uart0 dma rx
    }

    gpt0Cnt++;//for test
}

四、测试效果

五、RZN2L限制

  • rzn2l串口有0-5共6个

  • 支持dma串口0-4躬5个

  • 支持串口dma接收不动长串口0、串口4共2个

以上是指使用gpt elc来计算串口空闲这种方式下的限制
或许有其他方式没有限制

相关推荐
炸膛坦客12 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
华清远见IT开放实验室17 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
程序员Rock20 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
GeekArch20 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程
Freedom_my21 小时前
STM32项目3
stm32·单片机·嵌入式硬件
blevoice1 天前
抖抖燃脂机单 AC6966B 主控调试踩坑:Type-C 整机供电喇叭无声排障
c语言·开发语言·单片机
小小晓.1 天前
C++小白记:C风格字符串和数组用法
c语言·开发语言·c++
深念Y1 天前
开发者如何清理和迁移C盘堆积的垃圾
c语言·开发语言
十月的皮皮1 天前
STM32从零到量产开发:四路继电器工业控制模块开发实战笔记(小白视角)
c语言·笔记·stm32·stm32cubemx·hal库
不正经学生1 天前
C 语言函数深入剖析(基础篇)—— 从零理解函数的每一个细节
c语言·开发语言·数据结构·算法·c#