CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/08/23/AM437x——RTC裸机/#more
AM437x的RTC模块裸机程序。
0.为什么要RTC
在实际开发中,往往需要知道当前的时间,比如现在的2017年8月23日17点02分。
由于设备不使用的时候或者遇到故障时,会出现关机操作,而关机的这段时间长短,设备是不知道的,当再次开机时,时间要么被归零,要么显示为关机时的那个时间。
为了同步到现在的实时时间,我能想到两个解决方案。
1.利用网络,从网络中获取当前时间。
2.利用一个设备关机仍在计时工作的模块,开机后加上关机的这段时间。
第一个方案,需要网络,对于大多数单片机设备是不现实的,附加的成本太高。
第二个方案,就是现在大量使用的RTC,有的集成到SOC里面了,有些仍以外部芯片的形式出现。
在设备关机后,RTC在备用电池(一般是纽扣电池)的支持下,以超低功耗的方式继续默默的工作,直到开机,将时间同步。
这就是RTC存在的主要意义。
1.AM437x的RTC
AM437x的RTC介绍在参考手册19章Timers的第4部分:Real-Time Clock (RTC)
大致的特性有:
- 总计数时间为100年;
- 提供秒、分、小时、星期、日期、月份、年等;
- 数据以Binary-coded-decimal (BCD)表示;
- 时钟源可选择内部或外部;
- 有两个闹钟;
- 有两种中断:时间中断和闹钟中断;
很良心的有个Use Cases:
The following list includes high-level steps to start using the RTC:
- Enable the module clock domains (for details on which clock domain, see Section 19.4.2, Integration).
- Enable the RTC module using CTRL_REG.RTC_disable.
- Enable the 32K clock from PER PLL, if using the internal RTC oscillator.
- Write to the kick registers (KICK0R, KICK1R) in the RTC.
- Configure the timer in RTCSS for desired application (set time and date, alarm wakeup, and so on).
- Start the RTC (in CTRL_REG.STOP_RTC).
基本把配置步骤写得很清楚了。
-
关于时钟和中断:
时钟来自于外部CLKIN32的CLK_32K_RTC或者内部PRCM的CLK_32KHz;
可以产生两种中断:timer_intr_pend和alarm_intr_pend。 -
关于写保护