ADSP-BF533之RTC寄存器介绍
0赞当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时钟频率的。