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.

[参考译文] CC2340R5:我想以60Hz 的频率进行处理

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1386046/cc2340r5-i-want-to-process-at-60hz

器件型号:CC2340R5

工具与软件:

我正在 CC2340R5上使用 FreeRTOS。
我想以60Hz 的频率尽可能准确地进行处理。
但是、由于 xTaskDelayUntil 函数只能以毫秒为单位指定、因此将会有轻微的偏差。
我如何以60Hz 的频率尽可能准确地进行处理?

#define WAIT_MS (16)

void *mainThread(void *arg0)
{
    MyInitialize();

    TickType_t previousWakeTime;
    previousWakeTime = xTaskGetTickCount();
    while (1)
    {
        if (xTaskDelayUntil(&previousWakeTime, WAIT_MS) != pdTRUE)
        {
        }

        MyProcess();
    }
}

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

    尊敬的 Manabu:

    我建议使用 CC240R5的计时器之一、我认为 LGPT 计时器 最适合您的用例。 有关更多信息、请查看 API 文档。

    您还可以查看 用户指南中的"计时器"部分、以获取所有可用计时器的详细列表。

    此致、
    Tanguy

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

    感谢您的答复。

    说明中没提到、但想在不处理的情况下进入待机模式。
    抱歉。

    根据"定时器"部分的解释、它看起来像"时钟 DPL (ClockP 模块?)"。 SAR 转换器。
    我不知道它是否可行、因为没有太多示例代码、但我来试一下。

    此致、

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

    SemaphoreP 创建的时钟架构。
    已确认 ClockP 进入待机模式。

    [链接1]

    但是、我不知道 SemaphoreP 是否会进入待机模式。
    注册 Power_idleFunc ()作为信标回调是否会将器件置于待机模式?

    [Link2][Link3]

    // software-dl.ti.com/.../_semaphore_p_8h.html
    // software-dl.ti.com/.../_clock_p_8h.html
    
    SemaphoreP_Params g_PeriodicSemaphoreParams;
    SemaphoreP_Handle g_PeriodicSemaphoreHandle;
    ClockP_Params g_PeriodicParams;
    ClockP_Handle g_PeriodicHandle;
    
    void PeriodicCallback(uintptr_t arg)
    {
        SemaphoreP_post(g_PeriodicSemaphoreHandle);
    }
    
    bool PeriodicInitialize()
    {
        SemaphoreP_Params_init(&g_PeriodicSemaphoreParams);
        g_PeriodicSemaphoreParams.mode = SemaphoreP_Mode_BINARY;
        g_PeriodicSemaphoreParams.callback = Power_idleFunc;
        g_PeriodicSemaphoreHandle = SemaphoreP_create(0, &g_PeriodicSemaphoreParams);
        if (g_PeriodicSemaphoreHandle == NULL)
        {
            return false;
        }
    
        ClockP_Params_init(&g_PeriodicParams);
        g_PeriodicParams.period = 16666;
        g_PeriodicParams.startFlag = true;
        g_PeriodicParams.arg = (uintptr_t)NULL;
        g_PeriodicHandle = ClockP_create(PeriodicCallback, 0, &g_PeriodicParams);
        if (g_PeriodicHandle == NULL)
        {
            return false;
        }
    
        return true;
    }
    
    void *mainThread(void *arg0)
    {
        MyInitialize();
        PeriodicInitialize();
    
        while (1)
        {
            SemaphoreP_pend(g_PeriodicSemaphoreHandle, SemaphoreP_WAIT_FOREVER);
            MyProcess();
        }
    }
    

    此致、

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

    尊敬的  Manabu:

    信标将把手交还给 RTOS 调度程序、您应返回到待机模式、您不必为此进行回调。

    此致、
    Tanguy

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

    感谢您的答复。

    我没有与 Energytrace 兼容的调试器、因此无法测量电流、但我要连接电池、看看会在一段时间内出现什么情况。
    谢谢!

    此致、