今天有了点时间,抽空来学习下RTC。本程序主要功能是设置个时间,然后实现秒中断,读出时间在OLED屏上显示。有关OLED屏的驱动这里就不多说了,本文的重点是测试RTC。
实时时钟(RTC)是一组计数器,它用于测量时间,在系统掉电时也可以继续运行。周期性中断在时间寄存器任意字段的值递增时产生,并且可以选择小数秒的值。在出现特殊的日期和时间比时产生报警中断。并且可以通过计时时间设置波形输出等功能。
RTC是实时时钟外设,在SAM4E_XPLAINED测试板上是低功耗外设,RTC有完整的时间和日期时钟附带闹钟功能,同时可设置200年的罗马教皇日历或者波斯日历。闹钟和日历寄存器可以通过32位总线访问。时间和日期的数值被编码成BCD码形式,时间可以有12小时和24小时形式显示。时间和日期可以通过32位总线对可编程的寄存器进行设置。RTC的时钟频率32768KHz。
本次实验是利用RTC(实时时钟)的秒钟中断函数,来显示当前时间,在秒钟发生变化时就产生中断,即每一秒钟都产生中断。在中断函数中,用OLED屏显示当前时间。
RTC的内部结构框图
寄存器列表,具体功能请看数据书
下面就来看看程序的操作,首先定义个时间结构体
函数static uint32_t Week_Deal(uint32_t year, uint32_t month, uint32_tday)是通过给定的日期时间来计算出当天是周几,有个算法来实现的
RTC的初始化函数,设置时间rtc_set_time函数的返回值可以判断设置的数据是否成功,设置时间模式为24小时模式,并且使能秒中断
秒中断函数,中断里读取时间并在OLED屏上显示出来
主函数初始化
哦,对了,我来接了个红外传感器,以后可以对着办公室门口,老板来了就知道了,嘿嘿。使用的是PE2端口,低电平触发中断,串口上传数据
最后来看看实物显示