最近在使用Nordic公司的NRF开发板进行开发,需要使用长按功能,看到网上这方面的总结不太多。因此写一篇关于长按功能的实现分析。
首先是按钮的初始化,初始化的入口在bsp_init()中,为了实现按钮功能,使用了 bsp_event_to_button_action_assign()这个函数,同一个按钮可以assign多个动作响应,每个动作可以对应于一个相应的动作处理事件,可用的按钮动作有三个,已经在bsp_config.h中定义过。
按钮动作处理事件可以使用预定义的事件或自己在bsp.h中定义。
当按钮被按下或释放,会产生一个中断,相应的中断处理函数是bsp.c中的bsp_button_event_handler(uint8_t pin_no, uint8_t button_action)函数,该函数的流程图绘制如下:
如果按钮定义了长按定时器,那么在短按的时候就会触发这个定时器,如果在定时器结束之前释放了按钮,则进入释放事件处理;如果定时器结束时还没有释放按钮,