免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1249 | 回复: 0
打印 上一主题 下一主题

有关串口驱动程序的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-13 23:57 |只看该作者 |倒序浏览
前一阶段一直在看串口驱动程序,但是对于其工作流程一直有个疑问?请指教!
对于串口驱动程序的执行流程大致是这样的:
1)判断当前使用的UART是什么类型的?如果是16550A才可以使用FIFO,因为别的类型的UART要么不支持FIFO,要么在使用

FIFO时有BUG.
2)如果当前使用的UART是16550A那么就打开FIFO功能,并且初始化别的一些寄存器,包括打开中断使能位(UART_IER).但是

对于不同版本的linux打开UART_IER的中断使能位各不相同,对于linux0.11它除了写中断外其它中断都开.而对于

linux0.98版本,它把UART_IER中的所有中断都打开了!(大家可以参考一下0.98版本linux/kernel/serial.c L467

outb_p(0x0f,UART_IER + port)

这两种初始化方式对于整个串口在发送数据时的流程会造成很大的差异!

对于0.11版本而言,如果用户想要通过串口发送数据的话,那么它只要把UART_IER中的写中断打开,然后等待中断发生,在中

断处理程序中把需要发送的数据发送出去!
而对于0.98版本而言,如果用户想要通过口串口数据的话,那么它只要把数据放到FIFO中,一旦FIFO中的数据到达一定的量

后就会触发中断(这个量是由初始化时向FCR寄存器写入的,好像最大是14),然后由中断处理程序再发送数据.

我自己在写串口驱动程序的时候发现一旦UARE_IER中的写中断打开,系统立即会发生一个中断,从IIR中判断出发生这个中

断是由THR产生的,也就是用户可以向串口写数据了!也即证明了linux0.11版本的机制是正确的!而0.98版本的机制好像不

正确,不知我理解的对不对?


(linux0.11版本和linux0.98版本可以在www.oldlinux.org下载)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP