1.10. RTC
1、RTC时钟,一般分为硬件RTC和虚拟RTC,本芯片只有虚拟RTC。
1.10.1. RTC功能介绍
SDK中的RTC采用统一接口,可配置其时钟源、读写时钟、读写闹钟等功能。
1.10.2. rtc_dev_init
初始化rtc模块,可配置时钟源、RTC类型、闹钟使能以及闹钟回调函数。
时钟源,可选择为LRC或外挂32K。(LRC时钟源会有千分之一的误差)
时钟类型,可选择为硬件RTC或虚拟RTC。(注:本芯片没有硬件RTC)
闹钟使能,可使能闹钟功能,只有使能闹钟功能后,闹钟才可以正常使用。
闹钟回调函数,闹钟中断起来以后调用的函数,用户可自己编写相关程序。
原型:
#define CLK_SEL_LRC 1
#define CLK_SEL_32K 2 //注:本芯片32k还未开放
#define CLK_SEL_BTOSC 3 //注:本芯片btosc还未开放
struct rtc_config_init {
const struct sys_time *default_sys_time;//配置默认时钟
const struct sys_time *default_alarm;//配置默认闹钟
void (*cbfun)(void);//闹钟回调函数
u32 rtc_clk;//可选择时钟源,配置时选用以上的宏进行配置
u8 alm_en;//闹钟使能,打开以后写入的闹钟才有用
};
void rtc_dev_init(const struct rtc_config *rtc); //rtc初始化
void rtc_dev_deinit(void); //rtc模块关闭
参数:
rtc
rtc相关参数配置
1.10.3. rtc_write_time()/rtc_read_time()
rtc读写时间接口
原型:
struct sys_time {
u16 year;
u8 month;
u8 day;
u8 hour;
u8 min;
u8 sec;
};
void rtc_write_time(const struct sys_time *time);
void rtc_read_time(struct sys_time *time);
参数:
time
读写时间的结构体
1.10.4. rtc_alarm_switch()/rtc_is_alarm_en()/rtc_is_alarm_wkup()
rtc闹钟开关以及相关判断接口
原型:
void rtc_alarm_switch(u32 en);
u32 rtc_is_alarm_en(void);
u32 rtc_is_alarm_wkup(void);
参数:
rtc_alarm_switch(u32 en)
en
1为使能闹钟/0为关闭闹钟
u32 rtc_get_alarm_en(void)
返回值
1为闹钟已使能/0为未使能
u32 rtc_is_alarm_wkup(void)
返回值
1为闹钟唤醒/0为其他
1.10.5. rtc_write_alarm()/rtc_read_alarm()
rtc读写时间接口
原型:
struct sys_time {
u16 year;
u8 month;
u8 day;
u8 hour;
u8 min;
u8 sec;
};
void rtc_read_alarm(struct sys_time *time);
void rtc_write_alarm(const struct sys_time *time);
参数:
time
读写时间的结构体
1.10.6. void rtc_debug_dump(void);
rtc调试接口,用于调试打印RTC信息。(RTC时间、闹钟时间以及闹钟是否使能)
原型:
void rtc_debug_dump(void);
1.10.7. rtc_save_context_to_vm()
将rtc相关参数保存到vm(软关机内部默认调用)
原型:
void rtc_save_context_to_vm(void);
1.10.8. rtc_reset_save_time()
复位前保存时间(软复位前默认调用,用于复位前保存rtc相关参数)
原型:
void rtc_reset_save_time(void);
1.10.9. rtc_get_clk_sel()
rtc获取时钟源
原型:
u32 rtc_get_clk_sel(void);
参数:
返回值
返回rtc时钟源选择
1.10.10. 时钟常用接口
系统还提供了时钟相关的应用接口,便于用户开发时使用。
原型:
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); //返回每月的天数
1.10.11. demo测试使用介绍
demo文件位于:apps/app/bsp/common/rtc/rtc_demo.c
在apps/demo/hid/config/lib_driver_config.c打开RTC配置(const int config_rtc_enable = 1;)
打开rtc_demo.c宏控制
在任意应用初始化函数(例如选择的时keyboard这个例子在hidkey_app_start())中调用rtc_test()函数
查看串口打印信息