DA1468X高分辨率计时器

了解更多常见问题解答教程

6个帖子/ 0新
最后一篇
Herrkaefer.
离线
最后一次露面:5天22小时前
加入:2017-12-16 15:38
DA1468X高分辨率计时器

嗨对话框,

我需要一个高分辨率定时器来记录两个GPIO事件之间经过的时间。错误<100微秒是必需的。

到目前为止我的探索:

1)Timer1精度(31.25微秒)应该可以。但是使用`os_get_tick_count()`我只能获得2ms间隔。

2)Timer1-> Captim_Timer_Val_Reg将使来自0到65535的值环,或约2ms间隔。所以我不能直接使用它来测量大于2ms的时间差。

3)“hw_timer1.h”中的一些函数。`hw_timer1_get_count`,`hw_timer1_get_value`似乎只是返回“timer1-> captim_timer_val_reg”

4)我还看到了“HW_TIMER1_GET_EVENT1_TRIGGER`HW_TIMER1_GET_EVENT1_GPIO”等功能。我不确定如何使用它们。

你能告诉我最好的方法吗?使用Timer1或其他计时器?任何文档或代码示例都非常有帮助。谢谢!

设备:
PM_DIALOG.
离线
最后一次露面:1小时39分钟前
职员
加入:2018-02-08 11:03
嗨Herrkaefer,

嗨Herrkaefer,

您可以使用Timer1才能捕获2个GPIO事件,但您无法达到超过2ms的间隔。请注意,Timer1用于Freertos Systick,如果它被中断,系统将不稳定或停止工作。Timer1是当DA1468X处于睡眠模式时保持活力的唯一计时器,它在睡眠时钟运行。为了捕获两个GPIO事件,您只能使用Timer1,但该期限最多可达2毫秒。

谢谢,PM_DIALOG.

Herrkaefer.
离线
最后一次露面:5天22小时前
加入:2017-12-16 15:38
感谢您的回复!

感谢您的回复!

对于“期间最多的2毫秒”,你是否意味着两个GPIO事件之间的时间差不应该大于2ms?或单个事件测量的错误是2ms?

我们的两个事件可以达到9毫秒差异,因此2磁形间隔是不够的:-(我认为我需要更普通的计时器。

我的应用程序永远不会进入睡眠模式,因此如果可用,我可以使用其他高价度计时器。

好消息是我可以继续看定时器,所以如果它溢出我会被注意到。您能否对我微秒时间函数的以下两个版本发表评论?(他们对我不适合,所以他们应该有问题。)

- 版本1:

静态内联uint32_t get_time_us(){
静态UINT32_T TIME_US = 0;
静态uint16_t last_count = 0,current_count;

current_count = timer1-> captim_timer_val_reg;

if(current_count> = last_count)
time_us + =(current_count - last_count)* 30;
别的
time_us + =((uint16_max - last_count)+ current_count)* 30;
last_count = current_count;

返回time_us;
}

- 版本2:Timer1具有Captim_Timer_hval_reg寄存器,HW_TIMER1_GET_VALUE()使用它。

静态内联uint32_t get_time_us(){
静态UINT32_T TIME_US = 0;
uint32_t count = hw_timer1_get_value();
time_us + = count * 30;
返回time_us;
}

是否有类似的工作演示,我可以用作参考?谢谢!

PM_DIALOG.
离线
最后一次露面:1小时39分钟前
职员
加入:2018-02-08 11:03
嗨Herrkaefer,

嗨Herrkaefer,

让我检查一下,我会尽快回复你。

谢谢,PM_DIALOG.

Herrkaefer.
离线
最后一次露面:5天22小时前
加入:2017-12-16 15:38
非常感谢!

非常感谢!

实际上我需要精确地测量一个GPIO引脚上的波形持续时间(几毫秒)。我试图使用Timer1的GPIO触发器和中断捕获两个触发器,一个用于HW_Timer1_Trigger_rising,一个用于HW_Timer1_trigger_falling。为此,我必须定义`dg_configuse_hw_timer1 1`和`dg_configuser_can_use_timer1 1`。但是,有编译“sys_power_mgr.cr”的错误。它似乎在sys_power_mgr.c需要中的函数需要`dg_configuser_can_use_timer1`为零。

你能告诉我这个原因,还是可以使用Timer1的GPIO事件捕获功能的工作演示?谢谢!

PM_DIALOG.
离线
最后一次露面:1小时39分钟前
职员
加入:2018-02-08 11:03
嗨Herrkaefer,

嗨Herrkaefer,

让我们为捕获过程提供更多的输入。您无法使用软件Timer0的使用捕获2(外部)事件,因为此计时器没有适当的硬件功能。您无法使用先前票证中所讨论的软件Timer2。唯一具有捕获功能的硬件的软件计时器是Timer1,但它是从RTOS使用的。为此,我会更正先前的语句,无法使用它来捕获功能。捕获两个事件的唯一方法是配置唤醒控制器并使用时间戳。因此,您可以将WKUP控制器配置为获取2个事件(EVT1,EVT2)触发,您可以使用以下方式使用时间戳:

  1. 软件Timer0在附加代码中所做的,以捕获EVT1和EV2并计算它们的差异。限制的是,系统应始终处于活动模式,因为在睡眠模式下,定时器将关闭。配置是正确的,您不会缺少任何时钟周期。

  1. 可以在睡眠模式下使用的OS_TIMER()但限制是非常低的粒度(2毫秒)

  1. RTC_Get()为了计算低功率时钟的数量并计算EVT1和EVT2之间的差异。它可以在睡眠中使用。

谢谢,PM_DIALOG.