资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,基于,DSP5402,的异步串口通信模块设计,主要内容,1,、串口通信,原理和异步串口芯片介绍,2,、,系统硬件方案设计,3,、软件设计,1,、串口通信原理,串口通信是按位(bit),将,数据一位一位地依次传输,,,他,可以在使用一根线发送数据的同时用另一根线接收数据。,串行通信可以分为同步通信和异步通信。,(,1,)同步通信,同步通信是一种连续串行传送数据的通信方式,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送,/,接收。,(,2,)异步通信,异步通信是一种很常用的通信方式。通常数据以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。,异步串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配。,(,1,),TL16C550,的特点:,供电电压为,5 V,3,3 V,;,时钟频率高达,16 MHz,。通信时波特率最高可达,1 M,可编程设定波特率发生器;,具有标准的异步通信位,可选择,5,、,6,、,7,、,8,位串行数据位,可设置奇偶校验或无校验模式,停止位,长度,1,、,1.5,、,2,;,独立控制发送、接收、线状态以及中断设置;,软件设定的,FIFO,,减少,CPU,中断。,异步串行通信芯片,TL16C550,(,2,),.TL16C550,的引脚功能:,图,1,引脚号,名称,功能说明,1,、,12,、,23,、,34,NC,悬空,2,9,D0,D7,数据总线,10,RCLK,接收器时钟,11,SIN,串行数据输入,13,SOUT,串行数据输出,14,CS0,片选,0,(高电平有效),15,CS1,片选,1,(高电平有效),16,/CS2,片选,2,(低电平有效),17,/BAUDOUT,波特率输出,表,1,18,、,19,XIN,、,XOUT,外部时钟,20,/WR1,写信号输入,1,(低电平效),21,WR2,写信号输入,2,(高电平效),22,VSS,电源地,24,/RD1,读信号输入,1,(低电平效),25,RD2,读信号输入,2,(高电平效),26,DDIS,屏蔽驱动器,27,/TXRDY,串口发送就绪输出,28,/ADS,地址选通号,31,、,30,、,29,A0,、,A1,、,A2,寄存器选择,32,/RXRDY,串口接收就绪输出,33,INRPT,中断输出,35,/OUT2,输出,2,36,/RTS,发送请求(,Modem,中常用),37,/DTR,数据终端就绪信号,38,/OUT1,输出,1,39,MR,主机重启,40,/CTS,发送清除(,Modem,中常用),41,/DSR,数据设置就绪,42,/DCD,数据载波检测,43,/RI,振铃,44,VCC,电源正极,(,4,),.,内部结构,图,2,(,4,),.TL16C550,内部寄存器,TL16C550C,内部共有,11,个寄存器,这些寄存器的访问是通过,3,个地址线控制,,LCR,控制寄存器的,D7,位,DLAB,参与辅助定义。,寄存器,DLAB,A2,A1,A0,地址,操作,接收缓冲器,RBR,0,0,0,0,00H,只读,发送缓冲器,THR,0,0,0,0,00H,只写,中断始能寄存器,IER,0,0,0,1,01H,读,/,写,中断标志寄存器,IIR,X,0,1,0,02H,只读,FIFO,控制寄存器,X,0,1,0,02H,只读,线路控制寄存器,LCR,X,0,1,1,03H,读,/,写,MODEM,控制寄存器,MCR,X,1,0,0,04H,读,/,写,线路状态寄存器,LSR,X,1,0,1,05H,读,/,写,MODEM,状态寄存器,MSR,X,1,1,0,06H,读,/,写,暂存寄存器,SCR,1,0,0,0,07H,读,/,写,低位除数寄存器,DLL,1,0,0,1,00H,读,/,写,低位除数寄存器,DLM,1,0,0,1,01H,读,/,写,表,2,线路控制寄存器(,LCR,),位,名称,描,述,D0,,,D1,WLS0,,,WLS1,设置数据长度:,00,:,5,位。,01,:,6,位。,10,:,7,位。,11,:,8,位。,D2,DTB,停止位个数:,0,:一个停止位个数,1,:,1.5,个停止位,(5,位数据长度时,),,,2,个停止位,(6,,,7,,,8,位数据长度时,),D3,PEN,奇偶校验无效,:,0,:奇偶校验无效。,1,:奇偶校验有效。,D4,EPS,奇偶校验选择,:,0,:奇校验。,1,:偶校验。,D5,SPB,强制校验位,,与位,4,和位,3,一起决定了校验位的取值。,111,:强制为,0,。,101,:强制为,1,。,D6,BREAK,隔离控制:,1,:字符发送必须有间隔。,0,:字符发送不强制有间隔。,D7,DLAB,寄存器访问选择,:,0,:访问其余寄存器。,1,:访问除数和功能切换寄存器。,线路状态寄存器(,LSR,),位,控制位,描,述,D0,DR,接收数据准备好标志:,0,:接收数据缓冲器空。,1,:接收数据缓冲器中有数据。,D1,OE,溢出错误标志:,0,:无溢出。,1,:有溢出。,D2,PE,奇偶校验错误标志:,0,:无奇偶校验错误,1:,有奇偶校验错误,D3,FE,帧错误标志:,0,:无帧错误。,1,:有帧错误。,D4,B1,接收中出现间隔被置起。,D5,THRT,发送保持寄存器空标志:,0,:非空。,1,:空。,D6,TEMT,发送器空标志:,0,:发送保持寄存器和发送移位寄存器非空。,1,:发送保持寄存器和发送移位寄存器都空。,D7,FERR,接收,FIFO,出错,使用,FIFO,时,当发生校验出错、帧出错时位。,中断使能寄存器(,IER,),位,名称,描述,D0,ERDAI,接收中断使能:,0,:接收中断禁止。,1,:接收中断使能。,D1,ETHREI,发送中断使能:,0,:发送中断禁止。,1,:发送中断使能。,D2,ELSI,接收错误中断使能:,0:,接收错误中断禁止。,1,:接收错误中断使能。,D3,EMSI,MODEM,中断禁止:,0:MODEM,中断禁止。,1,:,MODEM,中断使能。,D4,0,保留,D5,0,保留,D6,0,保留,D7,0,保留,波特率除数寄存器,波特率除数寄存器为,16,位,由高,8,位,(DLM),和低,8,位,(DLL),组成,用来设置,TL16C550C,串行数据传输的波特率。,除数寄存器的值可由,TL16C550C,的工作时钟和波特率共同确定,计算公式为,:,除数,=,时钟频率,/(,期望的波特率,16),。例如在本例设计中,TL16C550C,的输入频率是,10MHz,,若采用波特率为,38400,时,通过计算公式可得高位除数寄存器(,DLM,)的值为,00H,,低位除数寄存器(,DLL,)的值为,10H,。同理,可以计算出表中各个波特率对应的,DLM,、,DLL,值。,波特率,高位除数寄存器(,DLM,),低位除数寄存器(,DLL,),1200,02H,08H,2400,01H,04H,4800,00H,82H,9600,00H,41H,19200,00H,20H,38400,00H,10H,2,、系统方案设计,TL16C550C,与,TMS320VC54x,都为,TI,公司生产的芯片,在电气特性和时序匹配上兼容。要实现,TMS320VC54x,与,TL16C550C,之间的通信接口,我们采用可编程逻辑器件(,CPLD,)实现,即需要用,TMS320VC54x,的信号通过一定的逻辑电路产生,TL16C550C,需要的控制信号。,TMS320VC54x,和,TL16C550,的接口电路示意图如图,3,所示。,图,3,基于,TL16C550C,的串口通信接口电路示意图,在本实例中,TMS320VC54x,的数据线,D0,D7,、地址线,A0,A,分别与,TL16C550C,的数据线,D0,D7,、地址线,A0,A2,连接。,使用,TMS320VC54x,的,I/O,空间选择信号,/IS,和地址线,A10,A15,通过,CPLD,中的译码逻辑电路产生,TL16C550C,的片选信号,/CS2,并将,I/O,地址空间的,0 x0000,0 x03FF,这段地址分配给,TL16C550C,,从而避免了与外部其他,I/O,设备发生冲突;使用,TMS320VC54x,的读写复用信号,R/W,和,I/O,选通信号,/ISOTRB,通过,CPLD,产生,TL16C550C,的读写控制信号,/RD,和,/W,;,TL16C550C,的中断输出,INTRPT,通过,CPLD,译码逻辑电路产生,TMS320VC54x,的外部中断控制信号,/INT3,由于本实例中数据传输方式采用查询的方式,所以数据传输的中断方式只做预留方案使用。,在实例中采用,CPLD,可以较好的实现接口逻辑较为复杂的电路设计,从而提高了硬件设计的灵活性,本模块中,CPLD,主要完成异步串口模块的,I/O,地址分配、中断分配和读写控制等功能。,1,)异步串口模块的,I/O,地址分配,使用,TMS320VC54x,的地址线,A15,A10,和,I/O,空间选择信号,/IS,通过,CPLD,内部逻辑译码产生异步串口模块的片选信号,UART_CS,(低电平有效),并将异步串口模块映射到,I/O,地址空间的,0 x0000,0 x03FF,段内,,图,4,输入,输出,IS,A15,A10,UART,KEYOE,LCD,USB,AD,NET,KEY,CS0,CS1,CS2,CS3,1,X,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,0,3,1,1,1,0,1,1,1,1,1,1,1,0,4,1,1,1,1,0,1,1,1,1,1,1,0,5,1,1,1,1,1,0,1,1,1,1,1,0,6,1,1,1,1,1,1,0,1,1,1,1,0,7,1,1,1,1,1,1,1,0,1,1,1,0,8,1,1,1,1,1,1,1,1,0,1,1,0,9,1,1,1,1,1,1,1,1,1,0,1,0,10,1,1,1,1,1,1,1,1,1,1,0,0,其他,1,1,1,1,1,1,1,1,1,1,1,图,1,为,I/O,地址分配波形仿真结果图,如图所示当,I/O,空间选择信号,/IS,和,TMS320VC54x,地址线,A15.10,均为低电平时,异步串口模块的片选信号,UART_CS,为低电平,即说明片选信号有效,,2,)异步串口芯片中断的分配,在异步串口通信中传输数据时我们采用的是查询方式,而数据传输的中断方式作为预留方案,中断方式是将,TMS320VC5402,的外部,INT3,分配给异步串口模块,由拨码开关,SW15,中的,SIN3,和异步串口芯片,TL16C550C,的中断输出引脚,INTRPT,(,UART_INT,)通过,CPLD,译码产生,TMS320VC54x,的外部中断控制信号,/INT3,(,BINT3,),其逻辑电路设计的真值表如下表,内部接口逻辑如图,6,所示。将,输入,输出,SIN3,UART_INT,BINT3,0,X,1,1,1,1,1,0,0,图,7,为中断分配的波形仿真结果图,如图所示在,SIN3,为高电平,,UART_INT,为低电平时,BINT3,为高电平,则说明中断信号有效。,图,6,图,7,3,)异步串口芯片的读写控制 我们使用,TMS320VC54x,的读写复用信号,R/W,和,I/O,选通信号,/ISOTRB,通过,CPLD,内的逻辑电路产生,TL16C550C,的读写控制信号,/RD,和,/WR,,逻辑电路设计的真值表如下表,内部接口逻辑如图,8,所示,输入,输出,R/W,/ISOTRB,/RD,/WR,0,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,图,8,图为波形仿真结果图,当,R/W=1,,,/IOSTRB=0,时,,RD=0,,,WR=1,,,TL16C550C,进行读操作;当,R/W=0,,,/IOSTRB=0,RD=1,,,WR=0,,,TL16C550C,时进行写操作;波形仿真结果如图所示。,软件算法流程图如下所示,首先要完成对,DSP,和,TL16C550C,的初始化,在,TL16C550C,的初始化中要禁止,FIFO,的接收和发送;使能访问接收缓冲寄存器(,RBR,)和发送保持寄存器(,THR,);设置数据位、停止位和奇偶校验位;设置数据传输波特率为,38400,,然后设置一个,whlie(1),循环程序,在此循环程序中异步串口芯片,TL16C550C,完成从,PC,机中重复接收和发送数据的过程。,(,1,),TL16C550C,初始化,初始化过程如下:,UART_FCR=0 x00;/,清除接收和发送,FIFO,;,UART_LCR=UART_LCR /,清零位,7,(,DLAB,)访问接收器缓冲器、,THR,或,TER,;,UART_IER=0 x00;/,禁止接收和发送中断;,UART_LSR=0 x00;/,线路状态寄存器清,0,;,UART_LCR=0 x03;/,发送或接收,8,位串行字符,无校验位,,1,位停止位;,UART_MCR=0 x00;/,设置,/CTS,控制输入和输出;,UART_LCR=UART_LCR|0 x0080;/,位,7,置,1,,访问除数锁存器,以设波特率,UART_DLL=0 x10;/,本例中设置波特率为,38400,UART_DLM=0 x0;,UART_LCR=UART_LCR /,位,7,重新清零,关键代码分析,(,2,)接收,函数,unsigned int Uart_rx(void),volatile unsigned long ii=0L;,while(!(UART_LSR&0 x01),if(ii+2000000),return(0 xffff);,return(UART_RBR);,TL16C550C,完成数据的接收过程为,首先查询线路寄存器(,LSR,)的第,0,位,如果等于,1,则说明,TL16C550C,已经将从,PC,机中接收的数据缓存在,TL16C550C,的接收缓冲寄存器(,RBR,)中,然后将此数据发送给,TMS320VC54x,同时也将此数据赋值给定义好的数组,data,将其作为发送过程中的数据。,(,3,)发送,函数,unsigned int Uart_tx(unsigned int data),volatile unsigned long ii=0L;,while(!(UART_LSR&0 x20),if(ii+1000000),return(0 xffff);,UART_THR=data;,return(0);,TL16C550C,完成数据的接收过程为,首先查询线路寄存器(,LSR,)的第,6,位,如果等于,1,则说明,TL16C550C,的发送保持寄存器(,THR,)为空,此时,TMS320VC54x,可将数组,data,中的数值写给发送保持寄存器(,THR,),然后,TL16C550C,再将数据传输给,PC,机完成发送过程。,结果验证,实验结果如图所示,
展开阅读全文