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.

[参考译文] F28M36P63C2:16位计数器的 TimerLoadSet 值

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/663534/f28m36p63c2-timerloadset-value-for-16-bit-counters

器件型号:F28M36P63C2

我将产品上的一些计时器用于风扇转速计。 我使用拆分的16位捕捉计数器来配置定时器:


   TimerConfigure (TIMER0_BASE、TIMER_CFG_16_bit_PAIR|TIMER_CFG_A_CAP_COUNT|TIMER_CFG_B_CAP_COUNT);
   TimerConfigure (Timer1_base、timer_CFG_16_bit_pair|timer_CFG_A_CAP_COUNT);

然后、对于每个计时器和通道、我执行以下操作:

   TimerControlEvent (timerBase、timer、timer_event_POS_EDGE);     //在上升沿进行捕捉
   TimerLoadSet (timerBase、timer、0xFFFF);                                       //加载具有最大16位值的定时器

但是、如果我加载0xFFFF、计时器永远不会开始计数、即使当我知道风扇正在旋转并且 GPIO 正在接收事件时也是如此。 每个定时器 TimerValueGet ()始终为0xFFFF。 如果我将加载值减小到0xFFFE、一切都正常。 定时器开始递减计数、然后在定时器到达零时返回0xFFFE。 这些文档没有提到 TimerLoadSet 的有效范围。

我正在使用:

//$TI 发行版:F28M36x 支持库 v207美元

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

    Derek、

    感谢您联系 C2000 E2E。

    我认为问题是、默认情况下、定时器的"匹配"值为0xFFFF。  因此、当我们将起始值保留为0xFFFF 时、一旦启用计时器、它已经与目标值"匹配"、因此它不会计数。  当您将 START 设置为0xFFFE 时、这将不再为 true、因此它会按预期计数。  

    如果在启用计时器之前添加以下代码行、则计时器的运行方式应符合预期:

    TimerMatchSet (TIMERn_BASE、TIMERn、0x0001);//设置非复位值的匹配。 

    我在上面使用了"1"的值、但这可能是系统中用于事件触发的所需值。  当然、我们可以更改这个和默认计时器值、以便在 ISR 之前对所需的脉冲数进行计数、等等

    此致、

    Matthew

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

    Matthew、

    感谢您提供详细信息。 我只是将计时器用作计数器并轮询其值、而不是将其设置为使用匹配或 ISR。 是否有办法完全禁用匹配功能? 我认为 TimerConfigure()将计时器设置为*_CAP_COUNT 模式会禁用匹配功能。 但它显然不是。

    Derek

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Derek、
    根据您之前的描述、当0xFFFE 被用作初始值(匹配值不变)时、定时器是否会一直继续计数? 从文档中看、如果它看起来像它可能的那样、由于从未达到匹配、它不会停止和禁用 TnEN 位、而是滚动到0xFFFE 的初始值并继续。

    如果这是可以接受的、并且你只需要额外的 MSB 来进行计数、那么两个 TimerA/B 也有一个8位预分频器(GPTMTnILR)在捕获模式中激活。 您可以将预分频器的 MSB 设为"1"、然后定时器将计数65535、然后再回滚。

    另一个选项是按原样使用匹配值为0x0000和某些软件的 ISR 或轮询来复位计数器。 我认为第一个选项最适合您的需求、因为计数器永远不会停止/漏掉边沿。

    请告诉我这是否适合您。

    此致、
    Matthew