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.

[参考译文] CC2640R2F:无法使用 GPIO 从待机深度睡眠状态唤醒

Guru**** 2979400 points

Other Parts Discussed in Thread: CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1664798/cc2640r2f-not-able-to-wake-up-from-standby-deepsleep-state-using-gpio

器件型号: CC2640R2F

您好:
我目前在 TI CC2640R2F LaunchPad 上工作。
我在从待机深度睡眠状态唤醒时遇到问题。  
我尝试使用 BTN-1 或 DIO13 上的按钮中断来唤醒。
我使用相同的按钮从关断模式唤醒、并且适用于关断模式。
这是关断模式和待机模式的代码片段。

void *mainThread (void *arg0)
{
  Semaphore_Params standbySemParams;
  Semaphore_Params_(&standbySemParams);
  standbySem = SISPENT_CREATE (0、&standbySemParams、NULL);

  /*调用驱动程序初始化函数*/
  gpio_init ();
  i2c_init ();
  spi_init ();
  uart_init ();

  GPIO_setConfig (Board_GPIO_LED1、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);

  PIN_Config wakePin[]={Board_PIN_BUTTON0 | PIN_INPUT_EN | PIN_PULLUP | PINCC26XX_WAKEUP_NEGEDGE、PIN_Terminate};

   对于 (;;){
    开关 (appState){
     用例 APP_STATE_ACTIVE:
     {
        if (SISPLOG_PEND (standbySem、bios_no_wait)){
        appState = APP_STATE_STANDBY;
        }
     休息;
     }
     case APP_STATE_SHUTDOWN: //被调用 Power_shutdown 控制器以相同的 wakepin 从 SHUTDOWN 模式唤醒并重新启动主例程
     {
         PINCC26XX_setWakeup (wakePin);  Thumbsupμ s
        POWER_SHUTDOWN (0、0);     Thumbsupμ s
      休息;
      }
     CASE APP_STATE_STANDBY:
     {       
      GPIO_TOGGLE (Board_GPIO_LED1); /*即将睡眠*/
      POWER_SLEEP (PowerCC26XX_STANDBY);    Thumbsdown  //问题出在这里当它进入 Power_SLEEP 模式时、它进入 DEEPSLEEP 模式、从不响应按钮按压中断
 
      GPIO_TOGGLE (BOARD_GPIO_LED1);  /*从睡眠状态唤醒*/ Thumbsdownμ s
      休息;
      }
    }
   }
}

POWER_SLEEP 卡在 PRCMDeepSleep 内
 /* 13. 调用深度睡眠以进入待机状态*/
 PRCMDeepSleep ();

使用 WAKEUP 引脚和 LED1 切换激活(在 Power_Sleep () 调用后立即激活)从 DEEPSLEEP 待机状态唤醒可能的解决方案是什么?
谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yash、感谢您对问题的详细描述。 这里实际上有两个单独的问题、解决这两个问题将使您启动和运行。

    问题 1:请勿手动调用 Power_sleep () 进行待机。 在具有 TI-RTOS 的 CC2640R2F 上、您不应致电
    Power_sleep(PowerCC26XX_STANDBY)
    系统。 RTOS 电源管理器会在没有活动任务或事件时自动处理此情况、器件会自然地转换到待机模式。 手动调用它实际上可以阻止器件进入正确的低功耗状态或导致其挂起
    PRCMDeepSleep() 

    如果是
    PowerCC26XX_SB_DISALLOW
    约束由活动外设设置。 在代码中、您具有:
    GPIO_init(), I2C_INIT()、 SPI_INIT()和 UART_INIT()
    全部在启动时调用、其中任何一个具有活动操作的函数都可以设置该限制并阻止进入待机模式。 删除显式
    Power_sleep()
    调用、并让 TI-RTOS 通过在信标上放置任务块(您已经使用了任务块)来自动管理待机 standbySem。
    问题 2:按钮 ISR 必须发布信标或事件来唤醒任务第二个问题是只配置 GPIO 中断不足以将应用任务从待机状态唤醒。 当该按钮触发时、ISR 必须向 TI-RTOS 内核对象(信标或事件)发出显式信号、以取消阻止等待任务。 您需要在上注册 PIN 中断回调
    Board_PIN_BUTTON0
    使用:
    PIN_open 和 PIN_REGISTERIntCb
    、然后在回调中调用
    Semaphore_post(standbySem).
    您的主任务循环已挂起在上
    standbySem
    因此、当按下该按钮时、ISR 会发布信标、从而解除阻止任务并使 RTOS 使器件退出待机模式。 。
    PINCC26XX_WAKEUP_NEGEDGE
    标记
    wakePin
    配置正确、可从 SHUTDOWN 模式唤醒、但在 STANDBY 模式下、您需要注册的 ISR +信标后机制。 我还建议查看
    pinStandby
    一个 SimpleLink CC2640R2 SDK 中的一个示例、因为它完全展示了这种模式。
    请告诉我这是否能解决您的问题。