【求助】TLSR8258 ZIGBEE 中断接口可以自己创建吗?

Zigbee 子设备开发


Post Reply
bofuyanfa
Posts: 15

我想做一个定时器中断,但是发现zigbee sdk中没有中断入口irq_handler,怎么才能够做一个定时器中断

bofuyanfa
Posts: 15

Re: TLSR8258 ZIGBEE 中断接口可以自己创建吗?

EFR32MG21A020 TLSR8258

iot_man
Posts: 60

Re: TLSR8258 ZIGBEE 中断接口可以自己创建吗?

目前暂时没有提供硬件timer的封装接口,你可以先用原厂API来实现,后面会迭代增加硬件定时器接口
对于timer的使用可以参考: viewtopic.php?t=353

User avatar
心_远
Posts: 14

Re: TLSR8258 ZIGBEE 中断接口可以自己创建吗?

bofuyanfa 2022年 Nov 29日 10:33

我想做一个定时器中断,但是发现zigbee sdk中没有中断入口irq_handler,怎么才能够做一个定时器中断

可以使用软件定时器的接口, 使用方法如下:
1 .创建一个定时器, 调用

Code: Select all

 OPERATE_RET tal_sw_timer_create(TAL_TIMER_CB func, VOID_T *arg, TIMER_ID *timer_id); 

func :是定时器回调函数, 与硬件定时器的 irq_handler 功能相似。
arg :通常填NULL即可, 它是一个携带参数, 会传递给 func
timer_id : 创建的timer_id,是一个函数出参,需要应用层传入一个变量地址, 用来保存 timer_id。

2 .启动定时器,调用

Code: Select all

 OPERATE_RET tal_sw_timer_start(TIMER_ID timer_id, TIME_MS time_ms, TIMER_TYPE timer_type); 

timer_id:第一步创建定时器时产生的 timer_id;
time_ms:定时时间
timer_type:定时器类型,有循环定时器和单次定时器。

bofuyanfa
Posts: 15

Re: TLSR8258 ZIGBEE 中断接口可以自己创建吗?

我们这边的遥控器和电机信号都需要90us左右的定时器中断,我这边自己写了个irq_handler中断入口,发现只要我在自己的代码用这个中断入口,就无法搜到模块,我推测可能是sdk中封装了irq_handler中断入口,并且在中断中处理其他的程序,所以有冲突,有没有什么办法能注册一个定时器,或者有没有定时器中断入口。

bofuyanfa
Posts: 15

Re: TLSR8258 ZIGBEE 中断接口可以自己创建吗?

我看到 drv_timer.h 文件有 drv_hwTmr_init 和 drv_hwTmr_set 函数,但是我用了之后没有执行我想要的回调函数,可否给一个相关例程或者指导下相关API的使用方法?

iot_man
Posts: 60

Re: TLSR8258 ZIGBEE 中断接口可以自己创建吗?

对于:TLSR8258
#include "timer.h"
static s32 timer1_handler(void *args)
{
//todo: APP handle
return 0; //0代表继续装载80us,-1代表取消定时器,大于0的其他数代表下次定时器的微妙数
}
static void hardware_timer_init(void)
{
hwTmr_cancel(TIMER_IDX_1);
hwTmr_init(TIMER_IDX_1, TIMER_MODE_SCLK);
hwTmr_set(TIMER_IDX_1, 80, timer1_handler, NULL); //80us
}

bofuyanfa
Posts: 15

Re: 【求助】TLSR8258 ZIGBEE 中断接口可以自己创建吗?

你好,我用了你的程序之后发现定时器误差比较大,定时90us,但是实际会有120us,而且每个周期会有几个us的偏差,可能是因为用的系统定时器,有比较精确的方法吗?

iot_man
Posts: 60

Re: 【求助】TLSR8258 ZIGBEE 中断接口可以自己创建吗?

这个已经是最大精度了。我们使用精度可以精确到us的。你可以检查一下有没有其他耗时间的函数在这个回调函数里面。

Post Reply