漫谈LiteOS之开发板-RTC实时时钟(基于GD32450i-EVAL)
5 RTC时钟
1 简介
RTC(Real_Time Clock)实时时钟,可以像时钟一样输出实际时间的电子设备,一般是集成电路,也称时钟芯片,其核心为晶振(晶体谐振器),分为内部晶振和外部晶振,晶振频率为2的15次方32768Hz,即分频15次为1Hz,晶振为分频计数器提供精确的与低功耗的实基信号来产生秒、分、时、日等信息。
该模块拥有一组连续计数的计数器,具有提供包含日期和时间的日历功能,除了亚秒以二进制码显示,其余皆以BCD码显示,修改计数器的值可以重新设置系统当前时间和日期。
2 特性
(1)由于晶振频率受温度影响,因此需要进行补偿,RTC可以通过软件设置实现夏令时补偿。
(2)低功耗,RTC可以工作在省电模式下,并通过软件配置来智能唤醒。唤醒后或系统复位后,RTC的设置和时间维持不变。
(3)参考时钟检测功能:可通过外接更高精度的低频时钟源来提高精度
(4)数字校准功能:通过调整最小时间单位来进行日历校准。
(5)通过移位功能进行亚秒级调整。
(6)提供到2099年内的日历功能。
(7)记录事件时间的时间戳功能。
(8)可编程的日历和两个位域可屏蔽的闹钟。
(9)可屏蔽的中断源:闹钟0和1;时间戳检测;侵入检测;自动唤醒事件。
(10)20个32位通用别分寄存器,可以在省电模式下保存数据,当有外部事件侵入时,备份寄存器将会复位。
3 RTC结构
由RTC结构框图可知RTC主要组成包括以下几部分:
(1)闹钟事件/中断和侵入事件/中断。
(2)32位备份寄存器。
(3)16位自动递减计数器
主要用于周期性产生唤醒标志,该功能通过WTEN置1来使能,可以工作在省电模式。
(4)3个时钟源。
(5)两种数字粗校准方法
数字粗校准和数字平滑校准。注意两种方法不可以同时使用。前者以异步预分频器输出为源,增加或减少ck_apre周期,后者通过调整校准周期内RTC时钟脉冲个数方式来校准RTC频率
(6)4种可选的RTC输入功能和4种可选的RTC输出功能。
(7)2个预分频
一个7位异步预分频,主要用于降低功耗;一个15位同步预分频。同时使用的时候,建议异步分频器的值尽可能大。
(8)影子寄存器。
当APB总线访问RTC日历寄存器RTC_DATE、RTC_TIME、RTC_SS时,BPSHAD=0时(默认为0),APB总线访问影子寄存器。每两个RTC时钟影子寄存器值会更新为真实日历寄存器的值。同时RSYNF位也会再次置位。在Deep-sleep和Standby模式时,影子寄存器不会更新。退出这两种模式,软件必须清除RSYNF位。如果想要在BPSHAD=0时读取日历寄存器的值,需等待RSYNF置1。当系统复位时将复位影子寄存器。
(9)各类寄存器
如RTC真实日历寄存器、RTC控制寄存器、RTC预分频寄存器、RCT唤醒定时器寄存器、RTC粗校准寄存器、RTC侵入寄存器等等。
图1 GD32450i-EVAL的RTC架构图
4 RTC程序初始化
static void rtc_pre_config(void)
{
/* enable access to RTC registers in backup domain */
rcu_periph_clock_enable(RCU_PMU); //使能PMU时钟
pmu_backup_write_enable();
//PMU_CTL寄存器BKPWEN位被清零,因此写RTC寄存器需要先写该位
#if defined (RTC_CLOCK_SOURCE_IRC32K)
rcu_osci_on(RCU_IRC32K);
rcu_osci_stab_wait(RCU_IRC32K);
rcu_rtc_clock_config(RCU_RTCSRC_IRC32K);
prescaler_s = 0x13F;
prescaler_a = 0x63;
#elif defined (RTC_CLOCK_SOURCE_LXTAL)
rcu_osci_on(RCU_LXTAL);//打开晶振并选择晶振类型
rcu_osci_stab_wait(RCU_LXTAL);.//晶振准备就绪
rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);//配置RTC时钟源
prescaler_s = 0xFF;
prescaler_a = 0x7F;
#else
#error RTC clock source should be defined.
#endif /* RTC_CLOCK_SOURCE_IRC32K */
rcu_periph_clock_enable(RCU_RTC); //启用RTC时钟
rtc_register_sync_wait();
//等待直到RTC_TIME和RTC_DATE寄存器与APB时钟同步,并且影子寄存器被更新
}
5 运行结果
除RTC相关配置只需要额外附加串口打印函数即可,硬件部分连接与前面串口系列一致。当程序运行时候,串口软件显示默认时间,每次按下wakeup按键的时候,会重新设置时间,并显示到串口,具体结果如图2所示。
图2 串口时间显示
其中的系统时间可以修改具体如下图所示,在中断回调函数中修改系统时间即可实现对上述显示时间的修改。具体如图3所示。
图3 中断回调函数时间修改
修改上述程序后,再次下载到开发板,可见系统显示时间如下图所示。
图4 修改后时间显示
主文博客链接:https://bbs.huaweicloud.com/blogs/124244
- 点赞
- 收藏
- 关注作者
评论(0)