CTLEN位控制CPU和RTC之间的所有接口。因此,您应该在RTC控件中将其设置为“1”,在系统重置后启用数据写入的例程。为了防止无意中写入BCD计数器寄存器,应该关闭电源前将CTLEN位清除为0。
CLKRST是215时钟分频器的计数器复位。在设置RTC时钟之前,应重置215时钟分频器以获得精确的RTC操作。
四、RTC的操作 1. 设置时间举例:
我们要将当前时间设置为 2020年11月11日, 15:24:50。
1) 先将RTC控制使能开启,即RTCCON[0]置为1;
2)然后将时间对应的BCD格式数值,设置到应对的寄存器,BCDYEAR 、BCDMON 、BCDDAY 、BCDHOUR 、BCDMIN 、BCDSEC;
3) 将RTCCON[0]置为0,防止误操作修改了时间;
4)如果我们要访问当前时间,可以直接读取寄存器BCDYEAR 、BCDMON 、BCDDAY 、BCDHOUR 、BCDMIN 、BCDSEC。
RTC计时器是一个递增计数器,并引发计时中断。TICNT寄存器包含32位目标计数值,并且CURTICCNT寄存器包含32位当前计时计数。如果当前滴答数达到TICNT中指定的目标值时,计时中断发生。
一秒钟计数的次数,由RTCCON[7:4]即TICCKSEL位决定:
因为我们的晶振频率也是32768,为方便计数,所以我们设置RTCCON[7:4]为0,开启滴答计时器需要设置RTCCON[8]位1:
代码如下:
RTCCON = RTCCON & (~(0xf << 4)) | (1 << 8); TICCNT = 32768; 3. 操作ALARM闹钟 RTCALMRTCALM寄存器控制报警功能的启用和报警时间。请注意,RTCALM寄存器在断电模式下将同时生成ALARM_INT和ALARM_WK信号,但在正常模式下仅生成ALARM_INT信号。设置ALMEN[6]为1以产生ALARM_INT和ALARM_WK信号。
举例:
比如我们想每个小时的25分58秒产生一个中断信号,那我们需要设置RTCALM[1]、RTCALM[0]为1,同时设置RTCALM[6]位1以开启alarm功能,然后将BCD格式的时间设置到寄存器ALMSEC、ALMMIN。
代码如下:
RTCALM.ALM = (1 << 6)|(1 << 0)|(1 << 1);//使能bite:MINEN、SECEN RTCALM.SEC = 0x58; RTCALM.MIN = 0x25; //每小时25:58产生一次中断alarm功能设置闹钟时间寄存器如下:
寄存器操作,采用BCD格式。
五、完整代码实现