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()来对数据进行处理。
|