新闻  |   论坛  |   博客  |   在线研讨会
vxworks下基于TL16C752B的扩展串口驱动编写(mpc8347)
燧人 | 2010-04-20 15:51:59    阅读:3968   发布文章

vxworks下基于TL16C752B的扩展串口驱动编写(mpc8347)

      作者 王建忠  邮箱:wangjianzhongfj@163.com   2010-4-15

一、UART硬件介绍

(1)       串行通信的基本概念

(2)       9针串行口引脚简介

(3)       串口通讯流控制

(4)       奇偶校验

(5)       串行接口的结构图

(6)       Uart数据传送过程

二、扩展串口简介

    1)软件模拟法

2)利用并口转串口扩展串行口 

3)利用串行口扩展串行口

三、扩展串口芯片TL16C752B介绍

(1)       芯片主要特点

(2)       芯片引脚介绍

(3)       TL16C752B的内部寄存器

(4)       TL16C752BPC通信的软件变成

四、基于vxworks下的扩展串口驱动编写

 

一、UART硬件介绍

 

1、串行通信的基本概念

(1)同步和异步通信方式

串行通信有两种最基本的通信方式:同步串行通信方式和异步串行通信方式。同步串行通信方式是指在相同的数据传送速率下,发送端和接受端的通信频率保持严格同步。由于不需要使用起始位和停止位,可以提高数据的传输速率,但发送器和接受器的成本较高。异步串行通信是指发送端和接受端在相同的波特率下不需要严格地同步,允许有相对的时间时延,即收、发两端的频率偏差在10%以内,就能保证正确实现通信。异步通信在不发送数据时,数据信号线上总是呈现高电平状态,称为空闲状态(又称MARK 状态)。当有数据发送时,信号线变成低电平,并持续一位的时间,用于表示发送字符的开始,该位称为起始位,也称SPACE 状态。起始位之后,在信号线上依次出现待发送的每一位字符数据,并且按照先低位后高位的顺序逐位发送。采用不同的字符编码方案,待发送的每个字符的位数不同,在5、6、7 或8 位之间选择。数据位的后面可以加上一位奇偶校验位,也可以不加,由编程指定。最后传送的是停止位,一般选择1 位、1.5 位或2 位。

(2)数据传送方式

①单工方式。单工方式采用一根数据传输线,只允许数据按照固定的方向传送。图1中A 只能作为发送器,B 只能作为接收器,数据只能从A 传送到B,不能从B 传送到A。

②半双工方式。半双工方式采用一根数据传输线,允许数据分时地在两个方向传送,但不能同时双向传送。图1中在某一时刻,A 为发送器,B 为接收器,数据从A 传送到B;而在另一个时刻,A 可以作为接收器,B 作为发送器,数据从B传送到A。

③全双工方式。全双工方式采用两根数据传输线,允许数据同时进行双向传送。图1中A 和B 具有独立的发送器和接收器,在同一时刻,既允许A 向B 发送数据,又允许B 向A 发送数据。

                     1 数据传送

(3)波特率

波特率是指每秒内传送二进制数据的位数,以b/s 和bps(位/秒)为单位。它是衡量串行数据传送速度快慢的重要指标和参数。计算机通信中常用的波特率是:110,300,600,1200,2400,4800,9600,19200bps。

(4)串行通信的检错和纠错

在串行通信过程中存在不同程度的噪声干扰,这些干扰有时会导致在传输过程中出现差错。因此在串行通信中对数据进行校验是非常重要的,也是衡量通信系统质量的重要指标。检错,就是如何发现数据传输过程中出现的错误,而纠错就是在发现错误后,如何采取措施纠正错误。

①误码率

误码率是指数据经传输后发生错误的位数与总传输位数之比。在计算机通信中,一般要求误码率达到10-6 数量级。误码率与通信过程中的线路质量、干扰、波特率等因素有关。

②奇偶校验

奇偶校验是常用的一种检错方式。奇偶校验就是在发送数据位最后一位添加一位奇偶校验位(0 或1),以保证数据位和奇偶校验位中1 的总和为奇数或偶数。若采用偶校验,则应保证1 的总数为偶数;若采用奇校验,则应保证1 的总和为奇数。在接受数据时,CPU 应检测数据位和奇偶校验位中1 的总数是否符合奇偶校验规则,如果出现误码,则应转去执行相应

的错误处理服务程序,进行后续纠错。(后面有详细说明奇偶校验)

③纠错

在基本通信规程中一般采用奇偶校验或方阵码检错,以重发方式进行纠错。在高级通信中一般采用循环冗余码(CRC)检错,以自动纠错方式来纠错。一般说来,附加的冗余位越多,检测、纠错能力就越强,但通信效率也就越低。

 

