基于MSP430F149的串口服務(wù)器設(shè)計(jì)
初始化模塊包括對(duì)主控制器MSP430F149和以太網(wǎng)控制器CS8900A的初始化;包括時(shí)鐘振蕩器的設(shè)置、I/O口初始化設(shè)置、定時(shí)器A的初始化和CS8900A片內(nèi)寄存器的初始化。
初始化XT1上的8MHz晶振,并用作系統(tǒng)主時(shí)鐘MCLK。
static void InitOsc(void)
{
WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
BCSCTL1 |= XTS; // XT1工作在高頻模式
__bic_SR_register(OSCOFF); // 啟動(dòng)XT1晶振
do
{
IFG1 = ~OFIFG; // 清除振蕩器失效標(biāo)志 OFIFG
DelayCycles(100); // 延時(shí)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的數(shù)據(jù)總線,這些都在CS8900A的初始化程序中進(jìn)行。
以太網(wǎng)模塊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數(shù)據(jù)采集及處理
這里包括網(wǎng)絡(luò)數(shù)據(jù)和串口數(shù)據(jù)的采集和處理。程序設(shè)計(jì)中設(shè)置了全局變量DonetworkStuff函數(shù)來檢查是否收到一個(gè)幀。當(dāng)確定數(shù)據(jù)包是發(fā)給特定模塊時(shí),開始調(diào)用函數(shù)ProcessFrame()來對(duì)數(shù)據(jù)進(jìn)行處理。
2.3 TCP/IP模塊
層次結(jié)構(gòu)是描述協(xié)議棧普遍采用的方法,每一層都向上一層提供服務(wù),同時(shí)使用來自下層提供的服務(wù),低層的操作細(xì)節(jié)對(duì)上層來說是不透明的。根據(jù)嵌入式自身的特點(diǎn)和系統(tǒng)需求,對(duì)TCP/IP進(jìn)行了精簡(jiǎn),以更適合嵌入式系統(tǒng)的需要。TCP/IP的4層結(jié)構(gòu)與OSI的7層參考模型對(duì)應(yīng)關(guān)系如圖3所示。
圖3 TCP/IP的4層結(jié)構(gòu)
評(píng)論