按键按5秒从睡眠模式醒来

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
15个帖子/ 0新
最后发表
强大的
离线
最后看到:7个月2天前
加入:2018-12-27 04:15
按键按5秒从睡眠模式醒来

亲爱的对话团队,

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

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

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

您能否为此操作建议任何示例代码,或者您可以建议流程如何做到这一点?

致以最亲切的问候

马利

设备:
PM_Dialog
离线
最后看到:1天12小时前
工作人员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

按下按钮5秒后,您无法唤醒DA14683。请参考WKUP_CTRL_REG描述中的数据表。通过使用适当的值设置WKUP_DEB_VALUE位域,可以将调试时间配置为64msec。当系统处于活动模式时,“长按按钮”实现5秒的持续时间,就像你在文章中提到的那样。

谢谢,PM_Dialog

强大的
离线
最后看到:7个月2天前
加入:2018-12-27 04:15
嗨,对话团队,我们的目标

嗨,对话团队,我们的目标如下。

1.将控制器放入Hinbernate模式后,长时间按下5秒。

2.按下按钮5秒后,唤醒控制器上的休眠模式。

在按钮被按下后,控制器会在一秒钟内立即醒来,这是不希望的,因为这可能是意外的按下。

你能告诉我们在按下按钮5秒后如何从休眠模式中醒来吗?

此致,

马利

PM_Dialog
离线
最后看到:1天12小时前
工作人员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

正如我在之前的评论中提到的,在按钮被按下5秒后唤醒控制器从休眠模式是不可能实现的。关于你的第一个要求,请告诉我你是需要支持还是已经实施了?

谢谢,PM_Dialog

强大的
离线
最后看到:7个月2天前
加入: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,true);

hw_wkup_set_pin_trigger (HW_GPIO_PORT_1 HW_GPIO_PIN_6 HW_WKUP_PIN_STATE_LOW);

hw_wkup_register_interrupt(wkup_handler,configlary_max_syscall_interrupt_priority);

* / / * wkup_handler ()

循环5次// for循环

delay (1000ms) // OS_DELAY_MS(1000);

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

If (low){继续for循环}

Else{设置一个标志并中断for循环}

if(标志未设置)

pm_set_sleep_mode(pm_mode_hibernation);

以上方法可以吗?你能建议其他方法吗?

是否在唤醒中断处理中,OS_DELAY_MS()函数工作?如果没有,任何其他替代解决方案。

致以最亲切的问候

马利

PM_Dialog
离线
最后看到:1天12小时前
工作人员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

您可以使用软件实现的方法进行,通过轮询GPIO并使用计数器检查按钮5秒。请注意,如果从休眠中唤醒,设备将在5秒到期前唤醒,因此如果按下该按钮超过5秒,设备将保持在活动模式下,否则它将再次进入休眠状态。在活动模式的情况下,您必须检查计数器的值,且仅当按下该按钮5秒时,芯片将进入休眠模式。

谢谢,PM_Dialog

强大的
离线
最后看到:7个月2天前
加入:2018-12-27 04:15
亲爱的对话团队,

亲爱的对话团队,

谢谢你的支持。

我们实施了第一个要求,即将控制器置于Hibernate模式,它可以正常工作。

对于第二个需求,即休眠来唤醒,因为软件方法不工作,你能建议任何其他方法使用硬件计时器或内核计时器的功能。你能建议这个的任何样本代码吗?

致以最亲切的问候

马利

PM_Dialog
离线
最后看到:1天12小时前
工作人员
加入:2018-02-08 11:03
嗨powersquare,

嗨powersquare,

正如我之前提到的,它是不可能从休眠模式唤醒设备后,按钮被按了5秒长。芯片会在5秒后更早醒来。

谢谢,PM_Dialog

强大的
离线
最后看到:7个月2天前
加入:2018-12-27 04:15
亲爱的对话团队,

亲爱的对话团队,

谢谢你的支持。

对于第一个要求,(将控制器放入Hibernate模式,在按钮5秒后按下5秒),我们使用Extended_sleep项目测试了此功能,此功能正常。按下5秒的K1按钮时,系统将进入Hibernate模式。

