OSAL之按键驱动

本博文根据协议栈1.3.2,尊重原创,注明出处,欢迎转载学习按键驱动的主要有两大块:第一:按键引脚设置; 第二:按键事件的触发检测与轮询,以及按键消息的发送 先说明第一大块,按键引脚设置, 超出cc2540片子从机的按键两个按键,按键是共地。所以它的触发方式是下降沿触发按键中断,同时程序对按键按下这个动作检测是中断方式检测,一旦有按键按下,触发一个按键轮询函数执行,同时把对按键的检测方式换成轮询
摘要由CSDN通过智能技术生成

本博文根据协议栈1.3.2,尊重原创,注明出处,欢迎转载


学习按键驱动的主要有两大块:

第一:按键引脚设置
第二:按键事件的触发检测与轮询,以及按键消息的发送
先说明第一大块,按键引脚设置, 超出cc2540片子从机的按键两个按键,按键是共地。所以它的触发方式是下降沿触发按键中断,同时程序对按键按下这个动作检测是中断方式检测,一旦有按键按下,触发一个按键轮询函数执行,同时把对按键的检测方式换成轮询模式。所以对按键引脚设置的内容也就出来了。主要一下几个方面:
1、设置按键映射到的物理引脚GPIO特性
2、对引脚的输入输出模式设置,
3、最重要的是对按键引脚中断寄存器的设置

//触发按键轮询函数执行先延时15毫秒,达到去抖动的效果
#define HAL_KEY_DEBOUNCE_VALUE  15   //15ms的去抖动, 
/* CPU port interrupt */ //这里对寄存器特定位这样宏定义是有好处的,好好体会
#define HAL_KEY_CPU_PORT_0_IF P0IF    //P0口中断标志位
#define HAL_KEY_CPU_PORT_2_IF P2IF    //P2口中断标志位 ,0无中断,1有中断发生
#if defined ( CC2540_MINIDK ) || (iTA)    //按键引脚定义封装
/* SW_1 is at P0.0闪烁功能 */
#define HAL_KEY_SW_1_PORT   P0 //按键映射到物理引脚P0引脚,但是没有P0.0这样定义,这是一个处理方法
#define HAL_KEY_SW_1_BIT    BV(0)    //这个宏提供了对P0.0的精确控制,对P0.0置1这两个宏组合可以发现P0.0按键按下,是我们按键轮询的依据
#define HAL_KEY_SW_1_SEL    P0SEL    //P0SEL 引脚功能选择 0 GPIO ,1 外设
#define HAL_KEY_SW_1_DIR    P0DIR     //设置引脚输入 0 /输出 1

/* SW_2 is at P0.1 模拟来电*/
#define HAL_KEY_SW_2_PORT   P0
#define HAL_KEY_SW_2_BIT    BV(1)
#define HAL_KEY_SW_2_SEL    P0SEL
#define HAL_KEY_SW_2_DIR    P0DIR

/* SW_3 is at P0.2 模式转换*/
#define HAL_KEY_SW_3_PORT   P0
#define HAL_KEY_SW_3_BIT    BV(2)
#define HAL_KEY_SW_3_SEL    P0SEL
#define HAL_KEY_SW_3_DIR    P0DIR
//P0.0 按键中断设置
#define HAL_KEY_SW_1_IEN      IEN1  /* CPU interrupt mask register P0口中断总开关,对P0.0~P0.7所有端口控制*/
#define HAL_KEY_SW_1_ICTL     P0IEN /* Port Interrupt Control register端口P0.0~P0.7中断开关,每个端口的分别控制 */
//下面这两个宏是对上面两个宏进行设置的宏
#define HAL_KEY_SW_1_ICTLBIT  BV(0) /* P0IEN - P0.0 enable/disable bit */
#define HAL_KEY_SW_1_IENBIT   BV(5) /* Mask bit for all of Port_0 */
//当P0.0~P0.7发生中断时P0IFG相应位置位
#define HAL_KEY_SW_1_PXIFG    P0IFG /* Interrupt flag at source 当P0.0到P0.7有中断发生时,相应位置位*/

//P0.1 按键中断设置
#define HAL_KEY_SW_2_IEN      IEN1  /* CPU interrupt mask register */
#define HAL_KEY_SW_2_ICTL     P0IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_2_ICTLBIT  BV(1) /* P0IEN - P0.1 enable/
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值