按下按钮,持续5秒,从休眠模式唤醒

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
15个员额/ 0个新员额
最后一篇
powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
按下按钮,持续5秒,从休眠模式唤醒

亲爱的团队对话框,

我们需要检测DA14683上的长按按钮,我们使用的是SDK 1.0.14.1081。我们使用K1按钮进行这个操作。

我们能够检测5秒的操作使用计数器,并使系统进入睡眠模式。

现在,我们需要从睡眠模式唤醒系统,当按下按钮5秒钟。我们能够唤醒系统是否正常按(如触摸和释放按钮)。

您能给我们一些关于这个操作的示例代码吗?或者您能给我们一些如何操作流程的建议吗?

此致

Malli

设备:
PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

你是不是能当按住按钮5秒钟唤醒DA14683。请参考WKUP_CTRL_REG说明数据表。您也可以用适当的值设置WKUP_DEB_VALUE位域配置防抖动时间可达64msec。当系统在主动模式下,可以实现与5秒持续时间的“长按按钮”的实施,为您在您的文章中提到。

谢谢,PM_DIALOG.

powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
嗨对话框队伍,我们的目标

嗨对话框队伍,我们的目标是如下。

1.按下按钮5秒后,将控制器置于休眠模式。

2.按下按钮5秒后将控制器从休眠模式唤醒。

控制器中的按钮被按下之后的第二,这是不期望的,因为这可能是一个斯瓦特压机内醒来immedialty。

你可以让我们知道如何从休眠模式的按钮被按下5秒后acheive唤醒?

最好的问候,

Malli

PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

由于这是我在以前的评论中提到,从休眠模式唤醒控制了按钮被按下5秒后长是不可能实现的。关于你的第一个要求,你能不能请让我知道如果你需要支持,或者你已经实现了呢?

谢谢,PM_DIALOG.

powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
亲爱的团队对话框,

亲爱的团队对话框,

感谢您的支持。

对于第一个要求,我们计划实现5秒的延迟,并检查按钮是否仍然被按下。如果按下,则进入休眠状态或继续相同的状态。我们的计划如下:

/ *设置唤醒控制器K1按钮,如下* /

hw_wkup_set_debounce_time(63);

hw_wkup_set_pin_state (HW_GPIO_PORT_1 HW_GPIO_PIN_6,真实);

hw_wkup_set_pin_trigger(HW_GPIO_PORT_1,HW_GPIO_PIN_6,HW_WKUP_PIN_STATE_LOW);

hw_wkup_register_interrupt (wkup_handler configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);

/ * wkup_handler()* /

运行循环5次// for循环

{

延迟(1000毫秒)// OS_DELAY_MS(1000);

检查按钮状态// hw_gpio_get_pin_status(HW_GPIO_PORT_1,HW_GPIO_PIN_6);

如果(低){contine for循环}

否则{设置一个标志,打破for循环}

}

If(未设置标志)

{

pm_set_sleep_mode (pm_mode_hibernation);

}

是上面的方法好吗?你建议任何其他的方法呢?

在唤醒中断处理程序OS_DELAY_MS()函数的作品?如果不是这样,任何其它的替代解决方案。

此致

Malli

PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

你可以使用软件实现方法,通过轮询GPIO和检查柜台如果按钮被按下5秒。请注意,如果从冬眠中醒来,该设备会醒来期满前5秒,如果按钮被按下5秒以上设备将保持活跃模式,否则将再次进入休眠状态。在激活模式下,必须检查计数器的值,只有按下按钮5秒芯片才会进入休眠模式。

谢谢,PM_DIALOG.

powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
亲爱的团队对话框,

亲爱的团队对话框,

感谢您的支持。

我们实现了第一个要求,即将控制器设置为休眠模式,它工作得很好。

对于第二个要求,即hiberbate的唤醒,因为软件的方法是行不通的,你可以建议使用硬件定时器或籽粒定时器此功能的其他方式。您能否提供这方面的任何示例代码?

此致

Malli

PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

前面说过,这是不可能的按钮被按下后,持续5秒长,以从休眠模式中唤醒该设备。该芯片将被唤醒,从早5秒。

谢谢,PM_DIALOG.

powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
亲爱的团队对话框,

亲爱的团队对话框,

感谢您的支持。

对于第一个需求(按下按钮5秒后将控制器置于休眠模式),我们用extended_sleep项目测试了这个功能,效果很好。当K1按钮按下5秒后,系统进入休眠模式。

