唤醒 - 从外部引脚延长睡眠模式

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
jsayed.
离线
最后一次露面:1年4个月前
加入:2014-12-11 23:46
唤醒 - 从外部引脚延长睡眠模式

嗨,我昨天发布了,但我没有看到我的帖子,所以我再次发布它

你好,

我正在研究一个项目,其中BLE设备(DA14580)处于扩展睡眠模式。它唤醒了它的广告周期,并再次返回扩展睡眠模式。其在可连接模式下,因此提供与中央设备的连接。- 非常漂亮的香草池。现在,我需要获取设备注意。我通过开关执行此操作,该开关生成连接到GPIO_PORT_0和GPIO_PIN_1的外部中断(高到低电平)。这与SDK_5.0.4示例中类似于BLE示例,例如Prox_Reporter。或本论坛的其他例子

但我对此有意见。因此需要一些指导。

请参阅下面的代码:

A.使用app_default_sleep_mode = ach_sleep_off禁用睡眠模式。我在禁用调试器和终端程序中在keil中,查看我的printf staments。app_button_enable()含义它已配置按钮。我按外部交换机,我能够到达中断回调(void app_button_press_cb()),我已经验证了arch_ble_ext_wakeup_get()返回true。除了从未调用app_wakeup_cb()外,每个看起来都很好。这是因为我不在深度睡眠模式吗?

B.当我设置app_default_sleep_mode = arch_ext_sleep_on时,everthing工作,直到我按外部开关,然后设备进入拉拉土地。它的行为就像它丢失了它的所有I / O配置,当您从睡眠中唤醒时是正常的。但在这种情况下,唤醒控制器应接管并称为中断回调例程。但它没有。因此我的问题。

我将夸大其一谈,让我感到厌烦 - 谢谢

//==========================================================

我的代码 -

静态void app_wakeup_cb(void){
suart_printstr(“\ r \ nwakeupcb”);
//如果状态不空闲,请忽略该消息
if(ke_state_get(task_app)== app_connectable){
default_advertise_operation();
}
}

// *********************************************************************************

静态void app_button_press_cb(void){

suart_printStr(“\ r \ nbtnPressed”);

if (GetBits16(SYS_STAT_REG, PER_IS_DOWN)) {
periph_init();
}

if(arch_ble_ext_wakeup_get()){
suart_printstr(“\ r \ ngotextwup”);
ARCH_SET_SLEEP_MODE(app_default_sleep_mode);
arch_ble_force_wakeup ();
ARCH_BLE_EXT_WAKEUP_OFF();
app_easy_wakeup ();
}

}

// -------------------------------
void app_button_enable(void){

app_easy_wakeup_set(app_wakeup_cb);
wkupct_register_callback(app_button_press_cb);

if(gpio_getpinstatus(gpio_port_0,gpio_pin_1)){
wkupct_enable_irq(wkupct_pin_select(gpio_port_0,gpio_pin_1),
wkupct_pin_polarity(gpio_port_0,gpio_pin_1,wkupct_pin_polarity_low),
1,// 1事件
0);// debouncing time = 0
}

suart_printstr(“\ r \ nenb-”);
}

//---------------------------------------------------
无效app_advertise_complete(const uint8_t status){

if(status == gap_err_canceled){
ARCH_BLE_EXT_WAKEUP_ON();
}

app_button_enable();
user_app_adv_start();//如果ISAdvertisingSetactiveStactiveStiveRative Realart Advertision
}

谢谢

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

嗨jsayed,

请看看SDK的ble_app_sleepmode示例。DA14580开始发布,如果没有连接,则在预定义的一段时间(APP_ADV_DATA_UPDATE_TO)后停止发布。因此,当发布完成时,user_app_adv_undirect_complete()将被触发,并配置唤醒按钮(app_button_enable)。user_app_adv_undirect_complete注册在user_app_callbacks结构中的.app_on_adv_undirect_complete项中,该结构在user_callback_config.h中。如果我能正确理解,您注册了app_advertise_complete(),而不是user_app_adv_undirect_complete(),不是吗?请您指出来好吗?

此外,如果在调试模式下运行BLE_APP_SLEEMODE示例,以及APP_WAKEUP_CB()中的断点和app_button_press_cb()中的一个断点,您将看到按下按钮时触发它们的机器人,但首先执行app_button_press_cb()。

  1. 当设备配置为无睡眠模式时,是否停止发布广告?
  2. 您能否在If-条件下删除GPIO_GETPINSTATUS()?wkupct_enable_irq()用于检测唤醒中断,因此无需获得GPIO的状态。

谢谢,PM_DIALOG.

jsayed.
离线
最后一次露面:1年4个月前
加入:2014-12-11 23:46
谢谢你的快速

感谢您的快速回复 - 执行您建议的内容,但不幸的情况不会发生变化。

0.是的——> .app_on_adv_undirect_complete = app_advertise_complete,在user_app_callbacks结构中设置

1.不,我不停止广告,当设备配置没有睡眠模式 - 代码是相同的 - 除了我翻转睡眠模式以扩展睡眠模式。在user_config.h中,我选择一个或其他,编译和重新运行。

// const static sleep_state_t app_default_sleep_mode = arch_sleep_off;
const static sleep_state_t app_default_sleep_mode = arch_ext_sleep_on;

2.删除GPIO_GETPINSTATUS()--->完成。

情况并没有改变。欣赏来自你的更新穿透 - 谢谢... jsayed

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

嗨jsayed,

如果你不停止发布,app_advertise_complete将永远不会成功。应用程序将向堆栈发送一个GAPM_CANCEL_CMD以停止发布。一旦它完成,您将获得一个GAPM_ADV_UNDIRECT,这意味着发布过程已经完成,并且将触发app_on_adv_undirect_complete。请检查app_task.c文件。在代码中,唤醒按钮是在哪里启用的?仅在app_advertise_complete()中?

谢谢,PM_DIALOG.