在有众多的uart232,485以及422通信需求类的产品中,时常会出现主控板uart接口不够用的情况,而有些外设由于其特殊性,又必须单独占有一路uart的时候,我们能够做的就是使用众多的gpio去模拟uart进行数据通信。
linux下的uart模拟需要完成和涉及到一下几方面的内容:
1、gpio的选择和初始化
2、高精度内核定时器提供标准的波特率对应的时序控制。
3、接收引脚的中断控制以及数据处理信号反馈
4、增加内核fifo机制,用于缓存接受数据
5、select控制机制,将接收事件及时的反馈到应用层。
具体如下:
一、gpio的初始化
按部就班,按照所使用的主控芯片对应的linux内核api去做就ok,例如:
#define UART2_TX1 GPIO_TO_PIN(0,12)
#define UART2_TX1_OUT gpio_direction_output(UART2_TX1, 1)
#define UART2_TX1_IN gpio_direction_input(UART2_TX1)
#define UART2_TX1_GET_VALUE gpio_get_value(UART2_TX1)
#define UART2_TX1_L gpio_set_value(UART2_TX1, 0)
#define UART2_TX1_H gpio_set_value(UART2_TX1, 1)
#define UART2_RX1 GPIO_TO_PIN(0,13)
#define UART2_RX1_OUT gpio_direction_output(UART2_RX1, 1)
#defi