基于MSP430F149的串口服务器设计
扫描二维码
随时随地手机看文章
摘 要: MSP430微处理器具有功耗低和功能模块丰富的特点。采用MSP430F149为主控制器和以太网控制芯片CS8900A设计串口服务器,并且嵌入精简后的TCP/IP协议。以过程控制设备为目标进行调试,实现RS-232串口和网络接口RJ45的转换。使串口设备联入以太网,实现远程网络控制。
本文采用了TI公司生产的16位超低功耗的混合信号处理器(mixed signal processor)和Cirrus公司生产的高集成度的全面支持IEEE802.3标准的以太网控制器CS8900A来设计嵌入式串口服务器终端,以模块化设计思想提供软件设计,鉴于嵌入式系统有限的内存,对TCP/IP进行了精简,并进行了调试。
1 硬件电路设计
主控制器MSP430[1]是美国Texas Instruments(TI)公司于1996年开始推向市场的超低功耗微处理器,拥有5种低功耗模式,以适应不同的需要。CPU从低功耗模式被唤醒,这个过程最多只需要6 μs。灵活的时钟使用方式也是MSP430的一大特点,除了片内集成一个晶体振荡器外,还可外接1~2个晶体振荡器。不同的内部功能模块可根据需要使用不同的晶体振荡器,在不需要时可以通过设置寄存器将其关闭,以减低功耗。MSP430采用了16位的RISC架构,具有125 ns的指令周期,且内部具有丰富的功能模块,集成了多通道10~14位的A/D转换器、双路12位D/A转换器、比较器、电源电压检测、串行口USART(UART/SPI)、硬件乘法器、Flash存储器、看门狗定时器及多个16位、8位定时器等功能模块。这些结构使得MSP430微处理器可以应用到更多的场合,有更广泛的应用,也使得串口服务器的设计更为简单化。
以太网控制芯片CS8900A[2]是Cirrus Logic公司生产的低功耗、性能优越的16位以太网控制器。其突出特点是使用灵活,物理层接口、数据传输模式和工作模式等都能根据需要而动态调整,通过内部寄存器的设置来适应不同的应用环境。
系统的硬件框图如图1所示。
图1 系统的硬件框图
电源通过5 V电源适配器,经LD1117芯片转化为3.3 V稳压电源给主控制器MSP430、以太网芯片CS8900A及SP3223供电。MSP430接8 MHz的晶振,同时外接一个JTAG口,通过JTAG口接MSP430仿真器用于系统与MSP430开发软件IAR之间的程序调试 。
主控制器负责控制以太网接口完成网络数据包的发送和接收,以及相应的封装和解包工作,根据上位机的指令完成相应的数据采集和处理,并且检测串口通信模块是否有事件发生然后做出相应的反应;负责完成系统上电复位、初始化以及低电压检测等功能。CS8900A内部的802.3介质访问控制[4]负责处理有关以太网数据帧的发送和接收,包括:数据检测、帧头的产生和检测、CRC校验码的生成和验证。以太网模块用于完成TCP/IP协议栈中的链路层功能,在发送时把网络层数据包转换成以太网物理帧格式用于物理信道上的传输;在接收时将物理信道上接收到的信号转换成网络层数据包。
2 软件程序设计
软件部分采用模块化的设计思想,把程序化繁为简,便于程序的设计、调试及维护。整个部分包括初始化模块、串口数据采集及处理模块、网络数据采集及处理模块和TCP/IP模块,另外还有定时器中断用于TCP的重发机制计时和数据采集计时、串口中断用于转发串口数据。
程序工作流程如图2所示。
图2 程序工作流程
2.1初始化模块
初始化模块包括对主控制器MSP430F149和以太网控制器CS8900A的初始化;包括时钟振荡器的设置、I/O口初始化设置、定时器A的初始化和CS8900A片内寄存器的初始化。
初始化XT1上的8MHz晶振,并用作系统主时钟MCLK。
static void InitOsc(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
BCSCTL1 |= XTS; // XT1工作在高频模式
__bic_SR_register(OSCOFF); // 启动XT1晶振
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志 OFIFG
DelayCycles(100); // 延时130?滋s
}
while (IFG1 & OFIFG); // 判断XT1是否起振
BCSCTL2 = SELM_3; // 选择MCLK为XT1
}
I/O口的初始化:P3.7和P3.6初始化用于控制CS8900A的IOW和IOR,P3.5和P3.4用于串口UART0,P3.3~P3.0用于CS8900的地址总线,P5用于CS8900A的数据总线,这些都在CS8900A的初始化程序中进行。
以太网模块CS8900A的初始化程序如下:
void Init8900(void)
{
unsigned int i;
P3OUT = IOR | IOW;
P3DIR = 0xff;
P5OUT = 0;
P5DIR = 0xff;
DelayCycles(40000);
DelayCycles(40000);
Write8900(ADD_PORT, PP_SelfCTL);
Write8900(DATA_PORT,POWER_ON_RESET);
do
Write8900(ADD_PORT, PP_SelfST);
while (!(Read8900(DATA_PORT) & INIT_DONE));
}
2.2数据采集及处理
这里包括网络数据和串口数据的采集和处理。程序设计中设置了全局变量DonetworkStuff函数来检查是否收到一个帧。当确定数据包是发给特定模块时,开始调用函数ProcessFrame()来对数据进行处理。
2.3 TCP/IP模块
层次结构是描述协议栈普遍采用的方法,每一层都向上一层提供服务,同时使用来自下层提供的服务,低层的操作细节对上层来说是不透明的。根据嵌入式自身的特点和系统需求,对TCP/IP进行了精简,以更适合嵌入式系统的需要。TCP/IP的4层结构与OSI的7层参考模型对应关系如图3所示。
图3 TCP/IP的4层结构TCP/IP协议中应用层、传输层、互联网层和网络接口层的基本功能如表1所述。
表1 TCP/IP 协议各层功能
当有串口数据需要发送或者收到网络数据后,系统进入TCP/IP协议模块对数据进行处理,TCP/IP协议模块的初始化程序如下:
void TCP Init(void)
{
BCSCTL1 &= ~DIVA0;
//ACLK=XT1/4=2MHz
BCSCTL1 |=DIVA1;
TACTL=ID_3+TASSEL_1+MC_2+TAIE;
//选择ACLK为时钟源,1/8分频,连续计数模式
Init8900();
TransmitControl = 0;
TCPFlags = 0;
TCPStateMachine = CLOSED;
SocketStatus = 0;
}
目前市场成型的串口服务器产品大多采用高性能32位微处理器在RTOS(实时多任务操作系统)上开发,成本高,开发周期长。采用16位的MSP430的串口服务器,成本较低,而且功耗较低,配置以太网控制器CS8900A,有很广泛的应用场合。采用16位微处理器、网络接口芯片和精简TCP/IP协议的设计,实现RS-232串口和网络接口RJ45的转换,既经济,又简单。