大家好,
醒来时我遇到了问题。
这是代码:
void periph_init(空白)
{
//上电外围设备的电源域
setBits16(PMU_CTRL_REG,PERIPH_SLEEP,0);
而(!(getword16(sys_stat_reg)&per_is_up));
setBits16(CLK_16M_REG,XTAL16_BIAS_SH_DISABLE,1);
// rom补丁
patch_func();
// init pad.
set_pad_functions();
//启用焊盘
SetBits16(Sys_ctrl_reg,pad_latch_en,1);
//在GPIO引脚上中断
wkupct_register_callback(app_wkup_handler);
wkupct_enable_irq(0x00000040,1,1,0x3f);// 3f = 63ms
set_system_timer();
set_pwm_timer();
}
void app_wkup_handler(void){
if(app_env.sleep){
//旗下睡觉
app_env.sleep = false;
app_env.cont_sleep = 0;
if(getBits16(sys_stat_reg,per_is_down))
periph_init();
//恢复收音机
if(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 msgs,const void * param,ke_task_id_t const dest_id,ke_task_id_t const src_id)
{
app_env.sleep = true;
if(ke_state_get(task_myapp)== myapp_connected)
app_disconnect();
别的
app_adv_stop();
app_ble_ext_wakeup_on();
return(ke_msg_consumed);
}
系统从传感器进行10次读数,打开LED并调用Sleep_On_Handler,停止广告或断开并关闭LED。如果按下按钮,请调用app_wkup_handler并宣传重启和读取传感器重启。如果在几秒钟后按下按钮,系统会关闭系统,则没有任何问题。
如果在几分钟或几个小时后按下按钮,系统将无法正常启动:
- 开始广告
- LED不打开
- da不接受连接
- da不要关闭
问题不会始终发生但具有一定的频率,大约50%的时间。
问题是什么?在唤醒过程中或关闭设备之前,我做错了什么?
嗨guiseppe,
我可以看到在唤醒功能中,您可以设置轮询传感器的内核计时器。你能遵循这个常见问题解答吗?http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...也许这导致你面临的普通。除了您必须调试程序以检查您在发出中断时设备不会唤醒的原因。
谢谢mt_dialog.