Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430F5438A RTC 分钟中断进入后,又再一次进入中断

$
0
0

各位大神,我现在需要定时比如5分钟去做一件事情,分钟中断进入一次,5次分钟中断就可以去执行任务,同时我在五分钟到的时候去读了RTC,现在出现问题,5分钟到了,进入中断后,又再次进入了中断,不知什么原因

RTC初始化

void rtc_init(void)
{
RTCCTL01 = RTCTEVIE + RTCSSEL_0 + RTCMODE;
RTCYEAR = 0x2016; // Year = 0x2010
RTCMON = 0x09; // Month = 0x04 = April
RTCDAY = 0x05; // Day = 0x05 = 5th
RTCDOW = 0x01; // Day of week = 0x01 = Monday
RTCHOUR =0x10; // Hour = 0x10
RTCMIN = 0x32; // Minute = 0x32
RTCSEC = 0x45; // Seconds = 0x45
}

读RTC

void read_rtc_time(void)
{
for(;RTCCTL01&RTCRDY;) _NOP(); // 等待RTC有效
for(;RTCCTL01&RTCRDY;) _NOP(); // 等待RTC有效
temp_context.Year=RTCYEAR-2000;
temp_context.Month=RTCMON;
temp_context.Day=RTCDAY;
temp_context.Hour=RTCHOUR;
temp_context.Minute=RTCMIN;
temp_context.Second=RTCSEC;
}

RTC中断

#pragma vector=RTC_VECTOR
__interrupt void RTC_ISR(void)
{

switch(__even_in_range(RTCIV,16))
{
case RTC_NONE: // No interrupts
break;
case RTC_RTCRDYIFG: // RTCRDYIFG
break;
case RTC_RTCTEVIFG: // RTCEVIFG
SEND_TIMER++;
SAMPLE_TIMER++;
PICTURE_TIMER++;
if(SAMPLE_TIMER==Time_control.sample_time)//Time_control.sample_time
{
LPM3_EXIT;
read_rtc_sign=true;
SAMPLE_TIMER=0;
Sample_Ai_485_Data_Flag=false;
First_Times_Flag=false;
PowerOn_Delay_Fnished=false;
vin1_sample_complete=false;
vin2_sample_complete=false;
vin3_sample_complete=false;
vin7_sample_complete=false;
vin8_sample_complete=false;
bat_sample_complete=false;
read_485_state=0;
read_485_success=false;
time_bat_samp=false;
sample_road1_data=true;
sample_road2_data=true;
sample_road3_data=true;
sample_road4_data=true;
sample_road5_data=true;
sample_road6_data=true;
sample_road7_data=true;
sample_road8_data=true;
if(Uart_print_log)
{
DIR_TX();//485/TX
init_uart2();
sprintf(LOG_SPRINTF,"%s,%d\r\n","Sample data time is up",Time_control.sample_time);
uart2_send_str(LOG_SPRINTF);
}
}
if(SEND_TIMER==Time_control.send_time)//Time_control.send_time
{
Start_Send_Data_Code=false;
Start_Send_Data_Sign=false;
SEND_TIMER=0; //发送定时器计数清零
Power_on_delay_sign=false; //每次发送数据前定时器延时3秒
send_data_flag=true; //发送标志位置位,重新发送
NET_Sign_clear_2(); //清除发送标志位,重新发送
ERROR_TIMES_Clear(); //清除发送标志位
SIM800C_ERROR_TIMES=0; //串口错误次数清零
OUT_TIM_TIMER = 0; //整个流程定时器计数清零
START_GPRS_PROCESS=true;
if(Uart_print_log)
{
DIR_TX();//485/TX
init_uart2();
sprintf(LOG_SPRINTF,"%s,%d\r\n","Send data time is up",Time_control.send_time);
uart2_send_str(LOG_SPRINTF);
}
}
/*if(PICTURE_TIMER==2)//Time_control.picture_time
{
LPM3_EXIT;
WDTCTL = WDT_ARST_1000; //打开看门狗
Read_Camera_Data_Sign=true;
Start_Send_Data_Sign=false;
PICTURE_TIMER=0; //发送定时器计数清零
Power_on_delay_sign=false; //每次发送数据前定时器延时3秒
send_data_flag=true; //发送标志位置位,重新发送
NET_Sign_clear_2(); //清除发送标志位,重新发送
ERROR_TIMES_Clear(); //清除发送标志位
SIM800C_ERROR_TIMES=0; //串口错误次数清零
OUT_TIM_TIMER = 0; //整个流程定时器计数清零
START_GPRS_PROCESS=true;
}*/
break;
case RTC_RTCAIFG: // RTCAIFG
break;
case RTC_RT0PSIFG: // RT0PSIFG
break;
case RTC_RT1PSIFG: // RT1PSIFG
break;
case 12: break; // Reserved
case 14: break; // Reserved
case 16: break; // Reserved
default: break;
}
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles