当前位置:网站首页>实时时钟 (RTC)
实时时钟 (RTC)
2022-07-05 06:01:00 【比特冬哥】
文章目录
一、RTC简介
实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。
执行以下操作将使能对后备寄存器和RTC的访问:
● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟
● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。
二、主要特性
● 可编程的预分频系数:分频系数最高为220。
● 32位的可编程计数器,可用于较长时间段的测量。
● 2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟频率的四分之一以上)。
● 可以选择以下三种RTC的时钟源:
─ HSE时钟除以128; ─ LSE振荡器时钟;
─ LSI振荡器时钟节RTC时钟。
● 2个独立的复位类型:
─ APB1接口由系统复位;
─ RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位
● 3个专门的可屏蔽中断:
─ 闹钟中断,用来产生一个软件可编程的闹钟中断。
─ 秒中断,用来产生一个可编程的周期性中断信号(最长可达1秒)。 ─ 溢出中断,指示内部可编程计数器溢出并回转为0的状态。
三、功能描述
1. 概述
RTC由两个主要部分组成(参见下图)。第一部分(APB1接口)用来和APB1总线相连。此单元还包含一组16位寄存器,可通过APB1总线对其进行读写操作。APB1接口由APB1总线时钟驱动,用来与APB1总线接口。
另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLK。RTC的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。如果在RTC_CR寄存器中设置了相应的允许位,则在每个TR_CLK周期中RTC产生一个中断(秒中断)。第二个模块是一个32位的可编程计数器,可被初始化为当前的系统时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。
2. 复位过程
除了RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器外,所有的系统寄存器都由系统复位或电源复位进行异步复位。
RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器仅能通过备份域复位信号复位。
3. 读RTC寄存器
RTC核完全独立于RTC APB1接口。
软件通过APB1接口访问RTC的预分频值、计数器值和闹钟值。但是,相关的可读寄存器只在与RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。RTC标志也是如此的。
这意味着,如果APB1接口曾经被关闭,而读操作又是在刚刚重新开启APB1之后,则在第一次的内部寄存器更新之前,从APB1上读出的RTC寄存器数值可能被破坏了(通常读到0)。下述几种情况下能够发生这种情形:
● 发生系统复位或电源复位
● 系统刚从待机模式唤醒
● 系统刚从停机模式唤醒
所有以上情况中,APB1接口被禁止时(复位、无时钟或断电)RTC核仍保持运行状态。
因此,若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置’1’。
注: RTC的 APB1接口不受WFI和WFE等低功耗模式的影响
4. 配置RTC寄存器
必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器。
另外,对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是’1’时,才可以写入RTC寄存器。
配置过程:
- 查询RTOFF位,直到RTOFF的值变为’1’
- 置CNF值为1,进入配置模式
- 对一个或多个RTC寄存器进行写操作
- 清除CNF标志位,退出配置模式
- 查询RTOFF,直至RTOFF位变为’1’以确认写操作已经完成。
仅当CNF标志位被清除时,写操作才能进行,这个过程至少需要3个RTCCLK周期。
5. RTC标志的设置
在每一个RTC核心的时钟周期中,更改RTC计数器之前设置RTC秒标志(SECF)。在计数器到达0x0000之前的最后一个RTC时钟周期中,设置RTC溢出标志(OWF)。在计数器的值到达闹钟寄存器的值加1(RTC_ALR+1)之前的RTC时钟周期中,设置RTC_Alarm和RTC闹钟标志(ALRF)。
对RTC闹钟的写操作必须使用下述过程之一与RTC秒标志同步:
● 使用RTC闹钟中断,并在中断处理程序中修改RTC闹钟和/或RTC计数器。
● 等待RTC控制寄存器中的SECF位被设置,再更改RTC闹钟和/或RTC计数器。
四、RTC寄存器描述
1. RTC控制寄存器高位(RTC_CRH)
这些位用来屏蔽中断请求。
注意:系统复位后所有的中断被屏蔽,因此可通过写RTC寄存器来确保在初始化后没有挂起的中断请求。当外设正在完成前一次写操作时(标志位RTOFF=0),不能对RTC_CRH寄存器进行写操作。
RTC功能由这个控制寄存器控制。一些位的写操作必须经过一个特殊的配置过程来完成
2. RTC控制寄存器低位(RTC_CRL)
RTC的功能由这个控制寄存器控制。当前一个写操作还未完成时(RTOFF=0时),不能写RTC_CR寄存器。
注:
- 任何标志位都将保持挂起状态,直到适当的RTC_CR请求位被软件复位,表示所请求的中断已经被接受。
- 在复位时禁止所有中断,无挂起的中断请求,可以对RTC寄存器进行写操作。
- 当APB1时钟不运行时,OWF、ALRF、SECF和RSF位不被更新。
- OWF、ALRF、SECF和RSF位只能由硬件置位,由软件来清零。
- 若ALRF=1且ALRIE=1,则允许产生RTC全局中断。如果在EXTI控制器中允许产生EXTI线 17中断,则允许产生RTC全局中断和RTC闹钟中断。
- 若ALRF=1,如果在EXTI控制器中设置了EXTI线 17的中断模式,则允许产生RTC闹钟中断;如果在EXTI控制器中设置了EXTI线 17的事件模式,则这条线上会产生一个脉冲(不会产生RTC闹钟中断)。
3. RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL)
预分频装载寄存器用来保存RTC预分频器的周期计数值。它们受RTC_CR寄存器的RTOFF位保护,仅当RTOFF值为’1’时允许进行写操作。
RTC预分频装载寄存器高位(RTC_PRLH)
RTC预分频装载寄存器低位(RTC_PRLL)
注: 如果输入时钟频率是32.768kHz(fRTCCLK),这个寄存器中写入7FFFh可获得周期为1秒钟的信号。
4. RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL)
在TR_CLK的每个周期里,RTC预分频器中计数器的值都会被重新设置为RTC_PRL寄存器的值。用户可通过读取RTC_DIV寄存器,以获得预分频计数器的当前值,而不停止分频计数器的工作,从而获得精确的时间测量。此寄存器是只读寄存器,其值在RTC_PRL或RTC_CNT寄存
器中的值发生改变后,由硬件重新装载。
RTC预分频器余数寄存器高位(RTC_DIVH)
RTC预分频器余数寄存器低位(RTC_DIVL)
5. RTC计数器寄存器 (RTC_CNTH / RTC_CNTL)
RTC核有一个32位可编程的计数器,可通过两个16位的寄存器访问。计数器以预分频器产生的TR_CLK时间基准为参考进行计数。RTC_CNT寄存器用来存放计数器的计数值。他们受RTC_CR 的 位 RTOFF 写保护,仅当 RTOFF 值 为 ’1’ 时,允许写操作。在高或低寄存器(RTC_CNTH或RTC_CNTL)上的写操作,能够直接装载到相应的可编程计数器,并且重新装载
RTC预分频器。当进行读操作时,直接返回计数器内的计数值(系统时间)。
RTC计数器寄存器高位(RTC_CNTH)
RTC计数器寄存器低位(RTC_CNTL)
6. RTC闹钟寄存器(RTC_ALRH/RTC_ALRL)
当可编程计数器的值与RTC_ALR中的32位值相等时,即触发一个闹钟事件,并且产生RTC闹钟中断。此寄存器受RTC_CR寄存器里的RTOFF位写保护,仅当RTOFF值为’1’时,允许写操作。
RTC闹钟寄存器高位(RTC_ALRH)
RTC闹钟寄存器低位(RTC_ALRL)
7. RTC寄存器映像
RTC寄存器是16位可寻址寄存器,具体描述如下:
边栏推荐
猜你喜欢
MIT-6874-Deep Learning in the Life Sciences Week 7
Typical use cases for knapsacks, queues, and stacks
CCPC Weihai 2021m eight hundred and ten thousand nine hundred and seventy-five
【Jailhouse 文章】Jailhouse Hypervisor
从Dijkstra的图灵奖演讲论科技创业者特点
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 06.从头到尾打印链表
CF1634E Fair Share
【Jailhouse 文章】Look Mum, no VM Exits
1.15 - 输入输出系统
随机推荐
Detailed explanation of expression (csp-j 2021 expr) topic
从Dijkstra的图灵奖演讲论科技创业者特点
【Rust 笔记】16-输入与输出(上)
1996. number of weak characters in the game
Little known skills of Task Manager
Alu logic operation unit
Educational Codeforces Round 116 (Rated for Div. 2) E. Arena
Daily question 2013 Detect square
Analysis of backdoor vulnerability in remote code execution penetration test / / phpstudy of national game title of national secondary vocational network security B module
Daily question - longest substring without repeated characters
Flutter Web 硬件键盘监听
Sword finger offer 35 Replication of complex linked list
Codeforces round 712 (Div. 2) d. 3-coloring (construction)
【实战技能】非技术背景经理的技术管理
The number of enclaves
EOJ 2021.10 E. XOR tree
Introduction et expérience de wazuh open source host Security Solution
个人开发的渗透测试工具Satania v1.2更新
CF1634E Fair Share
Cluster script of data warehouse project