LinuxSir.cn,穿越时空的Linuxsir!

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

关于串口通信(2410)的一个奇怪问题

[复制链接]
发表于 2005-12-23 14:47:16 | 显示全部楼层 |阅读模式
用的处理器芯片是2410,他的第三个串口可以作为红外通信。现在我直接用标准的串口驱动打开并发送数据:
if ((fd = open("/dev/ttyS2",O_RDWR|O_NONBLOCK)) < 0) {
                printf("cannot open /dev/irda,fd=%d\n",fd);
                exit(0);
        };

j=write(fd,buf,len);
当len<=4时,数据都是正确的。
当len>4时,返回的j=len,有两种情况:
1。我用示波器监测到的数据少于len个,并且我看到fifo的状态寄存器中确实是还有一些数据没有发出去。我再运行一个程序调用write发送0个数据,就能把上次剩余的数据发出去。
但我在一个程序里调用j=write(fd,buf,len); 后紧接着调用j=write(fd,buf,0);就不行,提示资源不可用。
2。示波器监测到的数据为len+1个,其中多了一个数据,第四个数据后面的数据和第四个数据一样。
比如:
发数据:
5个:21 22 23 24 25 示波器监测到的可能是:21 22 23 24 24 25或者是21 22 23 24
我在调用一个j=write(fd,buf,0);才能把25从fifo中发出来。

现在我在想write只是把buf中的数据送到fifo中,所以write的返回值是正确的。但从fifo中读出就不是write能控制的了。
驱动中应该是4字节触发一次中断从fifo中读出数据。但不明白有时候fifo中的数据不能读完。
有对这方面清楚的吗??
多多执教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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