RTC不能使用唤醒pin,因此相关寄存器位不适用(如RTC_CR[WPS]、RTC_CR[WPE]、RTC_IER [WPON])。
此外,该装置没有集成电容,因此无法通过软件配置可调谐电容器(包括在晶体振荡器中)。
该设备没有内部32.768 kHz晶体振荡器。本章对32.768 kHz时钟的所有引用均为RTC_CLK。有关可用时钟源,请参见表27-9中的RTC时钟计时。
屏幕剪辑的捕获时间: 2019/3/9 10:19
RTC中的中断在重置时启用,如RTC_IER寄存器中所述。一旦在NVIC中启用中断,就可能发生中断。
在启用RTC之前,应向RTC提供软件重置。
RTC不能在STOP和VLPS中生成多个触发器(通过TRIGMUX)。例如,在累加器模式下触发LPIT将不会工作,因为需要多个触发器。对于其他电源模式,可以正常生成多个触发器。
特性
RTC模块的功能包括:
•32位秒计数器,具有翻转保护和32位报警功能
•16位预调器,具有补偿功能,可纠正0.12 ppm至3906 ppm之间的误差
•选择使用1khz LPO增加预调器(每时钟边缘增加32个预调器)
•寄存器写保护
•锁寄存器需要POR或软件复位,以启用写访问
•可配置1、2、4、8、16、32、64或128赫兹方波输出,可选中断
操作模式
RTC在所有低功耗模式下都能正常工作,并且可以产生中断来退出任何低功耗模式。
屏幕剪辑的捕获时间: 2019/3/9 10:38
寄存器定义
所有寄存器都必须使用32位写访问,所有寄存器访问都会导致三种等待状态。
非管理模式软件对任何寄存器的写访问,当控制寄存器中的管理访问位清除时,将以总线错误终止。
非管理模式软件的读取访问正常完成。
写入受锁寄存器保护的寄存器不会生成总线错误,但是写入将不会完成。
屏幕剪辑的捕获时间: 2019/3/9 10:43
电源、时钟和复位
RTC总是上电,在所有低功率模式下保持可用。
RTC的时间计数器默认时钟是32.768 kHz。
或者,时间计数器可以由一个LPO 1khz时钟计时,预调器将为每个LPO时钟增加32。
上电复位信号初始化所有RTC寄存器到它们的默认状态。软件复位位也可以初始化所有的RTC寄存器。
振荡器控制
32.768kHZ的晶体振荡器在上电复位是禁用的,必须通过软件启用。
启用晶体振荡器后,设置SR[TCE]或使用RTC外部的振荡器时钟前等待振荡器启动时间。
该晶体振荡器包括可调谐电容器,可通过软件配置。除非振荡器被禁用,否则不要改变电容。
软件复位
将1写入CR[SWR]就相当于把RTC模块重新上电复位。
CR[SWR]不受软件复位的影响,必须由软件清除。
supervisor access
当the control bit 置0时,只有supervisor mode软件才能写入RTC寄存器,non-supervisor mode软件将产生总线错误。无论是管理员模式还是非管理员模式的软件都可以读取RTC寄存器。
Time counter
时间计数器由每秒钟递增一次的32位秒计数器和每32.768 kHz时钟周期递增一次的16位预分频寄存器组成。还可以选择使用一个1 kHz的LPO对预调度器进行计时,该LPO在每个时钟周期内将预调度器增加32。
在计时计数器(秒或预调器)递增时读取计时计数器可能会由于读取数据总线的同步而返回无效数据。如果软件需要在预调器或秒计数器可以递增时读取它们,建议执行两次读取访问,并且软件验证两次读取返回的数据是否相同。
只有当SR[TCE]置0,才可以写秒寄存器和时间预分频器。在写入秒寄存器之前,始终要先写入预计算寄存器,因为秒寄存器在预计算寄存器的第14位下降沿上递增。
如果设置了SR[TCE]置1、SR[TIF]置0、SR[TOF]置0和32.768 kHz(或1 kHz)时钟源,则时间预调寄存器增量。启用振荡器后,等待振荡器启动时间,然后再设置SR[TCE],使振荡器时钟输出的时间稳定下来。
如果时间秒寄存器溢出,那么SR[TOF]将被置1,时间预分配器寄存器将停止递增。通过初始化时间秒寄存器来清除SR[TOF]。当SR[TOF]为1时,时间秒寄存器和时间预估寄存器读取为零。SR[TIF]在POR和软件重置上设置,并通过初始化时间秒寄存器来清除。每当设置SR[TIF]时,时间秒寄存器和时间预调寄存器读取为零。
SR[TIF]在上电复位和软件复位会被置1,通过初始化时间秒寄存器来清0。当SR[TIF]为1,时间秒寄存器和时间预调寄存器读取为零。
补偿
补偿逻辑提供了一个准确和广泛的补偿范围,可以纠正高达3906 ppm和低至0.12 ppm的错误。补偿因子必须由外部计算到RTC,并由软件提供给补偿寄存器。RTC本身并不计算所需的补偿量,通过1hz时钟输出到外部引脚以支持外部校准逻辑。
晶体补偿可以通过使用固件和晶体特性来确定补偿量。温度补偿可以由固件支持,固件定期通过ADC测量外部温度,并根据指定晶体频率随温度变化的查找表更新补偿寄存器。
补偿逻辑改变了预分配器寄存器溢出和增加时间秒计数器所需的32.768 kHz时钟周期数。时间补偿值用于调整-127到+128之间的时钟周期数。
当预编程序寄存器等于0x3FFF时,从预编程序寄存器中添加或减去循环,然后递增。补偿区间用于调整使用时间补偿值的频率,即从每秒一次调整到每256秒一次。
如果上一个补偿间隔已经过期,则对时间补偿寄存器的更新将直到下一次时间秒寄存器增量时才生效。
当补偿间隔设置为每秒一次以外的时间间隔时,补偿应用于第一个秒间隔,其余秒间隔不接受补偿。
通过将时间补偿寄存器配置为零,可以禁用补偿。
当预调器配置为使用1 kHz LPO递增时,有效补偿值除以32,只能调整-4到+3之间的时钟周期数。
Time alarm
时间报警寄存器(TAR)、SR[TAF]和IER[TAIE]允许RTC在预定义的时间生成中断。32位TAR每次递增都会与32位时间秒寄存器(TSR)进行比较。SR[TAF]将在TAR = TSR和TSR增量时置1。
通过写TAR清除SR[TAF]。这通常是下一个报警值,尽管写一个小于TSR的值,比如0,将阻止SR[TAF]再次设置。否则不能禁用SR[TAF],尽管它生成的中断由IER[TAIE]启用或禁用。
更新模式
控制寄存器(CR[UM])中的更新模式字段配置对时间计数器Enable (SR[TCE])字段的软件写访问。当CR(嗯)是明确的,可以编写SR (TCE)只有当LR (SRL)。当CR(嗯),SR (TCE)也可以写当SR (TCE)是明确的或当SR (TIF)或SR (TOF)。这使得时间秒,预定标器寄存器初始化时时间是无效的,而防止时间秒,预定标器注册动态改变。当
设置LR[SRL], CR[UM]对SR[TCE]没有影响。
寄存器锁
锁寄存器(LR)可以用来阻止对某些寄存器的写访问,直到下一次POR或软件重置。锁定控制寄存器(CR)将禁用软件重置。锁定LR将阻止将来对LR的更新。
对锁定寄存器的写访问将被忽略,并且不会生成总线错误。
中断
RTC中断在状态标志和相应的中断启用位同时置1时被启用。它总是在POR和软件重置上被启用。通过启用特定于芯片的RTC时钟门控制位,可以在芯片级启用RTC中断。RTC中断可以用来唤醒芯片从任何低功耗模式。
RTC秒中断是一个边缘敏感的中断,它有一个专用的中断向量,每秒生成一次,不需要软件开销(没有相应的状态标志需要清除)。它在RTC中通过时间秒中断启用位启用,在芯片级通过设置芯片特定的RTC时钟门控制位启用。秒中断的频率默认为1hz,但是可以将其配置为每2、4、8、16、32、64或128 Hz触发一次。
Time Prescaler Register
当时间计数器启用时,只读取TPR,并且每32.768 kHz时钟周期递增一次。
当设置SR[TOF](Time Overflow Flag)或SR[TIF](Time Invalid Flag)时,时间计数器读取为零。当禁用时间计数器时,可以读取或写入TPR。当TPR的第14位(32767)从逻辑1转换到逻辑0时,TSR[TSR]递增。
由一组可编程计数器组成,分成两个模块。第一个模块是RTC的预分频模块,它可编程产生最长为1秒的RTC时间基准TR_CLK。RTC的预分频模块包含了一个20位的可编程分频器(RTC)TR_CLK 周期中RTC产生一个中断(秒中断)。第二个模块是一个32位的可编程计数器,可被初始化为当前的系统时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时,将产生一个闹钟中断。