一.tty架构导入
tty架构分为:tty核心,线路规程,tty驱动。
二.串口驱动
2.1 初始化
三.打开串口
四.串口发送
函数调用关系
注意:调用到最后的s3xeiria_tx时是打开串口中断,在串口中断中进行发送。
发送的数据是在uart_write中写入的循环缓冲,在中断程序中将循环缓冲发送走。
循环缓冲结构体。
struct circ_buf{
char *buf;
int head,tail;
};
4.2中断发送函数的过程
4 如果循环缓冲中的数据量低于256就去唤醒之前在发送时阻塞的进程
5如果循环缓冲为空,则关闭中断。
4.3发送的总过程
五串口接收
5.1串口驱动接收
1.读取ufcon寄存器 2.读取ufstat寄存器 3.如果接收fifo的数据量为0,则退出。
4读取uerstat寄存器 5从urxh寄存器中取出数据6进行流控处理
7.根据uerstat寄存器的值,记录具体的错误类型8如果收到的是sysrq字符,进行特殊处理-uart_handle_sysrq-char.
9把接收到的字符放入放进串口驱动的buf-uart_insert_ch ar
10把串口驱动收到的数据松江线路规程的read_buf 函数 tty_flip_buffer_push .
5.2串口的流控处理
为什么需要:当a接收满了,就会去通知发送方b,停下来。
有软件流控:往发送方发送xoff信号
硬件流控:分为非自动流控和自动流控。
非自动由软件控制rts
六.串口驱动程序编写