2、9针串行口引脚简介:

 

图2 串行口引脚
9针串行口的针脚功能:

针脚

功能

针脚

功能

1

载波检测(DCD)

6

数据准备好(DSR)

2

接受数据(RXD)

*7

请求发送(RTS)

3

发出数据(TXD)

8

清除发送(CTS)

*4

数据终端准备好(DTR)

9

振铃指示(RI)

5

信号地线(SG)

 

 

 

(1)联络控制信号线

数据装置准备好(Data set ready-DSR)——有效时(ON)状态,表明MODEM处

于可以使用的状态。

注:DSR数传机(即modem)

 

数据终端准备好(Data t。。。 ready-DTR)——有效时(ON)状态,表明数据终端可以使用。

这两个信号有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。

注:DTR数据终端(DTE,即微机接口电路,如Intel8250/8251,16550)

 

请求发送(Request to send-RTS)——用来表示DTE(数传机)请求DCE(数据终端)发送数据,即当终端要发送数据时,使该信号有效(ON 状态),向MODEM 请求发送。它用来控制MODEM 是否要进入发送状态。

 

允许发送(Clear to send-CTS)——用来表示DCE(数传机)准备好接收DTE(数据终端)发来的数据,是对请求发送信号RTS 的响应信号。当MODEM 已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD 发送数据。

这对 RTS/CTS 请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中作发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS 联络信号,使其变高。

 

接收线信号检出(Received Line detection-RLSD)——用来表示DCE(数传机)已接通通信链路,告知DTE 准备接收数据。当本地的MODEM 收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD 信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(Data Carrier dectection-DCD)线。

 

振铃指示(Ringing-RI)——当MODEM 收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。

 

(2)数据发送与接收线:

发送数据(Transmitted data-TxD)——通过TxD终端将串行数据发送

到MODEM,(DTE→DCE)。

接收数据(Received data-RxD)——通过RxD线终端接收从MODEM发来

的串行数据,(DCE→DTE)。

 

(3)地线

有两根线SG、PG——信号地和保护地信号线,无方向。上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。例如,只有当DSR 和DTR 都处于有效(ON)状态时,才能在DTE和DCE 之间进行传送操作。若DTE要发送数据,则预先将DTR 线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在TxD 线上发送串行数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE 已由接收方向改为发送方向,这时线路才能开始发送。

 

(4)各定义线的电气特性

在 TxD 和RxD 上:逻辑1(MARK)=-3V~-15V

逻辑 0(SPACE)=+3~+15V

在 RTS、CTS、DSR、DTR 和DCD等控制线上:

信号有效(接通,ON状态,正电压)=+3V~+15V

信号无效(断开,OFF状态,负电压)=-3V~-15V

3、串口通讯流控制

我们在串行通讯处理中,常常看到RTS/CTS和XON/XOFF这两个选项,这就是两个流控制的选项,目前流控制主要应用于调制解调器的数据通讯中,但对普通RS232编程,了解一点这方面的知识是有好处的。那么,流控制在串行通讯中有何作用,在编制串行通讯程序怎样应用呢?这里我们就来谈谈这个问题。

(1)流控制在串行通讯中的作用
这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。现在我们在网络上通过MODEM进行数据传输,这个问题就尤为突出。流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。 PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止),下面分别说明。

(2)硬件流控制
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
硬件流控制必须将相应的电缆线连上,用RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用RTS来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用CTS来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将CTS线置低电平(送逻辑0),当发送端的程序检测到CTS为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将CTS置高电平。RTS则用来标明接收设备有没有准备好接收数据。
常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。DTR(Data Terminal Ready)和DSR(Data Set Ready)。这些现主要用于Modem通信。使得串口和Modem通信他们的状态。例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发送数据。一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。

3.软件流控制
由于电缆线的限制,我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制。一般通过XON/XOFF来实现软件流控制。常用方法是:当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符(十进制的19Control-S,设备编程说明书应该有详细阐述),发送端收到XOFF字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17Control-Q),发送端收到XON字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符。
应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。

 

4、奇偶校验

奇偶校验位是一个表示给定位数的二进制数中 1 的个数是奇数还是偶数二进制数。奇偶校验位是最简单的错误检测码。奇偶校验位有两种类型:偶校验位奇校验位。如果一组给定数据位中 1 的个数是奇数,那么偶校验位就置为 1,从而使得总的 1 的个数是偶数。如果给定一组数据位中 1 的个数是偶数,那么奇校验位就置为 1,使得总的 1 的个数是奇数。偶校验实际上是循环冗余校验的一个特例,通过多项式 x + 1 得到 1 位 CRC对数据传输正确性的一种校验方法。在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。

