z-stack协议HA协议中,关于按键轮询方式
今天学习了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的技术人员和论坛的大神们回答
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);
}
}