王某人从0开始学习lorawan的笔记_3:最底层!RTC( 很重要 )

时间:2019-08-31
本文章向大家介绍王某人从0开始学习lorawan的笔记_3:最底层!RTC( 很重要 ),主要包括王某人从0开始学习lorawan的笔记_3:最底层!RTC( 很重要 )使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

  整个lorawan应用层,所有的时间管理和任务调度都和RTC有关。

  使能了ALARM_A功能,通过设置超时时间,我们可以完成对应的任务序列。

   宏 N_PREDIV_S 定义了同步预分频的位数,即同步预分频寄存器的重装载值为2^10-1,即得到宏 PREDIV_S。

  为了得到最终 1Hz 的日历更新频率,异步预分频的值为 宏 PREDIV_A ( RTC时钟为32.768KHz )。

  RTC源码中定义了一个时间戳结构体:

  在需要执行定时任务时,就是会更新这个结构体对象的值,并作为时间参考点。可以看做一个时间戳结构体。

  RtcTimeContext_t 对象由  uint32_t RtcSetTimerContext( void )  函数更新。返回32位的同步异分频计数器的总计数值。

void RtcInit( void );  //初始化RTC日历寄存器并使能RTC。

void RtcSetMcuWakeUpTime( void ); //计算MCU从休眠状态切换到工作状态需要的时间,与McuWakeUpTimeInitialized有关,只需要执行一次
 void RtcSetAlarm( uint32_t timeout ); //初始化RTC时,并没有使能ALARM_A,此时才使能,timeout是超时时间,即多少时间后触发报警
 
void RtcStartAlarm( uint32_t timeout );//启动ALARM_A警报功能,开始计时,经过timeout后触发警报

  在rtc_board.c和.h文件中还有其他一些功能,比如获取时间,计算时间间隔之类的,都是RTC时钟功能的一些扩展。

  就8说了

  

原文地址:https://www.cnblogs.com/WeiSD/p/11439523.html