CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
文档中心 > GR5xx APP驱动用户手册/ APP驱动接口/ APP DUAL_TIM驱动 Copy URL

APP DUAL_TIM驱动

结构体

app_dual_tim_params_t

结构体定义如下:

表 102 app_dual_tim_params_t结构体成员
成员 描述 取值

app_dual_tim_id_t id

使用的Dual Timer模块ID

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

  • APP_DUAL_TIM_ID_0(TIMER0)
  • APP_DUAL_TIM_ID_1(TIMER1)

dual_timer_init_t init

Dual Timer的初始化配置

参考dual_timer_init_t结构体

dual_tim_env_t dual_tim_env

仅用于记录初始化设备的句柄、相关参数和信号量等,不需要配置

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

dual_timer_init_t

结构体定义如下:

表 103 dual_timer_init_t结构体成员
成员 描述 取值

uint32_t prescaler

预分频系数

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

  • DUAL_TIMER_PRESCALER_DIV0(时钟除以1)
  • DUAL_TIMER_PRESCALER_DIV16(时钟除以16)
  • DUAL_TIMER_PRESCALER_DIV256(时钟除以256)

uint32_t counter_mode

计数模式

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

  • DUAL_TIMER_COUNTERMODE_LOOP(循环计数模式)
  • DUAL_TIMER_COUNTERMODE_ONESHOT(单次计数模式)

uint32_t auto_reload

自动装载值

自动装载值仅表示定时器的倒计时数。如果要配置特定的持续时间(例如,µs、ms或s),则需要使用以下公式:



其中PRE代表预分频系数,SystemCoreClock为系统时钟频率,RELOAD指自动装载值,Expect_time代表换算的时间,单位:s,取值范围:0 ~ 0xFFFFFFFF。

当自动装载值配置为0时,不会产生计数完成事件中断。

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

枚举

app_dual_tim_id_t

枚举定义如下:

表 104 app_dual_tim_id_t枚举成员
成员 描述

APP_DUAL_TIM_ID_0 = 0

DUAL TIMER模块0

APP_DUAL_TIM_ID_1 = 1

DUAL TIMER模块1

APP_DUAL_TIM_ID_MAX = 2

DUAL TIMER模块总数,用作参数检测

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

app_dual_tim_evt_t

枚举定义如下:

表 105 app_dual_tim_evt_t枚举成员
成员 描述

APP_DUAL_TIM_EVT_ERROR = 0

DUAL TIMER错误事件

APP_DUAL_TIM_EVT_DONE = 1

DUAL TIMER计数完成事件

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

app_dual_tim_state_t

枚举定义如下:

表 106 app_dual_tim_state_t枚举成员
成员 描述

APP_DUAL_TIM_INVALID = 0

DUAL TIMER不可用

APP_DUAL_TIM_ACTIVITY

DUAL TIMER激活

APP_DUAL_TIM_SLEEP

DUAL TIMER睡眠

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

接口函数

表 107 DUAL_TIMER驱动接口函数
API 芯片
GR551x GR5526 GR5x25 GR533x GR5405

app_dual_tim_init

Y

Y

Y Y Y

app_dual_tim_deinit

Y

Y

Y Y Y

app_dual_tim_start

Y

Y

Y Y Y

app_dual_tim_stop

Y

Y

Y Y Y

app_dual_tim_set_params

Y

Y

Y Y Y

app_dual_tim_set_background_reload

Y

Y

Y Y Y

app_dual_tim_get_handle

Y

Y

Y Y Y
app_dual_tim_set_onetime_reload N N N Y Y
app_dual_tim_io_crtl_config N N N Y Y
app_dual_tim_set_period_count N N N Y Y

app_dual_tim_init

表 108 app_dual_tim_init接口
函数原型

uint16_t app_dual_tim_init(app_dual_tim_params_t *p_params, app_dual_tim_evt_handler_t evt_handler)

功能说明

初始化DUAL TIMER

输入参数
  • p_params:初始化参数的结构体指针

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

返回值

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

备注

回调函数形式参照typedef void (*app_dual_tim_evt_handler_t)(app_dual_tim_evt_t *p_evt);

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

app_dual_tim_deinit

表 109 app_dual_tim_deinit接口
函数原型

uint16_t app_dual_tim_deinit(app_dual_tim_id_t id)

功能说明

反初始化DUAL TIMER

输入参数

id:DUAL TIMER模块ID

返回值

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

备注

app_dual_tim_start

表 110 app_dual_tim_start接口
函数原型

uint16_t app_dual_tim_start(app_dual_tim_id_t id)

功能说明

开启DUAL TIMER,使能中断并开始向下计数

输入参数

id:DUAL TIMER模块ID

返回值

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

备注

app_dual_tim_stop

表 111 app_dual_tim_stop接口
函数原型

uint16_t app_dual_tim_stop(app_dual_tim_id_t id)

功能说明

关闭DUAL TIMER,停止计数

输入参数

id:DUAL TIMER模块ID

返回值

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

备注

app_dual_tim_set_params

表 112 app_dual_tim_set_params接口
函数原型

uint16_t app_dual_tim_set_params(app_dual_tim_params_t *p_params, app_dual_tim_id_t id)

功能说明

运行过程中修改DUAL TIMER参数

输入参数
  • id:DUAL TIMER模块ID

  • p_params:需要修改参数的结构体指针

返回值

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

备注

app_dual_tim_set_background_reload

表 113 app_dual_tim_set_background_reload接口
函数原型

uint16_t app_dual_tim_set_background_reload(app_dual_tim_id_t id, uint32_t reload_value)

功能说明

