Files
2025-12-03 11:12:34 +08:00

88 lines
1.9 KiB
C

#ifndef __RTC_H__
#define __RTC_H__
#include "typedef.h"
#include "sys_time.h"
#define CLK_SEL_LRC 1
#define CLK_SEL_32K 2
#define CLK_SEL_BTOSC 3
#define USE_VIR_RTC 1
#define RTC_ALM_WKUP 1
#define RTC_OVERFLOW_WKUP 2
extern const int config_rtc_enable;
struct rtc_config_init {
const struct sys_time *default_sys_time;
const struct sys_time *default_alarm;
void (*cbfun)(u32 event);
u32 rtc_clk;
u8 alm_en;
};
enum {
P11_LPTMR_WKUP_EVENT = 1, //p11定时唤醒事件
MSYS_ALARM_WKUP_EVENT,//闹钟唤醒事件
MSYS_RTC_1HZ_EVENT,//触发主系统1s更新1次时间事件
MSYS_SOFF_WKUP_EVENT,//soff定时唤醒事件
LPTMR_INTERRUPT_EVENT,//lptmr中断事件
};
struct set_lptmr1_wkup_time {
u64 wkup_us;
u8 type;
};
#if 0
struct sys_time {
u16 year;
u8 month;
u8 day;
u8 hour;
u8 min;
u8 sec;
} _GNU_PACKED_;
#endif
//API
void vir_rtc_wakeup_enable(u32 wkup_ms);//softoff定时唤醒配置,wkup_ms单位:ms
void vir_rtc_wakeup_disable(void);
void rtc_set_1s_read_time_switch(u8 sw);
u64 lptmr1_get_pass_us(void);
void rtc_dev_init(const struct rtc_config_init *rtc);
void rtc_dev_deinit(void);
void rtc_read_time(struct sys_time *time);
void rtc_write_time(const struct sys_time *time);
void rtc_read_alarm(struct sys_time *time);
void rtc_write_alarm(const struct sys_time *time);
void rtc_debug_dump(void);
void rtc_alarm_switch(u32 en);
void rtc_save_context_to_vm(void);
void rtc_reset_save_time(void);
u32 rtc_is_alarm_en(void);
u32 rtc_is_alarm_wkup(void);
u32 rtc_get_clk_sel(void);
bool leapyear(u32 year); //判断是否为闰年
u32 year_to_day(u32 year);
u32 month_to_day(u32 year, u32 month);
void day_to_ymd(u32 day, struct sys_time *sys_time);
u32 ymd_to_day(struct sys_time *time);
u32 caculate_weekday_by_time(struct sys_time *r_time); //计算当天为星期几
u32 get_day_of_month(u32 year, u32 month); //返回每月的天数
#endif // __RTC_API_H__