CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

APP RTC驱动

宏定义

CFG_LPCLK_INTERNAL_EN

表 118 CFG_LPCLK_INTERNAL_EN宏定义
描述

是否使用芯片内部低速时钟源(RNG2时钟)

  • 0:不使能,默认使用外部低速时钟源

  • 1:使能

如果使能芯片内部低速时钟源,需要检查SDK_Folder\build\config\custom_config.h文件中PMU_CALIBRATION_ENABLE宏是否使能,不使能的情况下时钟源可能不准。

详细信息请参考文件:SDK_Folder\build\config\custom_config.h

APP_RTC_ALARM_DISABLE_DATE

表 119 APP_RTC_ALARM_DISABLE_DATE宏定义
描述

不使能RTC的时间定时

CALENDAR_ALARM_DISABLE_DATE

详细信息请参考文件:SDK_Folder\drivers\inc\app_rtc.h

APP_RTC_ALARM_DISABLE_TICK

表 120 APP_RTC_ALARM_DISABLE_TICK宏定义
描述

不使能RTC的TICK定时

CALENDAR_ALARM_DISABLE_TICK

详细信息请参考文件: SDK_Folder\drivers\inc\app_rtc.h

APP_RTC_ALARM_DISABLE_ALL

表 121 APP_RTC_ALARM_DISABLE_ALL宏定义
描述

不使能RTC的TICK定时和时间定时

CALENDAR_ALARM_DISABLE_ALL

详细信息请参考文件: SDK_Folder\drivers\inc\app_rtc.h

结构体

app_rtc_time_t

结构体定义如下:

表 122 app_rtc_time_t结构体成员
成员 描述 取值

uint8_t sec

Calendar日历秒

取值范围:0 ~ 59

uint8_t min

Calendar日历分钟

取值范围:0 ~ 59

uint8_t hour

Calendar日历小时

取值范围:0 ~ 23

uint8_t date

Calendar日历日期

取值范围:1 ~ 31

uint8_t mon

Calendar日历月份

取值范围:1 ~ 12

uint8_t year

Calendar日历年

取值范围:0 ~ 99

uint8_t week

Calendar日历周

取值范围:0 ~ 6

uint16_t ms

Calendar日历毫秒

取值范围:0 ~ 999

详细信息请参考文件:
  • GR551x/GR5526/GR5x25:SDK_Folder\drivers\inc\hal\gr55xx_hal_calendar.h
  • GR533x:SDK_Folder\drivers\inc\hal\gr533x_hal_calendar.h
  • GR5405:SDK_Folder\hal_drv\include\hal_calendar.h

app_rtc_alarm_t

结构体定义如下:

表 123 app_rtc_alarm_t结构体成员
成员 描述 取值

uint8_t min

Calendar alarm分钟

取值范围:0 ~ 59

uint8_t hour

Calendar alarm小时

取值范围:0 ~ 23

uint8_t alarm_sel

Calendar alarm按周报警还是按月报警

取值范围:

  • CALENDAR_ALARM_SEL_DATE(按月为周期报警)

  • CALENDAR_ALARM_SEL_WEEKDAY(按周为周期报警)

uint16_t alarm_date_week_mask

Calendar alarm具体值,依赖于alarm_sel的值

  • 如果alarm_sel=CALENDAR_ALARM_SEL_DATE:

    取值范围:1 ~ 31

  • 如果alarm_sel=CALENDAR_ALARM_SEL_WEEKDAY

    取值为下面值的或操作:

    • CALENDAR_ALARM_WEEKDAY_SUN

    • CALENDAR_ALARM_WEEKDAY_MON

    • CALENDAR_ALARM_WEEKDAY_TUE

    • CALENDAR_ALARM_WEEKDAY_WED

    • CALENDAR_ALARM_WEEKDAY_THU

    • CALENDAR_ALARM_WEEKDAY_FRI

    • CALENDAR_ALARM_WEEKDAY_SAT

例如选择星期一和星期二进行报警,设置参数如下:

CALENDAR_ALARM_WEEKDAY_MON|CALENDAR_ALARM_WEEKDAY_TUE

