在内核中增加串口发送数据延时

Kernel: v3.0.36
Device: rk3188
Platform Version: Android 4.4.2

前言:

内核向外发送串口数据的时候,发送数据比较快,数据包是连在一起的,每个包之间的时间间隔可能小于1ms,如果接收方控制不好,来不及接收。有的时候需要给特殊的包增加延时。

menuconfig配置UART:

Device Drivers
---->Character devices
-------------->Serial drivers

1

源文件:

vim kernel/drivers/tty/serial/rk_serial.c

module_init;
—>serial_rk_init
------->serial_rk_driver
------------>serial_rk_probe
----------------->serial_rk_pops
------------------>serial_rk_startup

//注册中断,收到数据,发送数据都会触发此中断,再处理相应数据,每次处理32字节。
retval = request_irq(up->port.irq, serial_rk_interrupt, up->port.irqflags, up->name, up);

----------------------------->serial_rk_interrupt
------------------------------>serial_rk_handle_port
--------------------------------->receive_chars(处理接收数据)
--------------------------------->transmit_chars(处理发送数据)

static void transmit_chars(struct uart_rk_port *up)
{
	...
	 do {//依次发送32字节数据(可在此处给特殊的包增加延时)
    	serial_out(up, UART_TX, xmit->buf[xmit->tail]);//一个一个字节发送出去
    	xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
    	up->port.icount.tx++;
    	if (uart_circ_empty(xmit))
        break;
	} while (--count > 0);
}	  		

转载请注明出处:http://www.wolfnx.com/2019/01/23/KernelAddSerialDelay

作者 : wolfnx
邮箱 : wolfnx@outlook.com
邮箱2 : lostnx@gmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值