[笔记分享] [RTC] RTC Hardware介绍

来源:互联网 发布:淘宝店铺如何开分店 编辑:程序博客网 时间:2024/05/21 06:37

Platform: msm8260

Clock source

虽然Alarm和RTC是不同的两个功能,但是alarm基于RTC实现,所以先来看下硬件时钟图,如下:

这里写图片描述

可以看出,RTC的时钟源来自32.768KHz的晶振,当RTC或者SMPS需要支持时,晶振就需要接上,否则可不接。从图上看来好像也可以由内部19.2MHz RC振荡电路提供,其实它只是提供给SLEEP_CLK使用的。

这里晶振有两种。一种是自激式,可以通过自己振荡产生时钟,另一种是需要通过PMIC8058内部提供振荡。

32.768KHz晶振一旦系统上电就开始工作,只要供给它足够的电压(可通过外部电源、主电池、纽扣电池),即使是在PMIC电源关闭时。如果没供电就会停振。


RTC

RTC通过一个32-bit的realtime counter和4个8-bit alarm registers来运行,如下图,它们都以秒为单位递增。当前设置的时间是以用户定义的一个值来定义的,如我们后面程序中用到的1970年1月1号。例如我们设置了1971年1月1号,那么我们只要写进去1年所用的秒数就OK了。

这里写图片描述

由于RTC是以秒递增的,那么32.768KHz晶振也要分频32768之后才能使用。当晶振精度不高时,我们也可以通过编程来调整分频值来提高精度。

当写使能time时,clock停止,divider被清除, RTC counter被设置成我们要的value,然后写使能被清除,clock开始,divider被释放。(软件部分只要设置rtc counter value就可以了)

当读时,是按照LSB的顺序读取的。

关于alarm是通过比较RTC counter和alarm register里面的值来运作的,当两个值相等时,会触发一个alarm中断。如果想要禁止alarm,只要将alarm register中的value设置成比rtc counter中的低就可以了。默认中断是禁止的。

目前MSM8260平台并没有使用硬件的alarm, 而是直接使用了android添加的alarm软件接口来实现。


Power

主要来自外部电源、主电池或者纽扣电池。
当纽扣电池电压过低时(没有主电池),会产生一个中断,当然RTC也不能正常工作了。