串口扩展范文

2024-07-25

串口扩展范文(精选5篇)

串口扩展 第1篇

1 基于SP2338的串行口扩展

SP2338是采用低功耗CMOS工艺设计的通用异步串行口扩展芯片, 它可轻松地将主机原有的1个串行口扩展成3个全新的全双工串行口。SP2338适用于1个起始位、8个数据位、1个停止位的多串口系统, 也就是说其帧格式是不可编程的。主机通过改变ADRI1, ADRI0地址线状态的方式选择3个子串口中的任意1个, 3个子串口的地址分别为00, 01, 10。地址11用于执行SP2338芯片本身的复位指令0x35或0x B5、睡眠指令0x55或0x D5、延时指令0x00。向RX0~RX3中的任意1个接收端口写任意数据即可将SP2338唤醒, 但由于SP2338的唤醒时间需要25ms左右, 故用于芯片唤醒的数据将不会被主机接收。因此, 可以先发送1个字节数据用于唤醒芯片, 延时25ms后即可进行正常的数据传输。

当单片机要向串口设备发送数据时, 其工作过程是:

(1) 先向SP2338的串口地址线ADRI0、ADRI1送地址信号 (ADRI0、ADRI1=00子串口0, ADRI0、ADRI1=01子串口1, ADRO0、ADRO1=10子串口2) ;再向与自已相连的母串口的通信线上送数据;

(2) SP2338的母串口收到单片机串口送来的数据后就根据ADRI0和ADRI1的状态, 把数据送往相应的子串口;

(3) 该子串口再把数据送往相连的串口设备。

当串口设备向单片机发送数据时, 其工作过程是:

(1) SP2338的某个子串口从串口设备接收到数据时, 送给母串口;

(2) SP2338的母串口把该数据再送给单片机串口, 同时在ADRO0和ADRO1线上送出子串口的地址;

(3) 单片机根据SP2338接收地址线ADRO0、ADRO1上的信号判定出是由哪个串口设备发出的。

由于SP2338的每个串口都有自己的发送缓冲区和接收缓冲区, 因此扩展后的3个串口就可以完全独立地同时通信, 就好像单片机同时拥有3个串口似的, 若1个单片机有2个串口, 那么配上2片SP2338就可以扩展到6个串口。

SP2338每个子串口的波特率都可以达到9600bps, SP2338工作时需要配1个晶振, 该晶振Fosc的频率与母串口的波特率有如下关系:

与子串口波特率的关系如下:

因此, 如果子串口采用9600波特率, 根据以上公式, Fosc=20MHz, 而母串口的波特率必须达到388400bps。这样与SP2338的母串口相连的单片机串口的波特率达到388400bps, 若单片机采用非11.0592M的工作晶振, 则波特率会有偏差, 不过, SP2338允许波特率误差为2.5%

未使用的输入端口, 如RX0、RX1、RX2等必须连接到VCC;未使用的输出端口, 如TX0、TX1、TX2等必须悬空;未使用的ADRI0、ADRI1必须连接到GND。

2 软件模拟法

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

例:软件设计中, 89C51单片机的P1.0和P1.1口分别模拟串行通信的发送和接收, 其接口程序主要由INPUT发送子程序和OUTPUT接收子程序组成。通信速率1200 bit/s, 帧格式为N.8.1。发送时, 先发送一个起始位 (低电平) , 接着按低位在先的顺序发送8位数据, 最后发送停止位。接收时, 先判断P1.1接收端口是否有起始低电平出现, 如有则按低位在先的顺序接收8位数, 最后判断P1.1口是否有停止高电平出现, 如有则完成一个数据接收, 否则继续等待。模拟串行通信程序清单如下:

3 使用双串口单片机

W77E58是与MCS51系列单片机兼容的可多次编程的快速微处理器, 内部集成有2个增强型的全双工串行口, 其串口增强性特征在于特有的地址自动识别和帧出错诊断功能。值得注意的是, 串行口1只能使用定时器1作为其波特率发生器;而串行口0既可以使用定时器0, 也可以使用定时器1。若使用时2串口通信波特率相同, 则可以同时使用定时器1, 从而减少占用1个定时器0。

(1) 自动帧错误检测。自动帧错误检测指的是在数据传输的过程中, 如果由于噪音等随机干扰造成接收方接收不到正确的停止位, W77E58能够自动检测出并设置标志FE (FE_1) , 此标志被定位在SCON.7 (SCON1.7) , 用户可以访问, 并且必须软件清除。

(2) 多机通讯自动地址识别。在标准的8051系列单片机中, 当进行多机通讯时, 发送9位数据, 最后一位只当作地址/数据识别位, 但是并不能区分准确地址, 准确地址须靠软件识别, 而在W77E58中, 增加了地址特殊寄存器SADDR和地址屏蔽特殊寄存器SADEN, 只有SADEN中的某一位为1, 计算实际地址时相对应的SADDR的位才有效, 若SADEN中某一位是0, 则进行实际地址计算时忽略对应的SADDR中的位。例如:

