// 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 */
}
}
}
|