你好,
我工作的项目中,设备的默认睡眠模式是延长睡眠模式。我试图唤醒设备使用同步和异步机制。
我们面临的问题是设备从计时器回调中醒来,但不是从外部中断中醒来。
下面是使用外部中断用于唤醒配置的代码片段:
空白set_pad_functions () {
GPIO_ConfigurePin(GPIO_ACC_INT2_PORT, GPIO_ACC_INT2_PIN, INPUT_PULLDOWN, PID_GPIO, false);
}
void user_app_disconnect(结构gapc_disconnect_ind const *param)
{
start_adv ();
}
空白start_adv ()
{
arch_ble_ext_wakeup_on ();
app_button_enable ();
}
静态孔隙app_button_enable(空白)
{
app_easy_wakeup_set (app_wakeup_cb);
wkupct_register_callback (app_button_press_cb);
wkupct_enable_irq(WKUPCT_PIN_SELECT(GPIO_ACC_INT2_PORT, GPIO_ACC_INT2_PIN), //选择pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)
wkupct_pin_极性(GPIO_ACC_INT2_PORT, GPIO_ACC_INT2_PIN, wkupct_pin_极化_high), //极性低
1, // 1事件
40);//揭发时间= 0
}
静态孔隙app_wakeup_cb(空白)
{
}
静态孔隙app_button_press_cb(空白)
{
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
{
periph_init ();
}
如果(arch_ble_ext_wakeup_get ())
{
arch_set_sleep_mode (app_default_sleep_mode);
arch_ble_force_wakeup ();
arch_ble_ext_wakeup_off ();
app_easy_wakeup ();
}
}
我所面临的问题是,在接收触发器时,程序控制到达函数app_button_press_cb(),而不是函数app_wakeup_cb()。请提出可能的原因。
谢谢
嗨wisilica,
威尔在中断发生时,如果设备到达app_button_press_cb()这意味着设备中断,如果它从未到达app_wakeup_cb这意味着执行到达app_easy_wakeup()这意味着arch_ble_ext_wakeup_get()是错误的。由于arch_ble_ext_wakeup_get()是假的,我假设您调用arch_ble_ext_wakeup_off(),然后您不调用arch_ble_ext_wakeup_on()来设置sleep_ext_force标志为真。
由于MT_dialog
你好,
实际上,arch_ble_ext_wakeup_get()是true(通过发出断点进行检查)。控件达到app_easy_wakeup()中的ke_msg_send_basic(wakeup_id, TASK_APP, 0)部分。但是控件并没有到达app_wakeup_cb()。我也使用计时器为基础的唤醒。同时做两种唤醒机制有什么问题吗?基于计时器的唤醒工作完美。
谢谢
嗨wisilica,
如果app_wakeup_cb()不会触发但设置和发送的消息(app_easy_wakeup_set()和app_easy_wakeup()被调用)检查user_modules_config.h文件并确保EXCLUDE_DLG_MSG定义和设置为0,也许你已经排除错误的模块。不,我认为计时器不会有问题。
由于MT_dialog