设置自动装载值(下一周期生效)

输入参数
  • id:DUAL TIMER模块ID

  • reload_value:自动装载值

返回值

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

备注

app_dual_tim_get_handle

表 114 app_dual_tim_get_handle接口
函数原型

dual_timer_handle_t *app_dual_tim_get_handle(app_dual_tim_id_t id)

功能说明

获取DUAL TIMER句柄

输入参数

id:DUAL TIMER模块ID

返回值
Timer句柄,详见:
  • GR551x/GR5526/GR5x25:SDK_Folder\drivers\inc\hal\gr55xx_hal_dual_tim.h
  • GR533x:SDK_Folder\drivers\inc\hal\gr533x_hal_dual_tim.h
  • GR5405:SDK_Folder\hal_drv\include\hal_dual_tim.h
备注

app_dual_tim_set_onetime_reload

表 115 app_dual_tim_set_onetime_reload接口
函数原型

uint16_t app_dual_tim_set_onetime_reload(app_dual_tim_id_t id, uint32_t reload_value)

功能说明

设置一次性装载值

输入参数
  • id:Dual Timer模块ID
  • reload_value:自动装载值
返回值

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

备注
  • 一次性重载值仅在下一个周期生效;它比设置自动装载值(下一周期生效)具有更高的优先级。
  • 仅适用于GR533x、GR5405

app_dual_tim_io_crtl_config

表 116 app_dual_tim_io_crtl_config接口
函数原型 uint16_t app_dual_tim_io_crtl_config(app_dual_tim_params_t *p_params, app_dual_tim_id_t id, app_dual_tim_io_crtl_params_t *io_crtl_params)
功能说明

配置Dual Timer I/O控制功能

输入参数
  • p_params:初始化参数结构体指针
  • id:DUAL TIMER模块ID
  • io_crtl_params:I/O控制参数(参考代码中的app_dual_tim_io_crtl_params_t)
返回值

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

备注
  • 该函数调用必须在app_dual_tim_init之后
  • 重新配置IO控制需要重新初始化Dual Timer
  • 仅适用于GR533x、GR5405

app_dual_tim_set_period_count

表 117 app_dual_tim_set_period_count接口
函数原型 uint16_t app_dual_tim_set_period_count(app_dual_tim_id_t id, uint32_t count_value)
功能说明

设置周期数功能

输入参数
  • id:DUAL TIMER模块ID
  • count_value:周期数值(需大于1)
返回值

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

备注
  • 该函数仅在带I/O控制的周期/循环模式下可用;函数调用必须在app_dual_tim_io_crtl_config之后
  • 该函数将强制开启停止事件中断
  • 如果当前计数值不是初始的周期值,可能会导致第一个周期缩短
  • 仅适用于GR533x、GR5405

示例工程

Dual Timer

示例工程运用Dual Timer以中断方式实现定时打印程序中相关信息。Dual Timer0处于循环模式,第一个周期为1s,随后每5s产生一次中断,串口打印每次中断;Dual Timer1处于一次性模式,中断周期每次延长1s,中断程序将在15s停止,Dual Timer0和Dual Timer1停止计时。工程目录:SDK_Folder\projects\peripheral\dual_tim\app_dual_tim

流程图

图 12 DUAL TIMER定时功能实现流程

初始化参数

以Dual Timer0为例,Dual Timer1类似。

#define DEFAULT_AUTO_RELOAD  63999999
#define TIMER_MS(X) (SystemCoreClock / 1000 *(X) - 1)

app_dual_tim_params_t p_params_tim0 = {
    .id = APP_DUAL_TIM_ID_0,
    .init = {
        .prescaler    = DUAL_TIMER_PRESCALER_DIV0,
        .counter_mode = DUAL_TIMER_COUNTERMODE_LOOP,
        .auto_reload  = DEFAULT_AUTO_RELOAD,
    },
};
  • id:Dual Timer0模块ID选择APP_DUAL_TIM_ID_0
  • init.prescaler:预分频系数DUAL_TIMER_PRESCALER_DIV0,时钟除以1
  • init.counter_mode:采用循环模式DUAL_TIMER_COUNTERMODE_LOOP
  • init.auto_reload:自动装载值DEFAULT_AUTO_RELOAD,默认63999999

重要函数

  • 初始化Dual Timer函数

    app_dual_tim_init(&p_params_tim0, app_dual_tim0_event_handler)
  • 开启计数

    app_dual_tim_start(APP_DUAL_TIM_ID_0)
  • 设置自动装载值

    app_dual_tim_set_background_reload(APP_DUAL_TIM_ID_0, TIMER_MS(5000))
  • 重新设置计数参数

    app_dual_tim_set_params(&p_params_tim1, APP_DUAL_TIM_ID_1)
  • 停止计数

    app_dual_tim_stop(APP_DUAL_TIM_ID_0)

测试验证

连接开发板到PC端,打开串口助手,连接串口,查看串口日志。DUAL TIMER0 在1s时打印日志,然后每5s打印一次日志,DUAL TIMER1 在1s、3s、6s、10s和15s时打印日志,DUAL TIMER0 和DUAL TIMER1在15s停止计数。

DUAL TIMER0 and DUAL TIMER1 start

This is 0th call DUAL TIMER0.

  This is 0th call DUAL TIMER1.

  This is 1th call DUAL TIMER1.

This is 1th call DUAL TIMER0.

  This is 2th call DUAL TIMER1.

  This is 3th call DUAL TIMER1.

This is 2th call DUAL TIMER0.

  This is 4th call DUAL TIMER1.

This example demo end.

扫描关注

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