详细信息请参考文件:
  • GR551x/GR5526/GR5x25:SDK_Folder\drivers\inc\hal\gr55xx_hal_calendar.h
  • GR533x:SDK_Folder\drivers\inc\hal\gr533x_hal_calendar.h
  • GR5405:SDK_Folder\hal_drv\include\hal_calendar.h

app_rtc_evt_t

结构体定义如下:

表 124 app_rtc_evt_t结构体成员
成员 描述 取值

app_rtc_evt_type_t type

RTC事件类型

该参数的取值可以是下列值中的任意一个:

  • APP_RTC_EVT_DATE_ALARM (RTC ALARM中断)

  • APP_RTC_EVT_TICK_ALARM (RTC TICK中断)

  • APP_RTC_EVT_OVERFLOW(RTC溢出中断)

详细信息请参考文件:SDK_Folder\drivers\inc\app_rtc.h

枚举

app_rtc_evt_type_t

枚举定义如下:

表 125 app_rtc_evt_type_t枚举成员
成员 描述

APP_RTC_EVT_DATE_ALARM = 0

RTC ALARM中断

APP_RTC_EVT_TICK_ALARM = 1

RTC TICK中断

APP_RTC_EVT_OVERFLOW = 2 RTC溢出中断

详细信息请参考文件:SDK_Folder\drivers\inc\app_rtc.h

app_rtc_state_t

枚举定义如下:

表 126 app_rtc_state_t枚举成员
成员 描述

APP_RTC_INVALID = 0

RTC不可用

APP_RTC_ACTIVITY = 1

RTC激活

详细信息请参考文件:SDK_Folder\drivers\src\app_rtc.c

接口函数

表 127 RTC驱动接口函数
API 芯片
GR551x GR5526 GR5x25 GR533x GR5405

app_rtc_init

Y

Y

Y

Y

Y

app_rtc_deinit

Y

Y

Y

Y

Y

app_rtc_init_time

Y

Y

Y

Y

Y

app_rtc_get_time

Y

Y

Y

Y

Y

app_rtc_setup_alarm

Y

Y

Y

Y

Y

app_rtc_setup_tick

Y

Y

Y

Y

Y

app_rtc_disable_event

Y

Y

Y

Y

Y

app_rtc_time_sync

N

Y

Y

Y

Y

app_rtc_init

表 128 app_rtc_init接口
函数原型

uint16_t app_rtc_init(app_rtc_evt_handler_t evt_handler)

功能说明

初始化RTC

输入参数

evt_handler:用户自己实现的中断回调函数

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

回调函数形式参照typedef void (*app_rtc_evt_handler_t)(app_rtc_evt_t *p_evt);

HAL层已经实现中断标志位的清理,用户不用关心中断标志的清理,回调函数根据返回事件类型进行相应的处理即可。

使用芯片内部低速时钟源时,该接口无意义。

app_rtc_deinit

表 129 app_rtc_deinit接口
函数原型

uint16_t app_rtc_deinit(void)

功能说明

反初始化RTC

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

使用芯片内部低速时钟源,该接口无意义

app_rtc_init_time

表 130 app_rtc_init_time接口
函数原型

uint16_t app_rtc_init_time(app_rtc_time_t *p_time)

功能说明

初始化RTC时间

输入参数

p_time:初始时间结构体

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_rtc_get_time

表 131 app_rtc_get_time接口
函数原型

uint16_t app_rtc_get_time(app_rtc_time_t *p_time)

功能说明

获取RTC时间

输入参数

p_time:存放时间的结构体

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_rtc_setup_alarm

表 182 app_rtc_setup_alarm接口
函数原型

uint16_t app_rtc_setup_alarm(app_rtc_alarm_t *p_alarm)

功能说明

设置RTC alarm中断

输入参数

p_alarm:Alarm中断的配置参数

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

使用芯片内部低速时钟源,该接口无意义

app_rtc_setup_tick

表 133 app_rtc_setup_tick接口
函数原型

uint16_t app_rtc_setup_tick(uint32_t interval)

功能说明

设置RTC TICK中断

输入参数

interval:RTC TICK值(单位:ms)

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

使用芯片内部低速时钟源,该接口无意义

app_rtc_disable_event

表 134 app_rtc_disable_event接口
函数原型

