图3描述了串口接收模块的工作流程。当SC28L198中的某个接口通道接收到串口设备的一帧数据时,这些数据将被送往数据队列,同时保存相应的串口通道号。当打包时间到了规定的时间或者打包的串口数据已经达到规定的最大长度(200字节)时,该数据包将被发往以太网。图4描述了串口发送模块的工作流程。当该系统通过以太网接收到主机发来的一帧数据或命令时,ARM处理器将去掉以太网帧头、IP头和UDP头,提取出串口通道号,将分离出的串口数据帧发送到对应的串口通道。
图3 串口数据接收流程
图4 串口数据发送流程
3.4初始化程序
在整个系统开始工作之前,程序必须对SC28L198中的每个通道进行初始化。ARM处理器LM8962通过向SC28L198的寄存器写入命令来完成整个初始化过程。为了保证LM8962与串口设备之间传输的数据准确无误,串口服务器需要规定每个通道的通信格式。该格式包括发送数据波特率和接收数据波特率、数据长度、停止位和校验位等。整个初始化过程的程序如下:
void UART_Init( void) {
uchar channel;
UART_WR ( GCCR,0 x06) ; /* 全局配置* /
UART_WR ( CR( 0), 0xF8) ; /* 重启芯片* /
UART_WR ( ICR, 0x00) ; /* 设置中断水平* /
UART_WR ( IVR,0x00) ; /* 设置中断仲裁门槛* /
for( channel = 0; channel < 8; channel + + ) {
UART_WR ( MR0( channel) ,0xC0) ; /* 无流量控制* /
UART_WR( MR1( channel) ,0x77) ; /* 设置数据格式* /
UART_WR( MR2( channel) ,0x00) ; /* 普通模式* /
UART_WR( RXCSR( channel) ,0x0E) ; /* 设置接收波特率* /
UART_WR( TXCSR( channel) ,0x0E) ; /* 设置发送波特率* /
UART_WR( CR( channel) ,0x28) ; /* 锁住收发器* /
UART_WR( IMR( channel) ,0x03) ; /* 开启
Tx 和Rx* /
}
}
4 结论
系统采用μC/OS-II操作系统和TCP/IP协议实现了实时、高效的数据传输,为RS232/422/485设备提供了方便快捷的以太网连接。该系统能够为串口设备提供网络化监控、管理,以及远距离数据服务。