int main(void) { TIME time; /*时钟初始化*/ CLK_Config(); /*初始化电源控制*/ GPIO_DeInit(GPIOD); GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST); GPIO_DeInit(GPIOC); GPIO_Init(GPIOC,GPIO_PIN_1,GPIO_MODE_OUT_PP_LOW_FAST); /*上电,3.3V/12V*/ VDD3V3_ON(); VDD12_ON(); RTC_Init(); while (1) { RTC_ReadDate(&time); } return 0; }
/*! ****************************************************************************** ** \brief RTC interrupt handler ** ** \param void ** ** \return None ** ****************************************************************************** */ void RTC_IntHandler(void) { RTC_TimeInfoT CurTime; RTC_DateInfoT CurDate; unsigned char alarm_invalid=0; if(FM3_RTC->WTCR1_f.INTALI) /* Alarm occured? */ { FM3_RTC->WTCR1_f.INTALI = 0; RTC_ReadDate(&CurDate); RTC_ReadTime(&CurTime); if(FM3_RTC->WTCR1_f.MIEN) { if(FM3_RTC->ALMIR != DECtoBCD(CurTime.Min)) alarm_invalid = 1; } if(FM3_RTC->WTCR1_f.HEN) { if(FM3_RTC->ALHR != DECtoBCD(CurTime.Hour)) alarm_invalid = 1; } if(FM3_RTC->WTCR1_f.DEN) { if(FM3_RTC->ALDR != DECtoBCD(CurDate.Date)) alarm_invalid = 1; } if(FM3_RTC->WTCR1_f.MOEN) { if(FM3_RTC->ALMOR != DECtoBCD(CurDate.Mon)) alarm_invalid = 1; } if(FM3_RTC->WTCR1_f.YEN) { if(FM3_RTC->ALYR != DECtoBCD(CurDate.Year)) alarm_invalid = 1; } if(alarm_invalid == 0) { s_RTCAlarmIntCallback(); if(s_AlarmMode == RTC_ALARM_ONCE) { FM3_RTC->WTCR1_f.INTALIE = 0; /* disable alarm interrupt */ /* clear alarm register */ FM3_RTC->ALMIR = 0; FM3_RTC->ALHR = 0; FM3_RTC->ALDR = 0; FM3_RTC->ALMOR = 0; FM3_RTC->ALYR = 0; FM3_RTC->WTCR1_f.MIEN = 0; FM3_RTC->WTCR1_f.HEN = 0; FM3_RTC->WTCR1_f.DEN = 0; FM3_RTC->WTCR1_f.MOEN = 0; FM3_RTC->WTCR1_f.YEN = 0; } } } if(FM3_RTC->WTCR1_f.INTTMI && FM3_RTC->WTCR1_f.INTTMIE) { FM3_RTC->WTCR1_f.INTTMI = 0; s_RTCTimerIntCallback(); } if(FM3_RTC->WTCR1_f.INTSSI && FM3_RTC->WTCR1_f.INTSSIE) /* 0.5s int occur? */ { FM3_RTC->WTCR1_f.INTSSI = 0; s_RTCSubSecIntCallback(); } if(FM3_RTC->WTCR1_f.INTSI && FM3_RTC->WTCR1_f.INTSIE) /* 1s int occur? */ { FM3_RTC->WTCR1_f.INTSI = 0; s_RTCSecIntCallback(); } if(FM3_RTC->WTCR1_f.INTMI && FM3_RTC->WTCR1_f.INTMIE) /* 1min int occur? */ { FM3_RTC->WTCR1_f.INTMI = 0; s_RTCMinIntCallback(); } if(FM3_RTC->WTCR1_f.INTHI && FM3_RTC->WTCR1_f.INTHIE) /* 1hour int occur? */ { FM3_RTC->WTCR1_f.INTHI = 0; s_RTCHourIntCallback(); } /* clear all interrupt flag */ FM3_RTC->WTCR1 &= ~(0x00FF0000); }