你好,
我正在研究一个项目,其中DA 14580设备默认在延长睡眠模式下。在接收GPIO中断时,设备广告少于1秒,然后进入扫描模式。在扫描之间,如果接收到任何数据包,则设备还向这些数据包发布。默认睡眠模式已扩展,并在User_App_Init()中调用其。
void user_app_init(){
//设置睡眠模式
ARCH_SET_SLEEP_MODE(app_default_sleep_mode);
}
现在,要输入睡眠模式和从外部中断唤醒,执行以下步骤:
void goo_to_sleep(void)
{
ARCH_BLE_EXT_WAKEUP_ON();
//配置唤醒按钮
app_button_enable();
}
静态void app_button_press_cb(void)
{
if(getBits16(sys_stat_reg,per_is_down))
{
periph_init();
}
my_state = arch_ble_ext_wakeup_get();
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();
}
}
/ **
****************************************************************************************
* @brief设置按钮作为唤醒触发器
* @return void.
****************************************************************************************
* /
静态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_int2_port,gpio_int2_pin),//选择pin(gpio_button_port,gpio_button_pin)
wkupct_pin_polarity(gpio_int2_port,gpio_int2_pin,wkupct_pin_polarity_high),//极性低
1,// 1事件
40);// debouncing time = 0
}
GPIO_INT2_PIN配置如下:
gpio_configurepin(gpio_int2_port,gpio_int2_pin,input_pulldown,pid_gpio,false);
以下是我们面临的问题:
现在,在接收到配置的GPIO上的高值时,调用函数app_button_press_cb()。My_state = Arch_ble_ext_WakeUp_Get()的值也是1.但是,函数,app_wakeup_cb()未被调用。
2.在中断发生之前消耗的电流,即在睡眠周期约为0.7mA,而不是2 UA。这是否意味着设备未进入扩展睡眠模式,并且存在于空闲状态?
请表明可能的可能原因。
嗨Wisilica,
1)您能否请检查#define exclude_dlg_msg在user_modules_config.h文件中定义为0吗?您应该将其定义为0,以便将消息放入应用程序中以由SDK处理。如果值为1,则应自己处理应用程序消息。可能,这就是App_WakeUp_CB()未被调用的原因。
2)关于电流消耗,睡眠模式中的电流应在200A周围。因此,是的,您的设备未进入扩展睡眠模式,它仍处于空闲模式。
谢谢pm_dialog.