WCH沁恒单片机
直播中

宜家

9年用户 1209经验值
私信 关注
[问答]

LED驱动成功了但是KEY中断使用不了,轮询key可以用按下去会响应两次是怎么回事?

/********************************** (C) COPYRIGHT *******************************

* File Name          : KEY.c

* Author             : WCH

* Version            : V1.0

* Date               : 2014/05/12

* Description        :

*******************************************************************************/







/******************************************************************************/

/* 头文件包含 */

#include "CH57x_common.h"

#include "HAL.h"





/**************************************************************************************************

*                                        GLOBAL VARIABLES

**************************************************************************************************/



uint8 Hal_KeyIntEnable;           /* interrupt enable/disable flag */



// Registered keys task ID, initialized to NOT USED.

static uint8 registeredKeysTaskID = TASK_NO_TASK;

static uint8 halKeySavedKeys;     /* 保留按键最后的状态,用于查询是否有键值变化 */

static uint8 KeyConfigFlag;     /* 按键是否配置标志位 */





/**************************************************************************************************

*                                        FUNCTIONS - Local

**************************************************************************************************/

static halKeyCBack_t pHalKeyProcessFunction;     /* callback function */





/**************************************************************************************************

* @fn      HAL_KeyInit

*

* @brief   Initilize Key Service

*

* @param   none

*

* @return  None

**************************************************************************************************/

void HAL_KeyInit( void )

{

  /* Initialize previous key to 0 */

  halKeySavedKeys = 0;

  /* Initialize callback function */

  pHalKeyProcessFunction  = NULL;

  /* Start with key is not configured */

  KeyConfigFlag = FALSE;

  KEY1_DIR;

  KEY1_PU;

KEY2_DIR;

  KEY2_PU;

KEY3_DIR;

  KEY3_PU;

KEY4_DIR;

  KEY4_PU;

KEY5_DIR;

  KEY5_PU;

KEY6_DIR;

  KEY6_PU;

KEY7_DIR;

  KEY7_PU;

KEY8_DIR;

  KEY8_PU;

KEY9_DIR;

  KEY9_PU;

KEY10_DIR;

  KEY10_PU;

KEY11_DIR;

  KEY11_PU;

KEY12_DIR;

  KEY12_PU;

  HalKeyConfig( HAL_KEY_INTERRUPT_ENABLE, HalKeyCallback );

}



void HAL_KEY_RegisterForKeys( tmosTaskID id )

{

registeredKeysTaskID = id;

}



/**************************************************************************************************

* @fn      HalKeyConfig

*

* @brief   Configure the Key serivce

*

* @param   interruptEnable - TRUE/FALSE, enable/disable interrupt

*          cback - pointer to the CallBack function

*

* @return  None

**************************************************************************************************/

void HalKeyConfig (uint8 interruptEnable, halKeyCBack_t cback)

{

  /* Enable/Disable Interrupt or */

  Hal_KeyIntEnable = interr
加载更多

回帖(1)

李建

2022-8-31 10:17:08
1、如果是通过GPIO中断方式,可以在main中自己写一个KEY_IO函数。
附件是带IO中断的单独例子。
CH573_IO_ZPF.zip
2、如果添加BLE功能,则需要注意,中断处理函数时间<1ms。否则会出现丢失数据。注意丢失数据,不一定会出现BLE断开。
3、建议在TMOS框架下,使用轮询IO口的方式,同时优化按键抖动等应用。如果非要中断,那么通过中断标志位,去外部处理IO数据。当然耗费的时间和轮询按键时间,反而增多,具体需要根据应用更多考量。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分