.. _虚拟RTC(软件RTC): 虚拟RTC(软件RTC) ======================================= 简介 ######################## AW30N从v1.1.0版本开始新增了虚拟RTC(软件RTC)功能,支持选择LRC、32K晶振以及BTOSC作为时钟源,支持读写时钟、读写闹钟powerdown状态下计时等功能。详细功能支持情况如下表 ======================= ========== ============ =========== 功能 LRC 32K晶振 BTOSC ======================= ========== ============ =========== 读写时钟 支持 支持 支持 读写闹钟 支持 支持 支持 powerdown状态计时 支持 支持 支持 softoff状态下计时 支持 支持 不支持 复位保持RTC时钟 支持 支持 支持 ======================= ========== ============ =========== .. note:: 软件RTC使用注意事项如下 1. 复位保持RTC时钟不包含上电复位!!! 2. 暂不支持softoff定时唤醒和闹钟复用。 3. 软件RTC使用32位变量保存lp_timer的cnt值,因此在powerdown或者softoff状态下长时间运行下会出现溢出现象,流程中为了防止溢出而做了自动唤醒处理。如果芯片在初始化RTC后立刻进入低功耗状态,那么其在不同时钟源下的最长自动唤醒时间为下表中数据所示 4. 如果芯片在初始化RTC后运行待机一段时间后再进入低功耗休眠,则 **自动唤醒的时间 = 最大自动唤醒时间 - 运行待机时间** ======= =============== 时钟源 最长自动唤醒时间 ======= =============== LRC 5.96小时 32k晶振 37.28小时 BTOSC 178.9秒 ======= =============== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 虚拟RTC配置参数 ####################### .. image:: virtual_rtc_config.png :alt: "虚拟rtc配置“ :align: center .. centered:: 虚拟rtc配置 ^^^^^^^^^^^^^^^^^^^^^^^ 虚拟rtc运行功耗 ####################### 虚拟rtc的运行功耗可参考表中数据,以下数据的测试环境为开发板,3.7V供电: ==================== =============== ============ ============ ============ 运行状态/时钟源 不运行RTC LRC 32K晶振 BTOSC ==================== =============== ============ ============ ============ 待机 5.306mA 5.311mA 5.308mA 5.472mA powerdown 40.46uA 40.69uA 41.85uA 906uA softoff 2.25uA 14.92uA 11.07uA 不支持 softoff(定时唤醒) 14.92uA 14.92uA 11.08uA 不支持 ==================== =============== ============ ============ ============ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 相关函数介绍 ############################ 函数void rtc_dev_init(const struct rtc_config_init \*rtc) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 该函数实现rtc配置初始化,初始化完成后rtc开始走时。 函数void read_current_time() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 该函数实现读取rtc时间并加以打印,用户可通过其内部调用的rtc_read_time函数的参数获取具体的rtc时间 函数void write_clock_time(u16 year, u8 month, u8 day, u8 hour, u8 min, u8 sec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 该函数实现修改rtc时间。 | ①u16 year : 年 | ②u8 month : 月 | ③u8 day : 日 | ④u8 hour : 时 | ⑤u8 min : 分 | ⑥u8 sec : 秒 函数void read_alarm_time() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 该函数实现读取闹钟时间并加以打印,用户可通过其内部调用的rtc_read_alarm函数的参数获取具体的闹钟时间。 函数void write_alarm_time(u16 year, u8 month, u8 day, u8 hour, u8 min, u8 sec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 该函数实现修改闹钟时间 | ①u16 year : 年 | ②u8 month : 月 | ③u8 day : 日 | ④u8 hour : 时 | ⑤u8 min : 分 | ⑥u8 sec : 秒 函数void set_time_wakeup_soff(u32 clk_sel, u32 sec) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ softoff定时唤醒配置,开启rtc功能时,需要将rtc配置中的timer_wkup_en置1,才可保持RTC时间(仅支持LRC和32K晶振时钟源)。其中参数: | clk_sel为时钟源; | sec单位:ms; 函数void time_wakeup_soff_disable(void) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 该函数实现将定时唤醒失能。 u32 rtc_get_alm_wkup(void) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. note:: 该函数用于soffoff唤醒后,判断是否为闹钟唤醒,调用位置需要在power_early_init之前。其中参数 1.返回值: | 1 本次软关机唤醒为闹钟唤醒 | 0 本次软关机唤醒不是闹钟唤醒