AT32 RTC学习笔记

本学习笔记基于雅特力MCU,链接如下:

网站链接:雅特力科技 : 32位微控制器的创新领导者!

资料链接:https://www.arterytek.com/file/download/1995

实时时钟用于日历时钟功能,内部为一个 32 位递增计数器,通常使用中该计数器 1 秒增加 1,也就是该计数器相当于秒钟,然后根据当前的秒钟值,通过转换得到时间和日期,实现日历的功能,修改计数器的值便可修改时间和日期。

RTC 计数逻辑位于电池供电域,只要 VBAT 有电,RTC 便会一直运行,不受系统复位以及 VDD 掉电影响,但可通过电池供电域复位进行复位。

一、时钟:

1. RTC时钟有三个来源:HEXT/128,LEXT,LICK,比较常用是32.268kHz的LEXT,经过2的15次方分频后给RTC计数器提供1Hz的计数时钟,这样计数器每增加1,时间就增加1秒。
2. 需要注意RTC时钟的频率必须小于PCLK1频率的四分之一,不过一般不会使用这么高的RTC时钟和这么低的PCLK频率。
3. 当我们选用LEXT作为RTC时钟源时,如果MCU主电源断电,在VBAT供电的情况下RTC仍保持运行,除RTC_CTRL寄存器外RTC其他寄存器正常更新,但因主电源切断无法通过APB1访问RTC寄存器。若选用其余两种时钟源为RTC供电,主电源切断的情况下,RTC停止运行。重新上电后,RTC立即运行,不需要额外使能。

二、配置:

1. 上电复位后所有RTC寄存器处于写保护状态,需要先解除写保护,才能写RTC寄存器。

解锁步骤:

        使能PWC与BPR时钟:PWCEN=1,BPREN=1。

        解锁电池供电域写保护:电源控制寄存器PWC_CRTL的BPWEN位置1。

2. 若要重新配置RTC_CLK,需将电池供电域复位后,再进行配置。

电池供电域复位方法:CRM->ctrl_bit.bpdrst = 1;CRM->ctrl_bit.bpdrst = 0

RTC_CLK配置方法:

        使能时钟源:如使能LEXT并等待LEXT稳定。

        选择RTC时钟源:CRM_BPDC寄存器的RTCSEL位选择,并使能RTCEN位

        设置RTC分频系数:分频系数 = RTC_CLK频率 - 1,等待RTC配置完成标志置起。

注意:写RTC寄存器后,需等待CFGF位置起,表示配置完成,才能再次写RTC寄存器。

3. 设置当前时间,通过将当前时间换算成秒数写入RTC_CNT寄存器。

在完成步骤1的情况下直接将秒数写入RTC_CNT寄存器即可,然后等待配置完成。

4.设置闹钟,方法与3设置当前时间类似,一般会同时开启闹钟中断,谈一谈RTC的中断

提前清中断标志:比如设置闹钟中断前,可以操作RTC_CTRL寄存器的TAF标志位清除闹钟中断,此时我们操作了RTC的寄存器,所以需要等待配置完成方可继续。

开启中断:操作RTC_CRTL寄存器的TAIEN位开启闹钟中断,同样需要等待配置完成。

配置中断优先级:调用nvic_irq_enable函数配置闹钟中断优先级,再写一个闹钟中断回调函数即可;当然也可调用nvic_irq_enable函数配置RTC全局中断,再写一个全局中断回调函数即可,建议采用第一种。同样需要等待RTC配置完成标志置起。

注意:此时如果有RTC闹钟中断/事件唤醒低功耗模式的需求,参考如下说明:

RTC 支持 RTC 全局中断向量(RTC_IRQn)和 RTC 闹钟中断向量(RTCAlarm_IRQn)。若要使用 RTC 闹钟中断从 DEEPSLEEP 模式下唤醒,需使能 RTC 闹钟中断并使用 RTCAlarm_IRQn 向量,同时将 EXINT 线 17 配置为中断模式;若要使用 RTC 闹钟事件从 DEEPSLEEP 模式下唤醒,需要将 EXINT 线 17 配置为事件模式,但无需使能 RTC 闹钟中断,若要使用 RTC 闹钟事件从 standby 模式下唤醒,则无 需配置闹钟中断和 EXINT 线 17。

最后写入闹钟值:方法与设置当前时间雷同,不赘述。

注意:RTC有三个中断可以开启,溢出中断,闹钟中断和秒中断。溢出中断很少使用,只当计数器溢出时才会触发;闹钟中断有单独的回调函数,也可以用RTC全局中断;秒中断和溢出中断都使用RTC全局中断,可以在秒中断里读出秒数。

5.日历实时显示,需要读取RTC计数器,读出当前秒数并转换成日历。

如果需要每秒刷新一次日历,可在秒标志(TSF)更新时读出计数值,并清除秒标志等待配置完成。也可在秒中断中操作。

三、特点:

1. DIV,ALA,CNT和DIVCNT寄存器只能通过电池供电域复位信号复位或完全断电丢失(VBAT也没电)。
2. 系统复位,电源复位或从待机,深度睡眠模式唤醒后,RTC寄存器的值可能还没更新到APB1总线,所以需要等待RTC寄存器更新标志UPDF置1再读。
3. 复位后,所有RTC中断被禁止,因为RTC_CRTL寄存器被复位,需要重新配置;APB1停止运行时,标志位不再更新,因为标志位也在RTC_CRTL寄存器里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值