[国嵌攻略][131][串口驱动分析-接收]

tty数据接收流程

//tty子系统

1.tty_fops中的tty_read响应系统调用

2.tty_read调用tty_ldisc_N_TTY中的n_tty_read

 

n_tty_read

1.设置app的状态

2.如果没有数据可读,让阻塞生效

3.如果有数据可读,从read_buf中读走数据

 

什么时候串口驱动会把数据送到n_tty_read的read_buf中

当串口接收到数据时会产生接收中断,然后中断处理程序会把数据送到read_buf中。

 

串口驱动如何收到数据

串口中断处理程序s3c24xx_serial_rx_chars

1.读取UFCON寄存器

2.读取UFSTAT寄存器

3.如果接收fifo里的数据量为0,则退出处理

4.读取UERSTAT寄存器

5.从URXH寄存器中取出接收到的字符

6.进行流控处理

7.根据UERSTAT寄存器的值,记录具体的错误类型

8.如果收到的是sysrq字符,进行特殊处理-uart_handle_sysrq_char

9.把接收到的字符送进串口驱动的buf,uart_insert_char

10.把串口驱动收到的数据送进线路规程的read_buf,tty_flip_buffer_push

 

串口流控控制

1.硬件流控

A   B

rx   tx

tx   rx

rts   cts

cts   rts

当A可以接收数据时,会把rts设置为高电平,间接的会把B的cts设置成高电平,表示B可以发送送进。当B可以接收数据时,会把rts设置成高电平,间接的会把A的cts设置成高电平,表示A可以发送数据。

 

硬件流程分为:非自动流程,人为编写软件判断fifo来设置rts;自动流程,当fifo小于32字节时,arm处理器自动的设置rts。Linux系统主要支持自动流控。

posted @   盛夏夜  阅读(844)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示