更新时间:2025-04-27 06:42:10下载pdf
Timer 是微处理器中用来进行时间计量的片上外设。根据实际配置要求,通常有不同的定时精度,如 16 位、32 位等,实际使用时通常需要配置的参数有定时周期、计数方式、中断服务程序等。
OPERATE_RET tkl_timer_init(TUYA_TIMER_NUM_E timer_id, TUYA_TIMER_BASE_CFG_T *cfg);
功能描述:
参数:
timer_id
:端口号
cfg
:Timer 基础配置,包含定时方式、回调函数、回调函数参数
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
OPERATE_RET tkl_timer_deinit(TUYA_TIMER_NUM_E timer_id);
timer_id
: 端口号OPRT_OK
:成功tuya_error_code.h
OPERATE_RET tkl_timer_start(TUYA_TIMER_NUM_E timer_id, UINT_T us);
功能描述:
参数:
timer_id
:端口号
us
:Timer 的定时间隔
返回值:
OPRT_OK
:成功tuya_error_code.h
OPERATE_RET tkl_timer_stop(TKL_TIMER_PORT_E port);
port
:端口号OPRT_OK
:成功tuya_error_code.h
OPERATE_RET tkl_timer_get(TKL_TIMER_PORT_E port, UINT_T *us);
port
:端口号us
:定时间隔值,单位 us,对应 tkl_timer_start
设置的值OPRT_OK
:成功tuya_error_code.h
OPERATE_RET tkl_timer_get_current_value(TUYA_TIMER_NUM_E timer_id, UINT_T *us);
timer_id
:端口号us
:当前计数值,单位 usOPRT_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;
TUYA_TIMER_BASE_CFG_T cfg;
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;
}
tkl_system_delay(5000);
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;
}
tkl_system_delay(1000);
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);
tkl_system_delay(5000);
//uninitialize Timer
ret = tkl_timer_deinit(TUYA_TIMER_NUM_0);
if (ret != 0) {
//failed
}
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