现在我们正在BLE_PERITWEL项目上测试此功能。我们将K1按钮引脚和移植的定时器功能从Extended_sleep项目(main.c)配置为ble_peripheral项目main.c文件。我们附加了BLE_PERITELAL项目的MAIN.c文件以供参考。SDK和BLE_PERITELAL项目中没有更改。只有更改在main.c文件中只能配置按钮和定时器功能。

当我们测试此功能时(当我们按下5秒的K1按钮时),系统将触及Hibernate并立即唤醒。我们不希望系统立即醒来。我们还在main.c文件中使用此设置进行了测试,PM_SET_WAKEUP_MODE(FALSE),但问题保持不变。

你能帮我们解决ble_peripheral项目中的这个问题吗?

致以最亲切的问候

马利

附件:
强大的
离线
最后看到:7个月2天前
加入:2018-12-27 04:15
亲爱的对话团队,

亲爱的对话团队,

你有什么更新吗?

致以最亲切的问候

马利

PM_Dialog
离线
最后看到:1天12小时前
工作人员
加入: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中的应用程序_WFI()函数。修订A(black_orca_ic_rev_a)适用于DA14681设备,修订版B(Black_orca_ic_rev_b)适用于DA14683设备。在sys_power_mgr.c文件的第1393号文件中,如果正在使用DA14681(Black_orca_ic_rev_a),则在休眠之前,禁用所有IRQ,除VBUS和WKUP之外,所有挂起的中断都被清除,以便系统未重置系统已经挂起的中断。这仅适用于DA14681设备。为此,在使用DA14683设备时,挂起的中断永远不会清除,因为IF-statege将始终为false。结果,系统在休眠后的系统,它会由于挂起的中断而立即唤醒。 Also, keep in mind that in ble_peripheral example of the SDK, you will have BLE activity, so the most possible reason for waking up is due to a pending BLE interrupt, in contrast with extended_sleep example. 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:

if (dg_configBLACK_ORCA_IC_REV == BLACK_ORCA_IC_REV_A) {//DA14681 /* existingcode */} else {//DA14683 /* *禁用除WKUP以外的所有irq(如果被*应用程序使用)。* / uint32_t伊瑟尔;伊瑟尔= NVIC - >伊瑟尔[0];NVIC - >冷藏工人[0]=伊瑟尔& ~ ((uint32_t) (1 < < WKUP_GPIO_IRQn));/* *清除除WKUP以外的所有中断(如果被应用程序使用),这样系统就不会被一个已经挂起的中断重置。* / NVIC - > ICPR[0] =伊瑟尔& ~ ((uint32_t) (1 < < WKUP_GPIO_IRQn));}

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

另一个解决方案是在芯片进入休眠模式之前停止广告和任何其他BLE活动。

谢谢,PM_Dialog

强大的
离线
最后看到:7个月2天前
加入:2018-12-27 04:15
亲爱的对话团队,

亲爱的对话团队,

谢谢你的支持。

这个解决方案似乎运行良好(在sys_power_mgr.c文件的第1393行中进行了更改)。

你能和你的SDK团队确认一下这些变化吗?

致以最亲切的问候

马利

PM_Dialog
离线
最后看到:1天12小时前
工作人员
加入:2018-02-08 11:03
嗨米莉,

嗨米莉,

很高兴你解决了自己的问题。如果你认为这个解决方案有用,请将前面的答案标记为接受。我已经让SDK团队知道了。

问候,pm_dialog

强大的
离线
最后看到:7个月2天前
加入:2018-12-27 04:15
亲爱的对话团队,

亲爱的对话团队,

谢谢你的支持。

我们使用的是DA14683制造的定制板。此帖子中提到的按钮按下(5秒)在此定制板上不起作用。

该按钮在该板上的端口4,PIN4上配置。当我们按下此按钮5秒时,我们观察到HW_WKUP_HANDLER()函数在HW_WKUP.c文件中调用,但未调用回呼函数(INT_CB)。调用回函数使用hw_wkup_register_interrupt()在main.c中初始化。在HW_WKUP_HANDLER()中,控制进入内部“if(inter_cb){”循环,但不调用回拨。

你能帮我们解决一下,为什么这个回电话没有打?

致以最亲切的问候

马利

PM_Dialog
离线
最后看到:1天12小时前
工作人员
加入:2018-02-08 11:03
嗨powersquare,