加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ns16550编程

(2014-05-13 13:25:36)
http://s15/mw690/002Dc71Vzy6IQjHwgOibe&690

http://s1/mw690/002Dc71Vzy6IQjId5yE70&690
想要设定除数寄存器,就要将LCR的最高位设置为1.
http://s6/mw690/002Dc71Vzy6IQjRZ8AR15&690

http://s5/mw690/002Dc71Vzy6IQjS1sIA34&690
====================================================================
http://s3/mw690/002Dc71Vzy6IQUCDohYe2&690

outb((int)&uptr->lcr, UART_LCR_DLAB);
outb((int)&uptr->dlm, 0x00);
outb((int)&uptr->dll, 0x0c);
这三句设置 波特率为9600bps

outb((int)&uptr->lcr, UART_LCR_8N1);
无奇偶校验,8位数据,1位停止位,这也是PC机串口最常用的设置。

outb((int)&uptr->fcr, 0x00);
注意,这是在写端口,也就是说在操作FCR端口,操作的目的是暂时关闭FIFO。

outb((int)&uptr->mcr, UART_MCR_DTR |  UART_MCR_RTS | UART_MCR_OUT2);

outb((int)&uptr->fcr, UART_FCR_EFIFO | UART_FCR_RRESET | UART_FCR_TRESET | UART_FCR_TRIG2);
http://s12/mw690/002Dc71Vzy6IQW7KDWz8b&690
初始时,FCR各位均为0。只有写入D0=1时,才启用FIFO模式。
D1=1清除接收缓冲器中的数据,D2=1清除发送缓冲器中的数据。
最高两位D7D6用来设置接收FIFO缓冲器中的数据有多少字节时发生中断。

当FIFO控制寄存器D0位为1时,接收FIFO被启用。16550将接收到的帧数据,按规定的帧数据格式,从移位寄存器移入接收FIFO缓冲器中,直到接收FIFO缓冲器中的字节数满足FIFO所设置的中断触发计数值时,16550便输出中断请求信号。
当FIFO控制寄存器D0位为1时,发送FIFO被启用,当发送FIFO为空时,产生发送保持寄存器中断,中断服务程序将需要发送的帧数据块写入FIFO中,通过发送移位寄存器开始发送。


outb( (int)&csrptr->ier,UART_IER_ERBFI | UART_IER_ETBEI | UART_IER_ELSI);
==================================================================

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有