今天学习了HA协议栈中按键处理流程,先学了轮询方式,只用的是p1.0,s1的按键,学习总结下来有四个问题不太明白,
1、在最后的按键查询HalKeyPoll (void)函数里,我感觉执行不到判断HAL_PUSH_BUTTON1()这个条件里,也就是无法读取我的键值,如图所示。
2、在hal_key.c里有一个HalKeyRead ( void )函数,可以读取s1的键值,但是它在ZD_APP.c文件里的void ZDAppCheckForHoldKey( void )调用,在这里调用的作用是什么?
3、假如我把HalKeyRead ( void )放进HalKeyPoll (void)里来读取s1的按键,不知道是否可以?
4、之前用不带协议的单片机学程序,在轮询模式下都会有一个软件销抖,可是我在HA协议里没有发现这段程序,是不用软件销抖吗?
谢谢TI的技术人员和论坛的大神们回答
VV:
1, 是的
2,这个只是一瞬间的检测
3,可以。
4,中断模式的话,已经有消抖了,建议在产品中使用中断模式。查询模式比较耗电。
void halProcessKeyInterrupt (void){ bool valid=FALSE;
if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT) /* Interrupt Flag has been set */ { HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */ valid = TRUE; }
if (HAL_KEY_JOY_MOVE_PXIFG & HAL_KEY_JOY_MOVE_BIT) /* Interrupt Flag has been set */ { HAL_KEY_JOY_MOVE_PXIFG = ~(HAL_KEY_JOY_MOVE_BIT); /* Clear Interrupt Flag */ valid = TRUE; }
if (valid) { osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE); }}