134 lines
4.5 KiB
C
134 lines
4.5 KiB
C
|
|
#include "../main/SystemInclude.h"
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief RTC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD>
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ԴΪ LSI<EFBFBD><EFBFBD>32.768kHz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 32767 <EFBFBD>õ<EFBFBD> 1Hz <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵΪ 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>ʼֵΪ 0<EFBFBD><EFBFBD>ʹ<EFBFBD>þ<EFBFBD>̬<EFBFBD><EFBFBD>־ȷ<EFBFBD><EFBFBD>ִֻ<EFBFBD><EFBFBD>һ<EFBFBD>Ρ<EFBFBD>
|
|||
|
|
* @param <EFBFBD><EFBFBD>
|
|||
|
|
* @example <EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
static void RTC_BaseInit(void)
|
|||
|
|
{
|
|||
|
|
static uint8_t rtc_base_inited = 0;
|
|||
|
|
if (rtc_base_inited) return;
|
|||
|
|
|
|||
|
|
RTC_InitTypeDef cfg;
|
|||
|
|
cfg.ClockSource = RCC_RTCCLKSource_LSI;// RCC_RTCCLKSource_LSE RCC_RTCCLKSource_HSE_DIV128
|
|||
|
|
cfg.Prescaler = 32767; // 1Hz
|
|||
|
|
cfg.Counter = 0;
|
|||
|
|
cfg.Alarm = 0;
|
|||
|
|
|
|||
|
|
LHL_RTC_Init(&cfg);
|
|||
|
|
rtc_base_inited = 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> RTC <EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
* @note <EFBFBD>״ε<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ִ<EFBFBD><EFBFBD> RTC_BaseInit() <EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Ȼ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD><EFBFBD><EFBFBD> NVIC <EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
|
|||
|
|
* <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD>־ȷ<EFBFBD><EFBFBD>ִֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
* @param <EFBFBD><EFBFBD>
|
|||
|
|
* @example StartRTC_SEC();
|
|||
|
|
**/
|
|||
|
|
void StartRTC_SEC(void)
|
|||
|
|
{
|
|||
|
|
static uint8_t sec_inited = 0;
|
|||
|
|
if (sec_inited) return;
|
|||
|
|
RTC_BaseInit();
|
|||
|
|
|
|||
|
|
LHL_RTC_ITConfig(RTC_IT_SECIE, ENABLE);
|
|||
|
|
// NVIC_EnableIRQ(RTC_IRQn);
|
|||
|
|
// NVIC_SetPriority(RTC_IRQn, 1);
|
|||
|
|
sec_inited = 1 ;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> RTC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣩
|
|||
|
|
* @param seconds: <EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
* @note <EFBFBD>״ε<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ִ<EFBFBD><EFBFBD> RTC_BaseInit()<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϡ<EFBFBD>
|
|||
|
|
* <EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD>־ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִֻ<EFBFBD><EFBFBD>һ<EFBFBD>Ρ<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϵ<EFBFBD> NVIC ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
|
|||
|
|
* @example StartRTC_AlarmAfterSeconds(5); // 5 <20><><EFBFBD><EFBFBD><F3B4A5B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
**/
|
|||
|
|
void StartRTC_AlarmAfterSeconds(uint32_t seconds)
|
|||
|
|
{
|
|||
|
|
static uint8_t rtc_alrm_inited = 0;
|
|||
|
|
if (!rtc_alrm_inited)
|
|||
|
|
{
|
|||
|
|
RTC_BaseInit();
|
|||
|
|
|
|||
|
|
LHL_RTC_ITConfig(RTC_IT_ALRIE, ENABLE);// ʹ<><CAB9> RTC <20><><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>ע<EFBFBD>⣺SDK <20><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> EXTI_LINE_9<5F><39>
|
|||
|
|
// NVIC_EnableIRQ(RTCAlarm_IRQn);// ʹ<><CAB9> NVIC <20>ж<EFBFBD>
|
|||
|
|
// NVIC_SetPriority(RTCAlarm_IRQn, 0);
|
|||
|
|
rtc_alrm_inited = 1;
|
|||
|
|
}
|
|||
|
|
uint32_t now = 0;
|
|||
|
|
LHL_RTC_GetCounter(&now);
|
|||
|
|
LHL_RTC_SetAlarm(now + seconds );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*-=====================================================================================================
|
|||
|
|
//RTC <20>жϻص<CFBB>
|
|||
|
|
-=====================================================================================================*/
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
|
|
|||
|
|
static rtc_irq_callback_t rtc_sec_irq_callback,rtc_alarm_irq_callback ;
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief ע<EFBFBD><EFBFBD> RTC <EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param rtc_irq_source: <EFBFBD>ж<EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ RTC_SEC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD><EFBFBD><EFBFBD> RTC_ALR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD>
|
|||
|
|
* @param rtc_irq_callback: <EFBFBD>û<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ע<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><EFBFBD> RTC_IRQn <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ע<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><EFBFBD> RTCAlarm_IRQn <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* ͬʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>жϱ<EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
|
* @example rtc_register_irq_callback(RTC_SEC, my_sec_callback);
|
|||
|
|
**/
|
|||
|
|
void rtc_register_irq_callback(RTC_IRQ_SOURCE_t rtc_irq_source ,rtc_irq_callback_t rtc_irq_callback)
|
|||
|
|
{
|
|||
|
|
if(rtc_irq_source == RTC_SEC)
|
|||
|
|
{
|
|||
|
|
rtc_sec_irq_callback = rtc_irq_callback;//<2F><>ֵ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
LHL_RTC_ClearPending(RTC_FLAG_SECF);// <20><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
|
|||
|
|
NVIC_EnableIRQ(RTC_IRQn);
|
|||
|
|
NVIC_SetPriority(RTC_IRQn, 1);
|
|||
|
|
}
|
|||
|
|
else if(rtc_irq_source == RTC_ALR)
|
|||
|
|
{
|
|||
|
|
rtc_alarm_irq_callback = rtc_irq_callback;
|
|||
|
|
LHL_RTC_ClearPending(RTC_FLAG_ALRF); // <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
|
|||
|
|
NVIC_EnableIRQ(RTCAlarm_IRQn);// ʹ<><CAB9> NVIC <20>ж<EFBFBD>
|
|||
|
|
NVIC_SetPriority(RTCAlarm_IRQn, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief RTC <EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
|
**/
|
|||
|
|
void RTC_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
uint32_t Time_Count;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>˻ص<CBBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (rtc_sec_irq_callback != NULL) rtc_sec_irq_callback();// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ע<EFBFBD><D7A2><EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD>жϱ<D0B6>־
|
|||
|
|
//if (LHL_RTC_GetPending(RTC_FLAG_SECF) == SET)
|
|||
|
|
LHL_RTC_ClearPending(RTC_FLAG_SECF); // <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD>жϱ<D0B6>־
|
|||
|
|
LHL_RTC_ClearPending(RTC_FLAG_OWF); // <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**------------------------------------------------------------------------
|
|||
|
|
* @brief RTC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
|
**/
|
|||
|
|
void RTCAlarm_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>˻ص<CBBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (rtc_alarm_irq_callback != NULL) rtc_alarm_irq_callback();// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ע<EFBFBD><D7A2><EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//if (LHL_RTC_GetPending(RTC_FLAG_ALRF) == SET)
|
|||
|
|
LHL_RTC_ClearPending(RTC_FLAG_ALRF); // <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
|
|||
|
|
LHL_RTC_ClearPending(RTC_FLAG_OWF); // <20><><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
}
|