DA1468x高分辨率定时器

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
6个员额/0个新员额
最后一篇文章
赫尔卡弗
离线
最后一次见到:1个月2周前
加入:2017-12-16 15:38
DA1468x高分辨率定时器

嗨,对话,

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

我迄今为止的探索:

1) 计时器1精度(31.25微秒)应正常。但是使用'OS_GET_TICK_COUNT()'我只能得到2毫秒的间隔。

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

3) “hw\u timer1.h”中的一些函数,例如“hw\u timer1\u get\u count”,“hw\u timer1\u get\u value”似乎只是返回“timer1->CAPTIM\u TIMER\u VAL\u REG”

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

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

设备:
PM_对话框
离线
最后一次见到:2小时29分钟前
工作人员
加入:2018-02-08 11:03
你好,herrkaefer,

你好,herrkaefer,

您可以使用timer1来捕获2个gpio事件,但不能实现超过2ms的间隔。请注意,定时器1用于FreeRTOS systick,如果系统中断,系统将不稳定或停止工作。当DA1468x处于睡眠模式且在睡眠时钟下工作时,计时器1是唯一保持活动状态的计时器。对于捕获两个GPIO事件,您可以只使用计时器1,但时间段最多为2毫秒。

谢谢,下午好

赫尔卡弗
离线
最后一次见到:1个月2周前
加入:2017-12-16 15:38
谢谢你的回复!

谢谢你的回复!

对于“周期最长为2毫秒”,您的意思是两个GPIO事件之间的时间差不应大于2毫秒吗?或者单次测量的误差为2ms?

我们的两个事件可能相差9毫秒,所以2毫秒的间隔是不够的:-(我想我需要一个更通用的计时器。

我的应用程序从不进入睡眠模式,所以我可以使用其他高频定时器(如果可用)。

好消息是我可以一直看计时器,这样如果它溢出,我就可以被注意到。请您对我的微秒时间函数的以下两个版本发表意见好吗(他们不适合我,所以他们应该有问题。)

-第1版:

静态内联uint32\u t get\u time\u us(){
静态uint32时间=0;
静态uint16上次计数=0,当前计数;

当前计数=定时器1->CAPTIM\u TIMER\u VAL\u REG;

如果(当前计数>=上次计数)
时间=(当前计数-上次计数)*30;
其他的
时间_us+=((UINT16 _MAX-上次_计数)+当前_计数)*30;
上次计数=当前计数;

返回时间;
}

-版本2:Timer1有一个CAPTIM\u TIMER\u HVAL\u REG寄存器,hw\u Timer1\u get\u value()使用它。

静态内联uint32\u t get\u time\u us(){
静态uint32时间=0;
uint32_t count=hw_timer1_get_value();
时间=计数*30;
返回时间;
}

有没有类似于我的工作演示可以作为参考?谢谢

PM_对话框
离线
最后一次见到:2小时29分钟前
工作人员
加入:2018-02-08 11:03
你好,herrkaefer,

你好,herrkaefer,

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

谢谢,下午好

赫尔卡弗
离线
最后一次见到:1个月2周前
加入:2017-12-16 15:38
非常感谢!

非常感谢!

实际上,我需要精确地测量一个GPIO引脚上的波形持续时间(几毫秒)。我尝试使用Timer1的GPIO触发器和中断来捕获两个触发器,一个用于HW_Timer1_触发器上升,一个用于HW_Timer1_触发器下降。为此,我必须定义'dg_configUSE_HW_timer11'和'dg_configUSER_CAN_USE_timer11'。但是,“sys\u power\u mgr.c”的编译错误。似乎sys\u power\u mgr.c中的函数要求“dg\u configUSER\u CAN\u USE\u TIMER1”为零。

你能告诉我原因吗,或者一个可以使用timer1的GPIO事件捕获功能的工作演示?谢谢

PM_对话框
离线
最后一次见到:2小时29分钟前
工作人员
加入:2018-02-08 11:03
你好,herrkaefer,

你好,herrkaefer,

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

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

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

  1. rtc_get()以计算低功耗时钟的数量并计算EVT1和EVT2之间的差异。当然,它可以在睡眠中使用。

谢谢,下午好