jennic
- 格式:pdf
- 大小:173.15 KB
- 文档页数:8
包括所有节点的数据存储,图形用户界面的设置和当前状态*/typedef struct{struct{tsAssocNodes asAssocNodes[MAX_UART_NODES];//联网节点uint8u8AssociatedNodes;//已联网节点}sNode;struct{teState eState;uint8u8Channel;}sSystem;}tsCoordData;/************************************************************函数声明************************************************************/PRIVATE void vWUART_Init(void);PRIVATE void vProcessEventQueues(void);PRIVATE void vProcessIncomingHwEvent(AppQApiHwInd_s*psAHI_Ind); PRIVATE void vTickTimerISR(uint32u32Device,uint32u32ItemBitmap);/*************************************************************名称:冷启动//热启动。
冷启动都相当于是主函数*函数介绍:芯片上电复位后首先进入的函数,相当于main函数*输入参数:无*输出参数:无*返回值:无************************************************************/PUBLIC void AppColdStart(void){vWUART_Init();//while(1){vProcessEventQueues();//事件队列}}/*************************************************************名称:热启动*函数介绍:系统带内存休眠后,重新启动会调用这个函数*输入参数:无*输出参数:无*返回值:无************************************************************/PUBLIC void AppWarmStart(void){AppColdStart();}/*************************************************************名称:初始化函数*函数介绍:初始化节点的一些操作、、//通过调用一些函数*输入参数:无//所以是空类型*输出参数:无*返回值:无************************************************************/PRIVATE void vWUART_Init(void)//上文已经有了函数的声明,尤其这是一个初始化函数,所以中断啥的都是在这里开启的{vLedInitRfd();//初始化终端节点的LEDvLedInitFfd();//初始化协调器节点的LEDvLedControl(0,0);//关闭LED0、、//所以前边表示第一个灯,后便表示灯的电平vLedControl(1,0);//关闭LED1/*初始化堆栈和硬件接口。
我们只需要循环地监测消息队列,而不需要使用回调函数*/(void)u32AppQApiInit(NULL,NULL,NULL);//初始化应用队列(void)u32AHI_Init();//初始化协议,硬件接口/*初始化串口*/vSerial_Init();/*初始化10ms定时器中断*/vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_DISABLE);//关闭定时器vAHI_TickTimerWrite(0);//设置定时器初值vAHI_TickTimerInit(vTickTimerISR);//注册定时器回调函数?vAHI_TickTimerInterval(TICK_PERIOD_COUNT);//确定定时时间vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_RESTART);//重启定时器vAHI_TickTimerIntEnable(TRUE);//使能定时器中断}/*************************************************************名称:事件队列函数*函数介绍:及时处理各种事件,类似于中断响应函数*输入参数:无*输出参数:无*返回值:无************************************************************/PRIVATE void vProcessEventQueues(void)//上文已经有了函数的声明{AppQApiHwInd_s*psAHI_Ind;/*检查外围硬件消息*/do{psAHI_Ind=psAppQApiReadHwInd();if(psAHI_Ind!=NULL){vProcessIncomingHwEvent(psAHI_Ind);vAppQApiReturnHwIndBuffer(psAHI_Ind);}}while(psAHI_Ind!=NULL);}/*************************************************************名称:硬件事列、、//我估计仅仅是提供了一个API接口,然后内部程序都是自己编写的*函数介绍:处理硬件响应*输入参数:无*输出参数:无*返回值:无************************************************************/PRIVATE void vProcessIncomingHwEvent(AppQApiHwInd_s*psAHI_Ind)//上文已经有了函数的声明{#if UART==E_AHI_UART_0//如果是异步通信串口0则做/*如果是异步通信串口0则做*/if(psAHI_Ind->u32DeviceId==E_AHI_DEVICE_UART0){/*如果数据已收到*/if((psAHI_Ind->u32ItemBitmap&0x000000FF)==E_AHI_UART_INT_RXDATA){/*处理串口接收中断*/vUART_RxCharISR((psAHI_Ind->u32ItemBitmap&0x0000FF00)>>8);}else if(psAHI_Ind->u32ItemBitmap==E_AHI_UART_INT_TX){/*处理串口发送中断*/vUART_TxCharISR();if((psAHI_Ind->u32ItemBitmap&0x000000FF)==E_AHI_UART_INT_RXDATA) {/*处理串口接收中断*/vUART_RxCharISR((psAHI_Ind->u32ItemBitmap&0x0000FF00)>>8);}}}#else/*如果是异步通信串口1则做*/if(psAHI_Ind->u32DeviceId==E_AHI_DEVICE_UART1){/*如果数据已收到*/if((psAHI_Ind->u32ItemBitmap&0x000000FF)==E_AHI_UART_INT_RXDATA){/*处理串口1接收中断进程*/vUART_RxCharISR((psAHI_Ind->u32ItemBitmap&0x0000FF00)>>8);}else if(psAHI_Ind->u32ItemBitmap==E_AHI_UART_INT_TX){/*处理串口1发送中断进程*/vUART_TxCharISR();}}#endif}/*************************************************************名称:定时器中断函数*函数介绍:定时器中断接口处理函数*输入参数:无*输出参数:无*返回值:无************************************************************PRIVATE void vTickTimerISR(uint32u32Device,uint32u32ItemBitmap)//上文已经有了函数的调用{int16i16RxChar;static uint8u8ToggleCount;、、//定义了一个静态变量/*闪烁LED0表示节点处于工作状态*/if(u8ToggleCount++&0x40)//在0x40到0x4f之间LED0亮(160ms)、、//因为每一次中断(u8ToggleCount每加一)是10毫秒,0-F是十六次中断,经过与运算以后只要不是零就会执行if语句,只要在那之间就不会是0{vLedControl(0,1);}else{vLedControl(0,0);}u8ToggleCount++;if(u8ToggleCount<=0xe0){vLedControl(0,0);}else if((u8ToggleCount>0xe0)&&(u8ToggleCount<0xff)){vLedControl(0,1);}else{u8ToggleCount=0;}i16RxChar=i16Serial_RxChar();if(i16RxChar>=0)vSerial_TxChar(i16RxChar);}/************************************************************文件结束************************************************************/软件主要是运行于单片机内部的一套软件,称为ZIGBEE协议栈。
缩写与用语解释• 1.初始化函数•首先调用的函数用来初始化和启动系统,当设备上电时,程序从AppColdStart开始,这里系统完成初始化。
用户程序可能调用其他的初始化函数,比如初始化用户变量和系统片上外设比如定时器、UART等。
另外,必要的zigbee系统参数,比如无线信道必须在这里配置。