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

前言:

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

Kernel: v3.0.36

Device: rk3188

Platform Version: Android 4.4.2

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

Click Me