首页 / 一种实时时钟时基分频器及实时时钟调校方法

一种实时时钟时基分频器及实时时钟调校方法有效专利 发明

技术领域

[0001] 本发明涉及实时时钟调校技术领域,尤其涉及一种实时时钟时基分频器及实时时钟调校方法。

相关背景技术

[0002] 实时时钟(real-time clock,RTC)的核心本质是一个由15个D触发器组成的分频器链,通过对外部晶体振荡器或内部RC振荡器产生的32768Hz时钟源进行分频,得到1Hz的时钟信号,然后通过累计1Hz时钟脉冲的数量,得到年月日时分秒等时间信息。RTC的基本功能是向微控制单元(MCU)提供时间信息,并在系统掉电以后,由片内或片外的备用电池供电,继续保持片内时钟的运行。RTC也可以扩展出多元化的功能,比如多种方式计时、日历功能、闹钟功能、可编程方波输出、事件时间记录、系统电源控制、缓冲数据等。
[0003] 在现有技术中,RTC模块通常采用32768Hz的时钟源。RTC内部的计数器从0开始计数,每当时钟源的上升沿到达时,计数就会增加1。当计数器数到16384时,RTC的输出翻转;当计数器数到32768时,RTC的输出再次翻转,同时把计数器归零,从而产生1Hz的方波信号输出。RTC的传统调校方法是改变计数器的计数目标值,从而使方波信号的翻转时刻提前或延后。例如,把计数器归零的目标值增加1,即从32768改成32769,那么方波信号的第偶数次翻转的时刻就会延迟(1/32768)s,约合30.5176μs。因此,传统调校方法的最小可调时长是
30.5176μs,即理论误差是±15.2588ppm。
[0004] 上述调校方法,其调校精度依旧较低,理论误差是±15.2588ppm,相当于每天误差±1.318秒,每365天误差±481.2秒,需进一步提高调校精度。

具体实施方式