现在我们正在ble_peripheral项目上测试这个功能。我们配置了K1按钮引脚,并将计时器功能从extended_sleep项目(main.c)移植到ble_peripheral项目main.c文件。我们附上了ble_peripheral项目的main.c文件供您参考。在SDK和ble_peripheral项目中没有更改。只在main.c文件中进行了更改,以配置按钮和计时器功能。

当我们测试这个功能时(当我们按下K1按钮5秒),系统进入休眠并立即唤醒。我们不希望系统立即醒来。我们还在main.c文件pm_set_wakeup_mode(false)中测试了这个设置,但问题还是一样。

你能帮助我们解决ble_peripheral项目这个问题。

此致

Malli

依恋:
powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
亲爱的团队对话框,

亲爱的团队对话框,

你有什么最新消息吗?

此致

Malli

PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

很抱歉耽搁了。我使用了你附上的代码(main.c),我复制了你的问题工作在DA14683 SoC和SDK1.0.14.1081。使用相同的main.c文件,当使用DA14681 SoC而不是DA14683时,这个问题不存在。请查看sdk/cpm/sys_power_mgr.c中的apply_wfi()函数。DA14681设备为A版(BLACK_ORCA_IC_REV_A), DA14683设备为B版(BLACK_ORCA_IC_REV_B)。在第1393行sys_power_mgr.c文件,如果DA14681 (BLACK_ORCA_IC_REV_A)正在使用,要冬眠之前,所有的终端请求被禁用和等待中断清除除了通风装置和WKUP,所以不重置,系统已经等待中断。仅适用于DA14681设备。为此,在使用DA14683设备时,不会清除挂起的中断,因为if语句总是为false。因此,系统进入休眠状态后,会立即因一个挂起中断而唤醒。另外,请记住,在SDK的ble_peripheral示例中,您将有BLE活动,因此唤醒的最可能的原因是BLE中断挂起,与extended_sleep示例相反。 A possible workaround might be to modify the source code of sys_power_mgr.c in order to explicitly clear all the pending interrupts in case of DA14683. Please check a reference code snippet:

如果(dg_configBLACK_ORCA_IC_REV == BLACK_ORCA_IC_REV_A){// DA14681 / * extising代码* /}否则{// DA14683 / * *禁用除了WKUP所有IRQ(如果使用由*应用程序)。* / uint32_t的伊瑟尔;伊瑟尔= NVIC-> ISER [0];NVIC-> ICER [0] =&伊瑟尔〜((uint32_t的)(1 << WKUP_GPIO_IRQn));/ * *清除除了WKUP所有中断(如果应用程序使用*),以使系统不被*已经挂起的中断复位。* / NVIC-> ICPR [0] =&伊瑟尔〜((uint32_t的)(1 << WKUP_GPIO_IRQn));}

在DA14683的情况下,除了WKUP之外,所有挂起的中断都被清除,因为芯片只能从WAKEUP控制器中唤醒,不能从VBUS中唤醒。请注意,这只是一个可能的解决方案,没有经过SDK团队的测试。

另一种解决办法是停止广告,并把芯片进入休眠模式之前,停止其他任何BLE活动。

谢谢,PM_DIALOG.

powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
亲爱的团队对话框,

亲爱的团队对话框,

感谢您的支持。

该解决方案似乎是工作的罚款(在sys_power_mgr.c文件的1393行改变制造)。

你可以用你的SDK团队对这些变化证实?

此致

Malli

PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨Malli,

嗨Malli,

很高兴与你想通您的问题了。如果你找到了解决方法是有用的,请注明先前aswer所接受。我已经alredy让SDK团队知道。

问候,PM_Dialog

powersquare
离线
最后一次露面:10个月10小时前
加入:2018-12-27 04:15
亲爱的团队对话框,

亲爱的团队对话框,

感谢您的支持。

我们使用的是DA14683的定制板。这篇文章中提到的按下按钮(5秒)在这个自定义板上不起作用。

该按钮配置在该单板的端口4、pin4上。当我们按下这个按钮5秒时,我们观察到hw_wkup_handler()函数在hw_wkup.c文件中被调用,但是回调函数(intr_cb)没有被调用。回调函数在main.c中使用hw_wkup_register_interrupt()初始化。在hw_wkup_handler()中,控件进入“if (intr_cb){”循环,但不会调用回调函数。

你能不能帮我们解决,为什么这回叫不叫?

此致

Malli

PM_DIALOG.
离线
最后一次露面:2天2小时前
职员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

我已经通过下面的论坛门票驱动的谈话:

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/active-mode-hibernate-mode

谢谢,PM_DIALOG.