您的位置:首页 > 其它

Button press & debounce

2015-11-13 10:35 204 查看
一、先看下原始代码流程,按键1中断进入函数:

void usr_button1_cb(void)
{ ke_evt_set(1UL << EVENT_BUTTON1_PRESS_ID);
}建立事件 EVENT_BUTTON1_PRESS_ID

而在事件初始化里定义了EVENT_BUTTON1_PRESS_ID 对应的函数是app_event_button1_press_handler:

if(KE_EVENT_OK != ke_evt_callback_set(EVENT_BUTTON1_PRESS_ID,
app_event_button1_press_handler))
{
ASSERT_ERR(0);
}

所以按键1的处理函数是app_event_button1_press_handler
void app_event_button1_press_handler(void)
{
#if ((QN_DEEP_SLEEP_EN) && (!QN_32K_RCO))
if (sleep_env.deep_sleep)
{
sleep_env.deep_sleep = false;
// start 32k xtal wakeup timer
wakeup_32k_xtal_start_timer();
}
#endif

// delay 20ms to debounce
ke_timer_set(APP_SYS_BUTTON_1_TIMER, TASK_APP, 2);
ke_evt_clear(1UL << EVENT_BUTTON1_PRESS_ID);
}定时20ms进入消息APP_SYS_BUTTON_1_TIMER的处理函数,同时清除按键1的消息EVENT_BUTTON1_PRESS_ID
消息APP_SYS_BUTTON_1_TIMER对应的函数:

{APP_SYS_BUTTON_1_TIMER, (ke_msg_func_t) app_button_timer_handler},

处理函数:
int app_button_timer_handler(ke_msg_id_t const msgid, void const *param,
ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
switch(msgid)
{
case APP_SYS_BUTTON_1_TIMER:
case APP_SYS_BUTTON_2_TIMER:
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: