基于MSP430F149的串口服务器设计
初始化模块包括对主控制器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层结构
评论