zigbee 协议栈 按键驱动
2017-05-11 09:54
127 查看
1、在hal_key.h中增加下面代码,其中第一、二个WDS--是我修改原有的,最后一个WDS--是我增加的。如果增加自己的按键则,像我最后一个WDS-- 增加一样就好了,上面两个WDS--可以不理
/* Switches (keys) */
#define HAL_KEY_SW_1 0x12 // WDS--
#define HAL_KEY_SW_2 0x02 // Joystick right
#define HAL_KEY_SW_5 0x04 // Joystick center
#define HAL_KEY_SW_4 0x08 // Joystick left
#define HAL_KEY_SW_3 0x10 // Joystick down
#define HAL_KEY_SW_6 0x11 // WDS--
#define HAL_KEY_SW_7 0x40 // Button S2 if available
#define HAL_KEY3 0x13 //WDS--
2、在hal_board_cfg.h中增加以下代码,如WDS-- ADD 是我增加的按键
/* S1 */
#define PUSH1_BV BV(1)
#define PUSH1_SBIT P0_1
#if defined (HAL_BOARD_CC2530EB_REV17)
#define PUSH1_POLARITY ACTIVE_HIGH
#elif defined (HAL_BOARD_CC2530EB_REV13)
#define PUSH1_POLARITY ACTIVE_LOW
#else
#error Unknown Board Indentifier
#endif
/* Joystick Center Press */
#define PUSH2_BV BV(0)
#define PUSH2_SBIT P2_0
#define PUSH2_POLARITY ACTIVE_HIGH
//WDS-- ADD
//P0.4
#define PUSH5_BV BV(4)
#define PUSH5_SBIT P0_4
#if defined (HAL_BOARD_CC2530EB_REV17)
#define PUSH5_POLARITY ACTIVE_HIGH
#elif defined (HAL_BOARD_CC2530EB_REV13)
#define PUSH5_POLARITY ACTIVE_LOW
#else
#error Unknown Board Indentifier
#endif
3、在hal_board_cfg.h中增加以下代码,如WDS-- ADD 是我增加的
/* ----------- Push Buttons ---------- */
#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBIT))
#define HAL_PUSH_BUTTON2() (PUSH2_POLARITY (PUSH2_SBIT))
#define HAL_PUSH_BUTTON3() (0)
#define HAL_PUSH_BUTTON4() (0)
#define HAL_PUSH_BUTTON5() (0)
#define HAL_PUSH_BUTTON6() (0)
//WDS-- ADD
#define HAL_PUSH_BUTTON5() (PUSH5_POLARITY (PUSH5_SBIT))
4、在hal_key.c中增加以下代码,如WDS-- ADD 是我增加的
#define HAL_KEY_RISING_EDGE 0
#define HAL_KEY_FALLING_EDGE 1
#define HAL_KEY_DEBOUNCE_VALUE 25
#define HAL_KEY_POLLING_VALUE 100
/* CPU port interrupt */
#define HAL_KEY_CPU_PORT_0_IF P0IF//WDS-- 端口0中断标志
#define HAL_KEY_CPU_PORT_2_IF P2IF//WDS-- 端口2中断标志
/* SW_6 is at P0.1 */
#define HAL_KEY_SW_6_PORT P0 //WDS-- 端口P0
#define HAL_KEY_SW_6_BIT BV(1)//按WDS-- 键所在IO口为P0_1
#define HAL_KEY_SW_6_SEL P0SEL//WDS-- 普通IO
#define HAL_KEY_SW_6_DIR P0DIR//WDS-- 方向输入
/* edge interrupt */
#define HAL_KEY_SW_6_EDGEBIT BV(0)
#define HAL_KEY_SW_6_EDGE HAL_KEY_FALLING_EDGE//WDS-- 中断边沿触发 PICTL寄存器
/* SW_6 interrupts */
#define HAL_KEY_SW_6_IEN IEN1 /* CPU interrupt mask register */
#define HAL_KEY_SW_6_IENBIT BV(5) /* Mask bit for all of Port_0 */
#define HAL_KEY_SW_6_ICTL P0IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_6_ICTLBIT BV(1) /* P0IEN - P0.1 enable/disable bit */
#define HAL_KEY_SW_6_PXIFG P0IFG /* Interrupt flag at source */
/* Joy stick move at P2.0 */
#define HAL_KEY_JOY_MOVE_PORT P2 //WDS-- 端口P0
#define HAL_KEY_JOY_MOVE_BIT BV(0)//WDS-- 按键所在IO口为P2_o
#define HAL_KEY_JOY_MOVE_SEL P2SEL//WDS-- 普通IO
#define HAL_KEY_JOY_MOVE_DIR P2DIR//WDS-- 方向输入
/* edge interrupt */
#define HAL_KEY_JOY_MOVE_EDGEBIT BV(3)
#define HAL_KEY_JOY_MOVE_EDGE HAL_KEY_FALLING_EDGE
/* Joy move interrupts */
#define HAL_KEY_JOY_MOVE_IEN IEN2 /* CPU interrupt mask register */
#define HAL_KEY_JOY_MOVE_IENBIT BV(1) /* Mask bit for all of Port_2 */
#define HAL_KEY_JOY_MOVE_ICTL P2IEN /* Port Interrupt Control register */
#define HAL_KEY_JOY_MOVE_ICTLBIT BV(0) /* P2IENL - P2.0<->P2.3 enable/disable bit */
#define HAL_KEY_JOY_MOVE_PXIFG P2IFG /* Interrupt flag at source */
//WDS-- ADD --BUTTON
//P0.4
#define HAL_KEY1_PORT P0 //WDS-- 端口P0
#define HAL_KEY1_BIT BV(4)//按WDS-- 键所在IO口为P0_4
#define HAL_KEY1_SEL P0SEL//WDS-- 普通IO
#define HAL_KEY1_DIR P0DIR//WDS-- 方向输入
/* edge interrupt */
#define HAL_KEY1_EDGEBIT BV(0)//WDS-- 什么意思 ???
#define HAL_KEY1_EDGE HAL_KEY_FALLING_EDGE//WDS-- 中断边沿触发 PICTL寄存器
/* SW_6 interrupts */
#define HAL_KEY1_IEN IEN1 /* CPU interrupt mask register */
#define HAL_KEY1_IENBIT BV(5) /* Mask bit for all of Port_0 *///WDS-- 什么意思 ???
#define HAL_KEY1_ICTL P0IEN /* Port Interrupt Control register */
#define HAL_KEY1_ICTLBIT BV(4) /* P0IEN - P0.4 enable/disable bit */
#define HAL_KEY1_PXIFG P0IFG /* Interrupt flag at source */
5、在hal_key.c中增加以下代码,如WDS-- ADD 是我增加的,可把原有的屏蔽了
if(HAL_PUSH_BUTTON5())//WDS--
{
keys |= HAL_KEY3;
}
6、在OnBard.c将
void InitBoard( uint8 level )
{
if ( level == OB_COLD )
{
// IAR does not zero-out this byte below the XSTACK.
*(uint8 *)0x0 = 0;
// Interrupts off
osal_int_disable( INTS_ALL );
// Check for Brown-Out reset
ChkReset();
}
else // !OB_COLD
{
/* Initialize Key stuff */
HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);//修改此处
}
}
改为:
HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);
记得在任务初始化函数中加入
RegisterForKeys( GenericApp_TaskID ); //注册按键事件
图7:
最后再在Coordinator.c中的
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
添加事件及其处理函数
case KEY_CHANGE:
GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
再在
static void GenericApp_HandleKeys( uint8 shift, uint8 keys )
{
zAddrType_t dstAddr;
if ( keys & HAL_KEY_SW_1 )
{
}
if ( keys & HAL_KEY_SW_2 )
{
}
if ( keys & HAL_KEY_SW_3 )
{
}
if ( keys & HAL_KEY_SW_4 )
{
}
if ( keys & HAL_KEY_SW_8 ) //添加自己的按键及其处理函数
{
HalLedSet(HAL_LED_1, HAL_LED_MODE_FLASH);
}
}
最后烧到开发板中即可,祝大家实验成功。
/* Switches (keys) */
#define HAL_KEY_SW_1 0x12 // WDS--
#define HAL_KEY_SW_2 0x02 // Joystick right
#define HAL_KEY_SW_5 0x04 // Joystick center
#define HAL_KEY_SW_4 0x08 // Joystick left
#define HAL_KEY_SW_3 0x10 // Joystick down
#define HAL_KEY_SW_6 0x11 // WDS--
#define HAL_KEY_SW_7 0x40 // Button S2 if available
#define HAL_KEY3 0x13 //WDS--
2、在hal_board_cfg.h中增加以下代码,如WDS-- ADD 是我增加的按键
/* S1 */
#define PUSH1_BV BV(1)
#define PUSH1_SBIT P0_1
#if defined (HAL_BOARD_CC2530EB_REV17)
#define PUSH1_POLARITY ACTIVE_HIGH
#elif defined (HAL_BOARD_CC2530EB_REV13)
#define PUSH1_POLARITY ACTIVE_LOW
#else
#error Unknown Board Indentifier
#endif
/* Joystick Center Press */
#define PUSH2_BV BV(0)
#define PUSH2_SBIT P2_0
#define PUSH2_POLARITY ACTIVE_HIGH
//WDS-- ADD
//P0.4
#define PUSH5_BV BV(4)
#define PUSH5_SBIT P0_4
#if defined (HAL_BOARD_CC2530EB_REV17)
#define PUSH5_POLARITY ACTIVE_HIGH
#elif defined (HAL_BOARD_CC2530EB_REV13)
#define PUSH5_POLARITY ACTIVE_LOW
#else
#error Unknown Board Indentifier
#endif
3、在hal_board_cfg.h中增加以下代码,如WDS-- ADD 是我增加的
/* ----------- Push Buttons ---------- */
#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBIT))
#define HAL_PUSH_BUTTON2() (PUSH2_POLARITY (PUSH2_SBIT))
#define HAL_PUSH_BUTTON3() (0)
#define HAL_PUSH_BUTTON4() (0)
#define HAL_PUSH_BUTTON5() (0)
#define HAL_PUSH_BUTTON6() (0)
//WDS-- ADD
#define HAL_PUSH_BUTTON5() (PUSH5_POLARITY (PUSH5_SBIT))
4、在hal_key.c中增加以下代码,如WDS-- ADD 是我增加的
#define HAL_KEY_RISING_EDGE 0
#define HAL_KEY_FALLING_EDGE 1
#define HAL_KEY_DEBOUNCE_VALUE 25
#define HAL_KEY_POLLING_VALUE 100
/* CPU port interrupt */
#define HAL_KEY_CPU_PORT_0_IF P0IF//WDS-- 端口0中断标志
#define HAL_KEY_CPU_PORT_2_IF P2IF//WDS-- 端口2中断标志
/* SW_6 is at P0.1 */
#define HAL_KEY_SW_6_PORT P0 //WDS-- 端口P0
#define HAL_KEY_SW_6_BIT BV(1)//按WDS-- 键所在IO口为P0_1
#define HAL_KEY_SW_6_SEL P0SEL//WDS-- 普通IO
#define HAL_KEY_SW_6_DIR P0DIR//WDS-- 方向输入
/* edge interrupt */
#define HAL_KEY_SW_6_EDGEBIT BV(0)
#define HAL_KEY_SW_6_EDGE HAL_KEY_FALLING_EDGE//WDS-- 中断边沿触发 PICTL寄存器
/* SW_6 interrupts */
#define HAL_KEY_SW_6_IEN IEN1 /* CPU interrupt mask register */
#define HAL_KEY_SW_6_IENBIT BV(5) /* Mask bit for all of Port_0 */
#define HAL_KEY_SW_6_ICTL P0IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_6_ICTLBIT BV(1) /* P0IEN - P0.1 enable/disable bit */
#define HAL_KEY_SW_6_PXIFG P0IFG /* Interrupt flag at source */
/* Joy stick move at P2.0 */
#define HAL_KEY_JOY_MOVE_PORT P2 //WDS-- 端口P0
#define HAL_KEY_JOY_MOVE_BIT BV(0)//WDS-- 按键所在IO口为P2_o
#define HAL_KEY_JOY_MOVE_SEL P2SEL//WDS-- 普通IO
#define HAL_KEY_JOY_MOVE_DIR P2DIR//WDS-- 方向输入
/* edge interrupt */
#define HAL_KEY_JOY_MOVE_EDGEBIT BV(3)
#define HAL_KEY_JOY_MOVE_EDGE HAL_KEY_FALLING_EDGE
/* Joy move interrupts */
#define HAL_KEY_JOY_MOVE_IEN IEN2 /* CPU interrupt mask register */
#define HAL_KEY_JOY_MOVE_IENBIT BV(1) /* Mask bit for all of Port_2 */
#define HAL_KEY_JOY_MOVE_ICTL P2IEN /* Port Interrupt Control register */
#define HAL_KEY_JOY_MOVE_ICTLBIT BV(0) /* P2IENL - P2.0<->P2.3 enable/disable bit */
#define HAL_KEY_JOY_MOVE_PXIFG P2IFG /* Interrupt flag at source */
//WDS-- ADD --BUTTON
//P0.4
#define HAL_KEY1_PORT P0 //WDS-- 端口P0
#define HAL_KEY1_BIT BV(4)//按WDS-- 键所在IO口为P0_4
#define HAL_KEY1_SEL P0SEL//WDS-- 普通IO
#define HAL_KEY1_DIR P0DIR//WDS-- 方向输入
/* edge interrupt */
#define HAL_KEY1_EDGEBIT BV(0)//WDS-- 什么意思 ???
#define HAL_KEY1_EDGE HAL_KEY_FALLING_EDGE//WDS-- 中断边沿触发 PICTL寄存器
/* SW_6 interrupts */
#define HAL_KEY1_IEN IEN1 /* CPU interrupt mask register */
#define HAL_KEY1_IENBIT BV(5) /* Mask bit for all of Port_0 *///WDS-- 什么意思 ???
#define HAL_KEY1_ICTL P0IEN /* Port Interrupt Control register */
#define HAL_KEY1_ICTLBIT BV(4) /* P0IEN - P0.4 enable/disable bit */
#define HAL_KEY1_PXIFG P0IFG /* Interrupt flag at source */
5、在hal_key.c中增加以下代码,如WDS-- ADD 是我增加的,可把原有的屏蔽了
if(HAL_PUSH_BUTTON5())//WDS--
{
keys |= HAL_KEY3;
}
6、在OnBard.c将
void InitBoard( uint8 level )
{
if ( level == OB_COLD )
{
// IAR does not zero-out this byte below the XSTACK.
*(uint8 *)0x0 = 0;
// Interrupts off
osal_int_disable( INTS_ALL );
// Check for Brown-Out reset
ChkReset();
}
else // !OB_COLD
{
/* Initialize Key stuff */
HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);//修改此处
}
}
改为:
HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);
记得在任务初始化函数中加入
RegisterForKeys( GenericApp_TaskID ); //注册按键事件
图7:
最后再在Coordinator.c中的
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
添加事件及其处理函数
case KEY_CHANGE:
GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
再在
static void GenericApp_HandleKeys( uint8 shift, uint8 keys )
{
zAddrType_t dstAddr;
if ( keys & HAL_KEY_SW_1 )
{
}
if ( keys & HAL_KEY_SW_2 )
{
}
if ( keys & HAL_KEY_SW_3 )
{
}
if ( keys & HAL_KEY_SW_4 )
{
}
if ( keys & HAL_KEY_SW_8 ) //添加自己的按键及其处理函数
{
HalLedSet(HAL_LED_1, HAL_LED_MODE_FLASH);
}
}
最后烧到开发板中即可,祝大家实验成功。
相关文章推荐
- [蓝点ZigBee] Zstack 之按键驱动以及控制LED灯 ZigBee/CC2530 视频资料
- Zigbee协议栈内核分析 - 按键分析
- 【原创】zstack - 协议栈程序精简日志-按键驱动移植
- ZIGBEE协议栈从底层添加一个自己的按键
- zigbee学习之路(十五):基于协议栈的按键实验
- ZigBee TI ZStack CC2530 3.14 按键驱动01-轮询模式
- ZigBee组网学习笔记(四)--协议栈按键实验
- ZigBee TI ZStack CC2530 3.15 按键驱动02-中断模式
- 按键中断的platform bus设备和驱动 收藏
- A10开发板增加红外驱动及android层红外按键修改介绍
- OK6410中断按键 混杂设备驱动
- 字符设备驱动之按键中断——FS2410
- 嵌入式linux驱动-usb实现按键功能笔记
- Linux设备驱动之button按键驱动学习与小结
- linux字符设备按键驱动之防抖动
- Linux开发九_按键驱动
- 基于platform总线的中断(按键)字符设备驱动设计
- fl2440内核自带按键驱动移植及hexdump命令
- 蜕变成蝶~Linux设备驱动之按键设备驱动
- C#驱动级模拟按键操作