大家一定会问,如何计算奇偶性呢,在计算机内有一种特殊的运算它遵守下面的规则:
1+1=0; 1+0=1; 0+1=1; 0+0=0;我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。而使用上面方法进行的校验称为奇校验,奇校验只能判断传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。
Odd Parity(奇校验),校核数据完整性的一种方法,一个字节的8个数据位与校验位(parity bit )加起来之和有奇数个1。校验线路在收到数后,通过发生器在校验位填上0或1,以保证和是奇数个1。因此,校验位是0时,数据位中应该有奇数个1;而校验位是1时,数据位应该有偶数个1。如果读取数据时发现与此规则不符,CPU会下令重新传输数据。 奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。 如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。 同理偶校验的过程和奇校验的过程一样,只是检测数据中“1”的个数为偶数。

 

串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:

0100,0101=45H

D7 D0

由于干扰,可能使位变为1,(为什么不变0?)这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。

奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:

1 0110,0101

0 0110,0001

偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:

1 0100,0101

0 0100,0001

奇偶校验能够检测出信息传输过程中的部分误码(1位误码能检出,2位及2位以上误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。有些检错方法,具有自动纠错能力。如循环冗余码(CRC)检错等。

在串行数据通信中,常用的格式是 7 个数据位、1 个校验位、1 到 2 个停止位。这种格式用方便的 8 位字节巧妙地适应了所有的 7 位 ASCII 字符。也可以用其它的格式表示,8 位数据加上 1 个校验位可以传输任意的 8 位字节数据。
   在串行通信中,奇偶校验位通常是由UART这样的接口硬件生成、校验的,在接收方,通过接口硬件中的寄存器的状态位传给 CPU 以及操作系统。错误数据的恢复通常是通过重新发送数据,这个过程通常由如操作系统输入输出程序这样的软件处理的。

 

5、串行接口的结构图

由于CPU与接口之间按并行方式传输,接口与外设之间按串行方式传输,因此,在串行接口中,必须要有“接收移位寄存器”(串→并)和“发送移位寄存器”(并→串)。典型的串行接口的结构如图4所示。

图4 串行接口的结构图

在数据输入过程中,数据1位1位地从外设进入接口的“接收移位寄存器”,当“接收移位寄存器”中已接收完1个字符的各位后,数据就从“接收移位寄存器”进入“数据输入寄存器”。CPU从“数据输入寄存器”中读取接收到的字符。(并行读取,即D7~D0同时被读至累加器中)。“接收移位寄存器”的移位速度由“接收时钟”确定。

在数据输出过程中,CPU把要输出的字符(并行地)送入“数据输出寄存器”,“数据输出寄存器”的内容传输到“发送移位寄存器”,然后由“发送移位寄存器”移位,把数据1位1位地送到外设。“发送移位寄存器”的移位速度由“发送时钟”确定。

接口中的“控制寄存器”用来容纳CPU送给此接口的各种控制信息,这些控制信息决定接口的工作方式。

“状态寄存器”的各位称为“状态位”,每一个状态位都可以用来指示数据传输过程中的状态或某种错误。例如,用状态寄存器的D5位为“1”表示“数据输出寄存器”空,用D0位表示“数据输入寄存器满”,用D2位表示“奇偶检验错”等。

能够完成上述“串<- ->并”转换功能的电路,通常称为“通用异步收发器”(UART:Universal Asynchronous Receiver and Transmitter),典型的芯片有:Intel 8250/8251,16550。

 

6Uart数据传送过程

 

特点与格式:

起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开

始,以停止位结束,每一位都有固定的时间,字符之间没有固定的时间间隔要求。其格式如图3 所示。每一个字符的前面都有一位起始位(低电平,逻辑值0),字符本身有5~7 位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位,或一位半,或二位停止位,停止位后面是不定长度的空闲位。停止位和空闲位都规定为高电平(逻辑值),这样就保证起始位开始处一定有一个下跳沿。

从图中可以看出,这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起始式协议。传送时,数据的低位在前,高位在后。

起/止位的作用:

起始位实际上是作为联络信号附加进来的,当它变为低电平时,告诉收方传送开始。它的到来,表示下面接着是数据位来了,要准备接收。而停止位标志一个字符的结束,它的出现,表示一个字符传送完毕。这样就为通信双方提供了何时开始收发,何时结束的标志。传送开始前,发收双方把所采用的起止式格式(包括字符的数据位长度,停止位位数,有无校验位以及是奇校验还是偶校验等)和数据传输速率作统一规定。传送开始后,接收设备不断地检测传输线,看是否有起始位到来。当收到一系列的“1”(停止位或空闲位)之后,检测到一个下跳沿,说明起始位出现,起始位经确认后,就开始接收所规定的数据位和奇偶校验位以及停止位。经过处理将停止位去掉,把数据位拼装成一个并行字节,并且经校验后,无奇偶错才算正确的接收一个字符。一个字符接收完毕,接收设备有继续测试传输线,监视“0”电平的到来和下一个字符的开始,直到全部数据传送完毕。

由上述工作过程可看到,异步通信是按字符传输的,每传输一个字符,就用起始位来

通知收方,以此来重新核对收发双方同步。若接收设备和发送设备两者的时钟频率略有偏差,

这也不会因偏差的累积而导致错位,加之字符之间的空闲位也为这种偏差提供一种缓冲,所

以异步串行通信的可靠性高。但由于要在每个字符的前后加上起始位和停止位这样一些附加

位,使得传输效率变低了,只有约80%。因此,起止协议一般用在数据速率较慢的场合(小

于19.2kbit/s)。在高速传送时,一般要采用同步协议。

 

二、        扩展串口简介

这里,我只简单的介绍扩展串口几种方法,至于每一种的详细方案,就不方便在这里写。以后再做其他的扩展串口项目的时候再写。

Cpu自带的串口,是最方便的。当然,cpu自带的串口越多,价格就越贵。下面介绍三种扩展串口的方法。

 

1软件模拟法

软件模拟法可根据串行通讯的传送格式,利用定时器和主机的I/O口来模拟串行通讯的时序,以达到扩展串口的目的。接收过程中需要检测起始位,这可以使用查询方 式,或者,在端口具有中断功能的主机中也可以使用端口的中断进行处理。接收和发送过程中,对定时的处理既可以使用查询方式也可以使用定时器中断方式。为了 确保数据的正确性,在接收过程中可以在检测异步传输的起始信号处加上一些防干扰处理,如果是无线传输系统,在接收每个位时可以采用多次采样。对于有线系统 来说,1次采样就够了,你看IICSPI等,谁去进行了多次采样。

     软件模拟法占用的系统资源少、成本低、易于实现。已经被越来越多的人所采用。特别是基于PDK80CXX系列模拟的串口应用,以其适中的价格,超强的抗干扰性和超宽的工作温度,肯定会被更多的工业数据采集者所采用。

 

2利用并口转串口扩展串行口 

基于Intel8251的串行口扩展Intel8251是一种通用的同步/异步发送器(USART),它的工作方式可以通过编程设置,并具有独立的接收/发送器。能以同步或异步串行通信方式工作,自动完成帧格式,具有奇、偶校验和错误检测电路。

并行口扩展串口方法的功能比较强大,能提供MODEM控制信号、通讯速度高,但控制复杂,占用MCU的端口资源较多,同时价格也较高。

 

3利用串行口扩展串行口

利用串行口扩展串行口,控制简单,能最大限度地减少控制线,不需要占用太多的主机系统资源,而且通用性强,性能稳定,可保证数据的正确性。

 

三、        扩展串口芯片TL16C752B介绍

 

 

 

 1、主要特点

  TL16C752B是TI公司推出的新型UART(Universal Asynchronous Receiver and Transmitter )收发器。该器件的主要特点如下:

  ●引脚和ST16C2550兼容,内置两套UART系统,可独立工作;

  ●工作时,最高波特率可以达到1.5Mbps(使用24MHz晶体时)或3Mbps(使用48MHz振荡器或时钟源时);

  ●具有64字节发送/接收FIFO(接收FIFO包含错误标志)。由于收、发FIFO的触发等级可通过软件编程实现,因而减少了CPU的中断次数;

  ●接收FIFO的启动和停止等级可以通过软件编程来实现;

  ●具有两种控制模式:其中软件流控制模式可通过编程Xon/Xoff字符来实现;而硬件流控制模式则可通过设置RTS和CTS引脚及相应的寄存器来实现;

  ●波特率可编程;

  ●可编程下列串行数据格式:

  ——5、6、7、8 四种字符;

  ——数据奇偶校验或者无校验;

  ——1、1.5、2bits 停止位;

  ●内部闭环。

 

 2、 TL16C752B的引脚功能

  TL16C752B内含双UART,并自带64字节收发FIFO,可自动进行软件流和硬件流控制,最大波特率可达3Mbps。此外,TL16C752B还提供了其它一些增强功能,可通过设定EFR寄存器的相关位来实现。通过FIFO RDY 寄存器可读取TXRDY/RXRDY引脚的状态;而通过片内寄存器则可为使用者提供接收数据的错误识别、操作状态以及MODEM的接口控制信号。

 

 

TL16C752B的引脚排列如图1所示,各主要引脚的功能如下:

A0~A2

地址线,通过这几个引脚以及读写信号IOR和IOW可以访问及设定片内寄存器

D0~D7

双向8位数据线

CSA、CSB

两套UART的片选信号

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客