|
现在在arm+linux平台下扩展了一个ST16C550串口芯片,驱动用的是内核自带的8250.c,然后也对它进行了配置,
其中把8250.c中
static const struct serial8250_config uart_config[PORT_MAX_8250+1] = {
{ "unknown", 1, 1, 0 },
{ "8250", 1, 1, 0 },
{ "16450", 1, 1, 0 },
{ "16550", 1, 1, 0 },
{ "16550A", 16, 16, UART_CAP_FIFO },
{ "Cirrus", 1, 1, 0 },
{ "ST16650", 1, 1, UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_EFR },
{ "ST16650V2", 32, 16, UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_EFR },
==》
{ "ST16650V2", 16, 16, UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_EFR },
1.因为ST16C550只有16bytes的FIFO,不知道这样修改是否正确?
2.现在是发送正常的,但是接收数据的时候,必须通过向串口一次发送两个数据的时候(比如发送a b),驱动才会收到接收数据就绪中断,即ISR寄存器的值是xxxx0100,这时候,LSR的第0位才为1,即接收数据就绪,并且只能收到b这个字符,而上层应用程序的read函数并没有读取到这个字符。
3.反之,如果只向串口发送1个字符的时候,会引起接收数据超时中断,即ISR寄存器的值是xxxx1100,并且此时的LSR的第0位为0,即没有接收到数据。
请问这些究竟是什么原因,如何去解决呢? |
|