TuyaOS
HW TIMER 驱动

简要说明

timer 是微处理器中用来进行时间计量的片上外设,根据实际配置要求,通常有不同的定时精度,如16位,32位等,实际使用时通常需要配置的参数有,定时周期,计数方式,中断服务程序等。

Api描述

tkl_timer_init

OPERATE_RET tkl_timer_init(TUYA_TIMER_NUM_E timer_id, TUYA_TIMER_BASE_CFG_T *cfg);
  • 功能描述:
    • 通过端口号和基础配置初始化对应的timer实例,返回初始化结果 。
  • 参数:
    • timer_id: 端口号。
    • cfg: timer基础配置,包含定时方式,回调函数,回调函数参数 。

      ```c typedef struct { TKL_TIMER_MODE_E mode; TKL_TIMER_ISR_CB cb; VOID *args; } TUYA_TIMER_BASE_CFG_T; ```

TKL_TIMER_MODE_E:

名字 定义 备注
TKL_TIMER_MODE_ONCE 单次定时
TKL_TIMER_MODE_PERIOD 周期定时
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_timer_deinit

OPERATE_RET tkl_timer_deinit(TUYA_TIMER_NUM_E timer_id);
  • 功能描述:
    • timer实例反初始化。
    • 该接口会停止timer,并且释放imer相关的软硬件资源。
  • 参数:
    • timer_id: 端口号。
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_timer_start

OPERATE_RET tkl_timer_start(TUYA_TIMER_NUM_E timer_id, UINT_T us);
  • 功能描述:
    • 启动timer。
  • 参数:
    • timer_id: 端口号。
    • us: timer的定时间隔。
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_timer_stop

OPERATE_RET tkl_timer_stop(TKL_TIMER_PORT_E port);
  • 功能描述:
    • 停止timer。
  • 参数:
    • port: 端口号。
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_timer_get

OPERATE_RET tkl_timer_get(TKL_TIMER_PORT_E port, UINT_T *us);
  • 功能描述:
    • 获取timer定时间隔。
  • 参数:
    • port: 端口号。
    • us:定时间隔值,单位us,对应tkl_timer_start设置的值。
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

tkl_timer_get_current_value

OPERATE_RET tkl_timer_get_current_value(TUYA_TIMER_NUM_E timer_id, UINT_T *us);
  • 功能描述:
    • 获取timer当前计数值。
  • 参数:
    • timer_id: 端口号。
    • us:当前计数值,单位us
  • 返回值:
    • OPRT_OK 成功,其他请参考文件tuya_error_code.h。

示例

static VOID tkl_timer_isr_cb_fun(VOID *args)
{
PR_NOTICE("hw_timer test");
}
void tuya_timer_test(void)
{
OPERATE_RET ret;
UINT_T interval_us;
UINT_T get_us;
cfg.mode = TUYA_TIMER_MODE_PERIOD;
cfg.cb = tkl_timer_isr_cb_fun;
cfg.arg = NULL;
ret = tkl_timer_init(TUYA_TIMER_NUM_0, &cfg);
if (ret != OPRT_OK) {
//fail
return;
}
ret = tkl_timer_start(TUYA_TIMER_NUM_0, 1000);
if (ret != OPRT_OK) {
//fail
return;
}
ret = tkl_timer_stop(TUYA_TIMER_NUM_0);
if (ret != OPRT_OK) {
//fail
return;
}
ret = tkl_timer_get(TUYA_TIMER_NUM_0, &interval_us);
if (ret != OPRT_OK) {
//fail
return;
}
if(interval_us != 2000){
interval_us = 2000;
}
ret = tkl_timer_start(TUYA_TIMER_NUM_0, interval_us);
if (ret != OPRT_OK) {
//fail
return;
}
ret = tkl_timer_get_current_value(TUYA_TIMER_NUM_0, &get_us);
if (ret != OPRT_OK) {
//fail
return;
}
PR_DEBUG("current run time:%d us", get_us);
//uninitialize iic
ret = tkl_timer_deinit(TUYA_TIMER_NUM_0);
if (ret != 0) {
//failed
}
}
Definition: tuya_cloud_types.h:1240
VOID_T tkl_system_delay(UINT_T num_ms)
system delay
OPERATE_RET tkl_timer_start(TUYA_TIMER_NUM_E timer_id, UINT_T us)
timer start
OPERATE_RET tkl_timer_deinit(TUYA_TIMER_NUM_E timer_id)
timer deinit
OPERATE_RET tkl_timer_init(TUYA_TIMER_NUM_E timer_id, TUYA_TIMER_BASE_CFG_T *cfg)
timer init
OPERATE_RET tkl_timer_stop(TUYA_TIMER_NUM_E timer_id)
timer stop
OPERATE_RET tkl_timer_get(TUYA_TIMER_NUM_E timer_id, UINT_T *us)
timer get
OPERATE_RET tkl_timer_get_current_value(TUYA_TIMER_NUM_E timer_id, UINT_T *us)
current timer get