在进行多机通讯时, 只有接收到的地址帧和根据SADDR, SADEN计算出的地址完全相同时, 从机才会置位中断标志, 这完全由硬件自动完成, 而不是像标准8051系列那样必须靠软件完成。

参考文献

[1]李之棠.单片机通信技术与工程实践[M].北京:人民邮电出版社, 2005.

串口扩展 第2篇

摘要:介绍了TMS320C32 DSP实现异步串行通信接口的三种方法:软件模拟实现、硬件实现、专用协议芯片实现。给出了具体实现的硬件接口和软件编程。在接口的第二种和第三种实现方法中,都使用了FPGA实现逻辑接口。

关键词:数字信号处理 异步串行接口 现场可编程逻辑阵列 电气传动控制

高速数字信号处理器(DSP)在现代工业控制中,特别是电气传动控制中的应用非常广泛。大量文献介绍的应用于电气传动控制的DSP使用的是TI公司的,TMS320系列DSP芯片,这其中又以TMX210C3X和TMS320F24X为主流应用产品。TMS320C32(以下简称为C32)是TMS320C3X系列产品中应用比较多的一种。主工业控制中,常常需要使用上位PC机来控制底层的DSP芯片,一般采用异步串行通信协议,使用RS-232或485来实现。C32自身带有的串口为同步串口。为了实现C32和PC机之间的串行口通信,必须扩展C32的全双工异步串口(UART)功能。

C32实现UART接口的方法有三种:

(1)使用C32的现有资源模拟串行口的功能;

(2)使用可编程芯片(例如FPGA)实现同步和异步协议的转换;

(3)使用专用的异步通信器件(ACE)实现,例如PC机上使用16C550系列实现UART。

(本网网收集整理)

1 使用C32的现有资源模拟串行口的功能

通过使用两个通用I/O引脚、两个定时器和一个外部中断,可以用软件模拟UART的功能。使用中断实现软件模拟UART采用的通讯格式为:波特率9600bPs、8个数据位、一个停止位、无奇偶校验位。这种实现方法由Ted Fried高级计算机通信公司提供。

1.1 硬件

图1为硬件连接线图。接收线同时接到INT0和XFl引脚。起始位数据的下降沿触发外部中断INT0。传输线接到XFO引脚,使用上拉电阻输出。

图2

1.2 软件

1.2.1 接收数据

根据UAHT协议,接收到的第一个数据是起始位,在软件中。起始位会触发一个外部中断INT0。害INT0的中断服务程序例程RXINT0中,定时器0首先玻装入一个时间常数,这个时间常数的定时时间等于半个数据位的延迟时间;然后装入定时器0的中断向量表,并允许定时器中断0,程序返回主程序,等待定时器0中断。如果定时器0触发中断,RX-TMR-INT(接收定时器中断)例程则开始技行接收工作。第一个定时时间为半个数捉位的时间.CPU在接收位的中间时刻采样XFI的数据,并且验证接收到的数据是否为一个低电平。如果验证正确,表示接收到的数据为一个起始位,就可以接收数据了。在接收数据时,重新装载定时器0的定时值为一个数据位的时间并且启动定时器0,程序返回主程序,等待定时器0中断的到来。

在随后的定时器0的服务程序中,实现了在接收位的中间时刻采样接收线的状态来得到实际数据。将这些接收到的数据移位到一个存储器单元中。在第9次中断时,对接收到的停止位进行验证。如果正确,软件执行一个陷阱中断,程序返回到主程序。如果不正确,调用BAD_STOP_BIT子程序进行相应的错误处理。接收数据被处理完后,重新允许外部中断0,等待下一个起始位的到来。

1.2.2 发送数据

