延迟道歉。我使用你的附加代码(c),我复制你的问题在DA14683 SoC和SDK1.0.14.1081。相同的主。c文件,这个问题不存在当使用DA14681代替DA14683 SoC。请看看apply_wfi sdk / cpm / sys_power_mgr.c()函数。修订(BLACK_ORCA_IC_REV_A)适用于DA14681设备和修订B为DA14683设备(BLACK_ORCA_IC_REV_B)。在第1393行sys_power_mgr。c文件,如果DA14681 (BLACK_ORCA_IC_REV_A)正在使用,要冬眠之前,所有的终端请求被禁用和等待中断清除除了通风装置和WKUP,所以系统不重置一个已经等待中断。这是只在DA14681适用的设备。为此,使用DA14683设备时,等待中断从来没有被清除,因为if语句将永远是假的。 As a result, the system after going to hibernation, it will immediately wake-up due to a pending interrupt. 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:
嗨powersquare,
你不能醒来DA14683当按钮被按下5秒。请参阅WKUP_CTRL_REG描述的数据表。你可以配置消除抖动时间64毫秒通过设置WKUP_DEB_VALUE设置适当的值。“长按按钮”实现与5秒时间可以实现当系统在主动模式下,当你提到的职位。
谢谢,PM_Dialog
嗨对话框的团队,我们的目标是如下。
1。把控制器hinbernate模式推动按钮后5秒之久。
2。叫醒控制器形式hibernate模式推动按钮后5秒之久。
控制器内醒来immedialty第二个按钮后推,这不是想要的,因为这可能是一个accedental出版社。
你能让我们知道如何从hibernate实现唤醒模式推动按钮后5秒?
最好的问候,
Malli
嗨powersquare,
我以前的评论中提到,唤醒控制器从hibernate模式推动按钮后5秒长是不可能的。关于你的第一个要求,你能请让我知道如果你需要支持,或你已经实现了吗?
谢谢,PM_Dialog
亲爱的团队对话框,
谢谢你的支持。
第一需求,我们计划实施延迟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);
如果(低){跟上进展for循环}
其他{设置国旗和打破循环}
}
如果(国旗不设置)
{
pm_set_sleep_mode (pm_mode_hibernation);
}
上述方法可以吗?你建议其他方法吗?
是OS_DELAY_MS()函数在唤醒工作中断处理程序吗?如果没有,其他的替代解决方案。
致以最亲切的问候
Malli
嗨powersquare,
你可以使用软件实现方法,通过轮询GPIO和检查柜台如果按钮被按下5秒。请注意,如果从冬眠中醒来,该设备会醒来期满前5秒,如果按钮被按下5秒以上设备将保持活跃模式,否则它将再次进入休眠状态。在主动模式,你必须检查计数器的值,且仅当按钮被按下5秒芯片将进入休眠模式。
谢谢,PM_Dialog
亲爱的团队对话框,
谢谢你的支持。
我们实现了第一个要求,即把hibernate模式的控制器,它将正常工作。
2日要求,即hiberbate唤醒,因为软件方法不起作用,你可以建议其他方法使用硬件定时器或内核计时器功能。能给你建议任何示例代码吗?
致以最亲切的问候
Malli
嗨powersquare,
正如我在前面提到的,不可能醒来后的设备从休眠模式按钮5秒之久。芯片将从5秒醒来早。
谢谢,PM_Dialog
亲爱的团队对话框,
谢谢你的支持。
第一要求,(把控制器hibernate模式推动按钮后5秒长),我们测试了这个功能与extended_sleep项目,这没问题。当K1按钮被按下5秒,系统进入休眠模式。
现在我们正在测试这个功能ble_peripheral项目。我们配置K1按钮销和移植定时器功能从extended_sleep项目(c) ble_peripheral项目主要。c文件。我们主要。c ble_peripheral项目的文件,供您参考。没有改变在SDK和ble_peripheral项目。只在主改变了。c文件配置按钮和计时器功能。
当我们测试这个功能(当我们按K1按钮5秒),系统趋于hibernate和立即醒来。我们不希望该系统立即醒来。我们还测试了此设置在主。c文件,pm_set_wakeup_mode (false),但问题仍是相同的。
你能帮我们解决这个问题在ble_peripheral项目。
致以最亲切的问候
Malli
亲爱的团队对话框,
你有任何更新吗?
致以最亲切的问候
Malli
嗨powersquare,
延迟道歉。我使用你的附加代码(c),我复制你的问题在DA14683 SoC和SDK1.0.14.1081。相同的主。c文件,这个问题不存在当使用DA14681代替DA14683 SoC。请看看apply_wfi sdk / cpm / sys_power_mgr.c()函数。修订(BLACK_ORCA_IC_REV_A)适用于DA14681设备和修订B为DA14683设备(BLACK_ORCA_IC_REV_B)。在第1393行sys_power_mgr。c文件,如果DA14681 (BLACK_ORCA_IC_REV_A)正在使用,要冬眠之前,所有的终端请求被禁用和等待中断清除除了通风装置和WKUP,所以系统不重置一个已经等待中断。这是只在DA14681适用的设备。为此,使用DA14683设备时,等待中断从来没有被清除,因为if语句将永远是假的。 As a result, the system after going to hibernation, it will immediately wake-up due to a pending interrupt. 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:
DA14683,所有等待中断清除除了WKUP因为芯片只能醒来从唤醒控制器,而不是从通风装置。请注意,这只是一个可能的解决方案并不是由SDK团队进行测试。
另一种方法是停止广告和停止任何其他祝福活动之前把芯片进入休眠模式。
谢谢,PM_Dialog
亲爱的团队对话框,
谢谢你的支持。
这个解决方案似乎工作好(改变了sys_power_mgr的第1393行。c文件)。
你能和你的SDK团队确认这些变化呢?
致以最亲切的问候
Malli
嗨Malli,
很高兴你找到你的问题。如果你找到了解决方法有用,请前面的反潜战标记为接受。我有alredy让团队知道SDK。
问候,PM_Dialog
亲爱的团队对话框,
谢谢你的支持。
我们使用自定义董事会DA14683做的。按钮按下(5秒)这篇文章中提到在这个习俗董事会不工作。
4端口上配置的按钮,pin4黑板上。当我们按下这个按钮5秒时,我们观察到hw_wkup_handler hw_wkup()函数。c文件,但回调函数(intr_cb)不是。回调函数是主要initialiazed。c使用hw_wkup_register_interrupt ()。在hw_wkup_handler(),控制走进“如果(intr_cb){”循环,但不叫回电话。
你能帮我们解决,为什么不叫打来吗?
致以最亲切的问候
Malli
嗨powersquare,
我有推动下面的对话通过论坛门票:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/active-mode-hibernate-mode
谢谢,PM_Dialog