This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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);
    }
    }