你好,
我正在研究该项目,其中设备的默认休眠模式是扩展睡眠模式。我试图使用同步和异步机制来唤醒设备。
我们面临的问题是设备从定时器回调唤醒,但不会从外部中断唤醒。
以下是使用外部中断唤醒配置的代码片段:
void set_pad_functions(){
gpio_configurepin(gpio_acc_int2_port,gpio_acc_int2_pin,input_pulldown,pid_gpio,false);
}
void user_app_disconnect(struct gapc_disconnect_ind const * param)
{
start_adv();
}
void start_adv()
{
ARCH_BLE_EXT_WAKEUP_ON();
app_button_enable();
}
静态void app_button_enable(void)
{
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_polarity(gpio_acc_int2_port,gpio_acc_int2_pin,wkupct_pin_polarity_high),//极性低
1,// 1事件
40);// debouncing time = 0
}
静态void app_wakeup_cb(void)
{
}
静态void app_button_press_cb(void)
{
if(getBits16(sys_stat_reg,per_is_down))
{
periph_init();
}
if(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_WAKESUP_OFF(),然后您不会调用ARCH_BLE_EXT_WAKEUP_ON()以便将SPEEP_EXT_FORCE标志设置为TRUE。
谢谢mt_dialog.
你好,
实际上,ARCH_BLE_EXT_WAKEUP_GET()是真的,(通过发出断点检查)。该控件在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文件并确保已定义Authure_dlg_msg并设置为0,也许您有错误地排除了模块。不,我不认为计时器应该是一个问题。
谢谢mt_dialog.