基于Lonworks總線的嵌入式智能節(jié)點的設計
摘要:本文結(jié)合LonWorks現(xiàn)場總線的ShortStack技術和基于芯片MSP430F149上嵌入μcos_Ⅱ操作系統(tǒng)的開發(fā)的優(yōu)點,使其應用于多用途智能節(jié)點的LON控制網(wǎng)絡。應用程序被移植到目標平臺。此外,對于這種嵌入式系統(tǒng)開發(fā)的基本方法也進行了分析。
關鍵詞:ShortStack;多用途智能節(jié)點;MSP430F149
1 前言
LonWorks現(xiàn)場總線是美國Echelon公司推出的局部操作網(wǎng)絡,它具有統(tǒng)一性、開放性、互操作性及支持多種通信介質(zhì)等優(yōu)良性能,是當今最流行的現(xiàn)場總線之一。但是由于LonWorks控制節(jié)點的核心神經(jīng)元芯片(Neuron Chip)的應用處理能力相對較弱,因而對于復雜的應用常使用主從處理器結(jié)構(gòu),主處理器完成用戶的應用功能,而把Neuron芯片作為通信協(xié)處理器。由于可以提高了節(jié)點的處理能力,節(jié)省資金和開發(fā)時間,因此,具有多功能的通用嵌入式主處理器具有很好的應用前景。本文采用的MSP430F149主處理器是TI公司基具有較高的集成度的芯片,簡化了應用系統(tǒng)的硬件設計,適合作為多用途智能節(jié)點。
2 ShortStack的介紹和實現(xiàn)
2.1 ShortStack的結(jié)構(gòu)
ShortStack微服務器是Echelon公司提供的一套開發(fā)包,其結(jié)構(gòu)圖如下:
圖1 ShortStack結(jié)構(gòu)圖
由圖可看到,主處理器與ShortStack 微服務器通信通過ShortStack API函數(shù)來實現(xiàn),通常使用其中的5個,lonInit(),lonEventHandler(),lonPropagateNv(),lonPollNv()和lonsendServicePin()。ShortStack Micro Server,運行ShortStack固件,運行LonTalk協(xié)議的1~6層;主處理器運行SCI串口驅(qū)動程序,運行ShortStack API函數(shù),處理與Lonworks其他節(jié)點通信;主處理器應用部分調(diào)用ShortStack API函數(shù)。主處理器設備的接口支持文件,由Neuron C model file 通過使用ShortStack向?qū)懋a(chǎn)生,產(chǎn)生數(shù)據(jù)表定義網(wǎng)絡變量和收發(fā)器參數(shù)。而Model file只需要聲明網(wǎng)絡變量NVs,配置屬性CPs和功能模塊FBs,因此,可以不需要熟悉Neuron C。
串行驅(qū)動程序為主處理器和從處理器之間提供一個獨立的接口。整個串行驅(qū)動程序由兩部分構(gòu)成:上層驅(qū)動程序為主應用程序提供一個接口;底層驅(qū)動程序完成與神經(jīng)元芯片的硬件接口。上層和底層驅(qū)動之間的數(shù)據(jù)交換通過緩沖隊列完成。底層驅(qū)動程序與從處理器的通訊包括SCI上傳和SCI下傳兩類,SCI上傳是數(shù)據(jù)由神經(jīng)元芯片上傳到主處理器;SCI下傳是數(shù)據(jù)由主處理器下傳到神經(jīng)元芯片。
2.2 ShortStack的軟件實現(xiàn)
采用提供的Neuron C模板事例修改編寫。主要修改ldvsci.h和ldvsci.c中與MSP430F149處理器相關的語句。
在ldvsci.h中,修改為:
#define ENABLE_RX_TX() (ME1 | = UTXE0+URXE0)
#define ENABLE_TX_ISR() (IE1 |= 0x80)
#define ENABLE_TX_COMPLETE_ISR() (IFG1|=0x80) //USART0發(fā)送標志
#define ENABLE_RX_ISR() (IE1|= 0x40) //enable SCI receive interrupt
#define DISABLE_TX_ISR() (IE1 &= ~0x80)
#define DISABLE_TX_COMPLETE_ISR() (IFG1 &= ~0x80) // USART0發(fā)送標志復位
#define DISABLE_RX_ISR() (IE1 &= ~0x40)
#define CHECK_RTS() (P2OUT& 0x02) // check RTS
#define CHECK_CTS() (P2IN& 0x01) // check CTS
#define ASSERT_RTS() (P2OUT &= ~0x02) // assert RTS
#define DEASSERT_RTS() (P2OUT|= 0x01) // deassert RTS
#define DEASSERT_HRDY() (P2OUT |= 0x04) // deassert _HRDY
#define ASSERT_HRDY() (P2OUT &= ~0x04) // assert _HRDY
在ldvsci.h中,修改了void SysResetSCI(void) ,void SysInit(void),
void SysUpdateWDT(void), @interrupt void RxInt (void)以及@interrupt void TxInt (void)中與MSP430F149相關的程序。
其他文件做少許改變,其中platform.h定義了BIG_ENDIAN and LITTLE_ENDIAN的區(qū)別,對應于哈佛結(jié)構(gòu)和馮.諾伊曼體系結(jié)構(gòu)。由于MSP430F149核是馮.諾伊曼體系結(jié)構(gòu)的,所以ShortStack需用LITTLE_ENDIAN(即高字節(jié)存在高位地址)。
2.3 ShortStack的硬件件實現(xiàn)
從處理器(如圖2)采用TP/FT-10F控制模塊,該模塊由微型電路板構(gòu)成, 包括一個3150 芯片、一塊閃存、一個通信收發(fā)器、電源連接器、I/O 口和網(wǎng)絡接口, 其中IO_0~IO_10 為神經(jīng)元芯片3150 的11 個I/O 管腳用于對控制設備的連接, DataA 和DataB 是FTT- 10收發(fā)器與網(wǎng)絡的連接口,它能夠?qū)⒅魈幚砥鹘?jīng)過處理輸出的數(shù)據(jù)發(fā)送到LON 總線,也可以將LON 總線上的消息傳送給主處理器。
主處理器與神經(jīng)元芯片之間的通信采用SCI模式。SCI接口是一個半雙工串行異步通信接口,通信的格式是:一個起始位,8個數(shù)據(jù)位和一個停止位(LSB在先)。通信模式的選擇由IO3確定,IO3接地選擇SCI通信模式。IO5、IO6則用來選擇通訊速率。
3 μcos_Ⅱ的移植
μcos_Ⅱ的全部源代碼,共16個文件。移植工作涉及的源文件分為三部分:與處理器無關的代碼部分,這部分代碼完成操作系統(tǒng)的基本功能,包括10個文件,即:OS_CORE.C,OS_MBOX.C,OS_MEM.C,OS_Q.C,OS_SEM .C,OS_TASK.C,OS_TIME.C.OS_FLAG.C,OS MUTEX.C,uCOS_II.H。設置代碼部分,包括OS—CFG.H 和INCLUDES.H 兩個頭文件,用來進行操作系統(tǒng)配置。
圖2 主從處理器連接圖
最主要的部分是與處理器有關部分的代碼,包括一個頭文件OS_CPU.H、一個C代碼文件OS_CPU_C.C 及一個匯編文件OS_CPU_A.ASM,將其移植到MSP430F149處理器上,需要修改這3個與體系結(jié)構(gòu)相關的文件,代碼量大約是500行。下面分別介紹這3個文件的移植。
OS_CPU.H這部分代碼包括數(shù)據(jù)類型定義、堆棧單位定義、堆棧增長方向定義、關中斷和開中斷的宏定義以及進行任務切換的宏定義等。其中,為了在不同的工作模式下調(diào)用系統(tǒng)的底層接口函數(shù)不受訪問權(quán)限的限制,使用軟中斷SWI。堆棧的單位與CPU的寄存器長度一致,結(jié)構(gòu)常量OS_STK_GROWTH置1,表示堆棧從由高地址向低地址增長。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論