This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1352R:如何重置计时器计数以及应使用哪个API?

Guru**** 2546020 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1102151/cc1352r-how-to-reset-timer-count-and-which-api-should-be-used

部件号:CC1352R

您好,

我需要测量GPIO上某些脉冲的持续时间,并且我正在使用中断以非正常模式启动计时器,然后我在循环中使用Timer_getCount()来验证脉冲宽度持续时间是否达到预期值。 但是,计时器启动和停止不会像我想的那样重新启动计时器计数,它们只是恢复并暂停计数。 我在cc13x2 sdk ti drivers timer.h API中找不到任何能够将计数设置回0的函数。(https://software-dl.ti.com/simplelink/esd/simplelink_cc13xx_cc26xx_sdk/6.10 sdk.api/exports 00.29 /docs/drivers/doxygen/html/_timer_8h.html)

我找到了一个类似的帖子,建议使用driverlib API来实现所需的效果。  (https://dev.ti.com/tirex/explore/content/simplelink_cc13x0_sdk_3_20_00_23/docs/driverlib_cc13xx_cc26xx/cc13x0/driverlib/group__timer__api.html)  

然而,这使我更加困惑。 我认为在使用TI-RTOS时,我们应该始终通过TI驱动程序API使用驱动程序,因为它们是线程安全的。

因此,我的问题是:

1 -我应该使用什么API以及何时使用这些API?

2-是否有更好的方法来实现测量GPIO脉冲的目标,以便我不需要将计时器重置为0?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    侧面的问题:您是否研究过TDC是否可用于您的用例?

    "是时候使用数字转换器了

    TDC外围设备是一种高精度时间到数字转换器,用于测量可配置的启动触发器和可配置的停止触发器之间的时间。'

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    感谢您的快速回复。

    不,我不知道该外设,但我一直在《技术参考手册》中查看它,它似乎适合脉冲测量,但在我的应用中,我不想等待从边缘到边缘的整个脉冲持续时间。 我希望能够通过最短脉冲高/低持续时间识别传入数据,即使在边缘过渡到达之前,我也看不到通过TDC实现这一点的方法。 这就是为什么正常计数器是理想的,在使用读取功能验证GPIO位状态的同时,我可以在任何给定时刻获取计数值。 我只需要一种方法来重置计数器,因为它可以更轻松地处理计数,而无需新变量来记录开始计数,或者需要使用时间戳(现在-开始)执行计算, 或者,甚至需要检查计数器变量是否已全部返回到开头,现在较新的计数比较旧的计数小。

    不管怎样,即使TDC能够做到这一点,我也找不到它的使用示例,资源浏览器实验室也没有提到它。 我更喜欢更快地实施。

    不过,我浏览了这里的其他帖子,找到了一些重置计数的可能想法,浏览了TI驱动程序计时器文件(timer.c,timer.h,timercc26xx.c,timercc26xx.h,gptimercc26xx.c和gptimercc26xx.h),我能够创建自己的“设置计数值”计时器函数,就像这样:

    #include <ti/drivers/timer/GPTimerCC26XX.h>
    #include <ti/drivers/timer/TimerCC26XX.h>
    #include <ti/drivers/timer/TimerSupport.h>
    
    void jdTimer_setCount(Timer_Handle handle, uint32_t value)
    {
        
        TimerCC26XX_Object const *object = handle->object;
        GPTimerCC26XX_Handle gptHandle = object->gptHandle;
        GPTimerCC26XX_HWAttrs const *hwAttrs = gptHandle->hwAttrs;
        uint32_t offset = 0; 
        HWREG(hwAttrs->baseAddr + offset + GPT_O_TAV) = value;
    }

    我不仅可以将计时器的计数值重置为0 ,还可以将其设置为任何值。  

    我已经对它进行了测试,它似乎可以工作,但我想知道在我扩展应用程序代码时是否会有任何影响。 另外,我不理解为什么TI驱动程序timer.h API不提供设置计数值的函数,它似乎是如此基本,并且它在以前/更早的计时器API中可用。

    您认为此解决方案/功能是否合适?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    只要您将计时器配置为32位计时器,您的代码就可以正常工作。 如果将其配置为16位,则还会有其他影响,您必须在方法中处理这些影响。 查看此参考手册片段(15.5 .1.20)


    如果您想了解有关TDC的更多信息,您可以按F1在传感器控制器工作室中找到有关TDC的示例。 甚至还有一个我认为适合您想要实现的使用案例列表。

    使用案例

    以下是支持的主要用例:

    • 测量单脉冲的宽度
      • 选择与启动和停止触发器相同的信号,极性相反
      • 选择停止触发忽略计数0
      • 使用异步启动
      • 时间要求:
      • 在启动触发器出现之前,信号必须处于空闲状态
      • 启动触发器和停止触发器之间的时间:292 ns或更高
      • 停止后触发信号必须处于空闲状态,持续时间为42 ns或更高
    • 测量连续信号(例如时钟信号)的N个周期,频率最高可达2.4 MHz
      • 选择与启动和停止触发器相同的信号,并具有相同的极性
      • 选择停止触发器忽略计数N
        • 停止触发器忽略计数必须为N而不是N - 1,因为停止信号在启动时激活
      • 使用同步启动
      • 时间要求:
      • 信号必须为高电平,时间为210 ns或更高
      • 信号必须低至210 ns或更高
    • 测量连续信号(例如时钟信号)的N个周期,频率最高可达24 MHz
      • 启用TDC预标定器,除法系数为16或64
      • 选择TDC预分压器作为启动和停止触发器
      • 选择停止触发器忽略计数N /"预分度因子"
        • 停止触发器忽略计数必须为N而不是N - 1,因为停止信号在启动时激活
      • 使用同步启动
      • 时间要求:
      • 信号上升边缘之间的时间:42 ns或更大
    • 测量从一个信号上的单边到另一个信号上的非边的时间
    • 选择不同的信号作为启动和停止触发器
    • 选择停止触发器忽略计数N - 1
    • 使用异步或同步启动
    • 时间要求:
    • 对于异步启动:启动触发信号必须处于空闲状态,然后才会发生启动触发
    • 对于同步启动:启动触发信号在发生以下情况之前必须处于空闲状态:126 ns或更高
    • 启动触发信号必须处于激活状态:42 ns或更高
    • 启动时,停止触发信号必须处于空闲状态,直至:启动触发发生后168 ns或更高
    • 停止触发信号必须激活:42 ns或更高
    • 对于N > 1,停止触发信号必须在以下时间的停止触发之间处于空闲状态:168 ns或更高

    该解决方案的优点是它将与您在M4代码上运行的实际应用程序代码并行运行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Arthur:

    非常感谢您对这两个主题的详细回答。  

    您提到一个好的方面,传感器控制器并行运行是一个很大的优势,这样主应用程序就不会在时间和处理方面受到如此负面的影响。  

    感谢您将这些示例提请我注意,我不知道它们在哪里。