[0021] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0022] 如图1所示,是本发明一实施例提供的一种实时时钟时基分频器,包括:时钟调校值寄存器、组合逻辑电路、分频计数电路以及秒计数器;其中,所述秒计数器为计数周期为128秒的7位秒计数器;
[0023] 所述时钟调校值寄存器,用于存储调校值并在开始进行实时时钟调校时,将所述调校值传输至所述组合逻辑电路;其中,所述调校值为12位的数据,所述调校值的最高位用于表示计数目标值的增加或减少,除所述最高位之外的高4位数据用于表示在一个128秒的调校周期中每一秒都需要调校的基本调校时长单位个数,所述调校值的低7位数据用于表示在一个128秒的调校周期中需要额外增加或减少一个基本调校时长单位的秒数;
[0024] 所述组合逻辑电路,用于接收所述调校值和所述秒计数器的计数值,继而根据所述调校值和所述计数值,继而根据计算结果生成调校计数值,并将所述调校计数值传输至所述分频计数电路;
[0025] 所述分频计数电路,用于根据收到的调校计数值对32768Hz时钟源信号进行计数,并输出1Hz的脉冲信号至所述秒计数器;
[0026] 所述秒计数器,用于向所述组合逻辑电路传输计数值,并在收到所述1Hz的脉冲信号时将计数值加1。
[0027] 在一个优选的实施例中,所述分频计数电路包括:同步预分频计数器、两级异步分频器以及毫秒计数器;
[0028] 所述同步预分频计数器,用于根据接收的调校计数值对32768Hz时钟源信号进行计数,并输出256Hz脉冲信号至所述两级异步预分频器;
[0029] 所述两级异步分频器,用于将所述256Hz脉冲信号分频为64Hz的时钟源信号,继而将所述64Hz的时钟源信号传输至毫秒计数器;
[0030] 所述毫秒计数器,用于根据所述64Hz的时钟源信号输出1Hz的脉冲信号至所述秒计数器。
[0031] 在一个优选的实施例中,所述时钟调校值寄存器为12位的寄存器;所述同步预分频计数器为8位的计数器;所述毫秒计数器为6位的计数器。
[0032] 以下对本发明的技术方案作进一步的描述:
[0033] 在本发明中,以128s为一个调校周期,以(1/32768)s≈30.5176μs(简称为30.5μs)为一个基本调校时长单位,每个调校周期内最多可以调校±2047个基本调校时长单位,因此最高调校精度为(1/32768)s/128s≈0.238419ppm,最大调校范围为±2047*0.238419ppm≈±488.043ppm。
[0034] 调校值(ADJUST)储存在一个12位的时钟调校值寄存器中,如表1所示,其中最高位是符号位(Sign),表示计数目标值的增减,0表示增加,1表示减少;其余11位表示增减的绝对值。为了提高每秒的平均精度,避免较大的秒间跃变,采取将128s的调校量(即需要增减的时长)平均分配到每秒内的做法,其实现方法为,将11位的增减绝对值分为高4位的公共值(C)和低7位的私有值(D),其中公共值表示128s中每秒内都需要调校的基本调校时长单位(30.5μs)个数,私有值表示有128s中需要额外加/减1个30.5μs的秒数。
[0035] 表1
[0036]ADJUST[11] ADJUST[10:7] ADJUST[6:0]
Sign Common Value(C) Differential Value(D)
[0037] 调校值公式可表示为Adjustment=(C*128+D)*(30.5176/128)ppm
[0038] 假设需要让时钟增加0.238ppm,即128s周期只增加1个30.5μs,则给ADJUST写入12'b0_0000_0000001,即公共值为0,私有值为1,表示只需要对128s中的其中1s内加1个
30.5μs。
[0039] 假设需要增加488ppm,即128s周期内增加2047个30.5μs,则给ADJUST写入12'b0_1111_1111111,即公共值为15,私有值为127,表示128s中每秒内都要加15个30.5μs,同时其中还有127s内需要额外再加1个30.5μs。
[0040] 更多调校值的例子和表达式见表2。
[0041] 表2
[0042] ADJUST C D 表达式 ppm12'b0_0000_0000001 0 1 1*30.517/128000000 0.238
12'b1_0100_0000100 4 4 -(4*128+4)*30.517/128000000 -123.02
12'b0_0001_0000010 1 2 (1*128+2)*30.517/128000000 30.99
12'b0_1111_1111111 15 127 (15*128+127)*30.517/128000000 488.04
[0043] 采用上述方式设置调校值,可以得到平滑调校的秒周期,相邻两秒的长度最多仅相差30.5ppm,可以避免因调校量过于集中地引入而引起秒周期抖动。此外,由于每秒内最多只会加/减16个基本调校时长单位,这表示同步计数预分频器的位宽可以设得很小,理论上只要8位(正常计数范围:0–127,调校时可扩展计数范围:0–143,终值上限:143,下限:111)。从预分频器可得到典型值为256Hz的同步脉冲信号输出,随后通过异步分频可得到
64Hz的RTC工作时钟。减少同步时钟负载能够降低功耗,并增强抗电磁干扰性能。
[0044] 为避免时序冲突,应在秒中断发生后更新ADJUST并启动时钟调校。以ADJUST=12'b0_0001_0000000为例,在每一秒的最后添加1个32768Hz时钟周期,如图2所示。
[0045] 具体调校步骤如下所示:
[0046] (1)通过软件配置时钟调校值寄存器,写入带符号的调校值(ADJUST),调校值(ADJUST)将输出到组合逻辑电路。
[0047] 例如写入的调校值为:12'b0_1111_1111111。
[0048] (2)组合逻辑电路根据调校值(附图1中的ADJUST)和秒计数器的值(附图1中的count128),计算出调校后当前一秒内有多少个基本调校时长单位(30.5μs),然后根据计算结果,生成调校计数值,将调校计数值(附图1中的adj_cnt)输出到同步预分频计数器。
[0049] 具体地,同样以ADJUST=12'b0_1111_1111111为例,12'b0_1111_1111111表示在128s内每一秒的末尾都需要增加15个30.5μs,且其中还有127s的末尾内需要额外再加1个
30.5μs。即当秒计数器的值为0–126时,所计算出来的结果为,当前一秒内有32768+15+1=
32784个基本调校时长单位;当秒计数器的值为127时,所计算出来的结果为,当前一秒内有
32768+15=32783个基本调校时长单位。由于在实际调校过程中,加/减若干个30.5μs的调校动作仅仅发生在每一秒的末尾,且在本发明中同步预分频计数器需要输出256Hz脉冲信号(f256),因此组合逻辑电路在计算出每秒内有多少个基本调校时长单位后,会根据计算结果生成并输出调校计数值(adj_cnt),此处的adj_cnt指的是在每1/256s内有多少个基本调校时长单位。当秒计数器的值为0–126且未到一秒的末尾时,组合逻辑电路输出的adj_cnt为127(由于计数时是从0开始计数的,因此adj_cnt为127表示当前的1/256s内有128个基本调校时长单位);而当秒计数器的值为0–126且到达一秒的末尾时,adj_cnt为127+15+1=143(到达一秒的末尾时需要进行调校,即在最后的一个1/256s内进行调校);同理,当秒计数器的值为127且未到一秒的末尾时,adj_cnt为127,当秒计数器的值为127且到达一秒的末尾时,adj_cnt为127+15=142。
[0050] (3)8位同步预分频计数器根据adj_cnt对32768Hz时钟源的上升沿进行计数,输出256Hz的脉冲信号(f256)到多级异步分频电路。当接收的调校计数值为127时,说明此时还未到一秒的末尾,不需要调校,同步预分频计数器的计数范围为0–127;当接收的调校计数值不为127时,则说明此时到了一秒的末尾,需要进行调校,例如,当接收的调校计数值为
143时,则表示此时已经到了一秒的末尾,需要进行调校,此时同步预分频计数器的计数范围为0–143。
[0051] (4)两级异步分频电路把256Hz脉冲信号(f256)继续分频成64Hz时钟(rtc_clk),此时钟作为本RTC的工作时钟,输出到毫秒计数器、秒计数器等与计时相关的寄存器。
[0052] (5)毫秒计数器根据rtc_clk输出1Hz的时钟(ltbc_1hz)到外部电路,并输出1Hz的脉冲信号(sec_tick)到秒计数器。
[0053] (6)秒计数器(count128)每当sec_tick到来时会增加1,它记录当前一秒处于128s调校周期内的第几秒,此值将在组合逻辑电路中与私有值(ADJUST[6:0])比较,以决定当前一秒是否需要额外加/减1个30.5μs。当秒计数器计数到128时将归零,表示当前调校周期结束,下一个调校周期开始。
[0054] 在上述实施例的基础上,本发明对应提供了一种实时时钟调校方法,包括:将32768Hz时钟源信号以及调校值输入至本发明上述任意一项所述的实时时钟时基分频器,以使所述时基分频器根据所述调校值以128秒为一个调校周期,对输出的1Hz时钟信号进行调校。
[0055] 以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

当前第1页 第1页 第2页 第3页