在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2819|回复: 0

有关串口驱动程序的问题

[复制链接]
发表于 2005-3-15 08:19:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
前一阶段一直在看串口驱动程序,但是对于其工作流程一直有个疑问?请指教!
对于串口驱动程序的执行流程大致是这样的:
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下载)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 05:19 , Processed in 0.020052 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表