MSP430F5系列F6系列RTC_A
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MSP430F5系列F6系列RTC_A
22.2 RTC_A的操作
RTC_A模块可以通过设置RTCMODE位被配置为带日历的时钟或者一个32位的通用计数器。
22.2.1 计数器模式
当RTCMODE位为0时模块选择为计数器模式。
在此模式下,模块提供一个可被软件直接访问的32位计数器。
将模块的功能从日历模式切换到计数模式时,计数值将被清零,并且会清零预分频计数器(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位计数器的时钟源。
32位的计数器有4个八位的计数器级联而成,计数器支持8位,16位,24位,或者32位溢出定时器。
RTCTEV位可以选择各自的触发事件,RTCTEV事件可以在置位RTCTEVIE位的情况下触发中断。
从RTCNT1到RTCNT4四个计数器可以被独立地进行读写操作。
RT0PS和RT1PS可以被配置为两个独立的8位计数器或者级联作为一个16位计数器。
RT0PS和RT1PS可以通过置位各自的RT0PSHOLD和RT1PSHOLD位来停止工作而可以作为一个独立的部分。
当RT0PS和RT1PS级联时,通过置位RT0PSHOLD可以同时停止这两个计数器。
32位计数器根据不同的配置有不同的停止方式。
如果32位的时钟源直接来自ACLK或SMCLK,那么可以置位RTCHOLD 来停止。
如果时钟源来自RT1PS的分频时钟,那么可以置位RT1PSHOLD或者RTCHOLD来停止。
最后,如果时钟源来自RT0PS 和RT1PS级联后的分频时钟,那么可以置位RT0PSHOLD,RT1PSHOLD或者RTCHOLD来停止。
提示:访问RTCNT1,RTCNT2,RTCNT3,RTCNT4,RT0PS,RT1PS寄存器当计数时钟和CPU时钟异步时,如果计时器没有运行,可以对RTCNTx,RTxPS寄存器进行任何读操作,否则,结果将不可预料。
另外,还可以用软件在计数器运行期间进行对此读取,然后通过多数表决的方法来决定读取的正确数据。
对寄存器的任何写操作将立即生效。
22.2.2 日历模式
将RTCMODE位置位(RTCMODE = 1)就选择为日历模式。
在日历模式,RTC_A 提供BCD或者16进制格式的秒,分,时,天/周,天/月,月,年表示。
日历模式包括一个闰年算法,算法将能够被4整除的年份认为是闰年。
这个算法在1901到2099年是准确的。
22.2.2.1 实时时钟和预分频器
预分频器RT0PS,RT1PS会自动地被配置为为RTC_A提供1s的定时时钟。
RT0PS 的时钟源为ACLK,为正确地进行日历模式操作,ACLK必须设置为32768Hz(标称)。
RT1PS和ACLK经RT0PS的256分频级联,RTC_A模块把RT1PS输出的128分频作为时钟源。
因此,RT0PS和RT1PS提供1s的定时时钟(32768 / 128 /256 = 1)。
从计数模式向日历模式切换时会清除秒,分,时,天/周,年的计数值,并将天/月和月的值置为1,另外,RT0PS和RT1PS也会被清零。
当RTCBCD = 1时,日历寄存器会被选为BCD格式,格式必须在时间设置之
前设定。
改变RTCBCD的状态会清除秒,分,时,天/周,年的计数值,并将天/月和月的值置为1,另外,RT0PS和RT1PS也会被清零。
在日历模式,RTxSSEL,RTxPSDIV,RTxHOLD和RTCSSEL位无效,设置RTCHOLD 停止实时时钟计数器和预分频计数器RTxPS。
22.2.2.2 实时时钟闹铃功能
RTC_A提供一个灵活的用户可编程的闹铃系统,基于分,时,天/周,天/月的闹铃寄存器中的设置。
用户可编程的闹铃功能只在日历模
式下有效。
每一个闹铃寄存器包括一个闹铃时能位(AE,在寄存器的最高位),可以用来使能相应的闹铃寄存器。
通过置位不同闹铃寄存器的AE位,会产生不同的闹铃事件。
●示例1:用户希望在每小时的第15分钟设置闹铃,比如
00:15:00,01:15:00,02:15:00等等。
通过设置RTCAMIN为15是可以实现的,将RTCAMIN中的AE位置位并且清除其他所有闹铃寄存器中的AE位,闹铃模式使能,之后在计数值从00:14:59变到00:15:00,从01:14:59到01:15:00,从02:14:59到02:15:00时,AF 将置位。
●示例2:用户希望在每天的04:00:00设置闹铃,通过设置RTCAHOUR为4
是可以实现的,将RTCAHOUR中的AE位置位并且清除其他所有闹铃寄存器中的AE位,闹铃模式使能,之后在计数值从03:59:59变到04:00:00时,AF 将置位。
●示例3:用户希望在06:30:00设置闹铃,将RTCAHOUR设置为6,将RTCAMIN
设置为30,通过设置RTCAHOUR和RTCAMIN的AE位来使能闹铃,使能之后,当时间计数从06:29:30变化到06:30:00时,AF位将置位。
再此情况下,闹铃事件将在每天的06:30:00发生。
●示例4:用户希望在每周二的06:30:00设置闹铃。
将RTCADOW设置为2,
将RTCAHOUR设置为6,将RTCAMIN设置为30,并通过置位RTCADOW,RTCAHOUR,RTCAMIN的AE位来使能闹铃。
闹铃使能后,每当时间计数由06:29:30变化到06:30:00并且RTCDOW从1变到2时,AF位将置位。
●示例5:用户希望在每月的第五天的06:30:00设置闹铃。
将RTCADAY设置
为5,将RTCAHOUR设置为6,将RTCAMIN设置为30,并通过置位RTCADAY,RTCAHOUR,RTCAMIN的AE位来使能闹铃。
闹
铃使能后,每当时间计数由06:29:30变化到06:30:00并且RTCDAY 等于5时,AF位将置位。
提示:非法闹铃设置
非法的闹铃设置不通过硬件来检测,确保输入正确的设置是用户的责任。
提示:非法的时间和日期值
写入非法的日期和/或时间信息或者日期值超出RTCSEL,RTCMIN,RTCHOUR,RTCDAY,RTCDOW,RECYEARH,RTCYEARL,RTCAMIN,RTCAHOUR,RTCADAY和RTCADOW寄存器最大范围将会产生不可预料的结果。
提示:设置闹铃
为了防止错误的闹铃情况发生,在对RTC时间寄存器写入新的时间值之前应该通过清除RTCAIE,RTCAIFG和AE位来禁止闹铃。
22.2.2.3 在日历模式下对寄存器的读写操作
由于系统时钟和RTC_A的时钟可能不同步,所以在访问实时时钟寄存器的时候要特别注意。
在日历模式下,实时时钟寄存器每一秒更新一次,所以为了防止在时间正在更新时读取实时时钟寄存器,而导致读取一个错误的时间值,RTC_A提供一个禁止窗口。
该禁止窗口以转换更新时间点为中心的大约128/32768秒的时间窗口。
只读位RTCRDY在禁止窗口期间为复位状态,窗口之外为置位,任何在RTCRDY 为复位时的对时钟寄存器的读操作都被认为可能是非法的,并且读取的时间被忽略。
一种简单的安全读取实时时钟寄存器的方法是使用RTCRDYIFG中断标志,置位RTCRDYIE将使能RTCRDYIFG中断。
一旦中断使能,RTCRDY的上升沿将会使RTCRDYIFG置位,并触发一个中断(即从禁止窗口到禁止窗口之外)。
在这种情况下,程序将有将近1s的时间去安全地读取任意或者全部的实时时钟寄存器。
RTCRDYIFG在中断得到响应后会自动清除,也可以软件清除。
在计数器模式,RTCRDY一直处于复位状态,RTCRDYIE无效,RTCRDYIFG保持复位。
提示:对实时时钟寄存器的读写
当计数器时钟和CPU时钟不同步时,在RTCRDY复位时任何对RTCSEC,RTCMIN,RTCHOUR, RTCDOW, RTCDAY, RTCMON, RTCYEARL, 或者RTCYEARH寄存器的读操作可能会读到不正确的数据。
为了安全地读正在计数的寄存器,可以查询RTCRDY位或者事先同步程序。
另外,也可以采用多次读取计数器,然后用软件进行多数判决来判断正确的读取结果,对RTxPS的读取只能采取这种方法或者暂定计数器。
任何对正在计数的计数器的写操作将会立即生效,不过在写时钟时时钟是停止的,此外,RTxPS复位,写操作可能会丢失长达1s的时间。
当写的数据超出最大范围或者无效的时间格式组合将会产生不可预料的行为。
22.2.3 实时时钟中断
RTC_A有5个有独立使能位和中断标志位的中断源。
22.2.3.1 日历模式下实时时钟中断
在日历模式下,有5个中断标志,分别是RT0PSIFG,RT1PSIFG,RTCRDYIFG,RTCTEVIFG和RTCAIFG。
这些中断有优先级,并且共用一个中断向量,。
中断向量寄存器RTCIV用来判断哪一个中断标志请求了中断。
最高优先级的使能中断将在RTCIV寄存器中产生一个数字,这个数值可以求得或者和程序指针PC相加,然后自动进入中断服务程序。
禁止RTC中断并不会影响RTCIV中的值。
对RTCIV寄存的任何访问,读或者写都会自动复位最高的待处理的中断标志。
如果其他的中断标志置位,那么这个中间将在之前中断结束后立即被响应。
另外,所有的中断可以软件清除。
用户可编程的闹铃事件产生实时时钟中断RTCAIFG,置位RTCAIE 将使能中断。
对于闹铃模块RTC_A还提供一个间隔闹铃的中断,RTCTEVIFG。
这个中断可以在RTCMIN改变或者RTCHOUR改变,每天午夜(00:00:00),每天正午(12:00:00)这几个中选择触发事件,通过设置RTCTEV位来选择,置位RTCTEVIE位来使能中断。
RTCRDY位也可产生实时时钟中断,RTCRDYIFG对于在计数时钟和CPU时钟异
步时读取时间寄存器是非常有用的。
置位RTCRDYIE可以使能此中断。
RT0PSIFG可被用于产生RT0IP位选择的中断间隔。
在日历模式下,RT0PS的时
钟源来自32768Hz的ACLK,所以可能的间隔有16384Hz,8196Hz,4096Hz,2048Hz,1024Hz,512Hz,256Hz,128Hz,置位RT0PSIE位将使能中断。
RT1PSIFG可被用于产生RT1IP位选择的中断间隔。
在日历模式下,RT1PS的时
钟源来自RT0PS的输出,在RT0PS输出128Hz的情况下,可能的间隔有64Hz,32Hz,16Hz,8Hz,4Hz,2Hz,1Hz,0.5Hz,置位RT1PSIE位将使能中断。
22.2.3.2 计数模式下的实时时钟中断
在计数模式下有三个中断源可用:RT0PSIFG,RT1PSIFG和RTCTEVIFG。
RTCAIFG 和RTCRDYIFG位清除的,RTCRDYIE和RTCAIE无效。
RT0PSIFG可以用于产生RT0IP位选择的中断间隔。
在计数模式下,RT0PS的时
钟源来自于ACLK或者SMCLK,每个时钟可以被2,4,8,16,32,64,128和256分频。
置位RT0PSIE位可以使能中断。
RT1PSIFG可以用于产生RT1IP位选择的中断间隔。
在计数模式下,RT1PS的时
钟源来自于ACLK,SMCLK或者RT0PS的输出,每个时钟可以被2,4,8,16,32,64,128
和256分频。
置位RT1PSIE位可以使能中断。
RTC_A模块提供一个产生实时时钟中断周期定时器——RTCTEVIFG。
周期定时器可以选择在32位计数器中8位,16位,24位或者32位溢出作为触发中断的事件,可由RTCTEV位来选择。
置位
RTCTEVIE位使能此中断。
22.2.4 时钟校正
RTC_A模块有一个在大约+4ppm或者-2ppm范围内调节晶振频率的校正逻辑,以使得保持更高的时间精度。
RTCCAL位用来调整时钟频率。
当RTCCALS置位,每一个RTCCAL的低字节产生一个大约+4ppm的调整,当RTCCALS复位时,每个RTCCAL 的低字节产生一个-2ppm的调整。
校正只在日历模式下进行,在计数模式下校正逻辑被禁止。
在RTCCALS和RTCCALx的设置下,校正通过周期性地调整RT1PS计数器来完成。
在日历模式下,RT0PS将一个标称32768Hz的低频晶振256分频。
一个64分钟的时间有32768 * 60 * 64 = 125829120个周期,因此一个-2ppm的频率上的递减大致相当于每125829120个周期增加256个周期(256/125829120 = 2.035ppm)。
在一个64分钟的时期中,可以通过对RT0PS的一个额外的输出保持RT1PS计数器来来实现。
同样的,在频率上一个+4ppm的增量大致相当于在每125829120个周期内移除512个周期(512/125829120 = 4.069ppm)。
在一个64分钟的时期内,可以通过在RT0PS 的两个额外的输出时钟时增加RT1PS的计数值来实现。
每一个RTCCCALx的校正位导致在每64分钟内增加256个低频周期或者减少512个低频周期来调整频率大约
在-2ppm或者4ppm变化。
为了矫正频率,RTCCLK输出信号在引脚上可用。
RTCCALF位可以用来选择RTCCLK的输出信号频率,包括无信号,512Hz,256Hz,或者1Hz。
矫正频率的基本流程如下:
1. 配置RTCCLK引脚
2. 根据分辨率要求,用一个合适的分辨率的频率计来测量RTCCLK的输出信号
3. 以ppm为单位估算绝对误差:绝对误差(ppm)= |106 X (f MEASURED– f RTCCLK)
/ f RTCCLK|,f RTCCLK是预先分频至512Hz,256Hz或者1Hz
4. 通过完成以下步骤来调节频率:
(a) 如果频率太低,置RTCALS = 1,应用合适的RTCCALx位,使得RTCCCALx
= (绝对误差)/ 4.069,结果取最相近的整数。
(b) 如果频率太高,清零RTCALS = 0,设置合适的RTCCALx使得RTCCALx =
(绝对误差)/ 2.035,结果取最相近的整数。
例如,假设RTCCLK输出512Hz的频率。
测定的实际的RTCCLK 是511.9658Hz,
频率绝对误差大约是低66.8ppm。
为了增加66.8ppm,RTCCALS位应该置位,RTCCAL 应该设置为16 * (66.8 / 4.069)。
相似的,当实际频率为512.0125Hz时,绝对误差
大约是高24.4ppm。
为了降低24.4ppm,RTCCALS位置0,RTCCAL置12 * (24.4 / 2.035)。
校正逻辑只纠正初始偏差并不调节由于温度或者老化而产生的影响。
可以通过定期地测量温度并且使用晶振的特性曲线来调节ppm。
在计数器模式(RTCMODE = 0),校正逻辑是禁止的。
提示:最小可能的校正
最小的校正可能是-4ppm或者+8ppm,例如,设置RTCCALS = 0并且设置RTCCAL = 0将会产生在频率上减少-4ppm。
同样,设置RTCCALS = 1,RTCCAL = 0,将会在频率上增加+8ppm。
提示:校正输出频率
如果在RTCCLK引脚观测到的512Hz和256Hz的输出频率在校正逻辑之前产生,则校正设置的改变不影响输出。
1Hz的输出受校正设置改变的影响,因为在长时间内微小和偶然的改变是很难观测到的。