2.9. RTC

1、RTC时钟,一般分为硬件RTC和虚拟RTC,本芯片只有虚拟RTC。

2.9.1. RTC功能介绍

SDK中的RTC采用统一接口,可配置其时钟源、读写时钟、读写闹钟等功能。

2.9.2. rtc_dev_init

初始化rtc模块,可配置时钟源、RTC类型、闹钟使能以及闹钟回调函数。

时钟源,可选择为LRC或外挂32K。(LRC时钟源会有千分之一的误差)

时钟类型,可选择为硬件RTC或虚拟RTC。(注:本芯片没有硬件RTC)

闹钟使能,可使能闹钟功能,只有使能闹钟功能后,闹钟才可以正常使用。

闹钟回调函数,闹钟中断起来以后调用的函数,用户可自己编写相关程序。

原型:

struct rtc_config {
    enum RTC_CLK rtc_clk;   //可选择时钟源(LRC/外挂32K)
    enum RTC_SEL rtc_sel;   //选择ERC类型(硬件RTC/虚拟RTC)
    u8 alm_en;              //闹钟使能,打开以后写入的闹钟才有用
    u8 timer_wkup_en;       //定时唤醒/RTC复用使能,打开后可以采用定时唤醒来唤醒系统,也可以通过闹钟唤醒系统。
    void (*cbfun)(void);    //闹钟回调函数
};

void rtc_dev_init(const struct rtc_config *rtc);

参数:

rtc

rtc相关参数配置

2.9.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_read_time(struct sys_time *time);
void rtc_write_time(const struct sys_time *time);

参数:

time

读写时间的结构体

2.9.4. rtc_alarm_en()/rtc_get_alarm_en()

rtc闹钟使能以及获取闹钟使能接口

原型:

void rtc_alarm_en(u32 en);
u32 rtc_get_alarm_en(void);

参数:

rtc_alarm_en()

en

1为使能闹钟/0为关闭闹钟

u32 rtc_get_alarm_en(void);

返回值

1为闹钟已使能/0为未使能

2.9.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

读写时间的结构体

2.9.6. void rtc_debug_dump(void);

rtc调试接口,用于调试打印RTC信息。(RTC时间、闹钟时间以及闹钟是否使能)

原型:

void rtc_debug_dump(void);

2.9.7. 时钟常用接口

系统还提供了时钟相关的应用接口,便于用户开发时使用。

原型:

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); //返回每月的天数