[国嵌攻略][130][串口驱动分析-发送]
tty数据发送流程
//tty子系统
1.file_operation中找到tty_write
2.tty_write找到线路规程中的n_tty_write
3.n_tty_write找到uart_ops中的uart_write
//串口驱动
4.uart_write找到s3c24xx_serial_start_tx
当应用程序使用系统调用时最终调用到s3c24xx_serial_start_tx函数
s3c24xx_serial_start_tx如何实现
1.使能串口发送中断,fifo数据会发送走,然后串口产生中断
2.中断处理程序来完成数据发送
串口发送的数据从哪里来
当应用程序调用write系统调用后,数据会被写入串口的循环缓冲,当发送中断处理程序开始发送数据时会把循环缓冲的数据取走。用户数据在uart_write调用时被写入循环缓冲。
串口发送函数分析
串口发送真正的函数是s3c24xx_serial_tx_char
1.判断是否有需要发送的x_char字符(设备是否能发送),如果有通过将其写入UTXH寄存器发送
2.如果循环缓存为空或者串口状态不允许发送,则关闭发送中断
3.利用while循环,来发送数据,循环条件:1.循环缓存不为空;2.发送数据量小于256
3.1.当发送fifo满的时候,退出发送
3.2.从循环缓冲中取出数据,写入UTXH寄存器
3.3.调整循环缓冲位置
4.如果循环缓冲中的数据量低于256的时候,唤醒之前在发送时阻塞的进程
5.如果循环缓冲为空,则关闭发送中断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术