【文章內(nèi)容簡(jiǎn)介】
收發(fā)器。RF 內(nèi)核控制模擬無(wú)線模塊。另外,它提供了MCU 和無(wú)線設(shè)備之間的一個(gè)接口,這使得可以發(fā)出命令,讀取狀態(tài),自動(dòng)操作和確定無(wú)線設(shè)備事件的順序。無(wú)線設(shè)備還包括一個(gè)數(shù)據(jù)包過(guò)濾和地址識(shí)別模塊。軟件設(shè)計(jì) 在一個(gè) ZigBee 應(yīng)用系統(tǒng)中,光有硬件是沒(méi)有用的,還需要與之相匹配的軟件程序才能真正的能夠使用。無(wú)線溫度采集系統(tǒng)的軟件設(shè)計(jì)主要包括 ZigBee 節(jié)點(diǎn)間的通信程序,協(xié)調(diào)器節(jié)點(diǎn)組網(wǎng)程序。5 軟件開(kāi)發(fā)環(huán)境的選擇ZigBee 協(xié)議棧:ZigBee2007ZigBee2007的開(kāi)發(fā)及下載工具:TI公司的IAR軟件、基于 ZigBee 無(wú)線傳感器網(wǎng)絡(luò)的測(cè)控系統(tǒng)中協(xié)調(diào)器設(shè)備的軟件設(shè)計(jì)流程如下:macEventLoop處理本任務(wù)當(dāng)前優(yōu)先級(jí)最高的事件macTaskInit 注冊(cè)相應(yīng)事件 YES Nwk_event_loop處理本任務(wù)當(dāng)前優(yōu)先級(jí)最高的事件 nwk_init 注冊(cè)相應(yīng)事件 YESHal_InitHalProcessevet處理本任務(wù)當(dāng)前優(yōu)先級(jí)最高的事件開(kāi)始 注冊(cè)相應(yīng)事件 YES MT_ProcessEventMT_TaskInit處理本任務(wù)當(dāng)前優(yōu)先級(jí)最高的事件硬件初始化osalInitTASKS系統(tǒng)初始化 注冊(cè)相應(yīng)事件 YES APS_event_loopAPS_Init處理本任務(wù)當(dāng)前優(yōu)先級(jí)最高的事件 注冊(cè)相應(yīng)事件 YES執(zhí)行操作系統(tǒng) ZDApp_InitZDAappeventlooppp處理本任務(wù)當(dāng)前優(yōu)先級(jí)最高的事件 注冊(cè)相應(yīng)事件 NO YES SAPI_ProcessEvent處理本任務(wù)當(dāng)前優(yōu)先級(jí)最高的事件 NOSAPI_Init 注冊(cè)相應(yīng)事件 YES、無(wú)線接收串口轉(zhuǎn)發(fā)流程圖如下:SerialApp_ProcessEventOsal_msg_receive(SerialApp_Taskid)AF_INCOMING_MSG_CMDSerialApp_ProcessMSGCmdHalUARTWriteOsal_set_event(SerialApp_TaskID,SERIALAPP_RESP_EVT)SerialApp_Resp、串口接收無(wú)線轉(zhuǎn)發(fā)流程圖如下:SerialApp_CallBackSerialApp_Send()HalUARTResdAF_DataResquest發(fā)送是否成功? 結(jié)束 YES Osal_Set_event(SerialApp_TaskID,SERIALAPP SEND EVT) NO : include include include include include ifndef NONWKinclude endif/* Hal */include include include include include include include // Maximun number of Vdd samples checked before go ondefine MAX_VDD_SAMPLES 3 //電壓檢測(cè)define ZMAIN_VDD_LIMIT HAL_ADC_VDD_LIMIT_4 //正常電壓極限值extern bool HalAdcCheckVdd (uint8 limit)。 //設(shè)備啟動(dòng)前的芯片電壓檢測(cè)函數(shù)static void zmain_dev_info( void )。static void zmain_ext_addr( void )。static void zmain_vdd_check( void )。ifdef LCD_SUPPORTEDstatic void zmain_lcd_init( void )。endif/********************************************************************* * @fn main * @brief First function called after startup. * @return don39。t care */int main( void ){ // Turn off interrupts osal_int_disable( INTS_ALL )。 //關(guān)閉所有中斷 EA=0// Initialization for board related stuff such as LEDs HAL_BOARD_INIT()。 //初始化系統(tǒng)時(shí)鐘 、LED所使用的IO等// Make sure supply voltage is high enough to runzmain_vdd_check()。 //檢測(cè)芯片電壓是否正常// Initialize board I/OInitBoard( OB_COLD )。 //初始化LED的IO// Initialze HAL driversHalDriverInit()。 //初始化芯片各個(gè)硬件模塊(包括LCD)// Initialize NV Systemosal_nv_init( NULL )。 //初始化FLASH存儲(chǔ) // Initialize the MAC ZMacInit()。 //初始化MAC層 // Determine the extended address zmain_ext_addr()。 //形成節(jié)點(diǎn)MAC地址// Initialize basic NV items zgInit()。 //初始化一些非易失變量ifndef NONWK// Since the AF isn39。t a task, call it39。s initialization routineafInit()。 //初始化應(yīng)用框架層endif// Initialize the operating systemosal_init_system()。 //初始化操作系統(tǒng) // Allow interruptsosal_int_enable( INTS_ALL )。 //使能全部中斷// Final board initializationInitBoard( OB_READY )。 //初始化按鍵 // Display information about this devicezmain_dev_info()。 //在液晶上顯示設(shè)備IEEE信息/* Display the device info on the LCD */ifdef LCD_SUPPORTED zmain_lcd_init()。 //在LCD上顯示該設(shè)備的信息endififdef WDT_IN_PM1/* If WDT is used, this is a good place to enable it. */WatchDogEnable( WDTIMX )。endifosal_s