发送数据例程开始于主程序装载一个数据到指定的`存储器中,并且调用TX_MAIN例程。在这个例程中,状态定时器1的定时时间为一个数据位的时间,重新设置传输计数器的值,设置起始位,并且允许定时器l中断,返回主程序,等待定时器1中断的到来。只有传输计数器的值为0时,主程序才会允许重新装载下一个需要传输的数据到指定的存储器中。在定时器1的中断子程序TX_INT中,程序将要传输的数据(包含起始位、数据位和停止位)从XF0引脚上移位出去,直到传输计数器的值为0。

图3

具体的程序代码请见参考文献[1]。

2 使用FPGA实现异步和同步串行接口间的协议转换

有许多应用需要使用硬件UART。使用FPGA可以将同步串行口协议转换为异步串行口通信协议。具体的逻辑框图如图2所示。

系统使用的时钟为25MHz,FPCA中使用的时钟来源于C32的H3引脚。通信协议为:波特率9600bps、一个起始位、一个停止位、没有奇偶检验位。图3所示为传输电路。

通过设置传输定时器的定时值可以得到需要的9600bps的波特率。传输端口被配置为爆发传输模式,它可以产生UART的一个起始位。8个数据位之后的停止位可通过电路来实现。图4为接收电路图。

当电路检测到起始位时,接收电路开始工作。起始位的逻辑擅为0。延迟电路在起始位的下降沿被激活。延迟电路的设置使数据的采样发生在每个数据位的中间时刻,它提高了系统抗噪声的能力。

图4

3 使用ACE实现UART

微机上最早使用的ACE是8250,16C550是8250的功能升级器件。器件在结构上的最大差别是16C550增加了接收和发送FIFO,因此器件能够处于交替工作模式,减轻CPU额外的软件负担。在这种模式下,无论是接收还是发送,在可访问的缓冲寄存器和不可访问的移位寄存器之间都增加了16字节的FIFO(包含放在接收FIFO中的3位错误数据字节),可以使系统负担最小且系统效率最高,而且所有的逻辑功能都在16C550芯片上完成。TLl6C550A有两个管脚功能(N封装系列中引脚24和29,FN封装系列中的27和32)已经被改变,使用这两个信号可以允许信号使用DMA的方式来传输。

TLl6C550的主要功能为:TLl6C550在接收外部器件或MODEM的数据时?完成串行到并行的转换;在接收CPU的数据时,完成数据的并行到串行的变换,并进行串行发送。在ACE器件工作的任何状态下,CPU可以读和通报ACE器件的状态。通报的状态信息包括:传输操作正在进行过程中、操作状态、遇到了何种错误等,TLl6C550的内部包含一个可编程的波特率发生器,波特率为16x内部输入时钟频率.此内部输入时钟频率由输入的参考基准振荡器分频(由波特率分频寄存器的值决定)得到。TLl6C550具有完全的MODEM控制能力。包含一个处理器中断系统,根据用户的专用需要而设计,在处理通讯连接时,计算量是最小的。TLl6C550有两种封装形式:N PACKAGE (40脚) 和FN PACKAGE(44脚)。TL16C550的管脚按功能可以分为:外部时钟输入及波特率控制信号;数据和地址总线;片选及读写控制信号;MODEM控制信号;复位及中断控制信号。

如果C32要和PC机通讯,可使用TL16C550完成串行协议的转换。TLl6C550的输出接口要和一个电平转换芯片连接,用于和PC机的串行通讯接口互联。完整的接口示意图如图5所示。

其中的MAX232可以使用MAXIM公司的MAX3238来实现。

接口电路分为两大部分:DSP C32和串行通讯芯片TLl6C550之间的接口;串行通讯芯片TLl6C550和PC机之间的接口。完整的电路原理图如图6所示。

接口逻辑可以使用集成的CPLD实现,本系统中使用的是ALTERA公司的EPM7128SLC184-10。它将芯片TLl6C550作为DSP C32的一个外设端口送行寻址。

图6

相应的接口逻辑使用AHDL语言描述,具体如下:

TL16C550A一共使用8个地址对内部寄存器进行访问和控制。相对DSP C32系统而言,如果使用了上面的译码逻辑电路,则占用的8个地址为:0X818000~0X818007。

TLl6C550A串行接口寄存器的寻址表如表1所示。

表1 TL16C550A的寄存器寻址表

DLAB*A2 A1 A0寄 存 器 名 属 性 地址值 00 0 0接收缓冲寄存器RBR 只读 0X818000 00 0 0发送缓冲寄存器TBR 只写 0X818000 00 0 1中断使能寄存器IER 读/写 0X818001 X0 1 0中断标志寄存器IIR 只写 0X818002 X0 1 0FIFO控制寄存器FCR 只写 0X818002 X0 1 1线路控制寄存器LCR 读/写 0X818003 X1 0 0MODEM控制寄存器MCR 读/写 0X818004 X1 0 1线路状态寄存器LSR 读/写 0X818005 X1 1 0MODEM状态寄存器MSR 读/写 0X818006 X1 1 1便签寄存器SCR 读/写 0X818007 10 0 0除数低字节锁存器DLL 读/写 0X818000 10 0 1除数低字节锁存器DLH 读/写 0X818001

DLAB表示线路控制寄存器的第7位的逻辑值。

在程序中,使用逻辑地址0X818000~0X818007对TLl6C550A的各个寄存器进行寻址就可以了。

本文介绍的三种实现C32异步串行口的方法,前两种方法使用不是非常方便,而且占用了大量的C32系统资源,一般都使用第三种方法来实现C32和PC机之间的通信。

串口扩展 第3篇

关键词:FPGA,多串口扩展,运动控制

0 引言

串口通讯因为其协议简单, 操作方便, 如今已在工业控制系统、仪器测量系统等各个领域被越来越广泛地应用[1]。而现代计算机、各种处理芯片等其他控制终端仅仅配备了少量的通用串口, 在很多需要多串口的系统中并不能满足需求。为了解决在所研究的全向移动机器人运动控制系统中出现的串口个数不能满足的问题, 现使用FPGA (field-programmable gate array) 芯片进行逻辑编程, 实现了扩展多个串口进行通信的功能。

1 运动控制系统结构

在全向移动机器人的运动控制中, 使用伺服电动机控制底盘驱动机器人可以进行精密的运动控制, 本文使用MAXON电动机搭载以色列公司生产的Elmo伺服控制器进行伺服控制。Elmo伺服驱动器提供了串口与控制芯片通信进行命令地接收和反馈。在运动控制系统中, 微处理器采集各种传感器的信息进行分析综合, 判定机器人当前所处的状态, 根据目前自身所处的状态 (包括姿态, 方向角, 位置点, 加速度, 速度等其他方面) , 对安装于机器人底盘的三个电动机发出不同的运动命令, 使各个电动机带动机器人的三个全向轮协同工作, 达到所需要的运动轨迹, 速度, 姿态等。

本文的运动控制系统采用了美国公司德州仪器所生产的DSP2812作为主控制器, DSP2812拥有两个串行通信口SCIA和SCIB, 但是, 在该全向定位控制系统中, 不仅需要控制三个伺服电动机的运动, 而且还需要与其他传感器和一些监测设备 (例如监测状态的电脑终端等) 进行通讯, 因此, 为了实现这些扩展的功能, 利用FPGA设计了中间扩展模块。全向机器人运动控制系统结构如图1所示。

该系统中的DSP2812与FPGA之间的数据传输采用了并口通信, 将扩展的子串口映射到不同的地址中, 需要往哪个子串口传输数据时往相应的地址中写入数据即可, 读取时, 当可读信号脉冲来时, 给予中断并通过控制线判定读取的串口号。

考虑到并行通信口要比串口速度快, 速度级并不一致, 所以设计了缓存模块, 在发送和接收系统中加入16×8的FIFO (first input first output) 。

另外, FPGA是TTL电平, 而串口协议规定的逻辑1电平是-3V~-15V, 逻辑0电平是+3V~+15V, 两者使用了max232进行电平转换。

2 FPGA扩展模块的设计

为了实现上述的控制要求, 本次设计的FPGA使用Altera公司的Cyclone II系列的EP2C5Q208C8芯片, 软件设计在Quartus II开发集成设计环境中完成。通过Verilog硬件描述语言实现的功能设计。设计的一些主要模块有全局控制模块, 时钟发生器模块, 发送模块, 接收模块。通过对这些模块的设计编程实现相应的时序控制, 完成串口扩展的功能。

2.1 时钟发生模块设计 (图2)

对频率为40MHz的晶振源进行分频, 产生所需要的各种时钟频率。将串口通信的波特率设为9600bit/s, 在具体的实现过程中, 发送和接收模块工作频率设为波特率的16倍, 具体分频时, 创建一个发送器时钟变量和一个计数变量, 初始化为零, 每当系统时钟上升沿到来时, 计数变量自加1, 当计数到130时, 发送器时钟变量电平立即反转, 计数清零, 这样循环往复, 就产生了所需的发送接收模块的工作频率。同理, 还可以用它产生其他所需要的各种时钟频率。

2.2 接收模块设计 (图3)

通过时钟发生模块得到的接收模块的工作时钟频率为波特率的16倍, 接收模块首先等待数据的到来, 串口通信在空闲时为高电平, 当有数据进行通讯时首先发送一个低电平的起始位, 接收模块在每个工作频率的上升沿到来时检测输入是否为低电平, 若是则开始计数, 如果连续8个工作频率都检测为低电平, 则确认接收到了起始位, 此后每隔16个时钟接收一位数据, 并将接收到的数据通过移位寄存器转化成并行数据。最后通过并行口传输给主控制器。若接收过程中发现错误接收, Error线拉低, 并且丢弃此次所接收数据。

2.3 发送模块设计 (图4)

从DSP输出的并行数据在发送模块里转化成串行数据从相对应的串口输出。当发送数据信号电平为高, 则将并行数据锁存放入特定寄存器, 判定发送寄存器是否有数据, 如果有将数据放入FIFO模块, 等待发送。对于要发送的数据, 在时钟的控制下移位寄存器将它按照从低到高依次发出。

2.4 全局模块

完成上述各子模块的设计后, 需要考虑如何使这些子模块在完成自己的功能的同时相互之间配合完成所需的功能。为此, 设计了一个全局模块负责这些子模块的协调调度。并口的读写时序与DSP的读写时序同步, 需要发送数据时, DSP先拉低FPGA的WR信号线, 通过地址线和数据线往相应的地址发送相应的数据。FPGA接收到数据后, 由于地址的不同, 端口选择线CS[2∶0]将需要发送的端口线拉低。在时序的推动下, 并行数据发送给相应分端口的发送模块, 然后发送模块通过将数据移位按照一定的波特率串行发送出去。接收数据时, FPGA在接收模块中将串行数据接收转化并行数据, 并拉低自身的状态线, 全局控制模块通过对状态线的读取获取数据来自于哪一个端口。整个FPGA串口扩展系统的程序图如图5所示。

3 结语

本文成功地在运动控制系统中实现了基于FPGA的串口扩展, 解决了处理器串口较少的问题。用Labview编写的上位机测试软件对此系统进行了长达数个小时的发送和接收测试, 结果表明效果良好。并且此设计还可以运用到其他需要串口扩展的平台或系统中去, 应用面广, 实用前景好。

参考文献

[1]樊正方, 罗晖.基于FPGA的串口集线器设计[J].工业控制计算机, 2008, 21 (9) :54-55.

[2]张羽, 胡玉贵, 等.基于FPGA的多串口扩展实现[J].电子器件, 2009, 32 (1) :233-236.

[3]张伟, 谈良.串行通信接口的扩展在电台组网控制系统中的应用[J].指挥信息系统与技术, 2010, 01 (1) :46-49, 81.

[4]周之炎, 毛玉良.机器人多路传感器数据采集系统的实现[J].机械制造与自动化, 2009, 38 (1) :157-159.

串口扩展 第4篇

在仪器仪表数据通信中, 串行通信一直具有极其重要的地位。异步串口通信具有线路简单、应用灵活、可靠性高等一系列优点, 长期以来获得了广泛的应用, 在数字控制领域, 其优越性尤为明显[2]。TMS320F2812是TI公司的一款性价比较高的32位定点DSP芯片, 应用前景非常广阔。但它仅有两个异步串行通信接口, 这在很多应用场合远远不够。在数字化外设较多的嵌入式系统设计中, 要满足高实时性、高波特率的要求, 则需要进行多串口异步通信接口, 因此高速可靠通信的应用十分必要[3]。

目前, 串口扩展芯片的应用已经相当普遍, 如上位机与多行串行通讯, 下位机再与多个子系统串行通讯, 串行数字传感器信号采集等[4]。在许多文献中都可以查阅, 但大多都是应用单片串口扩展芯片 (如TL16C554A或TL16C752B) 扩展了DSP的4路或2路串口, 几乎没有文献资料对多片串口扩展芯片如何使用进行说明。当单片串口扩展芯片无法满足嵌入式系统的外部数字传感器数量要求时, 则需要两片或多片串口扩展芯片与DSP进行异步串行通讯。本文以两片TL16C752B为例, 通过硬件实现与软件设计, 根据时序要求, 通过长期、大量的试验, 验证了多串口扩展芯片与DSP通讯的可行性及可靠性, 大大提高了DSP的与外设数字器件的通讯能力, 使DSP可以获取更多有效、快速的数据信息。

1 系统硬件设计

某机载航空相机的多串口扩展芯片数字传感器采样系统由TI公司生产的TMS320F2812、TPS767D301、两片TL16C752B, SN164245以及两片AML26C32组成。

TMS320F2812作为CPU主要处理异步通讯芯片的工作时序、参数配置和控制逻辑, 传感器数据、地址的分配以及数字传感器信号处理。DSP与TL16C752B使用两个频率为29.4912MHz的晶振。电源芯片TPS767D301为TMS320F2812提供3.3V驱动电源和1.9V核心电源。差分转换芯片AML26C32将数字传感器的差分信号转换为5VTTL电平信号。电压转换芯片SN164245将传感器的5V电平信号转换为3.3V的电平信号, 提供给DSP和串口扩展芯片。串口扩展芯片TL16C752B将外部串行数据转换为并行数据传送给DSP。系统的结构框图如图1所示。

1.1 串口扩展芯片与DSP接口

TL16C752B是一款TI公司生产的高性能UART芯片, 具有两个异步串行转换通道, 每通道可以从外围设备接收数据, 实现串并转换;同时也可以从CPU端接收数据, 实现并串转换;采用8位异步并行存储器接口, 3.3V电源供电, 每通道具有64BYTE深度的FIFO, 最大波特率3Mbp。在FIFO模式下, 能大幅减少CPU的中断数量, 具有软件/硬件自动流控制的特点, 可极大降低软件开销;可工作于查询模式, 中断模式和DMA模式, 并且编程可选择中断和DMA的FIFO深度等级;保持与移位寄存器使得CPU与串行数据问不需要精确同步;具有可编程的波特率发生器, 便于灵活选择数据收发频率[4]。

TL16C752B必须在硬件复位后, 才能进行寄存器配置, 复位脉冲宽度要求至少200n S, 因此, 不宜将其RESET引脚与DSP的复位引脚连接, 而用一个GPIO口控制其复位, 这样在TL16C752B与DSP发生数据失锁或通讯故障时, DSP不复位的情况下, 重新对TL16C752B进行复位配置寄存器后建立链接[5]。文中将TL16C752B配置为DMA查询模式, 16BYTE深度FIFO, 启用超时中断, 接收串行数据, 实现串转并数据转换。传感器数据由芯片的RXA, RXB脚输入, 当FIFO中的数据溢出, 或产生超时中断后, 相应的RXRDY脚发出数据有效信号, DSP访问CPLD以控制TL16C752B的片选信号CSA、CSB。DSP的地址信号A0、A1、A2与片选信号共同作为TL16C752B的地址端口进行数据的读取和寄存器的读写。DSP的数据端口D0~D7与TL16C752B的数据端口D0~D7连接。DSP的读写信号IOR、IOW与TL16C752B的读写信号IOR、IOW连接, 从而控制写入或读取TL16C752B的FIFO寄存器数据[6]。器件接线图如图2所示。

外部数字传感器为两个数字光纤陀螺, 两个数字编码器。

1.2 串口扩展芯片寄存器设置

TL16C752B共有20个寄存器, 各寄存器地址通过地址线A0、A1、A2以及寄存器进行寻址, 增强功能寄存器与通用寄存器地址复用, 通过程序对寄存器进行读写、修改。寄存器映射地址与功能如表1所示。

配置系统通讯波特率时, 线性控制寄存器LCR的最高位置位, 即LCR=0x80。配置增强功能寄存器EFR时, 则需令LCR=0x BF。查询模式将IER配置为0, 而LCR低四位决定通讯格式的配置。

1.3 串口扩展芯片时序

串口扩展芯片的复位引脚连到DSP通用I/O口, 系统上电后, 该I/O口输出为高电平, 使串口扩展芯片处于复位状态, 可靠复位后, 该I/O口输出为低电平, 开始串口扩展芯片寄存器配置[7,8]。在寄存器配置过程中, DSP地址线、写信号与片选信号共同作用于串口扩展芯片, 该过程时序如图3所示。

寄存器配置结束后, 扩展芯片按照设定的波特率和数据格式进行数据采集, 当采集字节数达到设定F IF O深度时, 扩展芯片的RXRDY由高电平变为低电平, DSP发出读信号, 并通过查询该引脚状态进行数据读取[9]。时序图如图4所示。

1.4 串口扩展芯片硬件连接注意事项

当多片扩展芯片并联时, 其片选引脚应与DSP或CPLD控制引脚相连。多余的扩展芯片片选引脚应强制拉高, (当三片TL16C752B连接五路外设时, 其中一个芯片只用一路片选, 另一路应拉高) 否则该引脚可能出现不确定状态, 造成数据总线不正常。

当芯片复位后, 各寄存器初始化为默认值, 应重新配置寄存器, 否则芯片无法正常工作。

每个晶振只能驱动两个串口扩展芯片, 如果串口扩展芯片数量大于2需增加晶振。

2 系统软件设计

系统软件基于DSP嵌入式系统的开发环境CCS 3.3平台, 并采用C语言开发编写。该系统软件主要分为三个模块:初始化模块、数据采集及处理模块和数据错误处理模块。

2.1 初始化模块

初始化模块主要完成DSP内部时钟、寄存器初始化配置、GPIO端口初始化、定时器中断设定及串口扩展芯片初始化配置等功能。系统初始化后, 便可按规定的时序完成系统需求。

对TLI6C752的初始化首先需要改置波特率、中断使能寄存器 (IER) 、MODEM制寄存器 (MCR) 、FIFO控制寄存器 (FCR) 、线性控制寄存器 (LCR) 。

可编程波特率寄存器分为高位寄存器 (DLH) 和低位寄存器 (DLL) , 其可编程波特率寄存器加载值计算公式如下:

加载值=外部芯片时钟/ (16*波特率*系数)

当且仅当LCR=0x80时, 才能将加载值写入可编程波特率寄存器的DLH和DLL。加载时设置MCR的第7位为0, 系数为1。该系统采用29.4912MHz的输入时钟, 数字编码器的波特率为115.2kbps, 由公式得DLL的加载值为16, 高位加载值为0;数字光纤陀螺的波特率为230.4kbps, 由公式得DLL的加载值为8, 高位加载值为0。系统采用查询接收方式, 中断使能寄存器 (IER) 设置为0。MODEM控制寄存器 (MCR) 与EFR用于设置FIFO控制寄存器触发级别。线性控制寄存器 (LCR) 控制数据传输的格式, 包括字长、停止位的个数以及校验类型的选择。数字编码器的字长8位, 1个起始位, 1个停止位, LCR设置为3。数字光纤陀螺的字长8位, 1个起始位, 偶校验, 1个停止位, LCR设置为0x1B[10,11,12,13]。

2.2 数据采集及处理模块

传感器数据采用查询方式接收, 当TL16C752B中的FIFO达到FCR设定的字节数时, 其RXRDY引脚由高电平跳变为低电平, 此时DSP与RXRDY相连的输入I/O口循检到低电平信号时, 读信号有效, CPLD控制其片选信号有效, 接收保存寄存器的地址为0x00H, 所以DSP地址线A0、A1、A2输出为0x00H时读取传感器数据, 开始读取FIFO中的数据, 并设置数据更新标志位。当FIFO被读空时, RXRDY引脚则再次变为高电平, DSP停止读取数据, 数据更新标志位清零。

在一帧数据接收完成后, 需要对传感器原始数据进行重新组合和数据转化, 为了不占用系统资源, 及时响应数据更新, 该数据处理过程仅在数据更新标志位为零时进行。

2.3 数据错误处理模块

为了保证数据更新的实时性和有效性, 软件进行数据奇偶校验外, 还进行了帧头校验与数据超时校验。本系统中由于数字编码器无奇偶校验位, 所以无法进行奇偶校验, 但可以进行帧头校验和数据超时校验, 当编码器的帧头为0x7E且帧尾为0x E7时, 认为该帧数据正确有效, 数据帧无效计数器清零, 当数据无效帧计数累加超过三十次, 认为数据更新超时, 此时对TL16C752B复位, 并重新初始化配置其寄存器。数字光纤陀螺为偶校验, 也可以进行帧头校验和数据超时校验, 当陀螺的帧头为0x80时, 认为该帧数据正确有效, 数据帧无效计数器清零, 当数据无效帧计数累加超过三十次, 进行复位操作[14,15]。

3 测试结果

为了验证系统对外设传感器数据采集的时序及错误处理机制是否满足设计要求, 分别对两个数字编码器和数字陀螺进行数据读取, 并记录其工作时序。数字编码器的一帧数据由4个字节组成, 帧头为0x7E, 角度数据2个字节, 帧尾为0x E7。当一帧数据传输结束后, 超时中断触发RXRDY信号由高变低, 当DSP查询到该信号有效后, DSP输出片选信号, 读信号有效, 并读取串口扩展芯片中FIFO的一帧数据, FIFO被读空后RXRDY信号再次变高, DSP输出片选无效, 读信号无效, 完成一帧数据读取。当帧头不为0x7E或帧尾不为0x E7时, 该帧数据被认为是无效数据, 丢弃, 当数据帧连续30次无效时, TL16C752B重新复位。数字编码器的工作时序如图5所示。

数字光纤陀螺的一帧数据由11个字节组成, 帧头为0x80, 角速度数据10个字节。当一帧数据传输结束后, 超时中断触发RXRDY信号由高变低, 当DSP查询到该信号有效后, DSP输出片选信号, 读信号有效, 并读取串口扩展芯片中FIFO的一帧数据, FIFO被读空后RXRDY信号再次变高, DSP输出片选无效, 读信号无效, 完成一帧数据读取。当帧头不为0x80时, 该帧数据被认为是无效数据, 丢弃当数据帧连续30次无效时, TL16C752B重新复位。数字光纤陀螺的工作时序如图6所示。

4 结语

本文通过对TL16C752B串口扩展芯片的应用、原理分析及系统设计, 实现了基于DSP嵌入式系统的多串口扩展芯片并联设计应用这大大提升了DSP对数字外设传感器的访问能力, 提高了DSP系统集成度, 使一个DSP单元可以完成多传感器系统数据采集和基于多传感器反馈机构的控制。该传感器采集系统已应用到某型号机载航空相机中, 系统运行可靠, 传感器数据采集速率达到设计要求, 多传感器采集时序符合设计要求, 不存在数据竞争现象。

摘要:随着数字化电子芯片技术的飞速发展, 数字化传感器在通信、电力系统、航空航天、自动控制、医疗和电器等诸多领域中得到了广泛的应用。如今, 机载航空相机上的传感器几乎均实现数字化, 如陀螺、编码器、温度传感器及压力传感器等采用异步串行通信接口。TL16C752B是TI公司生产的异步通信芯片, 它具有两路异步串行通信接口, 实现串转并功能。数字信号处理芯片TMS320F2812只有两路异步串行通信接口, 其无法应用于多数字传感器并行的环境下, 文中利用多片TL16C752B对TMS320F2812SCI串口进行扩展, 已完成DSP对多路数字传感器数据的采集。

串口扩展 第5篇

目前多串口扩展技术较为成熟,实现方法主要包括以下5种,笔者通过对各自优缺点的分析比较,结合具体情况,设计出基于C8051F020芯片智能车载终端多串口扩展通信的优化方案。

1)软件模拟法实现串口扩展:通过普通IO口来模拟串口工作方式来实现串口的功能,但是可靠性差,串口各项指标难以保证,一旦模拟串口过多,很容易出现丢数据的情况,并且占用MCU大部分资源,同时不能实现高速率通信[1]。2)通过串口扩展芯片实现串口扩展:CPU芯片串口与串口扩展芯片连接而扩展成多串口。对于该方式,控制简单,占用CPU较多资源,性能比较稳定,但是如果扩展芯片的串口数据量比较大并且几个扩展串口同时收到数据时会出现丢数据的情况。3)通过SPI或IIC的方式扩展:该方式同通过串口扩展芯片情况类似。4)通过FPGA/CPLD的串口扩展:该方式具有灵活多样,体积较小,成本较低,多串口同时工作占用CPU资源较多,并且要求硬件设计人员会FPGA/CPLD和相应编程。5)通过并口方式扩展串口:该方式响应速度快,控制简单,占用CPU时间不多,但是功能强大,控制灵活,性能稳定,不会丢数据。

综上所述,在以上5种串口扩展方案中,采用并口方式扩展芯片以实现扩展串口具有硬件要求较低,控制灵活,性能稳定的优势,因此笔者在智能车载终端的设计中选用该方式进行多串口的扩展。

本文采用串口扩展芯片SC28L194的4路UART器件,C8051F020为核心设计出智能车载终端。

2 多串口扩展实现方法

SC28L194 4路UART是一款单片封装的CMOS-LSI通信器件,它提供了4路完全独立的全双工异步通道,具有16字节的FIFO,使用用户定义的XON/XOFF字符可实现自动带内流控制,唤醒模式下可进行地址识别。主机和4路UART之间的所有通信都使用同步总线接口。接收器和发送器具有16字个节的FIFO,最大限度地减少了接收器超时的情况,降低了中断的软件开销,并且在中断的上下文包括通道编号、器件中断类型,发生器或接收器FIFO的填充点。

2.1 硬件逻辑电路设计

由于智能车载终端功能较多,除了GPS或北斗定位和GPRS通用无线分组通信业务或4G通信功能以外,还需要可以连接摄像头、指纹识别模块。单片机C8051F020通过74LS373对单片机的D0-D7端口进行数据和低8位地址的分离,从而方便对28L194芯片的寄存器进行读写操作,同时单片机C8051F020可以灵活的对部分管脚进行功能配置,比如可以配置P1.1为外部中断INT0,这样就可以连接到SC28L194芯片的中断请求脚。

2.2 软件设计

单片机发送数据给单元模块的流程:

单片机通过向SC28L194的相应通道的寄存器写数据,就会将该数据通过该通道发送到相应模块。比如单片机向SC28L194芯片通道C的TXFIFO写入数据0X10,那么SC28L194就会将0X10数据通过RXDC发送给GPRS模块。

单片机接收各单元模块数据的流程:

当单片机的中断脚P1.1产生中断时,单片机的中断程序就会读SC28L194的中断寄存器CIR,根据读取到的值就可以知道是通过哪个通道发送过来的数据,然后再读取GRXFIFO寄存器的数据就是该通道发送过来的数据。比如当GPS模块通过通道D发送给SC28L194,SC28L194收到数据后就会产生中断请求将IRQN脚(即单片机的P1.1脚)拉低,同时将接收到的数据保存在GRXFIFO寄存器中,CIR通道位的值为011(即通道D)。

SC28L194串口扩展芯片既可以硬件复位又可以软件复位,该智能车载终端软件设计包括主程序和中断程序两大部分。

主程序流程图:系统上电后先由单片机对自己和SC28L194芯片进行初始化,其中包括对单片机定时器的设置,中断管脚的设置,SC28L194芯片是同步总线周期还是异步总线周期,各个端口的波特率,定时器重装寄存器的值,中断控制寄存器的中断临界值等等,然后通过发送数据给SC28L194芯片,再由该芯片将数据发送到相应端口,从而达到对GPS模块,GPRS模块、指纹识别模块等进行初始化,该智能车载终端只对SC28L194芯片接收串口数据产生中断,对串口发送数据时不产生中断。最后查询是否接收到SC28L194芯片发来的数据,根据不同端口的数据进行相应处理。

中断程序流程:先读取中断寄存器中的数据,根据数据判断出中断的类型和通道号。如果不是正确接收到数据,就进行出错处理。如果是正确接收到数据,先读出数据,然后根据通道号将数据放到相应的数组里面去并置相应标志,以便主程序根据标志进行相应处理。

3 结语

SC28L194串口扩展芯片结构简单,性能稳定,系统资源占用少,使用方便,通信速率快,适合于智能车载终端的串口扩展应用。处理器对该芯片的操作就相当于通过数据总线对某个外部地址进行读写操作一样,操作简单,并且速度很快,再加上该芯片4路UART接收器和发送器都具有16字个节的FIFO,所以性能稳定,不会出现丢数据的情况。本文利用该芯片实现了串口扩展的方案,并通过实验验证了其可行性。

参考文献

上一篇:环路故障下一篇:高职涉农专业