| // Timer0_A5 Interrupt Vector (TAIV) handler #pragma vector=TIMER0_A1_VECTOR
 __interrupt void TIMER0_A1_ISR(void)
 {
 uint16_t D_Time;
 uint8_t LpmExitFlag = 0;
 
 switch(__even_in_range(TA0IV,14))
 {
 case  0:
 break;                          // No interrupt
 case  2:
 TA0CCR1 += MIROCSEC_INT_PERIOD;
 SystemTimeStruct.MricoSec ++;
 if(SystemTimeStruct.MricoSec == 0x00)LpmExitFlag = 1;
 break;                          // CCR1 reserve for system delay
 case  4:
 TA0CCR2 += SENSOR_SAMPLE_PERIOD;
 if(SystemRunStatusFlag & NODE_ATTR_RUN_STATUS_FLAG)
 {// 如果节点是正放的,说明节点运行于实际工作模式
 if(SystemRunStatusFlag & SYSTEM_JOININ_NETWORK_FLAG)
 {// only slave is created conmuication connection with the host,mag sensor sample data will handle
 SystemRunStatusFlag |= MAG_DATA_SAMPLE_FLAG;
 SystemRunStatusFlag1 &=~ MAG_SENSOR_REREAD_FLAG;
 LpmExitFlag = 1;
 }
 }
 break;
 case  6:
 TA0CCR3 += SAMPLEDATA_HANDLE_PERIOD;
 if(SystemRunStatusFlag & NODE_ATTR_RUN_STATUS_FLAG)
 {// 如果节点是正放的,说明节点运行于实际工作模式
 if(SystemRunStatusFlag & SYSTEM_JOININ_NETWORK_FLAG)
 {// only slave is created conmuication connection with the host,mag sensor will work
 SystemRunStatusFlag |= MAG_DATA_HANDLE_FLAG;  // CCR1 100ms for megnetism sensor data handle
 LpmExitFlag = 1;
 }
 }
 break;                          // CCR3  for megnetism sample period,default 100ms
 case  8: // 用于传感器二次采样
 //                Bsp_TimerA0_StopCCR(TimerA0_CCR4); // stop timeout wait
 TA0CCTL4 &=~ CCIE;
 SystemRunStatusFlag |= MAG_DATA_SAMPLE_FLAG;
 SystemRunStatusFlag1 |= MAG_SENSOR_REREAD_FLAG;
 LpmExitFlag = 1;
 break;                          // CCR4 for unit mircosecond counts
 case 10:
 break;                          // CCR5
 case 12:
 break;                          // reserved
 case 14:                            // TCLK = 32768,every interrupt is 2 seconds
 if(0x00 == (SystemTimeStruct.TwoSec % NODE_MEMS_SAMPLE_TIME))
 {// MEMS传感器采样周期,传感器在节点关机模式下也要执行
 SystemRunStatusFlag1 |= MEMS_DATA_SAMPLE_FLAG;  // 启动mems,1分钟开启一下MEMS
 LpmExitFlag = 1;
 }
 if(SystemRunStatusFlag & NODE_ATTR_RUN_STATUS_FLAG)
 {// 如果节点是正放的,说明节点运行于实际工作模式
 if(0x00 == (SystemTimeStruct.TwoSec % NODE_ATTR_SAMPLE_TIME))
 {
 SystemRunStatusFlag |= NODE_ATTR_SAMPLE_FLAG; // 节点属性开始采样,开始采样标志位
 LpmExitFlag = 1;
 }
 if(0x00 == ((SystemTimeStruct.TwoSec - 1)% NODE_ATTR_SAMPLE_TIME))
 {
 SystemRunStatusFlag |= NODE_ATTR_GETTING_FLAG;// 节点属性获取标志位
 LpmExitFlag = 1;
 }
 D_Time = (SystemTimeStruct.TwoSec >= SystemRecordTimeStruct.WirelessSendDataTime)?(SystemTimeStruct.TwoSec - SystemRecordTimeStruct.WirelessSendDataTime):(65535 - SystemRecordTimeStruct.WirelessSendDataTime + SystemTimeStruct.TwoSec);
 if(D_Time >= RF_PLUSE_PERIOD)
 {// 判断当前的时间与记录的发送时间之差,是否大于心跳包的周期发送时间
 SystemRunStatusFlag |= RF_DATA_SEND_FLAG;  // enable pluse data send
 SystemRunStatusFlag |= RF_PLUSE_PKT_FLAG;
 LpmExitFlag = 1;
 }
 }
 SystemTimeStruct.TwoSec ++;
 break;                              // overflow
 default:
 break;
 }
 if(LpmExitFlag)
 {
 if(SystemRunStatusFlag1 & SYSTEM_IN_LOWPOWER_FLAG)
 {
 SystemRunStatusFlag1 &=~ SYSTEM_IN_LOWPOWER_FLAG;
 LPM3_EXIT; /* Exit Low Power Mode 3 */
 
 }
 }
 
 }
 |