2个帖子/ 0新
最后一篇
Giuseppe.
离线
最后一次露面:4年7个月前
专家
加入:2015-03-25 13:34
唤醒问题

大家好,
醒来时我遇到了问题。
这是代码:

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%的时间。
问题是什么?在唤醒过程中或关闭设备之前,我做错了什么?

设备:
mt_dialog.
离线
最后一次露面:3天12小时前
职员
加入:2015-06-08 11:34
嗨guiseppe,

嗨guiseppe,

我可以看到在唤醒功能中,您可以设置轮询传感器的内核计时器。你能遵循这个常见问题解答吗?http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...也许这导致你面临的普通。除了您必须调试程序以检查您在发出中断时设备不会唤醒的原因。

谢谢mt_dialog.