| | |
| | | #include "rtc.h" |
| | | #include "extern_rtc.h" |
| | | #include "system_parameter.h" |
| | | #include "gpio.h" |
| | | #include "uart.h" |
| | | |
| | | |
| | | #include "low_pwr_test.h" |
| | | #include "test_log.h" |
| | | |
| | | __IO RTC_TimeDateTypeDef calendar_g = {0}; |
| | | |
| | | void RTC_IRQHandler(void) |
| | | { |
| | | // if(__SYS_DELAY_SEC_FLAG_GET(sys_active_time) == SET && LargeCurrent_LimitingProcess() == 3) |
| | | // SysWakeUp_ClockCfg(); |
| | | // if( RTC_ISR_SEC_IF_Chk() == SET)//²éѯÃëÖӶϱêÖ¾ÊÇ·ñÖÃÆð |
| | | // { |
| | | // RTC_ISR_SEC_IF_Clr(); //Çå³ýÃëÖжϱêÖ¾ |
| | | // sys_time_g.sys_run_period = SET; |
| | | // Get_Sys_Rtc_Time(&calendar_g); |
| | | // } |
| | | if (__SYS_DELAY_SEC_FLAG_GET(sys_active_time) == SET && LargeCurrent_LimitingProcess() == 3) |
| | | SysWakeUp_ClockCfg(); |
| | | if (RTC_ISR_SEC_IF_Chk() == SET) // ²éѯÃëÖӶϱêÖ¾ÊÇ·ñÖÃÆð |
| | | { |
| | | RTC_ISR_SEC_IF_Clr(); // Çå³ýÃëÖжϱêÖ¾ |
| | | sys_time_g.sys_run_period = SET; |
| | | Get_Sys_Rtc_Time(&calendar_g); |
| | | } |
| | | } |
| | | |
| | | |
| | | void RTC_Init(void) |
| | | { |
| | | CMU_PERCLK_SetableEx(RTCCLK, ENABLE); //RTC×ÜÏßʱÖÓʹÄÜ |
| | | //RTCʹÓÃXTLF/RCHF£¬Éϵç×Ô¶¯ÆðÕñ£¬²»ÐèҪʹÄܹ¤×÷ʱÖÓ |
| | | |
| | | RTC_ISR_SEC_IF_Clr(); //Çå³ýÃëÖжϱêÖ¾ |
| | | RTC_IER_SEC_IE_Setable(ENABLE);//´ò¿ªRTCÃëÖÐ¶Ï |
| | | |
| | | NVIC_DisableIRQ(RTC_IRQn); //NVICÖжϿØÖÆÆ÷ÅäÖà |
| | | NVIC_SetPriority(RTC_IRQn,1); |
| | | NVIC_EnableIRQ(RTC_IRQn); |
| | | |
| | | RTC_CR_RTC_EN_Setable(ENABLE); //ʹÄÜRTC_A |
| | | } |
| | | { |
| | | CMU_PERCLK_SetableEx(RTCCLK, ENABLE); // RTC×ÜÏßʱÖÓʹÄÜ |
| | | // RTCʹÓÃXTLF/RCHF£¬Éϵç×Ô¶¯ÆðÕñ£¬²»ÐèҪʹÄܹ¤×÷ʱÖÓ |
| | | |
| | | RTC_ISR_SEC_IF_Clr(); // Çå³ýÃëÖжϱêÖ¾ |
| | | RTC_IER_SEC_IE_Setable(ENABLE); // ´ò¿ªRTCÃëÖÐ¶Ï |
| | | |
| | | NVIC_DisableIRQ(RTC_IRQn); // NVICÖжϿØÖÆÆ÷ÅäÖà |
| | | NVIC_SetPriority(RTC_IRQn, 3); |
| | | NVIC_EnableIRQ(RTC_IRQn); |
| | | |
| | | RTC_CR_RTC_EN_Setable(ENABLE); // ʹÄÜRTC_A |
| | | } |
| | | |
| | | /****************************************** |
| | | * func: Get_Sys_Rtc_Time |
| | |
| | | * output: none |
| | | * return: none |
| | | *****************************************/ |
| | | ErrorStatus_STM32 Get_Sys_Rtc_Time(__IO RTC_TimeDateTypeDef * pOutput_timedata) |
| | | ErrorStatus_STM32 Get_Sys_Rtc_Time(__IO RTC_TimeDateTypeDef *pOutput_timedata) |
| | | { |
| | | uint08 n, i; |
| | | ErrorStatus_STM32 Result = ERROR_1; |
| | | uint08 n, i; |
| | | ErrorStatus_STM32 Result = ERROR_1; |
| | | |
| | | RTC_TimeDateTypeDef TempTime1,TempTime2; |
| | | |
| | | for(n=0 ;n<3; n++) |
| | | { |
| | | RTC_TimeDate_GetEx(&TempTime1);//¶ÁÒ»´Îʱ¼ä |
| | | RTC_TimeDate_GetEx(&TempTime2);//ÔÙ¶ÁÒ»´Îʱ¼ä |
| | | |
| | | for(i=0; i<7; i++)//Á½ÕßÒ»ÖÂ, ±íʾ¶ÁÈ¡³É¹¦ |
| | | { |
| | | if(((uint08*)(&TempTime1))[i] != ((uint08*)(&TempTime2))[i]) break; |
| | | } |
| | | if(i == 7) |
| | | { |
| | | Result = SUCCESS_0; |
| | | memcpy((uint08*)(pOutput_timedata), (uint08*)(&TempTime1), 7);//¶ÁÈ¡ÕýÈ·Ôò¸üÐÂеÄʱ¼ä |
| | | // memcpy(&sys_realtime_data_g.time_para_s,&TempTime1,7); |
| | | break; |
| | | } |
| | | } |
| | | return Result; |
| | | RTC_TimeDateTypeDef TempTime1, TempTime2; |
| | | |
| | | for (n = 0; n < 3; n++) |
| | | { |
| | | RTC_TimeDate_GetEx(&TempTime1); // ¶ÁÒ»´Îʱ¼ä |
| | | RTC_TimeDate_GetEx(&TempTime2); // ÔÙ¶ÁÒ»´Îʱ¼ä |
| | | |
| | | for (i = 0; i < 7; i++) // Á½ÕßÒ»ÖÂ, ±íʾ¶ÁÈ¡³É¹¦ |
| | | { |
| | | if (((uint08 *)(&TempTime1))[i] != ((uint08 *)(&TempTime2))[i]) |
| | | break; |
| | | } |
| | | if (i == 7) |
| | | { |
| | | Result = SUCCESS_0; |
| | | memcpy((uint08 *)(pOutput_timedata), (uint08 *)(&TempTime1), 7); // ¶ÁÈ¡ÕýÈ·Ôò¸üÐÂеÄʱ¼ä |
| | | memcpy(&sys_realtime_data_g.time_para_s, &TempTime1, 7); |
| | | break; |
| | | } |
| | | } |
| | | return Result; |
| | | } |
| | | |
| | | /****************************************** |
| | |
| | | * output: none |
| | | * return: none |
| | | *****************************************/ |
| | | ErrorStatus_STM32 Set_Sys_Rtc_Time(uint8_t year,uint8_t month,uint8_t day,uint8_t hour,uint8_t min,uint8_t sec,uint8_t week) |
| | | |
| | | ErrorStatus_STM32 Set_Sys_Rtc_Time(uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec, uint8_t week) |
| | | { |
| | | uint08 n, i; |
| | | ErrorStatus_STM32 Result; |
| | | RTC_TimeDateTypeDef TempTime1; |
| | | RTC_TimeDateTypeDef real_time = {year,month,day,hour,min,sec,week}; |
| | | for(n=0 ;n<3; n++) |
| | | { |
| | | RTC_WER_Write(RTC_WRITE_ENABLE ); //½â³ýRTCд±£»¤ |
| | | RTC_TimeDate_SetEx(&real_time); //ÉèÖÃRTC |
| | | RTC_WER_Write(RTC_WRITE_DISABLE ); //´ò¿ªRTCд±£»¤ |
| | | |
| | | Result = Get_Sys_Rtc_Time(&TempTime1); //¶ÁȡȷÈÏÉèÖýá¹û |
| | | if(Result == SUCCESS_0) |
| | | { |
| | | Result = ERROR_1; |
| | | for(i=0; i<7; i++)//Á½ÕßÒ»ÖÂ, ±íʾÉèÖóɹ¦ |
| | | { |
| | | if(((uint08*)(&TempTime1))[i] != ((uint08*)(&real_time))[i]) break; |
| | | } |
| | | if(i == 7) |
| | | { |
| | | Result = SUCCESS_0; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return Result; |
| | | uint08 n, i; |
| | | ErrorStatus_STM32 Result; |
| | | RTC_TimeDateTypeDef TempTime1; |
| | | RTC_TimeDateTypeDef real_time = {year, month, day, hour, min, sec, week}; |
| | | for (n = 0; n < 3; n++) |
| | | { |
| | | RTC_WER_Write(RTC_WRITE_ENABLE); // ½â³ýRTCд±£»¤ |
| | | RTC_TimeDate_SetEx(&real_time); // ÉèÖÃRTC |
| | | RTC_WER_Write(RTC_WRITE_DISABLE); // ´ò¿ªRTCд±£»¤ |
| | | |
| | | Result = Get_Sys_Rtc_Time(&TempTime1); // ¶ÁȡȷÈÏÉèÖýá¹û |
| | | if (Result == SUCCESS_0) |
| | | { |
| | | Result = ERROR_1; |
| | | for (i = 0; i < 7; i++) // Á½ÕßÒ»ÖÂ, ±íʾÉèÖóɹ¦ |
| | | { |
| | | if (((uint08 *)(&TempTime1))[i] != ((uint08 *)(&real_time))[i]) |
| | | break; |
| | | } |
| | | if (i == 7) |
| | | { |
| | | Result = SUCCESS_0; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return Result; |
| | | } |
| | | |
| | | void rtc_setalarm(RTC_AlarmTmieTypeDef* para) |
| | | void rtc_setalarm(RTC_AlarmTmieTypeDef *para) |
| | | { |
| | | RTC_AlarmTime_SetEx(para); //ÉèÖÃÄÖÖÓʱ¼ä |
| | | |
| | | RTC_ISR_ALARM_IF_Clr(); //Çå³ýÄÖÖÓÖжϱêÖ¾ |
| | | RTC_IER_ALARM_IE_Setable(ENABLE);//´ò¿ªÄÖÖÓÖÐ¶Ï |
| | | RTC_ALARM_ALMEN_Setable(ENABLE);//ÄÖÖÓ¹¦ÄÜʹÄÜ |
| | | RTC_AlarmTime_SetEx(para); // ÉèÖÃÄÖÖÓʱ¼ä |
| | | |
| | | RTC_ISR_ALARM_IF_Clr(); // Çå³ýÄÖÖÓÖжϱêÖ¾ |
| | | RTC_IER_ALARM_IE_Setable(ENABLE); // ´ò¿ªÄÖÖÓÖÐ¶Ï |
| | | RTC_ALARM_ALMEN_Setable(ENABLE); // ÄÖÖÓ¹¦ÄÜʹÄÜ |
| | | } |
| | | |
| | | |