多串口扩展(共9篇)
多串口扩展 篇1
(一)前言
串行接口在数据通信中一直扮演着重要角色。他不仅没有因为时代的进步被淘汰,反而在性能上越来向其极限挑战。USB接口是当前PC机上的主流接口,但仍然有许多外设使用串口与PC机通信,尤其是在工业控制领域。
(二)ATM系统结构介绍
在ATM系统中,一般由控制主机,出钞机,磁卡机,打印机,密码键盘等设备组成。密码键盘主要实现客户银行密码的输入与数据的加/解密,出钞机实现点钞以及传送功能,磁卡机主要是读取客户银行卡的账号;打印机用来打印客户凭条以及交易日志。每个设备接受控制主机的指令,执行相应的操作,实现自动取款等功能。每个设备与控制主机的通信都是通过串口进行数据传输的。而一般PC的串口只有2个,因此需要扩展串口,ATM系统结构如图1所示。
(三)串口扩展模块设计
传统扩展多个串行口的方法是利用多个中断源,每个中断通常被分配给单一的设备。这是因为当多于1个的设备被设置成使用同一个特定中断时,系统不能辨认哪个设备使用中断线,所以就会产生混乱。但在嵌入式系统中,花费大量的中断源来扩展串口无疑是资源的浪费。针对这种情况,为了节省紧张的系统资源,本方案通过对CPLD的设计,采用1个中断源高效管理多个串口的有效方法实现了将PC主机上的一个USB接口扩展为8个通用串口接口,同时保证了多个串口中断的无漏监测与服务。
1. 串口扩展模块的结构组成
本设计采用ATMEL公司的89S52单片机来控制串口到USB接口之间的数据收发工作,选用PHILIPS公司的USB接口芯片PDIUSBD12实现单片机与USB器件之间的联接,多串口扩展以TL16C554芯片实现,并由一片CPLD实现高效多串口中断源管理,利用单一的中断源来管理多个扩展串口。在PC主机端,设计开发了WDM设备驱动程序对USB口进行虚拟管理,从而使得Windows应用程序能以访问普通串口的方式访问串口服务器上的多个串口。多串口扩展的系统结构组成,如图2所示。
2. TL16C554介绍
TL16C554是TI公司生产的4通道异步收发器集成芯片,它的每个通道能从外围设备或MODEM接收数据,实现串-并转换;同时它也可从CPU端接受数据,实现并-串转换。在FIFO模式下,传输和接收前将数据缓冲为16字节数据包,减少了CPU的中断数量。内部包含4片改良的16C550异步传输器件,使得串行I/O更加可靠,每个信道可实现串行和并行两种连接方式的转换,每个信道的状态可以通过CPU的操作读取,可以获取操作情况或任何的错误状态。三态输出为双向数据总线和控制总线提供TTL驱动能力、优先级中断系统控制、可编程的串行接口特性。
TL16C554的主要特点如下: (1) 由4个带有逻辑控制的TL16C550异步通信单元组成; (2) 最高可达1 Mbps的波特率, 具有可编程的波特率发生器, 便于灵活选择数据收发频率; (3) 具有16字节的收发FIFO缓冲器; (4) 具有可独立控制的发送、接收、线路状态和MODEM状态中断; (5) 具有全双工的接收发送线路, 可独立进行接收发送控制; (6) 全面的线路状态报告功能; (7) 充分分级的中断系统控制; (8) 三态TTL电平输出。
3. CPLD硬件电路设计
本设计中用CPLD设计了译码电路、锁存电路、逻辑或电路、三态门电路、状态机电路。由于对宏单元和管脚的要求不是很多,因此选用ALTERA公司的EPM7064芯片,44脚,PLCC封装。
用CPLD进行PDIUSBD12的选址,两片TL16C554共8个口的选址,以及对CPLD中一位寄存器的选址,共用到A3~A7以及DO进行译码由于P0口为数据地址线,所以要经过地址锁存器,以及A7, A6一起连到一个138译码器上。因为PDIUSBD12奇地址表示命令,偶地址表示数据,所以把两个地址接异或非门后再接到PDIUSBD12的片选端CS2,其地址为0x7000、0x7001。为了选中扩展的8个串口,将A3~A5连入另一个138译码器,将其译码为8个选通端连到每个芯片的片选上,然后用A6, A7, DO的译码CS0作为第二个138译码器的低使能端。其8个口的地址依次为0x0C000, OxOC8O0, 0x0D000, 0x0D800, 0x0E000, 0x0E800, 0x0F000, 0x0F800
(四)串口扩展模块的软件设计
1. 初始化软件设计
系统上电后需对16C554进行初始化,设置波特率、传输数据的帧格式、中断允许位以及FIFO的控制等软件设计包括主程序和中断服务子程序两部分,主程序完成TL16C554寄存器的初始化,打开中断,等待中断的响应;中断服务子程序主要实现数据收发工作。串行通信时所需要的参数通过初始化寄存器进行设置,这些参数包括通信数据的数据位数、停止位数、奇偶校验等。另外还需要设置发送和接收的波特率及中断方式,主要流程如图3所示。
本设计的参数设置是,8位数据位,1位停止位,无奇偶校验,波特率为9600,中断方式下,允许接收就绪中断和发送缓冲区空中断。
2. 虚拟串口驱动程序设计
为实现主机可以如操作本机串口一样通过主机USB口对串口设备进行数据读取,主机端设备驱动程序需将串口服务器的8个串口对应到主机的8个虚拟串口上。在WDM设备驱动程序设计中,这样的功能可以通过在USB功能驱动程序上层加上一个过滤驱动层来实现。应用程序发送数据到虚拟串口,而过滤驱动程序则将虚拟串口中的数据转发给USB功能驱动程序,反之亦然。基于WDM的USB设备驱动程序分层结构如图4所示。
(五)结束语
由于篇幅所限,本文只能从串口扩展的功能着手对整个系统的硬件和软件做一个简单的介绍。实验表明,上述软硬件设计可以实现四路串行信号的可靠及时异步收发服务。而且利用TL16C554及AT89S8252构成的串口扩展系统,硬件接口简单,使用经济,并且数据传输距离可远可近。这种主从式多机串行通信系统已被应用到实际系统中,该电路稳定可靠,具有一定的应用价值。
参考文献
[1]TI公司TL16C554Date Sheet.
[2]张念淮, 江浩.USB总线接口开发指南[M].北京:国防工业出版社, 2001.
[3]windows 2000设备驱动程序设计指南[M].机械工业出版社, 2003.
多串口扩展 篇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
1 总体设计
该串口扩展控制器硬件电路由S3C44B0X、电源、晶振电路、复位电路、JTAG电路、SDRAM存储器、FlASH存储器、串口扩展电路、串口电平转换电路等组成,其结构框图如图1所示。
2 单元电路
2.1 电源[1,2]
电源模块为整个系统提供供电,是系统工作的基础。在本系统中,由于CPU、SDRAM、FLASH等多种芯片所需的电压不同,故要求电源模块提供多种电压。其中S3C44B0X的I/O端口需要的供电电压是3.3V,内核供电电压为2.5V,其他的数字芯片需要5V电压。本设计采用一组9V的直流稳压电源供电,再经由LT1086、 LT1761和LM7805三组DC-DC转换芯片,分别产生3.3V,2.5V和5V三组不同电压值的电源,其中3.3V、2.5V电源电路如图2所示。
2.2 晶振电路
晶振电路用于向CPU及其它电路提供工作时钟。对S3C44B0X而言,时钟分为系统主时钟和实时时钟RTC( Real Time Clock)。
系统主时钟通过设置时钟模式管脚OM[3:2]=00,外接无源晶振,由内部电路产生时钟的方式。由于片内的PLL电路兼有频率放大和信号提纯的功能,因此系统可以以较低的外部时钟信号获得较高的工作频率,以降低因高速开关时钟所造成的高频噪声。根据S3C44B0X的最高工作频率以及PLL电路的工作方式,选择10MHz的无源晶振,经过S3C44B0X片内的PLL电路倍频后,最高可以达到66MHz。实时时钟则采用32.768K无源晶振作为时钟源,实时时钟RTC晶振电路如图3所示。
2.3 复位电路
在系统中,复位电路主要完成系统的上电复位和系统运行时用户的按键复位功能。为提高系统运行的稳定性,提供高效的电源监视性能,选取了专门的电源监控看门狗芯片ADM706TAR。该芯片性能优良,可以通过手动控制系统复位,同时还可以实时监控系统的电源。一旦系统电源低于系统复位的阈值,就会自动复位。同时,它还具备独立的看门狗电路,可以对系统运行情况进行监控,当一旦由于某种原因发生异常而在1.6S内没有收到喂狗信号时,就启动复位操作,使系统自动恢复到正常状态,其电路连接如图4所示。
2.4 JTAG电路
JTAG主要用于芯片内部测试及对系统进行仿真、调试。JTAG接口的连接有两种标准,即14针接口和20针接口。本系统采用的是14针接口方式,其接口电路如图5所示。
2.5 FLASH存储器
FLASH存储器用于存放程序代码,系统上电或复位后从中获取指令并开始执行。本系统采用一片TE28F320构建16位的FLASH存储器系统,其存储容量为4MByte(1×2M×16bit)。将S3C44B0X的nGCS0接至TE28F320的CE端,数据总线使用了D0~D15,地址总线使用了A1~A22。FLASH存储器电路如图6所示。
2.6 SDRAM存储器
SDRAM在系统中主要用作程序的运行空间,存放运行数据及堆栈区。与FLASH存储器相比,SDRAM不具有掉电保持数据的特性,但其存取速度大大高于FLASH存储器,且具有读/写的属性。因此,当系统启动时,CPU首先从复位地址0x0处读取启动代码,在完成系统的初始化后,程序代码调入SDRAM中运行,以提高系统的运行速度。
本系统中SDRAM采用Winbond公司的W9864DH,其存储容量为8MByte(1×4M×16bit),工作电压为3.3V,16位数据宽度,使用nGCS6作为SDRAM的片选信号。SDRAM存储器电路如图7所示。
2.7 串口电平转换电路
RS-232C[3]与TTL之间需要电平转换,也就是说,RS-232C的电平逻辑应转换为TTL电平之后,才能与S3C44B0X的串口相连。本系统中的电平转换芯片采用SP3232ECA,串口电平转换电路如图8所示。
2.8 串口扩展电路
由于S3C44B0X只能提供两个串行通信口,这在很多情况下无法满足实际的需求,因此需要进行多串口扩展的研制。
目前市场上有很多串口扩展芯片,本系统采用专用串口扩展芯片TL16C554。TL16C554是TI公司生产的通用异步通信芯片,主要特点如下[4]:
由4个增强的TL16C550A异步通信单元加驱动逻辑组成;
最高可达1 Mbps,具有可编程的波特率发生器;
具有16 Byte的收发FIFO缓冲器;
缺省的数据开始位检测,具有可编程的串行数据发送格式,数据位长度为5-8位,支持奇、偶校验或无校验模式,停止位长度为1、1.5、2;
每个通道具有全双工的接收发送线路,可独立进行接收发送控制;
TL16C554内部共有12个寄存器,这些寄存器分别用来实现通信参数的设置、对线路及MODEM的状态访问、数据的发送和接收以及中断管理等。通过A0,A1,A2三个片内寄存器选择管脚可访问或控制TL16C554的各个寄存器。
2.8.1 串口扩展电路设计
TL16C554与S3C44B0X连接电路如图9所示。为了节约S3C44B0X的I/O 接口资源, 在电路设计中使用74LV138 芯片作为地址译码器,由S3C44B0X的nGCS5与A22、A21、A20组合译码后产生四个通道的片选信号CS1~CS4,然后接TL16C554的4 路片选线CSA~CSD,从而将把TL16C554挂载在Bank5 地址空间上。S3C44B0X的数据线D0~D7 接TL16C554 的数据线,而地址线A0~A2 直接接至TL16C554的A0~A2,这样,S3C44B0X对TL16C554片内寄存器的读写操作同对外部RAM读写一样。由于中断资源丰富,TL16C554的4路中断信号引脚INTA~INTD直接接至S3C44B0X的外部中断 EXINT1~EXINT4上,CPU 的读写信号可直接与TL16C554相连。
这样,TL16C554的四个通道经由电平转换芯片连接实现TTL<->RS-232C电平转换之后,即可实现串行数据的收发。同时,这四个通道也可经由RS-485电平转换芯片(如MAX3485)实现与485总线的数据交换。
3 结论
本文给出了基于S3C44B0X的嵌入式多串口扩展控制器硬件电路设计。重点介绍了硬件选型并给出了详细的电路设计方案,经实际使用表明,该控制器运行稳定、可靠性高、具有很广的应用范围。
摘要:本文给出了一种基于微处理器S3C44B0X的多串口扩展控制器的硬件设计方案,该控制器提供了多种串行接口,实现了异种串口终端设备之间的互联。
关键词:S3C44B0X,多串口,控制器
参考文献
[1]John Catsoulis.Designing Embedded Hardware.O’Reilly Media,Inc,2002.
[2]A.J.Stratakos,R.W.Brodersen and S.R.Sanders,"High-Efficiency Low-Voltage DC-DC Conversion for Portable Applications,"Proc.1994Workshop on Low Power Design,IEEE Computer Society,Los Alamitos,Calif,Apr,1994.
[3]李建华,郭明编.RS-232和调制解调器高级通信编程[M].人民邮电出版社,2001.
多串口卡・什么是端口速率 篇4
多串口卡・什么是端口速率
端口速率即端口波特率,通常反映的.是多用户卡的系统吞吐量,即最大端口数×端口波特率/10。如瑞旺P990D多用户卡系统吞吐量为360Kbps,则在支持64端口时每一端口波特率为56.25Kbps,而在支持32端口时每一端口波特率为112.5Kbps(位/秒)。
由于一个系统本身所能支持的PCI插槽有限,所以,在PCI插槽足够的情况下,我们通常采用相同的卡,把端口平均分摊到每一块多用户卡上。但在PCI插槽数不够的情况下,就一定要采用高性能的多用户卡。
PCIE多串口卡设计 篇5
计算机一般只配置1到2个标准UART串行口。对于工控行业, 目前仍有大量设备需要使用串行口进行通信, 在某些特殊的案例下, 甚至需要有4-8设备需要使用串行口。在这些情况下, 需要配置扩展的多串口卡才可以满足实际使用要求。
PCI-Express是最新的总线和接口标准, 有英特尔在2001年发布, 到2009年发布3.0标准。目前, 大部分个人计算机已经配置了PCI接口总线。
本文多串口应该的需求, 设计了一款基于PCIE总线的八串口卡。
二、PCIE介绍
1. PCIE特点
PCIE与原有的PCI总线最大的区别在于它是基于多条1Bit的串行连接通道设备之间并不需要共享全部数据总线。
PCIe属于一种基于数据包的串行连接协议, 它的复杂度估计在PCI并行总线的10倍以上。之所以有这样的复杂度, 部分是由于对以千兆级的速度进行并行至串行的数据转换的需要, 部分是由于向基于数据包实现方案的转移。
PCIE是一个多层的协议栈, 包括了对话层, 数据链路层和物理层。控制协议比PCI总线负载, 但更为可靠, 可以支持更高数据传输速率。
简单而言, PCIE可以理解为一个由多条USB通道组成的并行总线。PCIE对码速率的提升, 很大程度上是借鉴了USB的成功经验。
2. PCIE物理层
在物理层界面, PCIE的每组数据线使用两个单向 (TX/RX) 的LVDS信号。对于2.0以前的版本, PCIE采用较为节省带宽而且可靠的8bit/10bit编码;3.0版本更是使用128bit/130编码方案。
PCIE提供几种不同的物理连接方案, 多个通道可以被两个设备同时使用以提升数据传输速率。
3. PCIE数据交换层
PCIE采用数据提交和应答分离的交换方案, 这种方案可以使设备充分利用数据线的带宽资源。因此, PCIE 1.0的单通道标称传输速率就大道2.5Gbps。16X模式下, 理论单向传输率达到40Gbps。
三、基于PCIE多串口设计
1. 基于PCIE的串口芯片
目前较为流行的PCIE转串口芯片一般可以转1到2个串口, 少数可以提供4或8个, 如下表所示。
这类芯片处理1、2、4串口时相当方便和廉价, 但在需要8个以上串口是则无能为力或价格成倍上升。
2. 基于PCIE的多串口扩展
多串口的扩展可以考虑另外一种方案, 使用PCIE转并口的, 然后通过并口扩展多串口。业界现在提供大量并口转8串口的标准芯片, 而且通过并口还可以轻松将8串芯片扩展到更多。
使用WCH384桥接芯片配WCH438芯片扩展8串口是性价比较高的方案, 而且扩展容易, 使用3片WCH438芯片可以直接扩展至28串口。
3. 电路设计分析
由于使用了LVDS技术, PCIE的信号质量比较好控制。但在这样的高频环境中, PCB布线还是需要特别注意信号的阻抗匹配。在布线中需要注意以下几点:⑴PCIE的PERP/PERN, PETP/PETN, REFCLKPP/REFCLKN是三个高频差分线对, 走线时需要按差分方式走线, 布线是都需要特别关注。⑵差分线对要等长布线, 线长差控制在0.2mm以内。⑶差分线从金手指到PCIE桥接芯片引脚的距离不大于10mm。⑷根据PCIE的规范, 差分线的线宽应该是7mil, 线距也应控制在7mil。⑸差分线走线要同步, 如同步拐角, 同步过孔。⑹两个差分线对的距离最好大与0.5mm。线对之间用地隔离。⑺差分线对的底层最好不要走高频信号线, 最好是有大面积覆铜保护。⑻PCIE桥接芯片的每个电源引脚都应该配置0.1uF的高频退耦电容, 而且每个电容必须尽量接近芯片的电源引脚。⑼注意电源线的线宽, 过孔的孔径是否可以满足电流容量要求。
4. 驱动程序
PCIE桥接芯片一般有提供主流操作系统下的驱动, 安装驱动后, 系统生成一个标准的并口。以此并口为基础再安装相关的并口转8串口货并口转28串口驱动即可以在计算机上实现8串口或28串口的扩展。
四、结论
实际使用表明, 使用PCIE并口桥接芯片搭配并口多串口扩展芯片是一个性价比很高的多串口扩展方案。方案的实施很简洁, 只需要2个廉价芯片就可以扩展出8个串口。方案也很灵活, 通过级联扩展可以直接实现28个串口的扩展。这种设计方案很好地满足工控领域的特殊多串口扩展要求。
摘要:本文介绍了基于PCIE接口的工业用多串口卡设计。阐述了PCIE总线的特点, 在PCIE规范下的板卡设计要求。
关键词:PCIE接口,多串口卡,设计
参考文献
[1]PCI Express Base Specification Revision 1.0, PCI-SIG, 2003
VxWorks下多串口通信设计 篇6
本嵌入式系统在传输距离远电缆较长时使用的是RS485广播方式,在近距离传输时使用的是RS422方式,实现数据容量较大的通信,用RS232实现VxWorks编译环境Tornado下的宿主机-目标机的连接、下载和调试.该多串口通信系统使用的主要硬件是盛博公司的基于PC104总线的SEM/MSP-8多串口卡.
1 硬件设置
SEM/MSP-8采用2片TG16C554芯片,共有8个串口,Port1~4 RS232/RS422/RS485/TTL可选 ;Port5~8 RS-232/RS-485/TTL可选,根据需要可以扩展到12个串口.带有16 B的 FIFO,标准配置下可以达到115 200bps,+5 V电压,8个串口的基地址和中断选择上电时从EEPROM中读取数据配置,上电后可通过软件配置.首先进行多串口板上的跳线设置,JP1,JP1a,JP2,JP2a,分别为设置Port1~Port8工作在RS232/RS422/RS485方式.D、C、B、A为基址地址设置,根据实际,这里基址设为0x100, D、C、B、A对应值为1 011,其中1表示短接,0表示断开.2,3,4,5,…,15为中断号,要使用哪个中断就将其跳为1,最好加上中断匹配电阻(通过J8设置).在此用到5,6,11三级中断.JCK为频段范围跳线,跳上时串口的工作频率是原来不跳上时的1/4[2].
跳线设置见图1.
Port1~Port4,为RS422工作方式 ,中断级别为5;Port5、Port6为RS485,中断号为6;Port7设置为RS232,中断号为11;Port8备用.其中Port1~Port4与通信的另一端为一一对应的关系,RS485因为可以广播,一个串口上对应的通信另一端又带了几个RS485端.如图2所示.
2 软件设计
软件设计包括初始化设计,接收方软件设计和发送方软件设计,其中发送方软件设计分为RS232/RS422发送方设计和RS485发送方设计.使用模块化的设计方法,在开发期间应用了数据流程图[3].
2.1 初始化软件设计
EMM8在系统启动时会从板上的EEPROM中读取各个端口的基本配置信息,主要是端口映射地址及分配的中断号,这些信息可以在启动后编程修改,在此设置串口的基地址为0x300,还可以通过对EEPROM的读写,用来对串口板进行上电自检.ACE串行通信口有一个可编程波特率发生器,以1到(216-1)为除数因子将时钟(1.843 2 MHz)分频,分频输出值(即串口通信的波特率)=时钟频率/(除数因子×16).2个8位除数因子锁存寄存器以16位二进制格式存储除数因子.(DLM高8位,DLL锁存除数因子的低8位).
软件流程如图3所示.
具体对各个寄存器的操作见源代码注释:
sysOutByte(BASEADDRESS+0,0x80+i);/*BASEADDRESS为板上硬件跳线确定的地址,在此为0x100,0x80使能最高位,i为串口号 */
sysOutByte(BASEADDRESS+1,COMBASE[i]>>3);/*设置的串口地址 */
sysOutByte(BASEADDRESS+0,0x88+i); /*0x8+i*//*写入存放串口i-1的中断选择的内部寄存器*/
sysOutByte(BASEADDRESS+1,LOADINT);/*设置中断号*/
sysOutByte(COM7BASE+3,0x9b); /*设置
通信格式,8-E-1*/
sysOutByte(COM7BASE+0,0x02);/*高位为0,低位为2*/
sysOutByte(COM7BASE+1,0x0);/*设置波特率9 600*/
sysOutByte(COM7BASE+4,0x09); /*使能外部中断和/DTR*/
sysOutByte(COM7BASE+1,0x05); /*外部数据接收中断置有效*/
intConnect(INUMTOIVEC(INTVECGET(LANUCHINT)),(VOIDFUNCPTR)BombINT,0); /*挂接中断服务程序, */
sysIntEnablePIC(LANUCHINT); /*开中断*/
2.2 接收软件设计
VxWorks系统中,在中断服务程序里不能有printf打印、取信号量、接收消息等,因为这些操作可能引起任务的阻塞.但是可以发送信号量,发送消息,在中断服务程序中应该尽可能地使用简单的原语操作,以便节省开销,同时提高可靠性,最好就是一个SemGive.在此把接收到的字符加入到环形缓冲中rngBufPut();也可以发送消息通知任务接收.根据具体的情况,可以添加一些容错处理.比如,每次退出中断前将接收缓冲寄存器(RBR)读空,退出中断时加一定很小(指令级)的延时:
for(ii=0;ii<0x400;ii++){}
软件流程如图4.
2.3 发送软件设计
RS232,RS422,RS485因为具体的电气和线路特征不一样,收发数据各不相同.抽象到软件层面,RS232和RS422可以看成相同的处理.它们发送软件具体源代码如下:
void BombSend422(void) {
while(i
if((sysInByte(COMBASE[i]+5))&0x20) {
sysOutByte(COMBASE[i],SendData[i]);
i++;
j=0; }
j++;
if(j>10 000) break; }
RS485在发送时,要先切换工作方式,然后才发送数据,最后把工作方式切换为接收.需要特别指出的是,RS485接收端和发送端的通信握手很重要,在一对正负线(L+、L-)上,不能同时又有接收又有发送,否则有可能烧毁硬件或者造成硬件工作不规则,通过示波器会看到波形失真,可能影响到系统的整体性能甚至是致命的错误. 具体在发送过程中,还要判断发送移位寄存器是否为空的TEMT位,在它为空时才表示发送缓冲区的数据已经完全送出,并且在发送完毕后加一定的延时,将其电平转换准备接收,然后才切换为接收方式:
bb=sysInByte(COMBASE[i]+5);
if(bb&0x40) /*判断TEMT位*/
{ /*发送数据*/}
for(ii=0;ii<0x400;ii++){}/*延时*/
sysOutByte(COMBASE[i]+4,0x09); /* 设置为接收方式
软件流程如图5.
3 设计中的注意问题
(1)串行字符的接收打包问题
字符设备和块设备相比,块设备可以对整个消息帧进行发送和读取,在编程实现时会相对的方便.字符设备每次收发只能按单个字符进行,其中一个不正确的字符可能干扰到整个通信系统工作不正常,尤其是报文格式不定长的时候.为此,对字符设备组成的报文进行分析很重要,需要一些容错处理.通常在一帧报文或者一个命令格式上,头2个字节加上报头、命令字,末2个字节加上校验和、结束符.接收时,判定报文的总长度,再加上以上的打包字节,这样在一帧数据中间多了几个字符的情况下,可以抛弃此帧数据,而不会连续的影响到下几帧.或者在头几个字符不正确的时候,可以滤掉多余的字节或者乱码,得出后边的正确报文.
(2)硬件进行初始化
直接在应用程序中对硬件进行初始化,而没有在板级驱动包(BSP)中.当存在多个中断但是中断级别又相同时,可以根据各个串口的不同地址来识别.在发生较多中断的时候,要对某些口进行一些读空操作,以免阻塞.
(3)看门狗的使用
此处延时很短,只用到了指令级,毫秒级以上定时使用看门狗定时器比较好,尤其在一些对实时要求比较高的场合.因为在VxWorks中,看门狗定时器是作为系统时钟中断服务程序的一部分来维护的,通常与它相联系的函数以系统时钟中断级作为中断服务代码来执行.用wdStart()启动看门狗进入延时状态,一旦计时结束,它将调用一个有wdStart()指定的一个中断服务程序,与taskDelay()延时不同,该中断服务程序在任务的上下文之外执行.所以taskDelay()可能会存在一定误差.
4 结 束 语
风河公司的VxWorks实时操作系统可靠性高,比WindowsCE的实时性好,相对于开源的嵌入式Linux,VxWorks编译环境Tornado更加简单和人性化,它已经成功应用于火星探测器和其他实时的高可靠系统中.多串口通信嵌入式系统使用了RS485的广播,Tornado下实现宿主机-目标机的连接使用RS232,它的不足之处就是下载到目标机进行调试的速度比较慢.软件固化到Doc上后,经实践证明,整个系统响应时间快,工作稳定可靠,通信流畅,满足了预期的要求.
参考文献
[1]孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Toanado[M],2002:21-27.
[2]朱德森.微型计算机(80486)原理及接口技术[M].2003:279-288.
多串口扩展 篇7
关键词:FPGA,串行通讯,脉冲
1 引言
随着FPGA技术的快速发展, 在一定的应用领域中, 有逐步代替ASIC的趋势, 使用FPGA可以将以前需要的多块集成芯片的电路设计到一片FPGA中, 大大减少了电路板的尺寸, 增强了系统的可靠性和设计的灵活性, 因此, 用FPGA代替原有的集成电路, 是现代数控企业研究的主要问题之一。
该设计采用的FPGA芯片是XILINX公司生产的Spartan3系列中的XC3S400-pq208, 采用40M有源晶振。为了以后改进系统的需要, 该设计采用分模块的编写方法, 整个设计分如下模块:串口采样时钟模块[1], 串口接收模块, 数据整合模块, 单位换算模块, 计算输出模块。
2 模块化的设计方法
该程序主要实现的功能是从串口接受数据, 数据为3组, 其中每组是2个16位的数据, 第一个数据要求是脉冲的周期, 周期的单位为us, 第二个数据要求是脉冲的个数。这3组数据控制的脉冲最后通过3个IO口引出, 以达到3轴脉冲同步控制的目的。整个程序的结构图如图1。
2.1 串口采样时钟模块的设计
该模块的设计是为了给波特率提供采样频率。我们采用的芯片是XILINX的Spartan3系列中的XC3S400-pq208, 芯片的晶振频率为40MHZ, 即一个周期为25ns。所谓采样频率, 就是将从串口传输进来的每位数据进行分频, 为了保证采样的准确性, 采样率为16倍的波特率。在数据在中间状态进行采样, 以保证最大程度上数据的准确性, 降低误码率。该设计要求波特率为38400bit/s, 即每传输一位数据的时候, 需要的时间为1/38400s, 将此时间进行16倍的分频之后, 得到的波形为每32个系统周期的时候翻转。于是设一个常数值为N=64, 当计数器counter的值为N/2-1的时候, 波形翻转。
端口定义如下:
Input clk;
Output div-baud, counter;
其中clk是系统时钟, div_baud是16倍波特率的分频, counter是内部计数器。
仿真结果如图2所示。
2.2 串口接收模块的设计
由串口发送过来的数据共有10位, 其中8位是有效数据。根据RS232异步通讯的帧格式, 在串口接收模块中采用每一帧的格式为:1位开始位+8位数据位+1位结束位。首先该模块要检测串口数据的起始位, 在检测到起始位后, 每隔一个波特率的时间对串口进行一次采样, 并存入寄存器的相应位置, 当每一帧的8位数据全部写入寄存器后, 再统一输出。
该模块的实现是通过一个较为简单实用的状态机来实现的。该模块有3个状态, 第一个为闲置状态, 第二个为开始状态, 第三个为接收状态。在时钟clock的驱动下, 对串口的起始位进行检测。在闲置状态中, 根据RS232的通信协议, 当没有数据传输的时候, 串口高电平的状态, 当输入数据变为低电平的后, 连续的采样值为0时, 则表明起始位到来。通过连续检测三个低电平状态来判断是否有起始帧, 有效的降低了系统噪声的干扰。当判断起始位到来之后, 进入开始状态, 即需要开始接受串口的数据。此后进入第三个接受状态, 控制内部计数器的递增, 并保持对rx进行采样, 将采样后的信号作为数据保存到寄存器中相应的位置。当8个有效的数据位接收之后, 将data_ready设置为高电平, 表示这一帧数据接收完成, 通知下一个模块接收数据, 并且准备接收下一帧的数据。
该模块的端口设置如下:
Input clock, rx;
Output data, data_ready;
串口接收的仿真结果如图3所示。
2.3 数据整合模块的设计
设计该模块的主要目的是为了接收从串口发进来的全部数据, 然后传给下一个模块, 这样可以在下一个模块中方便的处理全部数据。从串口输入的数据一共是3组, 每组2个数据, 每个数据是16位, 即12个8位数据。每组数据中的第一个数据代表了脉冲的周期, 第二个数据代表了脉冲的个数。从上个模块中传进来的是12个8位数据, 为了方便下一个模块直接计算串口数据, 将从上一个模块传送进来的数据放入一个寄存器中, 然后输出到下一个模块。从上一个模块传送进来的数据是12个8位数据, 将这些数据放进寄存器中, 每放一次, 计数器的值加1, 当计数器的值加到12之后, 将通知下一个接收模块接收数据。
2.4 单位换算模块的设计
该设计要求的精度为微秒级, 从串口传进来的数据要求对每微秒的脉冲进行处理, 所以, 需要将系统的时钟周期分频为微秒级, 这样, 在下一个模块中, 可以直接对微秒级的脉冲进行处理。这个模块的设计原理和串口采样时钟模块的设计思路一样, 这里设定的常数M=40, 即每四十个系统周期clk的时候翻转一次, 达到设计要求。
2.5 计算输出模块的设计
该模块的输入数据是6个16位数据, 要对这6个数据分成三组, 做同样的处理, 来输出3个通道的脉冲波形。因此在这里我们详细说明其中一组数据的处理。在做计算之前, 需要提取从数据整合模块中传进来的96个数据其中32位, 即:
其中的countx表示脉冲的周期, pulsex表示脉冲的个数。
将脉冲周期里的数据放在一个寄存器中, 然后开始将这个寄存器中的数据进行减1操作, 当寄存器为0的时候, 将波形进行翻转, 然后重新开始将寄存器中的数据减1计数, 此过程重复执行, 在每一次翻转的时候, 将存放脉冲个数的寄存器中的数据进行减1操作, 当寄存器中的数为0的时候, 波形停止翻转 (如图4) 。
3 结语
本文设计的串口数据接收模块经过仿真, 数据传输稳定可靠, 可以满足串口通信的要求, 该模块有很强的通用性和移植性。
该设计进行分模块的编程, 编程后, 将每个模块分别进行仿真, 仿真成功之后, 将各个模块连接在一起, 组成整个系统, 经实际示波器测试, 该程序运行可靠。
参考文献
[1]郭树涛, 靖永志.基于FPGA的串口通讯设计[J].北京电子科技学院学报, 2006, 14 (4) :75-78.
多串口扩展 篇8
FPGA (Field-Programmable Gate Array) , 即现场可编程门阵列, 它是作为专用集成电路领域中一种半定制电路出现的, 既解决了定制电路的不足, 又克服了原有可编程器件门电路数有限的缺点。FPGA中具有丰富的触发器和I/O口, 采用描述语言 (VHDL和Verilog HDL) 进行设计, 用户可以根据需要, 描述出具有各种功能的电路。[2]
基于以上原因, 我们可以利用FPGA实现多串口通信中的数据转换和中断控制功能, 从而简化电路、缩小PCB面积, 也可以很方便的进行升级改动和模块移植。
1 设计要求
整个设计的硬件电路以DSP和FPGA为主构架, DSP和FPGA之间通过DSP的EMIF接口连接。其中, DSP是主处理器, 用于实现串口数据的处理, FPGA作为DSP的外围电路, 实现UART模块的串行数据的接收和发送、数据的串并/并串转换及接收中断的产生, 同时, 实现多串口的中断控制功能。当有接收数据时, FPGA通过中断方式通知DSP。
UART模块的数据格式:波特率可以按标准波特率设置;按字节接收, 每个字节前包含一个起始位 (低电平, 逻辑值0) , 无校验位, 最后是一位停止位和不定长度的空闲位 (高电平, 逻辑值1) ;接收到一个完整字节后产生一个中断 (高电平, 逻辑值1) , 当数据被读取后, 中断信号复位 (低电平, 逻辑值0) 。
中断控制器应能实现8路UART模块的中断接收和处理, 最后给DSP输出一个中断信号, 输入的各中断信号之间无优先级设定。
2 设计方案
完整的设计由时钟管理模块、接口模块、UART模块和中断控制器组成。时钟管理模块产生设计中所需各种时钟, 包括主处理时钟和接收与发送的波特率时钟;接口模块实现DSP和FPGA之间的中断、读写功能;UART模块由接收和发送子模块组成, 实现数据的串行接收和串行发送功能;中断控制器由中断采样子模块和中断处理子模块组成, 实现8路UART中断接收和处理功能。下面分别对这些模块的设计给予描述。[1]
2.1 时钟管理模块[3]
设输入FPGA的时钟为50MHz, 则主处理时钟设计为50MHz。U A R T的接收和发送采用相同的波特率进行, 本设计中采用115200b/s进行收发, 这就需要对50MHz时钟进行分频以产生所需的波特率。
2.2 接口模块
接口模块连接时钟管理模块、UART模块和中断处理器, 并与DSP采用EMIF总线相连接。与DSP相关的信号有:wr_n、rd_n、cs_n、addrs、data_bus和dsp_int, 在cs_n和wr_n有效时, DSP通过addrs选通不同的UART模块, 将需要发送的并行数据发送给发送寄存器, 执行发送功能。DSP响应外部中断时, 在cs_n和rd_n有效时, 通过addrs读取中断控制器的中断矢量和UART模块接收的数据。[4]
2.3 UART模块
2.3.1 发送模块
根据UART模块的数据格式, 发送状态机如图1所示。[5]
当复位信号rst_n=‘0’时, 状态机初始化为空闲状态, 当有需要发送的数据时, 即tx_flag=‘1’时, 状态机转入发送起始位状态;在发送起始位状态中, 串行输出数据线被置为0, 并保持一个波特率时钟周期, 即在baud_rate=‘1’时, 转入数据移位状态;在数据移位状态中, 利用baud_rate=‘1’的驱动, 将8位并行数据依次移位, 转成串行数据输出, 每移一位, 相应的计数器加1, 当cnt_bit_tx=“1000”时, 转入发送停止位状态;在发送停止位状态中, 串行输出数据线被置为1, 并保持一个波特率时钟周期, 即在baud_rate=‘1’时, 转入发送结束状态;在发送结束状态, 一个字节的发送过程完成, 清除发送标志, 即tx_flag=‘0’, 转入空闲状态。
2.3.2 接收模块
根据UART模块的数据格式, 接收状态机如图2所示。
当复位信号rst_n=‘0’时, 状态机初始化为空闲状态, 当检测到数据线上出现由1到0的跳变沿时, 即data_coming_flag=‘1’时, 状态机转入接收起始位状态;在接收起始位状态中, 在baud_rate=‘1’时, 判断数据是否为0, 如果是0, 则转入数据移位状态, 如果是1, 则回到空闲状态;在数据移位状态中, 利用baud_rate=‘1’的驱动, 将串行数据依次移位, 转成并行数据, 每移一位, 相应的计数器加1, 当cnt_bit_rx=“1000”时, 转入接收停止位状态;在接收停止位状态中, 在baud_rate=‘1’时, 判断数据是否为1, 如果是1, 则转入接收结束状态, 如果是0, 则回到空闲状态;在接收结束状态, 产生一个中断信号。
2.4 中断控制器[6]
2.4.1 中断采样子模块
在中断采样子模块中, 利用主处理时钟作触发, 检测各UART模块是否有中断输入, 如果中断输入端口出现由0到1的跳变沿, 则置该UART模块的中断采样值为1, 该值只有在复位信号rst_n=‘0’或清除信号clr=‘1’时, 恢复为0。程序逻辑如图3所示。
2.4.2 中断处理子模块
在该模块中, 主要完成中断矢量的生成、DSP中断信号的产生和中断清除信号的生成3个功能。
中断矢量由8个UART模块的中断输出信号合成, 特别注意的是因为各个UART模块中断清除信号和该矢量相关, 因此, 当该矢量不为0时, 要暂时锁定中断矢量, 即在DSP响应中断之前, 即使有新的中断信号产生, 也不允许更新中断矢量, 判断逻辑如图4所示。
在主时钟的触发下, 当中断矢量不为0时, 产生一个中断信号, 且只有当DSP读取了该中断矢量时, 才清除该DSP中断信号, 判断逻辑如图5所示。
当DSP中断清除信号有效时, 根据中断矢量, 生成中断清除矢量, 用于清除各个UART模块的中断采样信号, 该模块采用组合逻辑完成。
3 结语
在本设计中, 基于FPGA平台实现了通用UART芯片的核心功能和中断控制器逻辑, 能够满足多串口通信的需要。该电路已运用于实际工程中, 实践证明该电路结构简单、工作稳定, 可运用于低速率的异步通信。
参考文献
[1]杨英强.一种基于FPGA的UART电路实现[J].现代电子技术, 2005.YANG Ying-qiang.Realization of a Sort of UART Based on FPGA[J].Modern Electronics Technique.
[4]卞红雨, 纪祥春, 等.TMS320C6000系列DSP的CPU与外设[M].清华大学出版社, 2007.BIAN Hong-yu, JI Xiang-chun, et al.TMS320C6000DSP CPU and peripherals[M].TSINGHUA UNIVERSITY PRESS.
[5]李仁发, 凌纯清, 徐成.VHDL数字系统设计[M].电子工业出版社, 2004.LI Ren-fa, LING Chun-qing, XU Chengdu.Digital System Design with VHDL[M].Publishing House of Electronics Industry.2004.
多串口扩展 篇9
首先,需要分析8142Pro传输的数据格式,以及各数据位的具体含义,并找出需要的数据位。
1 托利多8142Pro的数据采集端口及发送的数据格式
在8142Pro的实际使用中,最后一位校验和没有使用,所以每个数据包共有17个字节。8142Pro背面板如图1所示。
由图1可知,程序采集的数据来自COM2端口。
8142Pro发送的数据格式如表1
其中各数据位意义如下:
1:
2:状态字A:小数点位置和分度值因子。B:毛重或净重等信息。C:是否有打印命令。
3:显示重量,毛重或净重(可设置),6位不带符号和小数点的数字。
4:皮重,6位不带符号和小数点的数字。
5:
6:
2 设计思路及实现方法
2.1 Java串口通信简介及开发环境设置
Java读写串口要用到的是javax扩展类库comm,其核心是抽象的CommPort类及其两个子类:SerialPort类和ParallePort类。其中,SerialPort类是用于串口通信的类,ParallePort类是用于并行口通信的类。本文只关心SerialPort类,SerialPort类具有以下重要属性和方法:
setSerialPortParams:描述一个RS-232串行通信端口的底层接口,它定义了串口通信所需的最小功能集。通过它,用户可以直接对串口进行读、写及设置工作。
open:打开端口。
close:关闭端口。
getInputStream:获取端口上的输入流对象。
available:是否有数据通过。
read:读取一个字节并将其放到指定字节变量中。
java.comm类库在sun的官网上只提供Linux版本。由于开发的平台是Win32。所以下载的java.comm包解压后必须进行相应配置,配置方法如下:
(1)把javax.comm.properties文件拷贝到Java运行时环境的lib目录中。
(2)把win32com.dll拷贝到C:windowssystem32和C:Program FilesJavajdk1.5.0_12jrebin下。
(3)把comm.jar放到Java运行时环境的lib目录中。
(4)在“环境变量”的CLASSPATH中添加comm.jar,如:%JAVA_HOME%libcomm.jar。
2.2 重量数据的提取
要在缓存中得到有效数据,首先将数据按字节存到一个字节数组变量中,在此字节数组查找需要的有效数据。按照8142Pro字节定义,开始字节为02H,结束字节为0DH,按照ASCII换算为十进制为2和13。
在字节数组中查找readBuffer[i]等于2且readBuffer[i+16]等于13的数据,如果有则存储为一个有效数据。否则,继续返回查找。
2.3 重量数据的转换显示
接收的重量数据是6个字节。每个字节为8位,根据ASCII表,所以应该是0~127。实际接收的数据应该为ASCII表中的48~57,减去48之后即为显示的结果0~9。如果接收的数据大于127,则应再减去128之后按照前述进行处理。
3 主要程序源代码
4 实际应用