Zstack之HAL层增加新的按键key的分析笔记1

在Zstack中,key是由HAL层来进行抽象和管理的。在Zstack文件夹中,关于按键的代码和配置主要集中在Hal_key.c、Hal_key.h、Hal_board_cfg.h几个文件中。详细的关于Zstack 的HAL层文件组织结构请参考TI官方手册:HAL Porting Guider.pdf.

我本人使用的是网蜂的zigbee开发板,和TI的官方板子在管脚配置上是略有不同的。在按键上的差别主要表现在按键的类别和数量上。首先TI官方的板子提供了一个摇杆,可以实现四个方向的控制以及在中间可以按下共5个功能,另外还提供一个普通的按键。而网蜂的板子则提供了两个普通的按键。在按键对应的端口上,两者同样也是有所不同的。网蜂的板子主要使用了P0_4、P0_5两个,并进行了上拉。具体原理如图1所示:

  

图1

所以当按键按下的时候,按键对应的端口电压应该为低电平。这点和TI官方的板子也是截然相反的。这里所说的这些硬件上的不同,在后面的增加按键时会详细表现出来。

我对HAL层按键的修改或者增加是基于Zstack初始化按键对应的端口和按键事件检测、处理这样一个有序而清晰的流程来的。关于该流程,详细可参考我所转载的一篇博文:《Zigbee2006 CC2430按键流程》 http://blog.csdn.net/firestarway/article/details/24995779

因为Zstack 标配只使用了一个普通的按键,而我的实验需要使用两个按键,所以需要自己再在Zstack相应文件中再增加一个按键。首先,要知道一点,Zstack中是预留了第二个普通按键的宏定义的,位置在Hal_key.h.如图2所示:

   

      图2

如果再要增加新的按键,则需要首先在这儿进行新的按键的宏定义了。注意,这里的按键宏定义,不需要对应其端口的位,该处的宏定义主要用于对应的按键事件区分。

在我本次的按键配置中,SW6对应P0_4,SW7对应P0_5。

第二步,在Hal_key.c中对新的按键动作进行定义,具体如图3所示:


图3

如上图所示:SW_7的各种宏定义基本都是复制SW_6的而来,只是在端口具体对应的位上有所不同。这里总结需要修改的地方:1、端口对应的位;2、如果按键对应的端口发生了变化,那么还需要修改IEN_BIT位。3、对于EDGE方式,需要根据具体的硬件配置修改为:HAL_KEY_FALLING_EDGE或HAL_KEY_RISING_EDGE.此用于设置按键触发中断的方式。

第三步,修改HalKeyInit()函数中的代码,配置按键对应的管脚的功能和方向。如下图4所示:


图4

HalKeyInit()函数是在系统上电之后的HalDriverInit()函数中被调用的。至于HalDriverInit()函数,则是在main函数中被直接调用的一句。

第四步,修改HalKeyConfig()函数的代码,该函数是用于具体配置按键的中断检测方式的。和HalKeyInit()在两个不同的函数中,但共同完成了对按键的初始化设置。具体修改如图5所示:


  在这里面,为中断检测方式和循环检测方式都增加了相应的代码。这里特别值得注意的是PICTL寄存器的配置,该寄存器总管所有端口的触发沿控制,而非仅仅P0口所有,所以不能使用各按键对应的位进行赋值。HalKeyConfig()函数在main函数中的InitBoard()中被调用。

本节介绍了新增按键的需要新增宏定义和按键初始化部分代码的修改。


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值