ns16550编程

http://s15/mw690/002Dc71Vzy6IQjHwgOibe&690
http://s6/mw690/002Dc71Vzy6IQjRZ8AR15&690
http://s5/mw690/002Dc71Vzy6IQjS1sIA34&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);
http://s12/mw690/002Dc71Vzy6IQVkn5wv5b&690
http://s1/mw690/002Dc71Vzy6IQVpImSAa0&690
http://s3/mw690/002Dc71Vzy6IQVqJlV842&690
http://s1/mw690/002Dc71Vzy6IQVpImSAa0&690
http://s3/mw690/002Dc71Vzy6IQVqJlV842&690
outb((int)&uptr->fcr, UART_FCR_EFIFO | UART_FCR_RRESET
| UART_FCR_TRESET | UART_FCR_TRIG2);
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);
http://s2/mw690/002Dc71Vzy6IQWFxYUpe1&690
http://s5/mw690/002Dc71Vzy6IQX3Lb9yd4&690
http://s6/mw690/002Dc71Vzy6IQX3NovH55&690
http://s5/mw690/002Dc71Vzy6IQX3Lb9yd4&690
http://s6/mw690/002Dc71Vzy6IQX3NovH55&690
==================================================================
前一篇:bochs在Linux下的配置
后一篇:PC下串口IO空间及其寄存器详解