LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1115|回复: 1

ST16C550只能发送,不能接收

[复制链接]
发表于 2008-1-7 15:21:44 | 显示全部楼层 |阅读模式
现在在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,即没有接收到数据。


请问这些究竟是什么原因,如何去解决呢?
 楼主| 发表于 2008-1-8 09:30:38 | 显示全部楼层
最新的情况是可以接收到数据,但每次接收数据的时候,第一个字节的数据总是收不到,比如对方发送了5个字节过来,那这边只能收到最后4个字节。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表