0
点赞
收藏
分享

微信扫一扫

瑞萨RH850 03-使用中断方式进行UART数据收发

老罗话编程 2022-01-20 阅读 9

本文使用中断方式进行UART数据收发。
专栏地址:瑞萨RH850
https://blog.csdn.net/kinetis_linux/category_11600535.html

建立UART工程

  1. 建立工程;

  2. 配置时钟;

  3. 配置UART,这里选择UART0演示;

  4. 自动生成代码;
    UART

  5. 清除main.c中内容,与r_cg_main.c冲突;

  6. 删除r_cg_intvector.c,里面声明了很多中断函数,却没有定义,就算定义空的中断函数也很麻烦,直接删了,在boot.asm中引用要使用的中断函数;

  7. 打开USE_TABLE_REFERENCE_METHOD .set 1;

  8. section "EIINTTBL"中引用r_cg_uart_user.c中自动生成的接收、发送、错误处理函数地址;

  9. 启动UARTT0,启用接收。

注意需要选择适当的DebugTool,并配置适当的时钟, 接着就可以在r_cg_uart_user.c中的接收、发送回调函数中写我们的应用代码了。

uint8_t rx_buf[100];
uint8_t rx_len =1;

void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
	R_UART0_Start();
	R_UART0_Receive(rx_buf, rx_len);
    while (1U)
    {
        ;
    }
    /* End user code. Do not edit comment generated here */
}

瑞萨UART代码分析

r_cg_uart.c: 定义串口对应的操作
R_UART0_Create:配置串口参数、引脚
R_UART0_Start:使能接收、发送功能,使能接收、发送、错误中断;
R_UART0_Stop:清中断、关中断,关串口功能;
R_UART0_Send:指定发送缓冲,将第一个数据写入发送数据寄存器 RLN30.LUTDR.UINT16,地址偏移,随后进入发送成功中断继续发送,直到完成,调用回调。
R_UART0_Receive:指定接收缓冲,指定接收的数量,当数量超过指定值时调用用户回调函数。

MD_STATUS R_UART0_Receive(uint8_t * const rx_buf, uint16_t rx_num)
{
    MD_STATUS status = MD_OK;

    if (rx_num < 1U)
    {
        status = MD_ARGERROR;
    }
    else
    {
        if ((RLN30.LST & _UART_RECEPTION_OPERATED) == 0U)
        {
            g_uart0_rx_count = 0U;
            g_uart0_rx_length = rx_num;
            gp_uart0_rx_address = rx_buf;
        }
    }

    return (status);
}

r_cg_uart_user.c:定义中断处理函数,以及用户回调函数。
void r_uart0_interrupt_receive(void)
void r_uart0_interrupt_error(void)
void r_uart0_interrupt_send(void)
static void r_uart0_callback_receiveend(void);
static void r_uart0_callback_sendend(void);
static void r_uart0_callback_error(uint8_t err_type);

工程实践

对于实际项目中使用瑞萨RH850,最好在其基础上封装一层驱动,以及定义堆中缓冲区,避免局部数组,这样发送函数退出后,避免发送缓冲不在了。以及使用DMA收发,后续研究。

举报

相关推荐

0 条评论