用中央处理器内部的时间戳记计数器校准实时时钟的方法

文档序号:6618714阅读:569来源:国知局
专利名称:用中央处理器内部的时间戳记计数器校准实时时钟的方法
技术领域
本发明涉及实时时钟(Real Time Clock;RTC)的校准方法,特别涉及以电脑系统的中央处理器(CPU)内部的时间戳记计数器(Time Stamp Counter;TSC)为基准,用以校准实时时钟的方法。
一般电脑系统中的实时时钟,大多以晶体振荡器配合R-C电路构成。然而,由于元件老化或是不匹配等问题,系统中的实时时钟也会受到连带影响,而失去其准确性。对于服务器系统(Server System)而言,在网络上需要广播日期信息的时间给用户端,或对于电脑系统而言,所执行的应用软件程序可能需要日期信息的精确时间;如果系统内的实时时钟失去其准确度的话,则系统的整体效能将会大打折扣,甚至发生错误而无法动作。因此,实在有必要针对实时时钟提出一种有效的校准方法,以确保实时时钟的准确度。
有鉴于此,本发明利用系统CPU(例如Intel PentiumⅡ)内部的时间戳记计数器为基准,使实时时钟周期性地触发一个校准过程,而让实时时钟的时间和时间戳记计数器计数次数所对应的时间两者之间的误差保持在一定的范围之内,而达到校正实时时钟的目的。
为达到上述目的,本发明提出一种使用电脑系统CPU内部的时间戳记计数器校准实时时钟的方法,该方法包括如下步骤。
设定实时时钟,使其周期性地每M秒触发一校准过程执行N次;而每执行校准过程一次,就将第一计数值加1。
当校准过程执行N次时,执行如下步骤求出M秒内时间戳记计数器的实际计数值以及其名义计数值;其中,名义计数值为Z×M,Z为上述时间戳记计数器每秒的标准计次数;求出实际计数值和名义计数值两者之间的误差值;使用上述误差值求出对应的误差时间,以便校准实时时钟的时间值。
为让本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合附图做详细说明。其中

