《关于UART》由会员分享,可在线阅读,更多相关《关于UART(36页珍藏版)》请在金锄头文库上搜索。
1、关于UART,林恒 8/20/2003,UART 通用的异步 接收/发送器,通讯,并行通信,串行通信,优:成本低缺:速度慢,同步通信异步通信,优:速度快缺:成本高,设备复杂,B0B1。B7,D0 D1 D2 D3,异步串行通信的数据格式,空闲位,B0 B2 B4 B6,起始,数据位,校验,停止,空闲位,B0 B2 B4 B6,起始,数据位,第N个字符,第N+1个字符,UART模型,我们所关心的内容,波特率字符格式,数据位,奇偶校验,停止位,UART的重要引脚,UART之间如何握手,UART的延伸,UART,232/422/485,GD75232SN75172SN75173SN75176,接口芯
2、片,ST16C550ST16C552ST16C554OX16PCI954,TTL,串行通讯接口标准 之 RS-232,最大传输速率 20KB/S最大传送距离 15米负逻辑电平- 非平衡方式 逻辑1= -3V -15V 逻辑0= 3V 15V 信号绝对值在315V之间有定义点对点通讯 一对一全双工模式,串行通讯接口标准 之 RS-422与RS-485,最大传输速率 10MB/S最大传送距离 4000英尺,A,B,C,GND,422可选485必须(发送/接收切换),串行通讯接口标准 之 RS-422与RS-485,数据信号采用平衡传输方式 逻辑1= AB电压差 +2V +6V 逻辑0= AB电压差
3、 -2V -6V,逻辑1= AB电压差 +200mV +6V逻辑0= AB电压差 - 200mV -6V,发送端,接收端,一对多的全双工通信,关于3种接口标准的组网之 RS-232,一对一全双工模式,TXDRXDGND,RXDTXDGND,关于3种接口标准的组网之 RS-422,全双工模式,G,R,R,G,G,R,G,R,A,B,A,B,G-发送器R-接收器,主,从3,从2,从1,关于3种接口标准的组网之 RS-485,半双工模式,G,R,R,G,G,R,A,B,A,B,B,B,A,A,G,R,E,E,E,E,主,从3,从2,从1,G-发送器R-接收器,关于匹配电阻,对于RS-422网络,在总
4、线电缆的远端并接电阻,电阻一般在RS-422网络中取100 对于RS-485网络,则应在总线电缆的开始和末端都需并接终接电阻 ,在RS-485网络中取120,关于流控,问题引出:在通讯过程中经常出现数据丢失产生原因:2台通讯的设备的处理速度不同硬件措施:利用RTS/CTS、DTR/DSR实现软件措施:利用XON/XOFF实现,UART应用之 8250,通用的异步接收发送器单一 +5V供电通过配置芯片内部的8个寄存器实 现全部功能,8250 模块图,8250 特性,8位数据总线:数据、控制字、状态信息8个常用基本寄存器:DLAB A2 A1 A0具有常用的9个UART引脚一个中断输出引脚,825
5、0 寄存器描述,通讯线路控制寄存器 规定数据位数、停止位数、奇偶校验方式通讯线路状态寄存器 给CPU提供有关数据传输的状态信息,8250 寄存器描述,发送器保持寄存器 保存待发送的数据接收数据缓冲器寄存器 存放接收到的数据,8250 寄存器描述,除数锁存器 共16位,由高8位与低8位组成中断允许寄存器 设置4个中断是否允许(接收器、发送器、 MODEM等),8250 寄存器描述,中断标识寄存器 标识哪一个中断源引起中断以便中断处理MODEM 控制寄存器 控制并读取 MODEM 的状态,UART的 DOS 测试程序流程,查询方式设置发送缓冲区、设置基地址 初始化串口发buffer中数据、由por
6、t2接收数据并验证更改band,databit, parity, stopbit组合改由port2发给port1数据,UART的 DOS 测试程序流程,中断方式第一步编写中断函数 关中断,用户操作,开中断,中断返回中断函数的使能 关中断、原中断地址保留、清UART某些寄存器、设置8259、定位用户中断函数中断函数的禁止 原中断归位,UART的 DOS 测试程序流程,中断方式第二步设置发送缓冲区 buffer =“0123456”;设置基地址 port1=0x3e8 ; port2=0x2e8;初始化串口band,databit, parity, stopbit 包括设置波特率、数据位长度、奇偶
7、校验 方式、停止位并写入相应的UART芯片寄 存器,UART的 DOS 测试程序流程,中断方式第三步使能port1发buffer中数据 from port2 to port1Port1按照中断方式接收port2数据接收数据与buffer比较,从而验证正确性更改band,databit, parity, stopbit组合 测试4个因素的某些组合,UART的 DOS 测试程序流程,中断方式第四步禁止port1中断,使能port2,做反向测试发buffer中数据 from port1 to port2Port2按照中断方式接收port1数据更改band,databit, parity, stopb
8、it组合接收数据与buffer比较,从而验证正确性禁止port2中断,退出,编写中断函数,void interrupt far rec_int1(void)disable();ch2=inportb(port1);enable();outportb(0x20,0x20); /*中断返回*/,BACK,中断函数的使能,void enableport1(void)disable();old_vect1=getvect(0x0d); /save addressdisable();b1=inportb(0x21)&0x0f; /OCW1 outportb(0x21,b1); setvect(0x0d,
9、rec_int1); /reset new vector enable();,BACK,中断函数的禁止,void disableport1(void) disable(); outportb(port1+1,0x00); outportb(port1+4,0x00); setvect(0x72,old_vect1);,BACK,设置发送缓冲区,unsigned char buffer_220=0123456789ABCDEFUUUU;,设置基地址,port1=0x3e8; port2=0x2e8;,BACK,初始化串口,void Com_Init(unsigned int BaseAddr,u
10、nsigned long int Baud,unsigned int DataBit,unsigned int StopBit,unsigned int Parity) unsigned int baudl,baudh,dbit,sbit,pbit,lcr,fcr; switch(DataBit) case 5 : dbit=0x00;break; case 6 : dbit=0x01;break; ; ; ; outportb(BaseAddr+2,fcr); ,BACK,收发数据测试并比较,outport(port1,buffer_2i);val=inportb(port2);c1=buffer_2i;c2=val; if (c1!=c2) ;,BACK,更改组合,for( ; PAR; ) ; for( ; STOP; ) ; for( ; DATABIT; ) ; for( ; BAND ; ) outportb & inportb ,BACK,谢谢!,