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了。