uint16_t app_rtc_disable_event(uint32_t disable_mode)

功能说明

禁用RTC中断

输入参数

disable_mode:可取值APP_RTC_ALARM_DISABLE_DATE、APP_RTC_ALARM_DISABLE_TICK、APP_RTC_ALARM_DISABLE_ALL

返回值

APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义

备注

app_rtc_time_sync

表 135 app_rtc_time_sync接口
函数原型

void app_rtc_time_sync(uint16_t SlowClockFreq)

功能说明

同步RTC时间

输入参数

SlowClockFreq:校准后的慢速时钟

返回值
备注 适用于GR5526、GR5x25、GR533x和GR5405

示例工程

RTC

示例工程通过RTC实现闹钟功能,工程目录:SDK_Folder\projects\peripheral\rtc\app_rtc

流程图

示例工程首先初始化RTC并注册回调函数,设置RTC时间,RTC开始计时,并通过接口获取当前的时间并打印,验证RTC已经正常计时。其次,设置闹钟,并启动RTC TICK中断,每10tick产生一次中断,每1000 tick打印日志,与此同时当到达闹钟定时时间8:01时,产生闹钟定时中断,并输出相应日志。

图 13 RTC示例工程流程

初始化参数

  1. 初始日期设置:2019年5月20日8点0分0秒
        app_rtc_time_t time;
    
        time.year = 19;
        time.mon  = 5;
        time.date = 20;
        time.hour = 8;
        time.min  = 0;
        time.sec  = 0;
        time.week = 0;
        app_rtc_init_time(&time);
    
  2. 设置alarm为每周的上午8点01分。此函数必须在每次设置系统时间后重新调用。代码如下:

        app_rtc_alarm_t alarm;
    
        alarm.alarm_sel = CALENDAR_ALARM_SEL_WEEKDAY;
        alarm.alarm_date_week_mask = 0xFF;
        alarm.hour = 8;
        alarm.min  = 1;
        app_rtc_setup_alarm(&alarm)
    • alarm_sel:选择按周或月报警,此处选择CALENDAR_ALARM_SEL_WEEKDAY(按周报警)。
    • alarm_date_week_mask:每周具体哪天或者几天报警,0xFF表示每周每一天都报警。

重要函数

  • 初始化RTC并注册回调函数
    app_rtc_init(app_rtc_evt_handler)
  • 设置初始时间

    app_rtc_init_time(&time)
  • 获取当前时间

    app_rtc_get_time(&time)
  • 设置闹钟

    app_rtc_setup_alarm(&alarm)
  • 设置RTC TICK中断

    app_rtc_setup_tick(10)

    每10 tick产生一次中断

测试验证

连接开发板到PC端,打开串口助手,连接串口,查看串口日志。App current time为获取当前时间并打印的日志,Tick alarm为RTC TICK中断打印的日志,设置闹钟8:01 am,在8:01 am时中断打印Date alarm。

每秒串口打印当前时间,并设置date alarm为8:01am:

[18:02:59.277] App current time: 05.20.19 Mon 08:00:01

[18:03:00.281] App current time: 05.20.19 Mon 08:00:02

[18:03:01.286] App current time: 05.20.19 Mon 08:00:03

[18:03:02.290] App current time: 05.20.19 Mon 08:00:04

[18:03:03.294] App current time: 05.20.19 Mon 08:00:05
Set an date alarm every day at 8.01 am.

设置tick定时,每计数1000 tick,打印一次当前时间:

Set an tick alarm every 10 ms.

[18:03:16.362] Tick alarm, 05.20.19 Mon 08:00:18, 100.

[18:03:17.366] Tick alarm, 05.20.19 Mon 08:00:19, 200.

[18:03:18.368] Tick alarm, 05.20.19 Mon 08:00:20, 300.

[18:03:19.373] Tick alarm, 05.20.19 Mon 08:00:21, 400.

定时闹钟时间到:

[18:03:57.519] Tick alarm, 05.20.19 Mon 08:00:59, 4200.

[18:03:58.331] Date alarm.

[18:03:58.503] Tick alarm, 05.20.19 Mon 08:01:00, 4300.

扫描关注

打开微信,使用“扫一扫”即可关注。