9 实时时钟(RTC)
9.2 接口说明
9.2.1 RTC使能/禁止
使用RTC_Enable
使能或者禁止RTC
。
void RTC_Enable(const uint8_t flag);
函数根据flag
的值来执行操作:
flag
为0时,禁止RTC
;flag
不为0时,使能RTC
。
RTC
使能后,只要不进行禁能,就会根据设置的初始计数值进行递减,计数器递减为0后发生中断,这时只要设置新的计数值,RTC就会马上按照新的计数值进行计时。
9.2.2 获取RTC当前值
可以使用RTC_Current
读取RTC
低32位的当前计数值,用RTC_CurrentFull
读取全部48位的当前计数值。
uint32_t RTC_Current(void);
uint64_t RTC_CurrentFull(void);
9.3 RTC中断使用流程
首先,定义一个中断处理函数
rtc_timer_isr
(名字可以根据需要自己定义)。uint32_t rtc_timer_isr(void *user_data) { RTC_ClearInt();//清中断状态 RTC_SetNextIntOffset(32768 * 10);//设置中断计数值 //这里可以添加用户自己的代码 return 0; }
可以通过
user_data
给中断传递参数,这通常作为一个预留功能,不常用到。然后,通过
platform_set_irq_callback
注册中断:platform_set_irq_callback(PLATFORM_CB_IRQ_RTC, rtc_timer_isr, NULL);
接下来,设置中断时间并使能
RTC
,时间到后,中断会触发。RTC_SetNextIntOffset(32768 * 10); RTC_Enable(RTC_ENABLED);
这里注意,在使用
RTC
时,最好先通过RTC_SetNextIntOffset
设置好计数值,再进行使能,这样RTC此次计数时间处于可控状态。在RTC计数过程中,随时都可以使用
RTC_SetNextIntOffset
进行计数值的设置,设置完成后,新值会马上覆盖旧值,RTC
会按照新值开始进行计时。