十三、从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来计算串口空闲这种方式下的限制
或许有其他方式没有限制

相关推荐
潼心1412o19 分钟前
C语言(长期更新)第15讲 指针详解(五):习题实战
c语言·开发语言
IAR Systems1 小时前
IAR借助在瑞萨RH850/U2A MCU MCAL支持,加速汽车软件开发
瑞萨·嵌入式软件·iar·汽车软件开发
JuneXcy4 小时前
结构体简介
c语言·数据结构·算法
jiaway4 小时前
【C语言】第四课 指针与内存管理
c语言·开发语言·算法
贾亚超5 小时前
【STM32外设】DAC
stm32·单片机·嵌入式硬件
黑客思维者6 小时前
《我是如何用C语言写工控系统的漏洞和Bug》连载(1)内容大纲
c语言·bug·工控漏洞
j_xxx404_6 小时前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表
南莺莺6 小时前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·
buyutang_8 小时前
C/C++ Linux系统编程:线程控制详解,从线程创建到线程终止
linux·c语言·c++·学习
jiaway8 小时前
【C语言】第一课 环境配置
c语言·开发语言