背景:1、一款只有2个串口的芯片,
2、需要3个串口
3、没使用硬件进行串口扩展
基于以上造成了需要模拟串口的后果:
模拟串口步骤
a、首先创建字符设备驱动
b、设置定时器,定时器中断中进行发送和接收处理(中断中只做这个事)、定时器中断是波特率的两倍频率,满足采样定理
c、创建两个内核线程,一个线程用于处理写缓冲,一个线程来处理接收缓存
d、实现read、write函数,可以两种方式,一是阻塞方式、一是轮询方式,read函数需要和接收缓存线程共同完成、write函数需要和处理写缓存线程共同完成
下面是模拟串口的主要代码
static irqreturn_t timer_interrupt(int irq,void *id,struct pt_regs *regs)
{
|