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.

[参考译文] MSPM0G3507:尽管有 Timer_ERR_01 勘误表、但仍精确测量周期

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1589636/mspm0g3507-precisely-measuring-period-despite-timer_err_01-errata

器件型号: MSPM0G3507

我正在开发一个应用程序、需要精确测量非常快的传入脉冲序列(大约几十微秒)的周期。


在处理过程中、我遇到了 这里所述的“TIMER_ERR_01"。“。


这是否意味着计时器无法自动复位?


按照 timx_timer_mode_capture_duty_and_period 示例、我编写了以下内容:


uint32_t hw_freq_get_period ((GPTIMER_Regs *实例) 

  //请参阅 TIMER_ERR_01 勘误表。
  DL_TimerG_setTimerCount(实例,0);

  返回 DL_TimerG_getCaptureCompareValue ((GPTIMER_Regs *) 实例、DL_TIMER_CC_1_INDEX);
}


如果我向其输入一个稳定的方波、则会得到一致的结果、但如果在 setTimerCount 之前添加任何代码、则结果会略有不同。


在周期计数器不受固件执行影响的情况下、是否有办法实现此目的?

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

    您好、Michael:

    重新加载计时器计数器时、针对此问题的当前权变措施将受到影响。 您可以参考来减少这种影响:(假设我们使用向下计数模式,计数器加载值为 L )

    • 当捕获事件发生时(计数器为 C 此时)、理想情况下、我们希望此时通过硬件实现计数器重新加载、但正如中所述的勘误表 (SLAZ742D)、我们无法在硬件中同时捕获计数器并重新加载计数器。 所以我们需要在软件中重新加载计数器。
    • 到捕获事件后会有延时时间 (COUNTER = C ) 和软件重新加载计数器的时间 (counter = R )、因此当我们重新加载计时器计数器时、我们可以像那样重新加载计数器 L -(C-R) 。 这样、它与在时间捕获事件中加载计时器计数器和 L 的效果相同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    或者:根本不重新启动计数器。 相反、将加载值设置为–1【以便进行算术运算】、然后减去连续的捕获值。