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.

[参考译文] CC2651R3SIPA:PWM 在罕见情况下卡在生成信号

Guru**** 2587365 points
Other Parts Discussed in Thread: CC2651R3SIPA, LP-CC2651R3SIPA

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1264745/cc2651r3sipa-pwm-getting-stuck-generating-signal-in-rare-occassions

器件型号:CC2651R3SIPA

你好

我在定制板中有一个 CC2651R3SIPA、带有 SMD 蜂鸣器(2种型号、一种是无品牌型号、另一种是 KLJ9025-3627)和一个 VCLL4040 I2C 传感器。  

我正在使用 SDK 7.10.1.24、并已在 simple_peripheral 示例的基础上开发该项目。 我还使用带有 CC2651R3SIPA 的定制板、该板使用修改后的 simple_central 并通过 BLE 连接到该板(我将其称为中央和外设、以简化读取)。

在这个级别中、我处理要为蜂鸣器生成的声音的 PWM 控制、只需发出一声微弱  的蜂鸣声、蜂鸣声持续时间较短或较长(250毫秒和600毫秒)。 在99%的时间内这可以正常工作、但在某些情况下 、PWM 发生器会卡住、从而发出无限期的蜂鸣声(实际结束时间未经过测试、但程序没有响应、因此在该状态下很可能冻结)。

电路板的工作原理:

1.中央的固件定期检查外围设备,并在检测到外围设备后连接到外围设备。

2.外围设备启动时不通告 BLE。 当  首次触发 VCNTL4040 (接近传感器)中断时、它可以连接到并发出短暂的蜂鸣声。

3.一旦中心设备连接到外围设备,外围设备就会发出两声短蜂鸣声。

4.在一定数量的不活动(在尝试查找错误期间、时间似乎不是一个因素、因此 uint32_t 溢出来计算时间、如下所示: (uint32_t)(Clock_getTicks ()* Clock_tickPeriod / 1000)不会使外设中断)、外设被置于较低功耗模式。 目前这个软件还在开发中、因此只需要完成以下工作:

- VCNL4040设置降低,所以它消耗较少,以及速率降低,所以它不会捕获太多的信息。

-已禁用间隙调整

-用于执行任务的周期性时钟被停止。

-一行 Power_Sleep (PowerCC26XX_STANDBY);用于 simple_peripheral 作为默认限制和与电源管理相关的其他设置。

5.当外设处于这种低功耗模式时,可以触发它回到正常状态,回到#2。

这在大多数时间都是有效的,没有问题,如标题中所指定,但它有时在执行启动蜂鸣音时失败,这会  无限期地卡住。

   PWM 无限期生成之前、不应发生或发生什么情况:

-以相对相同的时间开始发出两声蜂鸣声(在同一个 PWM 上)。

-在 PWM 停止执行前发出哔哔声并启用 Power_sleep、因此不正确地关闭 PWM 通道。

我已经测试了很多次,我找不到一个清晰的模式,因为它只发生 很少。

我的下一个想法是、电源管理可能正在对我不知道的东西进行初始化。

我不知道我能提供什么更多的细节,因为它似乎是具体的和难以重现,它感觉有些随机,但可以自由地问,我会看到我可以提供什么。

PD。 我只能从无线论坛中进行选择、尽管我不相信这是无线问题、但可以随意移动。

您好!

