MCU

ADSP-BF533之RTC寄存器介绍

0
阅读(3356)

当BF533处理器的动态电源管理设置为深度睡眠模式时,系统中所有的时钟(除了1Hz事件)都停止了,在这个状态下,RTC的Vdd计数器还在继续递增。而内部的RTC寄存器将不再更新,并且也不能被读取。在深度睡眠状态下,RTC_ISTAT所有位都被清除,深度睡眠过程中发生的所有事件,都没有记录在RTC_ISTAT寄存器中。当处理器从深度睡眠模式下重新启动,RTC的相关寄存器都将在接着的1Hz事件中重新加载进入睡眠模式之前的值,并且自动设置秒事件标志。软件在RTC重新启动后应该等待秒事件标志设置完成之后,才可以开始读取或者写入任何RTC寄存器。

下面详细介绍RTC寄存器的内容及设置方法:

1.  RTC_STAT寄存器,RTC_STAT寄存器是用于读取或写入目前的时间。该寄存器的具体内容如下图所示:

从图中可以看出,RTC_STAT寄存器的32位数据代表着不同的时间参数,0-5位是秒,6-11位是分,12-16位是时,17-31位是日,时分秒的范围不用说,而日的倍数为15位,可以计时32767天,按一年365天算,也可以计时89年之久,也就是说,处理器内部的RTC功能在电源允许的情况下可以自动运行89年,而不用进行其他设置。从前面的学习可知,对于RTC寄存器的写操作,最好是在1Hz事件后进行设置,然后设置的时间将在下一个1Hz事件完成。下面是对该寄存器的设置步骤:

1)   等待1Hz事件;

2)   读取RTC_STAT寄存器,例如返回10:45:30;

3)   将目前时间写入RTC_STAT寄存器,例如是13:10:59;

4)   马上读取RTC_STAT寄存器,仍然是获得老的时间10:45:30;

5)   等等1Hz事件;

6)   读取RTC_STAT寄存器,获得新设置的时间13:11:00。

2.   RTC_ICTL寄存器,RTC_ICTL寄存器是用于设置各种中断事件。该寄存器的具体内容如下图所示:

当某一位设置为1时表示中断使能,0表示中断禁止。从上图可以得知,该寄存器的复位值为0x00xx,即低8位在复位的时候是处于未知状态的,所以一般在第一次启动时钟的时候将该寄存器设置为0x0000,以免误入中断。当秒中断使能后,处理器将在下一个1Hz事件发生中断,而对于分中断使能,则是在秒计数器从59变化到0时产生的;对于时中断使能,则是在分计数器从59变化到0时产生的;其他均依此类推。

3.  RTC_ISTAT寄存器,RTC_ISTAT寄存器提供了各种RTC中断的状态。该寄存器的具体内容如下图所示:

该寄存器跟RTC_ICTL的内容是互相对应的,当某一事件发生时,相应的中断状态位被置1,直到软件对其写1才能将其清除。在RTC_ISTAT寄存器中,有一位是RTC_ICTL寄存器中没得对应的,就是写等待状态,该位为0时表示当前没有未完成的写操作,该位为1时表示至少有一个写操作未完成,该位比较特殊的地方就是只能读不能写。

4.  RTC_SWCNT寄存器,该寄存器用于存储计数秒表的值,在后面学习计数秒表时再详细介绍。

5.  RTC_ALARM寄存器,该寄存器用于设置闹钟的时间,也在后面学习闹钟编程时再详细介绍。

6.  RTC_PREN寄存器,RTC_PREN寄存器只有一个有效位,就是预分频使能位。该寄存器的具体内容如下图所示:

当该位被置1时,RTC时钟以1Hz的频率行走,当该位被清除时,分频器被禁止,RTC时钟以32.768KHz的频率行走。为了让RTC时钟以正确的频率行走,软件必须在电源初次上电后对其进行设置,该寄存器的设置必须先于RTC的其他寄存器,因为其他的设置很多都是基于1Hz时钟频率的。