图1是显示为实施本发明方法,而预先执行的设定过程的流程图。
图2是显示本发明的校准过程方法的流程图。
图3是显示在校准过程中,所使用的误差调整过程的流程图。
依据本发明,使用电脑系统CPU内部的时间戳记计数器以校准实时时钟的方法,包括以下步骤。
设定实时时钟,使其周期性地每M秒触发执行N次的校准过程;亦即当校正过程执行N次之后,以实时时钟的时间值为基准的时间已过了M秒。
每执行校准过程一次,就将第一计数值加1。
当校准过程执行N次时,则执行如下步骤通过时间戳记计数器每秒的标准计次数Z,可求出名义计数值Z×M(因为M秒是否精确尚待验证);再将目前时间戳记计数器的计数值减去第1次执行校正过程时戳记计数器的计数值,即可以得出戳记计数器在M秒时间中实际上的计数次数值。
求出实际计数值和名义计数值两者之间的误差值;若实际计数值大于名义计数值,即表示实时时钟的时间慢了,若实际计数值小于名义计数值,即表示实时时钟的时间快了。因此,使用误差值即可求出对应的误差时间,而得以校准实时时钟的时间值。
下文将举一实施例,并参照图1~3详细说明本发明的运作。
设定过程图1是显示为实施本发明方法而预先执行的设定过程的流程图。
首先,由系统所使用的CPU型号速度(例如CPU为PentiumⅡ 233 MHz)得出其内部处理器的时钟脉冲周期;亦即求出系统内部时间戳记计数器,计数一次时所需的时间。再由上述时钟脉冲周期得出上述时间戳记计数器每秒的标准计数次数Z。接着,屏蔽中断运作,此时任何中断请求均不会被受理,以确保在重新导入新的中断过程时不会受到其他中断请求的干扰。然后,存储INT 70h中断向量所指向的过程,而以本发明的校准过程取而代之。之后,再将实时时钟设定为每M秒产生N次中断请求(IRQ 8),以便触发校准过程。最后,设定第一计数值count1为0,再恢复正常中断运作,从而完成设定过程。在本实施例中,设定实时时钟为每秒产生1024次中断请求。
实时时钟发出的中断请求为IRQ 8,它会触发INT 70h中断向量所指向的过程;因此,在设定过程中即以本发明的校准过程作为一新的INT 70h过程,以取代INT 70h中断向量原先所指向的过程。所以,当实时时钟周期性地发出中断请求时,就触发执行本发明的校准过程。
校准过程图2为显示本发明校准过程方法的流程图。
在详述本发明校准过程之前,先说明各个存储器缓冲区的存储值所代表的意义如下。
A校准过程启动后第一次或是校准过程中的调整动作发生后,第一次由时间戳记计数器所读取的计数次数值。
B经过M秒后,由时间戳记计数器所读到的计数次数值。
C第一次读取时间戳记计数器之后,在M秒的内时间戳记计数器的实际计数次数,即等于B-A。
D、E经过M秒后,实际计数次数与名义计数次数两者之间的差值。
Z时间戳记计数器1秒内的标准计数次数。
count1第1次读取时间戳记计数器后,通过实时时钟触发而执行校准过程的次数(count1每经过M秒即被重新设置为1)。
count2从第1次读取时间戳记计数器之后,实时时钟认为自己本身所经过的秒数。
count3与时间戳记计数器的计数值相比较后,实时时钟的时间偏差。
应用本发明,电脑系统一执行上述设定之后,系统的实时时钟就会每秒发出1024次中断请求(IRQ 8),而周期性地执行下述的校准过程。如图2所示,校准过程包括如下步骤。
读取实时时钟的状态(步骤1),校准过程是否由实时时钟的周期性中断请求所触发,可从实时时钟中的寄存器状态得知。若判定校准过程并非由实时时钟的周期性中断请求所触发(步骤2),则结束校准过程。
若判定校准过程系由实时时钟的周期性中断请求所触发,则读取时间戳记计时器的计次值TSC_count(步骤3)。接着,判定第一计数值count1是否为0(步骤4)。
若判定为0(表示校准过程是第1次被执行),则设定第二、三计数值count2、count3为0,并将读到的上述时间戳记计时器的计数次数值TSC_count存储至寄存器A(步骤10)。接着,再将第一计数值count1的值加1(步骤11);之后,结束校准过程。
若判定第一计数值count1不为0,则继续判定count1是否等于1024(步骤5);亦即判定实时时钟的时间是否经过1秒。若判定count1不等于1024,则将第一计数值count1的值加1(步骤11);之后,结束校准过程。
若步骤5判定第一计数值count1为1024(表示实时时钟的时间已经过1秒),则在步骤6中执行以下的动作读取目前实时时钟的时间值RTC_time;将目前时间戳记计时器的值存储于寄存器B中;将寄存器B中的值减去寄存器A中的值,并将B-A的值存储于寄存器C之中;以及,将第二计数值count2加1。其中,count2的值表示实时时钟认为本身所经过的时间为1秒,寄存器C中的值表示从第1次读取时间戳记计数器经过1秒之后,时间戳记计数器的实际计数次数。
将第二计数值count2乘以时间戳记计数器每秒的标准计数次数Z,而得到名义计数值Z×count2,再求得寄存器C中实际计数次数的存储值和名义计数值两者之间的差值(C-Z×count2),并将其存储于寄存器D和E中(步骤7)。
利用上述寄存器C中的存储值和名义计数值两者之间的差值,进行误差调整过程(步骤8),求出应加以修正的时间误差值(也就是,实时时钟的时间偏差值),作为上述第三计数值count3的内容,用以校准实时时钟的时间值。
最后,将调校过的实时时钟时间值取代修正上述实时时钟的时间值,以寄存器B的存储值取代寄存器A的存储值;并将第一计数值设定为1,第二、第三计数值设定为0(步骤9)。于是完成校准过程。
误差调整过程误差调整过程主要包括如下步骤。
(1)比较寄存器C的存储值和名义计数值,若两者之间的差异值(存储于寄存器D之中)不小于一特定误差容许值,则执行下一步骤;否则,将第一计数值设定为1,结束校准过程。
(2)将差异值转换为实时时钟的时间偏差值。
(3)若寄存器C存储值不小于名义计数值,表示实时时钟的时间较正常为慢,则将时间偏差值加上实时时钟的时间值,而得到经调校过的实时时钟时间值;若寄存器C存储值小于名义计数值,表示实时时钟的时间较正常为快,则由实时时钟的时间值中减去时间偏差值,而得到经调校过的实时时钟时间值。
下文将配合图3所示误差调整过程的流程图,说明误差调整过程的动作。
当校准过程进行至误差调整过程(步骤8)时,首先,判定寄存器D中的值是否大于等于0(步骤80);若大于等于0,则执行步骤82;若小于0,则将寄存器D中的值取绝对值(步骤81)之后,再执行步骤82。
判定时间戳记计数器的实际计数次数和名义计数次数两者之间的误差值(即寄存器D的值)是否超出容许的预定范围(步骤82)。在此实施例中,误差容许范围系设定为时间戳记计数器每秒的标准计次数Z(也就是说,对应的实时时钟的误差容许范围为1秒之内)。
若D小于Z,则由于尚在误差范围内,不必调整实时时钟的时间,所以将第一计数值count1重新设定为1而结束校准过程。
若是D大于等于Z,则重复执行步骤83和步骤84,直到寄存器D中的值小于Z为止。其中,每执行步骤83一次,就将寄存器D的值减去Z并且存回寄存器D,并将第3计数值count3的值加1(秒)。所以,计数次数的误差值得以转换成由count3所表示时间偏差值。
之后,在步骤85中,若判定时间戳记计数器的实际计数次数大于等于名义计数次数(即E≥0),表示实时时钟较正常情形为慢,所以将count3的时间偏差值加至实时时钟的时间RTC_time上,而达到调校实时时钟的目的。
在步骤85中,若判定时间戳记计数器的实际计数次数小于名义计数次数(即E<0),表示实时时钟较正常情形为快,所以由实时时钟的时间RTC_time减去count3的时间偏差值,而达到调校实时时钟的目的。
虽然本发明已以较佳实施例揭示如上,但并非用以限定本发明,任何熟悉本领域技术的人,在不脱离本发明的精神和范围内,可做更动和修改,因此本发明的保护范围由所附的权利要求书所界定的范围确定。
权利要求
1.一种使用电脑系统的中央处理器内部的时间戳记计数器以校准实时时钟的方法,其特征在于所述方法包括下述步骤设定实时时钟,使其周期性地每M秒触发一校准过程并执行N次;每执行所述校准过程一次,就将第一计数值加1;当所述校准过程执行N次时,执行如下步骤求出M秒内所述时间戳记计数器的实际计数值以及其名义计数值;其中,所述名义计数值为Z×M,Z为所述时间戳记计数器每秒的标准计次数;求出所述实际计数值和所述名义计数值两者之间的误差值;使用所述误差值求出对应的误差时间,以便校准实时时钟的时间值。
2.如权利要求1所述的方法,其特征在于,通过所使用系统的中央处理器型号求出所述时间戳记计数器计数一次所需的时间,再据以求出所述时间戳记计数器每秒的标准计次数Z。
3.如权利要求1所述的方法,其特征在于,所述实时时钟周期性地发出中断请求IRQ 8,以触发所述校准过程。
4.如权利要求3所述的方法,其特征在于,所述电脑系统INT 70h中断向量所指向过程预先被存储起来,而以所述校准过程取而代之。
5.如权利要求1所述的方法,其特征在于,M秒内所述时间戳记计数器的实际计数值由在M秒时所述时间戳记计数器的计数次数值减去初始计数值而得;所述初始计数值为所述校准过程第1次执行,或是在所述实时时钟经过校准后第1次由所述时间戳记计数器读得的计数次数。
6.一种使用电脑系统的中央处理器内部的时间戳记计数器以校准实时时钟的方法,其特征在于,校准过程包括如下步骤读取所述时间戳记计数器的内容;判定所述第一计数值是否为0;若不为0,则执行下一步骤;若为0,则将第二计数值和第三计数值均设定为0,将读得的所述时间戳记计数器的内容存储于装置A,再将所述第一计数值加1之后,结束所述校准过程;判定所述第一计数值是否等于一预设次数值若等于该值,则进行下一步骤;若不等于该值,则将所述第一计数值加1之后,结束所述校准过程;读取所述实时时钟的时间值;将所述第二计数值加1,将所述时间戳记计数器此时的内容记录于一装置B,并计算所述装置B中的存储值和所述装置A中的存储值两者之间的差值,并将其存储于装置C;将所述第二计数值乘以所述时间戳记计数器每秒的标准计次数,而得到名义计数值;利用所述装置C存储值和所述名义计数值两者之间的差值,进行误差调整过程,求出应加以修正的时间误差值作为所述第三计数值的内容,用以校准所述实时时钟的时间值;将调校过的实时时钟时间值取代所述实时时钟的时间值,以装置B存储值取代装置A存储值;将所述第一计数值设定为1,将所述第二、第三计数值设定为0。
7.如权利要求6所述的方法,其特征在于,所述误差调整过程包括如下步骤比较所述装置C存储值和所述名义计数值,若两者之间的差异值不小于一特定误差容许值,则执行下一步骤;否则,将所述第一计数值设定为1,结束所述校准过程;将所述差异值转换为所述应修正的时间误差值,其中若所述装置C存储值不小于所述名义计数值,则将所述时间误差值加上所述实时时钟的时间值,而得到经调校过的实时时钟时间值;若所述装置C存储值小于所述名义计数值,则由所述实时时钟的时间值中减去所述时间误差值,而得到经调校过的实时时钟时间值。
8.如权利要求6所述的方法,其特征在于,还包括设定过程,在所述设定过程中,由所使用系统的中央处理器的型号速度求出所述时间戳记计数器计数一次所需的时间,再据以得出所述时间戳记计数器每秒的标准计次数。
9.如权利要求6所述的方法,其特征在于,还包括设定过程,在执行所述校准过程的前,由所述设定过程得出所述时间戳记计数器每秒的标准计次数,并将第一计数值设定为0。
10.如权利要求6所述的方法,其特征在于,还包括设定过程,在所述设定过程中,设定实时时钟,使其周期性触发所述校准过程的执行,而每秒执行的次数则为所述预设次数值。
11.如权利要求10所述的方法,其特征在于,所述实时时钟周期性地发出中断请求IRQ 8,以触发所述校准过程。
12.如权利要求11所述的方法,其特征在于,所述电脑系统的INT 70h中断向量所指向的过程预先被存储起来,而以所述校准过程取而代之。
13.如权利要求6所述的方法,其特征在于,当执行所述校正过程时,先读取所述实时时钟的状态,以判定所述校准过程是否由所述实时时钟的周期性中断请求所触发启动;若是,则继续执行所述校准过程,否则结束所述校准过程。
全文摘要
一种使用电脑系统的中央处理器内部的时间戳记计数器来校准实时时钟的方法,主要是以电脑系统的内部的时间戳记计数器为基准,让实时时钟周期性地触发一校准过程,而让实时时钟的时间和时间戳记计数器计数次数的对应时间两者之间的误差保持在一定的范围的内,从而达到校正实时时钟的目的。
文档编号G06F11/28GK1307278SQ0010181
公开日2001年8月8日 申请日期2000年1月25日 优先权日2000年1月25日
发明者蔡俊男 申请人:神达电脑股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1