艾伯特

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

    尊敬的 Albert:

    我有一些想法可能会导致这个问题。

    进入待机模式可能会影响您的系统。 您能否尝试禁止进入待机模式以查看这是否有效

    我们的 TRM 中介绍了电源模式

    要确定这是不是根本原因、还可以采用以下另一种方法:  

    在进入睡眠模式之前复位引脚。

    在离开睡眠模式时设置该位。

    测量 此引脚和 PWM 引脚、以查看进入睡眠模式的时序是否会影响 PWM 功能:

    SIMPLELINK-2-4GHz-design-reviews 设计工具| TI.com

    此外、由于您正在使用定制电路板、因此我建议您申请原理图审阅。

    此致、

    亚历克斯

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

    经过一个小时的测试、两对运行模糊节能实现的中央外设板以及另一对没有  Power_sleep (PowerCC26XX_STANDBY)线的主板似乎是导致该问题的原因、因为我们缩短了待机时间和峰值时间、 我们收到了更多样片。

    具有深度睡眠功能的对一直无法解决所述的问题、PWM 会卡在唤醒蜂鸣声上、而没有 Power_sleep 的对会 从睡眠状态唤醒时失败。

    在 TRM 中、ti/simplelink_cc13xx_cc6xx_sdk_7_10_01_24/docs/drivers 下还有一个本地文档也对某个位进行了解释、但我找不到一个只说明其用法的示例。

    当器件处于低功耗状态时、我只想每2-3秒读取一次 VCNL4040传感器。 使用 Task_sleep 时是否可以实现低功耗? 我已经使用 Task_sleep (10000 *(1000 / Clock_tickPeriod)测试了10秒的延迟;在10秒中、8似乎就像使用 Power_sleep (没有卡住的缺点)、直到 控制器好像回到原始状态的最后几秒。 虽然这是一个想法、但我仍然更喜欢使用 Power 驱动程序、但我对自己的知识不是很有信心

    我是在 main.c 中还是在任务中声明约束和其他部分? 在哪里检查电源转换? (在 simple_central 和 simple_peripheral 结构示例中)

    您好!

    艾伯特

    已编辑: 而没有 Power_sleep 的则会 从睡眠状态唤醒时失败。

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

    尊敬的 Albert:

    可能有2个选项来 处理您的问题。 (不确定两者是否都在工作)

    当设备处于睡眠状态时,计时器不可用...因此,在声音程序完成后,您必须回到睡眠状态。

    另一个选项是确保电源域再次开启、然后再次更改 PWM 设置。

    这可以通过检查 PWM 寄存器是否设置为所需的值来实现。

    此致、

    亚历克斯

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

    我编辑了我之前的回答、其中我说"深度睡眠的配对无法解决所描述的问题、PWM 会卡在唤醒的蜂鸣声上、 而没有 Power_sleep 的确实可以  从睡眠状态唤醒时失败。 "、我实际上是说"不具有 Power_sleep 的函数  无法从睡眠状态唤醒。"、不确定这是否会更改您的回复、因为这澄清了 Power_Sleep 确实会影响 PWM。

    我会检查您说了什么、并让您不断了解最新情况。

    再次感谢、

    您好!

    艾伯特

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

    尊敬的 Albert:

    我似乎误解了你的答复。 因此,我的答案将保持不变!  

    此致、

    亚历克斯

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

    您好!

    在自定义电路板的测试中、我发现 BLE 初始化和启用广播可能会导致 PWM 卡滞出现一些问题、我的代码顺序如下:

    1.发生 VCNL4040中断(将消息排队进入程序)

    2.启动时钟(用于定期任务的执行)

    3.设置 VCLL4040传感器的正常耗电

    4.初始化 PWM

    5. PWM 蜂鸣声

    6.初始化 BLE、如果之前从未启动、或启用 BLE、如果启动

    所以如果 BLE 一直坚持使用 PWM 永不停止的模式、这是有道理的、因为我在~1小时的自动测试中注释了 BLE 部件、且程序从未失败。

    在我做过的有关电源管理器件的其他测试中、 我 使用了 LP-CC2651R3SIPA 来测试 gpioshutdown 的基本示例。 我做了一些小改动、从 Power.h 和 PowerCC26X2.h 添加函数、但似乎无法像调试方法那样进入睡眠状态或退出睡眠状态、eventType 始终为1、如果从 Power.h 检查常量、则指示 Power_active

    我正在使用 Power_SLEEP (PowerCC26XX_STANDBY);进入睡眠模式、并根据一个或另一个 LED 是否进入或退出来 亮起、但没有 LED 正常工作、但当我使用 Power_SHUTDOWN (0、0)时、我确实亮起了 Entering_Sleep 指示灯(仅当未使用 DEBUG 时)。

    以下是我的修改代码:

    /*
     *  ======== gpioshutdown.c ========
     */
    #include <stdbool.h>
    #include <stdint.h>
    #include <unistd.h>
    #include <ti/drivers/dpl/SemaphoreP.h>
    
    #include <ti/drivers/GPIO.h>
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include <ti/drivers/apps/Button.h>
    #include <ti/drivers/apps/LED.h>
    
    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(inc/hw_prcm.h)
    #include DeviceFamily_constructPath(driverlib/sys_ctrl.h)
    #include DeviceFamily_constructPath(driverlib/pwr_ctrl.h)
    
    #include "ti_drivers_config.h"
    
    /* Display Header files */
    #include <ti/display/Display.h>
    #include <ti/display/DisplayUart2.h>
    #include <ti/display/DisplayExt.h>
    #include <ti/display/AnsiColor.h>
    
    // Application Power_NotifyObj object
    Power_NotifyObj powerNotifyObj;
    
    // Application Power_NotifyFxn function prototype
    static int postNotifyFxn(unsigned int eventType, uintptr_t eventArg, uintptr_t clientArg);
    
    /* Semaphore used to gate for shutdown */
    SemaphoreP_Struct semStruct;
    SemaphoreP_Handle semHandle;
    
    LED_Handle led0Handle;
    LED_Handle led1Handle;
    
    static void buttonCallback(Button_Handle buttonHandle, Button_EventMask buttonEvents)
    {
        SemaphoreP_post(semHandle);
    }
    
    /*
     *  ======== mainThread ========
     */
    void *mainThread(void *arg0)
    {
        Power_init();
    
        led0Handle = LED_open(CONFIG_LED_0, NULL);
        led1Handle = LED_open(CONFIG_LED_1, NULL);
    
        PowerCC26X2_ResetReason resetReason = PowerCC26X2_getResetReason();
    
        /* If we are waking up from shutdown, we do something extra. */
        if (resetReason == PowerCC26X2_RESET_SHUTDOWN_IO)
        {
            /* Application code must always disable the IO latches when coming out of shutdown */
            PowerCC26X2_releaseLatches();
    
            /* In this example we toggle LED1 */
            LED_startBlinking(led1Handle, 500, 3);
        }
    
        semHandle = SemaphoreP_constructBinary(&semStruct, 0);
    
        Button_Params buttonParams;
        Button_Params_init(&buttonParams);
        buttonParams.buttonCallback  = buttonCallback;
        buttonParams.buttonEventMask = Button_EV_PRESSED;
    
        Button_open(CONFIG_BUTTON_SHUTDOWN, &buttonParams);
    
        /*
         * Test for getting the proper state
         */
        int16_t status;
        unsigned int eventTypes = Power_ENTERING_SLEEP | Power_EXITING_SLEEP;
        uintptr_t clientArg;
        status = Power_registerNotify(&powerNotifyObj, eventTypes,
                                        postNotifyFxn, clientArg);
    
        /* Pend on semaphore before going to shutdown */
        SemaphoreP_pend(semHandle, SemaphoreP_WAIT_FOREVER);
    
        /* Configure DIO for wake up from shutdown */
        GPIO_setConfig(CONFIG_GPIO_WAKEUP, GPIO_CFG_IN_PU | GPIO_CFG_SHUTDOWN_WAKE_LOW);
    
        /* Go to sleep */
        Power_sleep(PowerCC26XX_STANDBY);
    
        /* Should never get here, since shutdown will reset. */
        while (1) {}
    }
    
    
    // Application Power_NotifyFxn function implementation
    static int postNotifyFxn(unsigned int eventType, uintptr_t eventArg,
                             uintptr_t clientArg)
    {
        if (eventType == Power_ACTIVE) {
            return (Power_NOTIFYDONE);
        }
    
        if (eventType == Power_ENTERING_SLEEP) {
            LED_setOn(led1Handle, 100);
            return (Power_NOTIFYDONE);
        }
    
        if (eventType == Power_EXITING_SLEEP) {
            LED_setOn(led0Handle, 100);
            return (Power_NOTIFYDONE);
        }
    
    //    if (eventType == PowerCC26XX_ENTERING_STANDBY) {
    //        // Store something in RAM
    //        LED_setOn(led1Handle, 100);
    //        return (Power_NOTIFYDONE);
    //    }
    //    if (eventType == PowerCC26XX_ENTERING_SHUTDOWN) {
    //        LED_setOn(led0Handle, 100);
    //        return (Power_NOTIFYDONE);
    //    }
    
        // We received an unexpected event type
        return (Power_NOTIFYERROR);
    }
    

    您好!

    艾伯特

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

    尊敬的 Albert:

    我很抱歉在我追上这条线时出现了混乱。  因此、您是否确定了原始问题与您的 BLE 使用和应用进入待机模式相关?  请记住、BLE 应用可能允许待机模式、这种模式将阻止 PWM 运行、因为它依赖于在此功耗模式下禁用的系统时钟。  因此、只要 PWM 应处于运行状态、您就需要禁止待机。  此外、您不应该评估 gpiostandby 示例吗?  由于我 没有显示您实际上需要关闭您的应用。

    此致、
    瑞安

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

    您好、Ryan、

    当我重新启动应用程序的正常使用时、会出现这些问题、 每当问题开始时、我将所有内容设置为低功耗或禁用它们、或者仅当我重新启动时、我仍然感到有点未知、因为我在低功耗模式下的实现仍然有点模糊。

    尽管通过测试删除 Power_Sleep (PowerCC26XX_STANDBY)等各种修改有所帮助、但仍然使用它并注释了一些 BLE 重新初始化有助于实现测试成功、而不会获得卡住的 PWM 信号。 最后我从文档中读到的内容,我似乎根本不应该使用 Power_sleep 函数,而是像 gpiostandby 示例那样的 sleep()方法。

    此应用有2种工作方式、我们可以按功耗、正常功耗和低功耗进行区分。 正常使用功耗不需要任何睡眠或关断、因为中央设备和外围设备应在每个设备之间保持 BLE 连接。 另一方面、低功耗特性不会使用 BLE 连接(连续地、它可以关闭)、每"x"秒就会检查一次 VCNL4040传感器、这是唯一的重要数据。 此传感器也将在最低功耗设置下运行、因为它的值对于这种情况不重要、因为只需查明是否有足够的东西。

    使用睡眠模式还是关断模式取决于使用哪一种模式可实现最低功耗、因为该器件在电池寿命的大部分时间中很可能处于低功耗状态。 POWER_SHUTDOWN 似乎接受2个参数(但第二个参数仅在某些器件系列中有效)、因此我的问题是:

    1.如何知道我的器件 CC2651R3SIPA 是否支持 Power.h 上 Power_SHUTDOWN 的"uint_fast32_t shutdownTime"? 我尝试过运行一些代码、但未能看到定时重启、这是否简单地不起作用或操作不正确?

    我还使用了  PowerCC26X2_ResetReason resetReason = PowerCC26X2_getResetReason ()、我检查了  PowerCC26X2_RESET_SHUTDOWN_IO 或 PowerCC26X2_RESET_SYSTEM、但这些都不起作用、其余的不像由 Power_SHUTDOWN (02000)引起;

    2. 我应该在 postNotifyFxn 中处理电源开关(或正常电源使用低电源使用,和 viceversa)? 如果没有、正确的处理位置在哪里?

    3、这是一个小细节。 上一次回复和我正在执行的这些测试中的代码是在 LP-CC2651R3SIPA 上完成的。 如果使用此行:

    unsigned int eventTypes = Power_entering_sleep | Power_exiting_sleep | Power_entering_shutdown;

    Status = Power_registerNotify (&powerNotifyObj、eventTypes、postNotifyFxn、clientArg);

    相应的数字是2、3和4、那么为什么我会在 postNotifyFxn 中获得1作为 eventType? 通过在方法处设置一个断点、如果我不执行以下条件、 调试器会使用 eventType=1在 postNotifyFxn 处中断执行。

    if (eventType == Power_active){
      返回(Power_NOTIFYDONE);

    4.我应该针对  Power_Entering_sleep、Power_exiting_sleep 或 Power_entering_shutdown 以及特定于器件的限制 (即 PowerCC26XX_Entering_standby 、PowerCC26XX_Entering_SHUTDOWN、 PowerCC26XX_WAKE_STANDBY 或 PowerCC26XX_WAKE_STANDBY_LATE )注册我的通知吗?

    您好!

    艾伯特

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

    1.您可以参阅 gpioshutdown 示例和 Power TI 驱动程序运行时 API、支持该参数。

    2.参见 使用电源通知

    3. 电源转换 与 CC26XX 电源事件

    4. 特定于器件的限制

    请注意、尽管 Power_SHUTDOWN 允许最低功耗、但不应用于 BLE 应用、因为这种电源模式将在执行复位之前关闭无线电。

    此致、
    瑞安

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

    感谢您的答复、Ryan。 您的答案很有帮助。

    我仍在使用 LP-CC2651R3SIPA、 第一个问题仍然存在问题。 在我遵循答案的同时、 我没有达到期望的行为。

    将 Power_SHUTDOWN (0、0);更改为 Power_SHUTDOWN (02000);应该在2秒内进行关断和复位、但我无法观察到该行为。 (注:我已经考虑到在处理过程中有一个信标、代码几乎与原来的代码类似、我还要在没有调试器的情况下运行该应用、并且还修改了闪烁 LED 以查看是否发生了任何情况、但事实并非如此)。 附上代码和我的修改内容。

    /*
     * Copyright (c) 2022, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /*
     *  ======== gpioshutdown.c ========
     */
    #include <stdbool.h>
    #include <ti/drivers/dpl/SemaphoreP.h>
    
    #include <ti/drivers/GPIO.h>
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include <ti/drivers/apps/Button.h>
    #include <ti/drivers/apps/LED.h>
    
    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(inc/hw_prcm.h)
    #include DeviceFamily_constructPath(driverlib/sys_ctrl.h)
    #include DeviceFamily_constructPath(driverlib/pwr_ctrl.h)
    
    #include "ti_drivers_config.h"
    
    /* Semaphore used to gate for shutdown */
    SemaphoreP_Struct semStruct;
    SemaphoreP_Handle semHandle;
    
    static void buttonCallback(Button_Handle buttonHandle, Button_EventMask buttonEvents)
    {
        SemaphoreP_post(semHandle);
    }
    
    /*
     *  ======== mainThread ========
     */
    void *mainThread(void *arg0)
    {
        LED_Handle led0Handle = LED_open(CONFIG_LED_0, NULL);
        LED_Handle led1Handle = LED_open(CONFIG_LED_1, NULL);
    
        PowerCC26X2_ResetReason resetReason = PowerCC26X2_getResetReason();
    
        /* If we are waking up from shutdown, we do something extra. */
        if (resetReason == PowerCC26X2_RESET_SHUTDOWN_IO) {
            /* Application code must always disable the IO latches when coming out of shutdown */
            PowerCC26X2_releaseLatches();
    
            /* In this example we toggle LED1 */
            LED_startBlinking(led1Handle, 500, 4);
        } else {
            /* Application code must always disable the IO latches when coming out of shutdown */
            PowerCC26X2_releaseLatches();
    
            /* In this example we toggle LED1 */
            LED_startBlinking(led1Handle, 500, 2);
        }
    
        semHandle = SemaphoreP_constructBinary(&semStruct, 0);
    
        Button_Params buttonParams;
        Button_Params_init(&buttonParams);
        buttonParams.buttonCallback  = buttonCallback;
        buttonParams.buttonEventMask = Button_EV_PRESSED;
    
        Button_open(CONFIG_BUTTON_SHUTDOWN, &buttonParams);
    
        /* Turn on LED0 to indicate active */
        LED_setOn(led0Handle, 100);
    
        /* Pend on semaphore before going to shutdown */
        SemaphoreP_pend(semHandle, SemaphoreP_WAIT_FOREVER);
    
        /* Turn off LED0 */
        LED_setOff(led0Handle);
    
        /* Configure DIO for wake up from shutdown */
        GPIO_setConfig(CONFIG_GPIO_WAKEUP, GPIO_CFG_IN_PU | GPIO_CFG_SHUTDOWN_WAKE_LOW);
    
        /* Go to shutdown */
        Power_shutdown(0, 2000);
    
        /* Should never get here, since shutdown will reset. */
        while (1) {}
    }
    

    我的工作是:

    1.通过 USB 为 LP 供电、或通过可稳压电源直接为 GND 和3V3引脚供电。

    2.按左侧按钮使用信标回调方法->红光变暗

    3、2秒后应用程序应重新启动,但没有,所以看不到红灯再次亮起,没有2、4个绿色 LED 闪烁(检查复位原因)。

    4.我按右键, Launchpad 再次启动,得到4绿色 LED 闪烁(从关机 IO 唤醒,像原来的程序)。

    关于使用 Power_SHUTDOWN 以实现最低功耗、我为了激活无线电对器件进行复位不是问题、但是根据第一个答案、不会发生计时 Power_SHUTDOWN 行为、因此我也无法复制该行为。 复位器件以激活无线电是否会带来不利影响? 只要延迟是合理的时间(例如小于250毫秒)、我就 不会有任何问题。

    我对定时 Power_SHUTDOWN 很感兴趣、因为自定义电路板没有物理按钮、这就是正常的 Power_SHUTDOWN (具有可触发唤醒的 GPIO)不足以满足这一 要求的原因。

    再次感谢您的帮助、

    艾伯特

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

    尊敬的 Albert:

    我的假设不正确、在查看 simplelink_cc13xx_cc26xx_sdk_7_10_01_24\source\ti\drivers\power 中 的 Power_shutdown 源后、我可以确定它不使用 shutdownTime 作为可行输入。

    /*
     *  ======== Power_shutdown ========
     */
    int_fast16_t Power_shutdown(uint_fast16_t shutdownState, uint_fast32_t shutdownTime)
    {
        int_fast16_t status = Power_EFAIL;
        unsigned int constraints;
        unsigned int hwiKey;
    
        /* disable interrupts */
        hwiKey = HwiP_disable();
    
        /* check if there is a constraint to prohibit shutdown */
        constraints = Power_getConstraintMask();
        if (constraints & (1 << PowerCC26XX_DISALLOW_SHUTDOWN))
        {
            status = Power_ECHANGE_NOT_ALLOWED;
        }
    
        /* OK to shutdown ... */
        else if (PowerCC26X2_module.state == Power_ACTIVE)
        {
            /* set new transition state to entering shutdown */
            PowerCC26X2_module.state = Power_ENTERING_SHUTDOWN;
    
            /* signal all clients registered for pre-shutdown notification */
            status = notify(PowerCC26XX_ENTERING_SHUTDOWN);
    
            /* check for any error */
            if (status != Power_SOK)
            {
                PowerCC26X2_module.state = Power_ACTIVE;
                HwiP_restore(hwiKey);
                return (status);
            }
    
            /* Ensure the JTAG domain is turned off
             * otherwise MCU domain can't be turned off.
             */
            PowerCC26X2_pmctlDisableJtag();
    
            SysCtrlAonSync();
    
            /* now proceed with shutdown sequence ... */
            PowerCC26X2_sysctrlShutdownWithAbort();
        }
        else
        {
            status = Power_EBUSY;
        }
    
        /* NOTE: if shutdown succeeded, should never get here */
    
        /* return failure status */
        PowerCC26X2_module.state = Power_ACTIVE;
    
        /* re-enable interrupts */
        HwiP_restore(hwiKey);
    
        /* if get here, failed to shutdown, return error code */
        return (status);
    }

    唤醒时序列在 器件数据表的第8.15.2节"关断至活动"中、CAN 范围为850至3000 µs、然后有额外的时间来启动应用。

    此致、
    瑞安

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

    您好、Ryan、

    那么、是否有替代方法来执行相同的操作、我可以找到有关的信息? 也就是说、会自动降低消耗水平并且在指定时间后唤醒? 或者唯一的方法是自己修改方法? (我认为我目前不知道要做的事情)

    感谢您的帮助、

    您好!

    艾伯特

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

    您可以使用待机模式(即睡眠功能)自动唤醒、但关断模式需要 GPIO 引脚触发。

    此致、
    瑞安