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.

[参考译文] CC1352P:计时器调用回调的速度比预期快得多。

Guru**** 2587345 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1122104/cc1352p-timer-calling-callback-much-faster-than-expected

器件型号:CC1352P
Thread 中讨论的其他器件:SysConfig

我正在使用一 个定制板、它具有甲烷传感器、需要加热 n 秒才能获得准确的读数。 为此、我有一个运行1秒的计时器。 在回调 n 次后 、设置一个标志、读数可被视为有效读数。 我遇到的问题是、调用回调的速度比每1秒要快得多。 该计时是系统的关键部分。

该计时器在.syscfg 中设置为32位计时器。 我的理解是、32位计时器可以实现的最大时间仅超过89秒(2^32个周期/48MHz)、因此我不能完全确定问题是什么。 计时器周期远低于计时器的限制。

定时器初始化:

Timer_Params methaneTimerParams;
Timer_Params_init(&methaneTimerParams);

//Set the timer parameters
methaneTimerParams.period = 1000000;    //1 second period
methaneTimerParams.periodUnits = Timer_PERIOD_US;
methaneTimerParams.timerMode = Timer_CONTINUOUS_CALLBACK;
methaneTimerParams.timerCallback = HeaterTimeoutCb;

尝试对此进行调试时、我在 回调函数的开头放置了"uint32_t testCount = Timer_getCount (handle);"。 这种情况造成了巨大的不一致价值,从几百到数千万不等。 我希望这是一个一致的值、因为它是回调函数的第一行。

计时器回调:

void HeaterTimeoutCb
(
        Timer_Handle handle,
        int_fast16_t status
)
{
    uint32_t testCount = Timer_getCount(handle);
    timerSeconds.secondsWaited++;
    if (timerSeconds.secondsToWait <= timerSeconds.secondsWaited)
    {
        heaterWarmingComplete = true;
        Timer_stop(handle);
    }
}

此项目中有另一个计时器控制 LED 闪烁 、该计时器具有相同的确切参数、但其模式为 Timer_OneShot_callback。 该计时器按预期工作、每秒调用一次回调。 我在两个计时器之间交换了计时器外设、它们仍然具有相同的行为。

我不明白这两个计时器的行为为何如此不同、以及加热计时器为何不以正确的间隔调用它的回调。 导致此行为的原因可能是什么? Timer_Continuous_callback 模式是否会导致回调速度快于每秒一次、或者是否存在更深层次的问题?

Tim

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

    您好、Tim、

    SDK 中的 timerled 示例在连续回调模式下使用计时器。 因此、我不认为模式存在固有问题。 您是否可以在计时器回调中切换 GPIO 并使用逻辑分析仪进行捕获、而不是在调试模式下使用来捕获计数值? 这是为了消除调试器添加的延迟。

    您还能告诉我们您为计时器使用的中断优先级是多少? 这是在 SysConfig 中设置的。

    此致、

    SID  

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

    稍后在此处回复、但将断点放在回调中确实会导致问题。 我稍微更改了测试代码、以检查 回调中几个不同点的标志状态、然后在结束时使用单个断点查看所有数据、其运行方式符合预期。