CN115220527A - 用于高、低频时钟之间的同步方法 - Google Patents
用于高、低频时钟之间的同步方法 Download PDFInfo
- Publication number
- CN115220527A CN115220527A CN202210811985.0A CN202210811985A CN115220527A CN 115220527 A CN115220527 A CN 115220527A CN 202210811985 A CN202210811985 A CN 202210811985A CN 115220527 A CN115220527 A CN 115220527A
- Authority
- CN
- China
- Prior art keywords
- frequency clock
- time
- low
- signal
- sleep
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
- G06F1/12—Synchronisation of different clock signals provided by a plurality of clock generators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3287—Power saving characterised by the action undertaken by switching off individual functional units in the computer system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Synchronisation In Digital Transmission Systems (AREA)
Abstract
本发明公开了一种用于高、低频时钟之间的同步方法,其包括:在接收到休眠使能信号时,记录低频时钟的当前时间作为第一低频时钟时间T0,并且由低频时钟触发休眠信号;在接收到休眠信号时,记录高频时钟的当前时间作为第一高频时钟时间t0,并且高频时钟停止计时进入休眠;在接收到唤醒使能信号时,记录低频时钟的当前时间作为第二低频时钟时间T1,并且由低频时钟触发唤醒信号;以及在接收到唤醒信号时,唤醒高频时钟、计算休眠时间T1‑T0以及确定延迟时间t_delay,以用休眠时间T1‑T0和延迟时间t_delay来更新高频时钟的当前时间。本发明用低频时钟计数器的计数改变的瞬间产生信号来控制高频时钟模块的开关,达到了高、低频时钟域精准同步的目的。
Description
技术领域
本发明涉及时钟同步技术领域,尤其涉及一种用于高、低频时钟之间的同步方法。
背景技术
低功耗系统,诸如低功耗MCU可以通过休眠节省功耗,例如在低功耗蓝牙(BLE)连接的应用中,连接事件间隔最小为7.5ms,最大可以达到4s。软硬件处理一个连接事件大概需要300μs。因此,处理完当前连接到下一次连接事件之间的一大部分时间内不需要软硬件的介入。此时可以将MCU设置成休眠状态节省功耗,当下一次连接时间到来的时候,通过时间中断唤醒MCU进入正常工作状态。
低功耗MCU一般具有CPU、RAM、FLASH、数据总线、高频时钟模块(即高频时钟,一般为外部晶振驱动,常见的主频有32M和40M,工作电流在80μA~150μA)、低频时钟模块(即低频时钟,一般为外部晶振驱动,常见的主频为32.768kHz,工作电流在0.2μA左右)和各种外设模块(诸如GPIO、UART、I2C、SPI等)。在低功耗MCU进入休眠模式之前,需要关掉包括高频时钟的诸多内部模块,而使用低频时钟计时和唤醒操作,从而达到节省功耗的目的。
MCU被唤醒之后有些模块如BLE的LC模块、系统OS模块以及一些实时性要求的模块,需要把睡眠的时间补偿到模块内部时钟里面。目前通用的时钟补偿方法是:
1.MCU休眠之前,软件记录休眠时低频时钟的时间T0(0~1个时钟周期(tick)的误差),停止模块的内部(高频)时钟,以及记录该模块当前的时间t0;
2.MCU唤醒之后,软件再次读取低频时钟当前的时间T1(0~1个tick的误差);
3.软件计算休眠时间=T1-T0,将该时间转换之后补偿到模块的内部时钟之内,使能该模块内部时钟,模块单独开始计时。
该软件休眠和唤醒MCU中内部模块(即子程序)的流程可参见图1,该软件通常是CPU中运行的代码。
但是,在这种将低频时钟的时间补偿到高频时钟的时间的过程中,存在无法做到精准同步,以及软件的操作复杂、延迟大且不确定等问题,具体地包括:
1.时间误差大,比如上述方法中的步骤1和2的最大误差有2个低频时钟的tick(以32.768kHz的外部晶振计,约为2×30.5μs,即61μs);
2.软件操作复杂,软件操作引入的时间差很难量化,对每次操作的延迟不确定;
3.整个时间同步过程消耗的时间长;
4.硬件和软件实际设计过程中,需要牺牲性能和功耗来消除时间误差带来的影响。
针对上述这些问题,目前已有一些改进技术方案。例如在中国专利申请号为202110585580.5的“一种时钟技术同步方法及装置”中,提出根据低频时钟(32kHz)周期和高频时钟(24MHz)周期之间的最小公倍数的原理进行同步,从而简化软件操作,但其时间同步过程消耗的时间较长,也不能很有效地解决时间误差的问题。
另外,在中国专利申请号为00818116.0的“在以时隙寻呼模式工作的移动站中在休眠模式后启动高频时钟的方法和设备”中,提出使用最好与激活模式高频时钟相同频率的转换模式时钟来部分补偿频率漂移和定时偏差,该转换模式时钟在每个休眠周期的开始和结束都使用,可以精确记录在每个休眠周期的开始和结束处一个低频休眠时钟周期内的需要补偿的激活模式高频时钟周期数。但是,额外使用转换模式时钟仍然需要牺牲性能和功耗,并且实现其的软/硬件的操作较为复杂。具体地说,在该方法和设备中,休眠时间需要提前预知,然后根据休眠时间计算出来一个高频时钟的唤醒时间,而高频时钟需要在实际休眠结束之前的一段时间提前运行。因此,使用这种方法如果系统提前唤醒(外部GPIO中断唤醒),就没办法进行时钟同步,并且由于要提前很长一段时间打开高频时钟,功耗仍然较大。另外,该方法和设备包含多个模块设计,实现比较复杂,很难实际应用到低功耗MCU中。
因此,有必要设计一种用于高、低频时钟之间的同步方法,以解决上述的这些技术问题。
发明内容
为实现上述目的,本发明提供了一种用于高、低频时钟之间的同步方法,其包括:
步骤100,在接收到休眠使能信号时,记录低频时钟的当前时间作为第一低频时钟时间T0,并且由低频时钟触发休眠信号;
步骤200,在接收到休眠信号时,记录高频时钟的当前时间作为第一高频时钟时间t0,并且高频时钟停止计时进入休眠;
步骤300,在接收到唤醒使能信号时,记录低频时钟的当前时间作为第二低频时钟时间T1,并且由低频时钟触发唤醒信号;以及
步骤400,在接收到唤醒信号时,唤醒高频时钟、计算休眠时间T1-T0以及确定延迟时间t_delay,以用休眠时间T1-T0和延迟时间t_delay来更新高频时钟的当前时间。
其中,步骤400可以包括:先唤醒高频时钟使其从第一高频时钟时间t0开始计时,并在完成计算休眠时间T1-T0及确定延迟时间t_delay后向高频时钟发出时间更新信号,指令高频时钟将其当前时间加上(T1-T0)+t_delay来更新其当前时间;其中延迟时间t_delay为用于信号传输的时间,其为固定值,能被预先确定;
步骤400也可以包括:先计算休眠时间T1-T0及确定延迟时间t_delay,并在完成后唤醒高频时钟并向其发出时间更新信号,指令高频时钟将其当前时间更新为t0+(T1-T0)+t_delay并从更新后的时间开始计时;其中延迟时间t_delay为用于计算和信号传输的时间,其为固定值,能被预先确定。
可见,与现有技术的直接休眠、唤醒高频时钟相比,本发明通过低频时钟触发休眠、唤醒信号,来使高频时钟进入休眠和被唤醒,能够准确计算休眠时间,并以此精确更新高频时钟的时间(不计上述延迟时间t_delay的话,至少可精确到2个高频时钟的tick),从而实现高、低频时钟之间的精准同步。这一方法同步时间短,无需引入额外的时钟,并且操作简单、功耗少。
在一个较佳实施例中,MCU具有高频时钟模块、低频时钟模块和信号转换模块,其中高频时钟模块包括高频时钟、对高频时钟的时钟周期进行计数的高频时钟计数器,以及用于存储高频时钟计数器中的计数的一个或多个高频时钟寄存器;低频时钟模块包括低频时钟、对低频时钟的时钟周期进行计数的低频时钟计数器,以及用于存储该低频时钟计数器中的计数的两个或更多个低频时钟寄存器;
其中高、低频时钟的时间通过其时钟周期数确定,例如可通过高、低频时钟周期的上升沿(或下降沿)触发高、低频时钟计数器加1,来计数高、低频时钟周期的个数;在本实施例中,以高、低频时钟周期的上升沿触发高、低频时钟计数器来确定高、低频时钟的时间;
其中低频时钟在其时钟周期的下降沿处处理接收到的信号(例如,休眠/唤醒使能信号),并在其时钟周期的上升沿处发出信号产生事件状态(例如,休眠/唤醒信号),高频时钟在其时钟周期的上升沿处接收并处理接收到的信号产生事件状态(例如,休眠/唤醒信号、时间更新信号)。
在本实施例中,在高、低频时钟之间的同步方法中,低频时钟一直处于正常工作状态,低频时钟计数器一直正常计数,其中低频时钟周期的上升沿依次触发低频时钟计数器加1。
步骤100包括:低频时钟在接收到休眠使能信号后的第一个下降沿处,处理该休眠使能信号,并在随后的第一个上升沿处发出休眠信号至信号转换模块,将该上升沿所触发的低频时钟计数器中的计数存储到第一低频时钟寄存器;从而第一低频时钟寄存器中的值R0对应于第一低频时钟时间T0。
在接收到休眠信号之前,高频时钟处于正常工作状态,高频时钟计数器正常计数,其中高频时钟周期的上升沿依次触发高频时钟计数器加1。
步骤200包括:高频时钟在休眠信号从信号转换模块到来后的第一个上升沿处接收并处理该休眠信号,并在该上升沿触发高频时钟计数器加1后,高频时钟进入休眠,高频时钟计数器相应停止计数;从而高频时钟中的计数N对应于第一高频时钟时间t0。
步骤300包括:低频时钟在接收到唤醒使能信号后的第一个下降沿处,处理该唤醒使能信号,并在随后的第一个上升沿处发出唤醒信号至信号转换模块,将该上升沿所触发的低频时钟计数器的计数存储到第二低频时钟寄存器;从而第二低频时钟寄存器中的值R1对应于第二低频时钟时间T1。
步骤400包括:在从信号转换模块接收到唤醒信号后,高频时钟被唤醒并从进入休眠时的上升沿处开始继续其时钟周期,其时钟周期的上升沿继续依次触发高频时钟计数器加1,高频时钟计数器从N开始计数;
信号转换模块计算休眠时间T1-T0所对应的高频时钟休眠时间周期数(R1-R0)×f_hfc/f_lfc,并确定表示为高频时钟时钟周期个数的延迟时间t_delay,完成后即向高频时钟发出时间更新信号,高频时钟在接收到时间更新信号的上升沿处处理时间更新信号,将高频时钟休眠时间周期数r0=(R1-R0)×f_hfc/f_lfc+t_delay存入高频时钟寄存器,以在随后的上升沿触发高频时钟计数器加1后,将高频时钟寄存器中的值r0加到高频时钟计数器的当前计数N’,高频时钟计时器从值N’+r0继续计数。其中,f_hfc是高频时钟的时钟频率,f_lfc是低频时钟的时钟频率。
优选地,休眠使能信号由MCU的蓝牙控制器模块发出,唤醒使能信号由MCU的休眠管理模块发出。
在其他实施例中,休眠使能信号和/或唤醒使能信号由软件发出。
在其他实施例中,休眠信号、唤醒信号和/或时间更新信号由软件发出。
在其他实施例中,可以对低频时钟模块只使用一个信号,进入休眠模式前触发该信号,产生一个事件,在低频时钟计数器变化的瞬间将其当前计数(即变化后的计数)的值锁存到一个低频时钟寄存器里,并产生一个事件,由软件等到该事件之后把此值读出;退出休眠模式之后,再次触发该信号,在低频时钟计数器变化的瞬间将其当前计数的值锁存到一个低频时钟寄存器里,并产生同一个事件,由软件把此计数值读出。另外,锁存的值也可以为低频时钟计数器变化之前的计数的值。
即,本申请中所采用的信号转换模块的部分功能可以由软件实现。另外,比如进入休眠模式之前,软件可以通过一定手段将低频时钟模块产生的事件用来触发高频时钟模块的休眠信号。而在唤醒之后,软件可以通过一定手段将低频时钟模块产生的时间用来触发高频时钟模块的唤醒信号。睡眠时间的计算同样可以由软件来完成。
可见,本发明通过对低频时钟模块输出控制信号,控制低频时钟在最近一次低频时钟计时器变化的瞬间将计数的值锁存到低频时钟寄存器,用低频时钟计数器的计数改变的瞬间产生信号来控制高频时钟模块的开关,达到了高、低频时钟域精准同步的目的。并且,本发明通过对高频时钟模块输出时间更新信号以及通过高频时钟寄存器,可以实现高频时钟计数器的计数的值在工作的过程中跳变(这是现有技术的基于软件的时钟补偿方法所无法实现的),从而达到时间同步的目的。本发明主要使用硬件电路同步时钟,因此相关操作延迟,比如信号转换、计数器值转换等导致的延迟可以量化补偿。并且,本发明可以实现硬件自动同步,基本不需要软件的介入,不需要长期占用CPU资源,实现了快速高效的同步。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是现有技术的通过软件休眠和唤醒子程序的流程图。
图2是在一个较佳的实施例中,执行本发明的用于高、低频时钟之间的同步方法的系统。
图3是在一个较佳的实施例中,执行本发明的用于高、低频时钟之间的同步方法的过程中,图2所示系统中的模块时序图。
图4描绘了图2所示系统中的低频时钟模块的信号处理与事件产生的一个示例。
图5是用于向图2所示系统中的低频时钟模块发出控制信号的控制结构的一个示例。
图6描绘了图2所示系统中的高频时钟模块的信号处理与事件产生的一个示例。
图7是用于向图2所示系统中的高频时钟模块发出控制信号的控制结构的一个示例。
具体实施方式
在本发明的一个较佳的实施例中,提供了本发明的用于高、低频时钟之间的同步方法,其中低功耗MCU具有高频时钟模块、低频时钟模块和信号转换模块,执行本发明的用于高、低频时钟之间的同步方法,如图2所示。本发明也适用于其他具有休眠功能的系统,用于其中高、低频时钟之间的同步。
在本实施例中,低功耗MCU的高频时钟模块包括高频时钟、对高频时钟的时钟周期进行计数的高频时钟计数器counter,以及用于存储高频时钟计数器中的计数的一个或多个高频时钟寄存器r0、r1、…、rn。高频时钟的时钟频率为40MHz,其接收来自信号转换模块的控制信号,诸如休眠信号timer_stop、时间更新信号timer_update和唤醒信号timer_start。
低功耗MCU的低频时钟模块包括低频时钟、对低频时钟的时钟周期进行计数的低频时钟计数器COUNTER,以及用于存储该高频时钟计数器中的计数的两个或更多个低频时钟寄存器R0、R1、…、Rn。低频时钟的时钟频率为32.768kHz,其接收来自其外部的控制信号,诸如休眠使能信号sleep_en和唤醒使能信号wakeup_en,并向信号转换模块发出控制信号,诸如休眠信号sleep_done和唤醒信号wakeup_done。
低功耗MCU的信号转换模块用于在高频时钟模块和低频时钟模块之间中继控制信号,诸如休眠信号和唤醒信号,即在接收到来自低频时钟模块的休眠信号sleep_done后即向高频时钟模块发出休眠信号timer_stop,在接收到来自低频时钟模块的唤醒信号wakeup_done后即向高频时钟模块发出唤醒信号timer_start。信号转换模块还用于执行计算休眠时间、确定延迟时间,并在完成所述计算和确定后向高频时钟发出时间更新信号timer_update。
需要指出的是,此处所述的这些模块不必须是物理上独立的硬件,其可以包含软件实现其部分功能,并且其不必须能够在MCU中在物理上清楚地分割出来。例如,高、低频时钟寄存器可以是MCU中的寄存器,信号转换模块可以包括软件,用于触发高频时钟模块的休眠/唤醒等等。
高、低频时钟的时间通过其时钟周期数确定,例如可通过高、低频时钟周期的上升沿或下降沿触发高、低频时钟计数器加1,来计数高、低频时钟周期的个数。低频时钟可以在其时钟周期的下降沿或上升沿处处理接收到的控制信号,并在其时钟周期的上升沿或下降沿处发出控制信号产生事件状态。高频时钟可以在其时钟周期的上升沿或下降沿处接收并处理接收到的控制信号产生事件状态。
在本实施例中,以高、低频时钟周期的上升沿触发高、低频时钟计数器来确定高、低频时钟时间,低频时钟在其时钟周期的下降沿处处理接收到的信号并在其时钟周期的上升沿处发出休眠/唤醒信号,高频时钟在其时钟周期的上升沿处接收并处理接收到的信号。
图3示出了在进行高、低频时钟之间的同步的过程中的模块时序图,以下结合图3来描述本发明的用于高、低频时钟之间的同步方法。如图3所示,该同步方法主要包括4个步骤,即:
步骤100,在接收到休眠使能信号时,锁存低频时钟计数器COUNTER的当前计数R0,作为低频时钟的当前时间T0,并且由低频时钟触发休眠信号;
步骤200,在接收到休眠信号时,记录高频时钟计数器counter的当前计数N,作为高频时钟的当前时间t0,并且高频时钟进入休眠,高频时钟计数器停止计数;
步骤300,在接收到唤醒使能信号时,锁存低频时钟计数器COUNTER的当前计数R1,作为低频时钟的当前时间T1,并且由低频时钟触发唤醒信号;以及
步骤400,在接收到唤醒信号时,先唤醒高频时钟使其从休眠前时间t0开始计时,相应地高频时钟计数器counter从休眠前的计数N开始计数至N’,在此期间,信号转换模块完成计算表示为低频时钟的时钟周期数的休眠时间LFC_T=R1-R0,作为休眠时间T1-T0,信号转换模块将表示为低频时钟的时钟周期数的休眠时间LFC_T换算成表示为高频时钟的时钟周期数的休眠时间HFC_T=LFC_T*f_hfc/f_lfc,信号转换模块确定表示为高频时钟的时钟周期数的延迟时间t_delay,并将需要补偿到高频时钟的时钟周期数HFC_T+t_delay存入高频时钟寄存器r0,即r0=HFC_T+t_delay,然后向高频时钟发出时间更新信号,令高频时钟计数器从N’+r0开始计数,由此更新了高频时钟的当前时间。其中延迟时间t_delay为用于信号传输的时间,其为固定值,能被预先确定,例如通过硬件仿真或者通过理论分析来确定。
在其他实施例中,步骤400也可以是,在接收到唤醒信号时,先计算休眠时间T1-T0及确定延迟时间t_delay,并在完成后唤醒高频时钟并向其发出时间更新信号,指令高频时钟将其当前时间更新为t0+(T1-T0)+t_delay并从更新后的时间开始计时;其中延迟时间t_delay为用于计算和信号传输的时间,其为固定值,能通过硬件仿真预先确定。在其他实施例中的步骤400的执行与上述关于图3描述的过程类似,因此可以类似地确定,在这个实施例中,高频时钟计数器是从N+r0=N+HFC_T+t_delay=N+LFC_T*f_hfc/f_lfc+t_delay开始计数。以下将主要针对图3的本实施例中的操作进行说明,本领域技术人员可以由此理解在其他实施例中步骤400的操作。
具体地,低频时钟一直处于正常工作状态,低频时钟计数器一直正常计数,其中低频时钟周期的上升沿依次触发低频时钟计数器加1。
在步骤100,来自低频时钟模块外部的休眠使能信号sleep_en到达低频时钟模块,在接收到休眠使能信号sleep_en后的低频时钟周期中的第一个下降沿处,处理该休眠使能信号sleep_en,并在随后的第一个上升沿处发出休眠信号sleep_done经由信号转换模块至高频时钟模块,将该上升沿所触发的低频时钟计数器COUNTER的计数存储到第一低频时钟寄存器R0;从而第一低频时钟寄存器R0中的值(在此以寄存器的编号指代其中的值,因此该值也记作R0)对应于第一低频时钟时间T0。
例如参见图4中的示例,来自外部的休眠使能信号sleep_en在图中示出的第一个周期的前半周中到达低频时钟,低频时钟于是在该第一个周期内的下降沿处处理该休眠使能信号sleep_en,并在随后的上升沿处(即该第一个周期的结束处)发出休眠信号sleep_done。
如前所述,低频时钟计数器COUNTER一直在工作,但是为了便于理解,此处设定该低频时钟计数器COUNTER之前计数为0,从而其被第一个周期结束处的上升沿触发,计数加1,即其中的计数为1。被该上升沿触发的低频时钟计数器COUNTER的计数1存储到第一低频时钟寄存器R0,由此R0=1。
在本实施例中,休眠使能信号sleep_en由MCU的蓝牙控制器模块发出,但是在其他实施例中,其也可以由软件发出,如现有技术的基于软件的时钟补偿方法中那样。可以使用如图5所示的控制结构处理上述两种情况,即无论休眠使能信号sleep_en是由诸如蓝牙控制器模块的硬件模块发出(即图中的硬件休眠信号),还是由软件发出(即软件睡眠),都可以通过图5所示的控制结构将休眠使能信号sleep_en发送到低频时钟模块。
在步骤200,信号转换模块将来自低频时钟模块的休眠信号中继到高频时钟模块,即,其在接收到来自低频时钟模块的休眠信号sleep_en后即向高频时钟模块发出休眠信号timer_stop,以使得高频时钟停止计时。
信号转换模块中继该休眠信号的所需时间非常短,并且是固定的,一般为构造该信号转换模块的数字模块的驱动时钟(例如40MHz)的几个时钟周期。
在接收到休眠信号timer_stop之前,高频时钟处于正常工作状态,高频时钟计数器正常计数,其中高频时钟周期的上升沿依次触发高频时钟计数器加1。
在休眠信号timer_stop到达高频时钟模块后高频时钟周期的第一个上升沿处,接收并处理该休眠信号timer_stop,并将该上升沿所触发的高频时钟计数器counter的计数N保留在计数器中,对应于第一高频时钟时间t1;同时高频时钟完成当前时钟周期并停止,高频时钟计数器counter相应停止。
例如参见图6中的示例,来自信号转换模块的休眠信号timer_stop在图中示出的第二个周期中的下降沿处到达高频时钟。高频时钟于是在随后的上升沿处(即该第二个周期的结束处)处理该休眠信号timer_stop,并由该上升沿触发高频时钟计数器counter,高频时钟计数器counter计数加1,变成2。同时高频时钟完成当前时钟周期(即图中第二个时钟周期)并停止,高频时钟计数器相应停止并保持其计数2。
在本实施例中,休眠信号timer_stop由信号转换模块发出,但是在其他实施例中,其也可以由软件发出,如现有技术的基于软件的时钟补偿方法中那样。可以使用如图7所示的控制结构处理上述两种情况,即无论休眠信号timer_stop是经由信号转换模块发出(即图中的硬件停止时钟信号),还是由软件发出(即软件停止时钟),都可以通过图7所示的控制结构将休眠信号timer_stop发送到高频时钟模块。
在步骤300,来自低频时钟外部的唤醒使能信号wakeup_en到达低频时钟模块,在接收到唤醒使能信号wakeup_en后的低频时钟周期中的第一个下降沿处,处理该唤醒使能信号wakeup_en,并在随后的第一个上升沿处发出唤醒信号wakeup_done经由信号转换模块至高频时钟模块,将该上升沿所触发的低频时钟计数器COUNTER的计数存储到第二低频时钟寄存器R1;从而第二低频时钟寄存器R1中的值(在此以寄存器的编号指代其中的值,因此该值也记作R1)对应于第二低频时钟时间T1。
例如参见图4中的示例,来自外部的休眠使能信号wakeup_en在图中示出的第四个周期的下降沿处到达低频时钟,低频时钟于是必须在下一个下降沿,即第五个周期内的下降沿处处理该唤醒使能信号wakeup_en,并在随后的上升沿处(即第五个周期的结束处)发出唤醒信号wakeup_done。
如前所述,低频时钟计数器COUNTER一直在工作,从而其被第五个周期结束处的上升沿触发,计数加1后的计数为5。被该上升沿触发的低频时钟计数器COUNTER的计数5存储到第二低频时钟寄存器R1,由此R1=5。
类似地,可以使用如图5所示的控制结构结合处理上述两种情况,即无论唤醒使能信号wakeup_en是由诸如蓝牙控制器模块的硬件模块发出(即图中的硬件唤醒信号),还是由软件发出(即软件唤醒),都可以通过图5所示的控制结构将唤醒使能信号wakeup_en发送到低频时钟模块。
在步骤400,收到来自低频时钟模块的唤醒信号wakeup_done后,信号转换模块需要向高频时钟模块发出唤醒信号timer_start,还需要基于低频时钟计数器的计数来计算休眠时间,由此计算需要补偿高频时钟休眠期间的时钟周期,并向高频时钟模块发出时间更新信号timer_update,来更新补偿高频时钟的计时(即计数)。
如前所述,信号转换模块向高频时钟模块发出的唤醒信号timer_start和时间更新信号timer_update的次序可调,即可以先发出唤醒信号timer_start,令高频时钟从休眠前的时钟时间开始计时,随后用计算结果更新高频时钟时间,也可以先发出时间更新信号timer_update,用计算结果更新高频时钟时间,随后唤醒高频时钟从更新的时钟时间开始计时。
在本实施例中,信号转换模块先发出唤醒信号timer_start,随后进行计算并发出时间更新信号timer_update,具体如下所述。
信号转换模块在接收到来自低频时钟模块的唤醒信号wakeup_done后即向高频时钟模块发出唤醒信号timer_start。在图6所示的示例中,高频时钟在第二个时钟周期之后进入休眠(相应的时钟周期以虚线示出),并且高频时钟计数器counter停止计数,保持其计数为休眠时的计数2。当唤醒信号timer_start到达高频时钟,高频时钟被唤醒,并从其进入休眠时的上升沿(即第二个时钟周期结束处的上升沿,也即计入了休眠期间的四个时钟周期后的第六个时钟周期结束处的上升沿)处继续其时钟周期,从而之后的上升沿(即图中第七个时钟周期结束处的上升沿,其中计入了休眠期间的四个时钟周期)触发高频时钟计数器counter计数加1,变成3;高频时钟继续正常计时,以其时钟周期的上升沿依次触发高频时钟计数器加1。
在此期间,信号转换模块计算需要补偿高频时钟休眠期间的时钟周期数,并在计算结束后向高频时钟模块发送时间更新信号timer_update。
需要补偿高频时钟休眠期间的时钟周期数包括两部分:第一部分是休眠时间T1-T0所对应的高频时钟休眠时间周期数(R1-R0)×f_hfc/f_lfc,其中f_hfc是高频时钟的时钟频率,f_lfc是低频时钟的时钟频率,第二部分是表示为高频时钟休眠时间周期数的延迟时间t_delay。需要注意的是,由于在本实施例中,信号转换模块是先发出唤醒信号timer_start,随后进行计算并发出时间更新信号timer_update,因此信号转换模块用于计算的时间已经被唤醒的高频时钟计时,此时需要考虑的延迟时间t_delay主要为用于信号传输的时间。作为硬件模块的信号转换模块的用于信号传输的时间是固定值,其以高频时钟的时钟周期的个数表示,通常为3个高频时钟周期。但如果是在其他实施例中,信号转换模块是先进行计算并发出时间更新信号timer_update,随后发出唤醒信号timer_start的情况下,则需要考虑的延迟时间t_delay还要包括用于计算的时间。作为硬件模块的信号转换模块的用于计算的时间是也固定值,其以高频时钟的时钟周期的个数表示,通常为83个高频时钟周期。
如前所述,本实施例中采用的高频时钟的时钟频率为40MHz,低频时钟的时钟频率为32.768kHz。因此,实际计算的f_hfc/f_lfc相当大(大于1000),不便于图示。为了能在图6上清楚显示对高频时钟补偿时钟周期的过程,在此假定f_hfc/f_lfc=1(即,忽略本实施例中高、低频时钟频率的实际时钟频率)。则通过上式(R1-R0)×f_hfc/f_lfc,代入之前的示例中得到的R1=5及R0=1,可以得到休眠时间LFC_T=R1-R0所对应的高频时钟休眠时间周期数HFC_T为4。另外,为了方便起见,在此不考虑延迟时间,即取延迟时间t_delay=0,从而确定需要补偿高频时钟时钟周期数r0=HFC_T+t_delay=4。
信号转换模块随后将信号转换模块所确定的需要补偿高频时钟时钟周期数存入高频时钟寄存器r0,即r0=4(在此以寄存器的编号指代其中的值,因此该值也记作r0),并立即向高频时钟发出时间更新信号timer_update,在本示例中,如图6所示,高频时钟在下一个上升沿(即第十个时钟周期结束的上升沿)处接收到该时间更新信号timer_update并进行处理,该上升沿触发高频时钟计数器的计数加1,从5变为6,即当前计数N’=6,同时,将高频时钟寄存器中的值r0加到高频时钟计数器的当前计数N’,该值N’+r0=6+4=10,高频时钟计时器从10开始继续计数。可见,高频时钟已被成功补偿了其休眠期间的时钟周期数,完成了高、低频时钟之间的同步。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技术领域的技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (10)
1.一种用于高、低频时钟之间的同步方法,包括:
步骤100,在接收到休眠使能信号时,记录低频时钟的当前时间作为第一低频时钟时间T0,并且由低频时钟触发休眠信号;
步骤200,在接收到休眠信号时,记录高频时钟的当前时间作为第一高频时钟时间t0,并且高频时钟停止计时进入休眠;
步骤300,在接收到唤醒使能信号时,记录低频时钟的当前时间作为第二低频时钟时间T1,并且由低频时钟触发唤醒信号;以及
步骤400,在接收到唤醒信号时,唤醒高频时钟、计算休眠时间T1-T0以及确定延迟时间t_delay,以用休眠时间T1-T0和延迟时间t_delay来更新高频时钟的当前时间。
2.如权利要求1所述的方法,其特征在于,所述步骤400包括:
先唤醒高频时钟使其从第一高频时钟时间t0开始计时,并在完成计算休眠时间T1-T0及确定延迟时间t_delay后向高频时钟发出时间更新信号,指令高频时钟将其当前时间加上(T1-T0)+t_delay;
其中延迟时间t_delay为用于信号传输的时间,其为固定值,能被预先确定。
3.如权利要求1所述的方法,其特征在于,所述步骤400包括:
先计算休眠时间T1-T0及确定延迟时间t_delay,并在完成后唤醒所述高频时钟并向其发出时间更新信号,指令高频时钟将其当前时间更新为t0+(T1-T0)+t_delay并从更新后的时间开始计时;
其中延迟时间t_delay为用于计算和信号传输的时间,其为固定值,能被预先确定。
4.如权利要求2所述的方法,其特征在于,MCU具有高频时钟模块、低频时钟模块和信号转换模块,
其中高频时钟模块包括所述高频时钟、对高频时钟的时钟周期进行计数的高频时钟计数器,以及用于存储高频时钟计数器中的计数的一个或多个高频时钟寄存器;低频时钟模块包括所述低频时钟、对低频时钟的时钟周期进行计数的低频时钟计数器,以及用于存储该低频时钟计数器中的计数的两个或更多个低频时钟寄存器;
其中低频时钟在其时钟周期的下降沿处处理接收到的信号,低频时钟在其时钟周期的上升沿处发出信号,高频时钟在其时钟周期的上升沿处接收并处理接收到的信号。
5.如权利要求4所述的方法,其特征在于,步骤100包括:
低频时钟在接收到休眠使能信号后的第一个下降沿处,处理该休眠使能信号,并在随后的第一个上升沿处发出休眠信号至信号转换模块,将该上升沿所触发的低频时钟计数器中的计数存储到第一低频时钟寄存器;从而第一低频时钟寄存器中的值R0对应于第一低频时钟时间T0。
6.如权利要求5所述的方法,其特征在于,步骤200包括:
高频时钟在休眠信号从信号转换模块到来后的第一个上升沿处,接收并处理该休眠信号,并在此上升沿触发高频时钟计数器加1后,高频时钟进入休眠,高频时钟计数器相应停止计数;从而高频时钟中的计数N对应于第一高频时钟时间t0。
7.如权利要求6所述的方法,其特征在于,步骤300包括:
低频时钟在接收到唤醒使能信号后的第一个下降沿处,处理该唤醒使能信号,并在随后的第一个上升沿处发出唤醒信号至信号转换模块,将该上升沿所触发的低频时钟计数器的计数存储到第二低频时钟寄存器;从而第二低频时钟寄存器中的值R1对应于第二低频时钟时间T1。
8.如权利要求7所述的方法,其特征在于,步骤400包括:
在从信号转换模块接收到唤醒信号后,高频时钟被唤醒并从进入休眠时的上升沿处开始继续其时钟周期,其后的上升沿继续依次触发高频时钟计数器加1,高频时钟计数器从N开始计数;
信号转换模块计算休眠时间T1-T0所对应的高频时钟休眠时间周期数(R1-R0)×f_hfc/f_lfc,并确定表示为高频时钟时钟周期个数的延迟时间t_delay,完成后即向高频时钟发出时间更新信号,高频时钟在接收到时间更新信号的上升沿处处理时间更新信号,将高频时钟休眠时间周期数r0=(R1-R0)×f_hfc/f_lfc+t_delay存入高频时钟寄存器,以在随后的上升沿触发高频时钟计数器加1后,将高频时钟寄存器中的值r0加到高频时钟计数器的当前计数N’,高频时钟计时器从值N’+r0继续计数;
其中,f_hfc是高频时钟的时钟频率,f_lfc是低频时钟的时钟频率。
9.如权利要求8所述的方法,其特征在于,f_hfc是40MHz,f_lfc是32.768kHz。
10.如权利要求4-9中任一项所述的方法,其特征在于,休眠使能信号由MCU的蓝牙控制器模块发出,唤醒使能信号由MCU的休眠管理模块发出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210811985.0A CN115220527A (zh) | 2022-07-11 | 2022-07-11 | 用于高、低频时钟之间的同步方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210811985.0A CN115220527A (zh) | 2022-07-11 | 2022-07-11 | 用于高、低频时钟之间的同步方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115220527A true CN115220527A (zh) | 2022-10-21 |
Family
ID=83612176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210811985.0A Pending CN115220527A (zh) | 2022-07-11 | 2022-07-11 | 用于高、低频时钟之间的同步方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115220527A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115883049A (zh) * | 2022-11-30 | 2023-03-31 | 深圳市云天数字能源有限公司 | 信号同步方法及装置 |
-
2022
- 2022-07-11 CN CN202210811985.0A patent/CN115220527A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115883049A (zh) * | 2022-11-30 | 2023-03-31 | 深圳市云天数字能源有限公司 | 信号同步方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8509859B2 (en) | Apparatus and methods for control of sleep modes in a transceiver | |
CN101252720B (zh) | 3g和4g终端休眠模式控制方法和装置 | |
JP3555252B2 (ja) | 間欠受信制御装置 | |
US6965763B2 (en) | Event coordination in an electronic device to reduce current drain | |
CN101876847A (zh) | 微控制器中的功率降低 | |
CN102570973B (zh) | 时钟系统以及用于时钟系统的方法 | |
CN100448310C (zh) | 移动终端的待机处理方法以及装置 | |
US7254724B2 (en) | Power management system | |
TWI504207B (zh) | 通訊裝置及頻偏校正方法 | |
JP2002026723A (ja) | クロック信号の発生方法と装置 | |
CN112530056A (zh) | 降低智能门锁功耗的方法、智能门锁和存储介质 | |
CN115220527A (zh) | 用于高、低频时钟之间的同步方法 | |
KR20150112660A (ko) | 시스템 온 칩, 이의 작동 방법, 및 이를 포함하는 장치 | |
US8008949B1 (en) | Clock selection for a communications processor having a sleep mode | |
CN114174956A (zh) | 用于从低功率模式唤醒的抢先唤醒电路 | |
US8028187B2 (en) | Dual-mode communication apparatus and power management method thereof | |
US20090319817A1 (en) | Clock Selection for a Communications Processor having a Sleep Mode | |
JP5324340B2 (ja) | マイクロコンピュータ | |
US10055193B2 (en) | Data transfer between clock domains | |
CN115639897A (zh) | 一种实时电压控制模块 | |
CN111984335A (zh) | 一种低功耗的芯片唤醒方法、电路、芯片、系统及介质 | |
TWI449403B (zh) | 省電方法及省電的行動終端 | |
KR100828252B1 (ko) | 다중 프로세서 단말기 및 다중 프로세서 단말기의 휴면 상태에서 기상시의 rf 모듈 제어 방법 | |
JP2002202963A (ja) | タイマで出力信号を制御できるシングルチップマイクロコンピュータ | |
JPH05210602A (ja) | 携帯型電子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |