NULL
This commit is contained in:
133
user/MCU/lhl_rtc.c
Executable file
133
user/MCU/lhl_rtc.c
Executable file
@@ -0,0 +1,133 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
/**
|
||||
* @brief RTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ԴΪ LSI<53><49>32.768kHz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 32767 <20>õ<EFBFBD> 1Hz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵΪ 0<><30><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>ʼֵΪ 0<><30>ʹ<EFBFBD>þ<EFBFBD>̬<EFBFBD><CCAC>־ȷ<D6BE><C8B7>ִֻ<D6BB><D6B4>һ<EFBFBD>Ρ<EFBFBD>
|
||||
* @param <20><>
|
||||
* @example <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5><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 <20><><EFBFBD><EFBFBD> RTC <20><><EFBFBD>ж<EFBFBD>
|
||||
* @note <20>״ε<D7B4><CEB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4> RTC_BaseInit() <20><><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
* Ȼ<><C8BB>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD> NVIC <20>ж<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>ص<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ɡ<EFBFBD>
|
||||
* <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6>ε<EFBFBD><CEB5>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>̬<EFBFBD><CCAC>־ȷ<D6BE><C8B7>ִֻ<D6BB><D6B4>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
||||
* @param <20><>
|
||||
* @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 <20><><EFBFBD><EFBFBD> RTC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3B4A5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣩
|
||||
* @param seconds: <20>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
||||
* @note <20>״ε<D7B4><CEB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4> RTC_BaseInit()<29><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϡ<D0B6>
|
||||
* <20>ڲ<EFBFBD><DAB2><EFBFBD>̬<EFBFBD><CCAC>־ȷ<D6BE><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִֻ<D6BB><D6B4>һ<EFBFBD>Ρ<EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>жϵ<D0B6> NVIC ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>ص<EFBFBD>ʱ<EFBFBD><CAB1><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 ע<><D7A2> RTC <20>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param rtc_irq_source: <20>ж<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ѡ RTC_SEC<45><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD> RTC_ALR<4C><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>
|
||||
* @param rtc_irq_callback: <20>û<EFBFBD><C3BB>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* @note <20><><EFBFBD>ж<EFBFBD>ע<EFBFBD><D7A2>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><CAB9> RTC_IRQn <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ע<EFBFBD><D7A2>ʱ<EFBFBD><CAB1><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><CAB9> RTCAlarm_IRQn <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
|
||||
* ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE>
|
||||
* @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 <20><><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>
|
||||
**/
|
||||
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 <20><><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>
|
||||
**/
|
||||
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>־
|
||||
}
|
||||
Reference in New Issue
Block a user