微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > z-stack协议HA协议中,关于按键轮询方式

z-stack协议HA协议中,关于按键轮询方式

时间:10-02 整理:3721RD 点击:

今天学习了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);
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top