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:FreeRTOS 和 BLE 低功耗情况下的计时器中断

Guru**** 2589265 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1379992/cc2340r5-timer-interrupt-with-freertos-and-ble-low-power

器件型号:CC2340R5

工具与软件:

您好!

我正在开发一个代码、希望在定义的间隔上执行特定任务。 这意味着我需要一个同样适用于低功耗状态的计时器中断。 当任务未运行时、器件将进入低功耗状态。 有人可以帮我解决这个问题吗?

。 我使用的是数据流代码示例。 除此之外、我想在每个定义的时间间隔内切换 LED、以显示案例中的器件状态。 这项任务的方法是什么。 我认为计时器中断可行、但 欢迎大家提出其他更好的建议。

谢谢
Bhavik

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

    您好、Bhavik、

    请参阅 BLE5-Stack 用户指南的"计时器"部分。  我建议使用 ClockP 模块、因为它可以通过待机模式提供、并且包括回调操作。  此 SLA 中甚至有一个使用示例

    此致、
    Ryan

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

    Ryan、您好!

    感谢您的参与。 老实说、这非常令人困惑且难以理解。 请允许我提出要求、以便获得适当的建议。

    我正在使用数据流代码示例、其中集成了一个传感器、我希望从该传感器获取每隔 x 分钟的数据并通过 BLE 发送数据。

    如何 通过考虑低功耗来实现这一点。

    仅供参考、页面上的计算器不工作、也未提供公式。


    谢谢
    Bhavik

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用数据流代码示例、其中我集成了一个传感器、希望从该传感器获取每 x 分钟的数据并通过 BLE 发送数据。

    如何 通过考虑低功耗实现这一点。

    如果您在低功耗计时器之外寻求建议、请发布新的 E2E 问题、原始问题已得到解答。  您应该执行初始开发评估并针对遇到的问题提供具体问题。

    仅供参考页上的计算器不工作、也未给出公式。

    同意、此处是 ClockP 文档 和其他 BLE SLA

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="114053" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1379992/cc2340r5-timer-interrupt-with-freertos-and-ble-low-power/5282408 #5282408"]

    如果您在低功耗计时器之外寻求建议、请发布新的 E2E 问题、原始问题已得到解答。  您应该执行初始开发评估并针对遇到的问题提供具体问题。

    [报价]

    我认为它仅用于低功耗计时器、因为最终需要计时器中断、而且因为该时间 MCU 可以处于任何状态、这意味着也需要 LP 计时器。

    我正在使用数据流代码示例、其中我集成了一个传感器、希望从该传感器获取每 x 分钟的数据并通过 BLE 发送数据。

    如何 通过考虑低功耗实现这一点。

    此信息旨在让您了解我所寻找的正确方案、以及您可以如何在此方面提供帮助。


    同意、此处提供 ClockP 文档 和其他 BLE SLA

    在 BLE SLA 页面计算器中、会隐藏不起作用的值、并尝试报告页面上的问题。

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

    如果您在 开发过程中实施 ClockP 时遇到任何问题、请告诉我。

    此致、
    Ryan

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

    您好、Ryan、
    我尝试了 此 SLA 、但它无法正常工作。  

    ClockP_start (clockHandle);我必须在哪里调用? 

    即使我无法在 app_peripheral.c 外部调用该函数、也需要一点帮助。

    谢谢
    Bhavik

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

    您能否详细介绍在尝试编译工程时到底不起作用的方面、例如控制台编译错误?  您是否在从中调用 ClockP 函数的文件中添加了正确的 include?

    #include <ti/drivers/dpl/ClockP.h>

    这应该就是你所需要的。

    此致、
    Ryan

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

    是的、库文件和路径是正确的。

    我使用 data_stream 代码示例进行测试。

    在以下代码添加的 app_main.c 文件起始处。

    #include <ti/drivers/dpl/ClockP.h>
    #include <ti/bleapp/ble_app_util/inc/bleapputil_internal.h>
    
    #define SP_PERIODIC_EVT_PERIOD               5000
    #define CLOCK_MS                  2000
    #define auto_read_time 5 
    
    /* For Timer Interrupt  */
    static ClockP_Struct clkPeriodic;
    ClockP_Params clockpParams;
    ClockP_Handle clockHandle;
    char t_led = 0;
    char spend_ms_counter = 0;
    /* For Timer Interrupt  */

    将上述内容 添加到 void appMain (void)函数的下面

    void Peripheral_AppEventHandler()
    {
        spend_ms_counter++;
        if(spend_ms_counter == auto_read_time)
        {
            GPIO_write( CONFIG_GPIO_LED_BLUE, !t_led );
            t_led = !t_led;
            spend_ms_counter = 0;
        }
    }



    在 void appMain (void)中的 app_main.c 中  BLEAppUtil_init ()函数之前、我添加了以下代码。

       /* For Timer Interrupt  */
                // Setup parameters.
                 ClockP_Params_init(&clockpParams);
    
                 // Convert clockDuration in milliseconds to ticks.
                 uint64_t clockTicks = SP_PERIODIC_EVT_PERIOD * (CLOCK_MS/ 1);
                 // If period is 0, this is a one-shot timer. If not 0, the it’s a periodic clock.
                 clockpParams.period = 1;  //clockTicks;
    
                 // Starts immediately after construction if true, otherwise wait for a call
                 // to start.
                 clockpParams.startFlag = true;
                 clockpParams.arg = (uintptr_t)Peripheral_AppEventHandler;
    
                 // Initialize clock instance.
                 clockHandle = ClockP_construct(&clkPeriodic, (void *)BLEAppUtil_invokeFunctionNoData, clockTicks, &clockpParams);
                 /* For Timer Interrupt  */
        /* For Timer Interrupt  */

    预期的行为是每10秒切换一次 LED。 但它不起作用。 您能检查并帮助解决方案吗?


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

    在建立堆栈任务后、对主代码循环在 bleapputil_task.c 和 BLE3091内执行此操作 Util_Task。  然后提供更多的调试信息、例如、clockHandle 返回 NULL 或 VALID、并且你是否输入事件处理程序回调?

    我建议您创建一个新的 E2E 主题、以便 BLE 应用专家可以进一步为您提供帮助。

    此致、
    Ryan