UART子系统(十一)UART驱动情景分析_write

UART驱动情景分析_write

参考资料

  • 参考代码:

    硬件相关:
    drivers/tty/serial/imx.c
    drivers/tty/serial/stm32-usart.c
    
    串口核心层:
    drivers/tty/serial/serial_core.c
    
    TTY层:
    drivers/tty/tty_io.c
    

1. 情景分析大纲

  • 注册过程分析
  • open过程分析
  • read过程分析
  • write过程分析

2. 源码框架回顾

在这里插入图片描述

3. write过程分析

流程为:

  • APP写

    • 使用行规程来写
    • 数据最终存入uart_state->xmit的buffer里
  • 硬件发送:怎么发送数据?

    • 使用硬件驱动中uart_ops->start_tx开始发送
    • 具体的发送方法有2种:通过DMA,或通过中断
  • 中断方式

    • 方法1:直接使能 tx empty中断,一开始tx buffer为空,在中断里填入数据
    • 方法2:写部分数据到tx fifo,使能中断,剩下的数据再中断里继续发送
3.1 tty_write

文件:drivers\tty\tty_io.c

在这里插入图片描述

3.2 ldisk write

文件:drivers\tty\n_tty.c

函数:n_tty_write

在这里插入图片描述

3.3 uart_write

文件:drivers\tty\serial\serial_core.c

函数:uart_write

在这里插入图片描述

3.3 硬件相关的发送
3.3.1 IMX6ULL

文件:drivers\tty\serial\imx.c

函数:imx_start_tximx_txint
在这里插入图片描述

一开始时,发送buffer肯定为空,会立刻产生中断:

在这里插入图片描述

3.3.2 STM32MP157

文件:drivers\tty\serial\stm32-usart.c

函数:stm32_usart_threaded_interrupt

STM32MP157发送串口数据时,有两种方法:DMA、中断。

我们来分析第二种方式:通过中断来发送数据。

  • UART有Tx FIFO,可以往里面写入若干个数据,然后使能中断
  • 剩下的数据通过中断函数继续发送:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yy2rLcXh-1652499998915)(pic/09_UART/33_stm32mp157_start_tx.png)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值