Z-Stack 配置按键为中断模式

以下以P1.1为例

需要修改的地方:

1.开启ISR_KEYINTERRUPT的宏定义

在OnBoard.c中取消#define ISR_KEYINTERRUPT的注释;

2.设置按键管脚想关的定义

在hal_key.c中修改KEY_SW_6相关的定义为对应的按键GPIO

#define HAL_KEY_SW_6_PORT   P1                             //按键port口为P1
#define HAL_KEY_SW_6_BIT    BV(1)
    //按键bit为1
#define HAL_KEY_SW_6_SEL    P1SEL
    //选择寄存器为P1的选择寄存器
#define HAL_KEY_SW_6_DIR    P1DIR
                            //方向寄存器为P1的方向寄存器

2.设置中断触发方式

在hal_key.c中修改KEY_SW_6_EDGE相关的定义

#define HAL_KEY_SW_6_EDGEBIT  BV(1)           //BIT为1
#define HAL_KEY_SW_6_EDGE     HAL_KEY_FALLING_EDGE
       //下降沿触发中断

3.设置中断寄存器

需要查看CC2530的数据手册修改hal_key.c中SW_6 interrupts相关的定义

#define HAL_KEY_SW_6_IEN      IEN2   //port口中断标志对应的IEN寄存器
#define HAL_KEY_SW_6_IENBIT   BV(4)  //port口中断标志所在IENx寄存器中的哪一位
#define HAL_KEY_SW_6_ICTL     P1IEN  //port中断控制寄存器
#define HAL_KEY_SW_6_ICTLBIT  BV(1)  //中断控制寄存器的对应位
#define HAL_KEY_SW_6_PXIFG    P1IFG  //中断标志源

4.设置CPU port中断

      在hal_key.c中修改KEY_CPU_PORT相关的定义

#define HAL_KEY_CPU_PORT_1_IF P1IF

5.注册中断服务函数

HAL_ISR_FUNCTION( halKeyPort1Isr, P1INT_VECTOR )
{
  HAL_ENTER_ISR();


  if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)
  {
    halProcessKeyInterrupt();
  }


  /*
    Clear the CPU interrupt flag for Port_0
    PxIFG has to be cleared before PxIF
  */
  HAL_KEY_SW_6_PXIFG = 0;
  HAL_KEY_CPU_PORT_1_IF = 0;
  
  CLEAR_SLEEP_MODE();
  HAL_EXIT_ISR();
}

你可能感兴趣的:(zigbee开发)