ARM接口技术——RTC实时时钟
作者:互联网
RTC
RTC简介
RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确的时间基准的元器件;
与一般元器件使用的时钟源不同,RTC一般采用精度较高的晶振作为时钟源,因为它对精度要求较高;
一般RTC为了在主电源掉电时还可以工作,需要额外加电池供电。
Exynos4412下的RTC控制器
Overview:
有以下关键信息:
- Exynos4412集成的RTC需要外部通过一个32.768 kHz的高精度时钟晶振;
- 提供BCD码,BCD码是用4 Bit 表示一个十进制数,比如12的二进制是1100,用BCD码表示就是0001 0010;
- 提供闰年判断;
- 提供闹铃的功能,即它不但有实际的时间,还可以设定一个时间,时间到了可以产生中断或者从低功耗模式“叫醒”;
- 提供独立的电源引脚,一般MCU和SOC都有,但是开发板没有接入电池,也就没有使用到这个独立电源引脚;
RTC获取当前时间实验
RTC实验分析
RTC实时时钟框图:
- 前面提到它的工作需要外部提供一个32.768 kHz的时钟晶振,然后在RTC内部有一个2^15分频的分频器,分频之后的频率正好是1Hz,这个时钟就可以给秒寄存器;
- 秒寄存器接收到时钟后会自增,加到60的时候就会发给分寄存器,以此类推;
- 此外还有Leap Year Generator,可以支持闰年的计算,Alarm Generator,闹铃功能。
RTC相关寄存器:
有以下寄存器:
- BCD前缀的寄存器,用于存储实际的时间,把时间按照BCD码存储的时间信息,根据时间单位拆分成7个寄存器分别存储,这些寄存器需要用于读取;
- ALM前缀的寄存器,用于闹铃的功能,在这些寄存器设定一个时间,当实际的时间到达ALM时间可以提供闹铃功能,这里的实验不用;
- INTP寄存器用于挂起中断,与ALM功能一起使用,这里也用不上;
- RTCCON用于配置RTC,需要配置;
- 还有其它的暂时用不到。
需要关注的寄存器:
BCDXXX:
以BCDYEAR为例,它使用BCD码表示实际时间的年,只用了低12位;
比如 0000 0010 0010,即022,可以用来表示2022年;其它的BCDXXX寄存器同理。
RTCCON:
RTCCON寄存器只使用了低10位,1-9位都使用默认设置;
只需要关注第0位CTLEN:打开RTC时钟。
RTC实验代码
#include "exynos_4412.h" void RTC_Init() { RTCCON |= 1; /* 打开RTC设置 */ /* 校准时间 */ RTC.BCDYEAR = 0x22; /* 设为022,BCD码: 0000 0010 0010 */ RTC.BCDMON = 0x04; RTC.BCDDAY = 0x04; /* week,它的日和星期弄反了 */ RTC.BCDWEEK = 0x28; /* day */ RTC.BCDHOUR = 0x02; RTC.BCDMIN = 0x07; RTC.BCDSEC = 0x50; RTCCON &= (~1); /* 禁止RTC设置 */ } int main() { RTC_Init(); while(1) { printf("20%x-%x-%x %x:%x:%x", RTC.BCDYEAR, RTC.BCDMON, RTC.BCDWEEK, RTC.BCDHOUR, RTC.BCDMIN, RTC.BCDSEC); } return 0; }
标签:RTC,接口技术,BCD,RTCCON,0010,寄存器,ARM,时钟 来源: https://www.cnblogs.com/zjccc/p/16201341.html