你好,
我醒着的时候有个问题。
这是代码:
空白periph_init(空白)
{
//启动外设的电源域
SetBits16 (PMU_CTRL_REG PERIPH_SLEEP 0);
while (!(GetWord16(SYS_STAT_REG) & PER_IS_UP));
SetBits16 (CLK_16M_REG XTAL16_BIAS_SH_DISABLE 1);
/ /罗补丁
patch_func ();
/ /初始化垫
set_pad_functions ();
//启用垫子
SetBits16 (SYS_CTRL_REG PAD_LATCH_EN 1);
//中断GPIO管脚
wkupct_register_callback (app_wkup_handler);
x00000040 wkupct_enable_irq (0, 1, 1, 0 x3f);/ / 3 f = 63毫秒
set_system_timer ();
set_pwm_timer ();
}
空白app_wkup_handler (void) {
如果(app_env.sleep) {
/ /标志睡眠
app_env.sleep = false;
app_env.cont_sleep = 0;
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
/ /恢复广播
如果(app_ble_ext_wakeup_get ()) {
SetBits32 (GP_CONTROL_REG BLE_WAKEUP_REQ 1);
app_ble_ext_wakeup_off ();
}
/ /开始广告
app_adv_start ();
app_timer_set (READ_SENS TASK_APP 1);
}
}
Int sleep_on_handler(ke_msg_id_t const msgid, const void *param, ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
app_env.sleep = true;
如果(ke_state_get (TASK_MYAPP) = = MYAPP_CONNECTED)
app_disconnect ();
其他的
app_adv_stop ();
app_ble_ext_wakeup_on ();
返回(KE_MSG_CONSUMED);
}
系统从传感器做10个读数,打开LED并调用sleep_on_handler停止广告或断开和关闭LED。如果按下按钮,则调用app_wkup_handler并发布重新启动和传感器重新启动的读数。如果按下按钮后数秒即表示系统关机,则不会有任何问题。
数分钟或数小时后按下按钮,系统未正常启动:
——开始广告
- led不开机
—DA不接受连接
- DA不要关掉
问题并不总是发生,但有一定的频率,大约50%的时间。
有什么问题吗?我在唤醒过程中或在关闭设备之前做错了什么?
嗨Guiseppe,
我可以看到,在唤醒函数中,您设置了对传感器进行轮询的内核计时器。你能遵循这个常见问题解答吗http://support.dialog-semiconductor.com/faq/how-use-ketimer-during-wakeu..。也许这就是你所面临的问题的原因。除此之外,你必须调试你的程序,以检查为什么当你发出中断时,你的设备没有唤醒。
由于MT_dialog