实时时钟模块提供了具有日历模式、灵活可编程闹钟和校准的时钟计数器。这一章节介绍了实时时钟 A 模块。实时时钟模块 A 执行于 MSP430F5438A器件中。
实时时钟特点:
1,可配置成实时时钟模式或者一般目的的计数器
2,在日历模式中提供了秒钟,分钟,小时,星期,日期,月份和年份
3,具有中断能力
4,实时时钟模式里可选择 BCD 码或者二进制格式
5,实时时钟模式里具有可编程闹钟
6,实时时钟模式里具有时间偏差的逻辑校正
注意:实时时钟初始化
实时时钟模块的大多数寄存器没有初始条件。在使用这个模块之前,用户必须通过软件对寄存器进行配置。
1,计数器模式:
当 RTCMODE 被重置时,计数器模式被选择。在这个模式中,通过软件可以得到一个 32 位的计数器。从日历模式切换到计数器模式是通过重置计数值(RCTNT1,RCTNT2,RCTNT3,RCTNT4),和预换算计数器(RT0PS,RT1PS)。
时钟的增量计数器可源于 ACLK、SMCLK 或者是分频之后的 ACLK 或 SMCLK。分频之后的 ACLK或 SMCLK 源自分频除法器 RT0PS、RT1PS。RT0PS 和 RT1PS 分别能输出 ACLK 和 SMCLK 的 2 分频、4 分频、8 分频、16 分频、32 分频、64 分频、128 分频、256 分频。RT0PS 的输出可以与 RT1PS 进行级联。级联的输出可用作 32 位计数器的时钟源。
RT0PS和RT1PS可以被配置成两个8位的计数器,或者级联成一个16位的计数器。通过设置各自的RT0PSHOLD和RT1PSHOLD位,RT0PS和RT1PS可以暂停功能设置成各自独立的模块。当RT0PS和RT1PS级联的时候,通过置位RT0PSHOLD可以同时停止RT0PS和RT1PS被暂停。根据不同的配置,32位的计数器可以有不同的方法被停止。如果32位的计数器直接源于ACLK或者SMCLK,则通过置位RTCHOLD而被停止;如果它是源于RT1PS的输出,则通过置位RT1PSHOLD或者RTCHOLD而被停止;最后,如果它源于RT0PS和RT1PS的级联,则通过置位RT0PSHOLD、 RT1PSHOLD或者RTCHOLD而被停止。
注意:访问RTCNTx寄存器当计数器的时钟与CPU时钟是异步的,当计数器不被操作的时候,对于RTCNTx、RT0PS、或者RT1PS的任一寄存器的任何读取应该发生。否则,结果将有可能是不可预知的。二者择一地,计数器在运行的时候应当被多次读取,软件通过绝大多数的结果来决定正确的读取结果。对于任一寄存器RTCNTx、RT0PS或者RT1PS的读取都会立即生效。
2,日历模式:
实时时钟和预分频:
当RTCMODE置位的时候,日历模式就被选中了。在日历模式中,实时时钟模块可选择以BCD码或者是十六进制提供秒、分、小时、星期、月份和年份。日历有能计算能能否被4整除的闰年算法。这个算法可以精确到1901年到2099年。
分频器自动将RT0PS和RT1PS配置成为实时时钟提供一秒间隔的时钟。RT0PS源于ACLK。ACLK必须是32768Hz,名义上是为了实时时钟日历的运行。RT1PS与RT0PS的ACLK的256分频输出进行级联。实时时钟源于RT1PS的128分频输出,因而提供所需的间隔一秒的时钟。从日历模式切换到计数器模式时,会将秒、分、小时、星期、月份和年份全部置1。另外,RT0PS和RT1PS也会被置位。
当RTCBCD=1时,日历寄存器就会被选为BCD码格式。必须在时间设置之前选择好格式。改变RTCBCD的状态会将秒、分、小时、星期、月份和年份全部置1。另外,RT0PS和RT1PS也会被置位。在日历模式下,RT0SSEL、RT1SSEL、RT0PSDIV、RT1PSDIV、RT0PSHOLD、RT1PSHOLD和RTCSSEL位都可以被忽略。置位RTCHOLD会停止实时计数器、分频计数器和RT0PS、RT1PS。
3,实时时钟的闹钟功能:
实时时钟模块提供了一个灵活的闹钟系统。这个单独的、用户可编程控制的闹钟,在设置闹钟的秒、分、小时、星期、月份和年份寄存器的基础上进行编程设置。用户可编程闹钟功能只有在日历模式运行的时候才有效。
每一个闹钟寄存器都包括一个闹钟使能位,AE可用来使能每一个闹钟寄存器。通过设置各式各样闹钟寄存器的AE位,可以生成多种闹钟。
比如说,一个用户需要在每一小时的15分钟(也就是00: 15: 00, 01: 15: 00, 02: 15: 00等等时刻)进行一次闹钟。这只要将RTCAMIN设置成15即可实现上述功能要求。通过设置RTCAMIN的AE位和置位闹钟寄存器的所有其它AE位,就会使能闹钟。使能时,AF位就会在00: 14: 59到00: 15: 00,01: 14: 59到01: 15: 00, 02: 14: 59到02: 15: 00等等时刻被置位。
再举一个例了,一个用户希望在每一个月份的第五天的06: 30: 00时刻进行一次闹钟。那么,RTCADAY位将要设置成5, RTCAHOUR位将要被设置成6, RTCAMIN位将要被设置成30。通过设置RTCADAY位、RTCAHOUR位和RTCAMIN位的AE位,闹钟即被使能。一旦使能,AF位将要在06: 29:59到06: 30: 00的过渡时刻和RTCADAY等于5的时刻被置位。
注意:
1,无效的闹钟设置
无效的闹钟设置不会通过硬件的检测。用户有责任将闹钟设置正确。
2,无效的时间和日期设置
指定的合法范围之外的无效日期、时间信息或者是日期值写入到RTCSEC, RTCMIN,RTCHOUR, RTCDAY, RTCDOW、RTCYEARH, RTCYEARL, RTCAMIN, RTCAHOUR,RTCADAY和RTCADOW寄存器将会导致不可预知的结果。
4,设置闹钟
为了防止发生潜在的错误的闹钟情形,在设置新的时间值到实时时钟寄存器之前,应当置位RTCAIE, RTCAIFG和AE位来使闹钟失效。
实时时钟部分寄存器列表: