2304|1

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

CC2530的按键流程 [复制链接]

按键有两种实现方式查询和中断,其初始位置在OnBoard.c中InitBoard()中

      OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;  //中断方式
    //OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;  查询方式
    HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);

   OnBoard_KeyCallback--按键回调函数

1,查询法函数调用流程如下:       
    HalKeyConfig()配置一定时器为轮询按键作准备——>
    时间一到触发系统任务事件调用hal_driver.c中Hal_ProcessEvent()—— >
    调用HalKeyPoll()得到按键值——>
    调用OnBoard.c中OnBoard_KeyCallback()进一步处理——>
    调用OnBoard_SendKeys()构造消息包,准备触发应用按键事件【注意这个应用之前必须通过RegisterForKeys()注册接收按键事件的任务ID】——>
    调用osal_msg_send()向系统发送消息——>
    调用osal_set_event()设置事件发生标志——>
    调用SampleApp_ProcessEvent()处理事件——>
    最终调用SampleApp_HandleKeys()处理具体按键事件

2,中断法函数调用流程如下:       
    HalKeyConfig()进行按键中断配置——>
    按键引起中断进入中断函数HAL_ISR_FUNCTION()(该函数在hal_key.c中)——>
    调用halProcessKeyInterrupt()对按键中断进行下一步处理:清除中断标志,启动一定时器——>
    相应事件为HAL_KEY_EVENT,时间为HAL_KEY_DEBOUNCE_VALUE。(且#define HAL_KEY_DEBOUNCE_VALUE 25,即25ms,这与开头的英文说明一致,在中断发生后,需等待25ms再读键值,以消除按键的回跳。)

    25ms到了以后,触发HAL层任务HAL_KEY_EVENT事件,调用HAL层任务事件处理函数Hal_ProcessEvent()

    时间一到触发系统任务事件调用HAL\Common\hal_driver.c中Hal_ProcessEvent()——> 
    调用HalKeyPoll()得到按键值——>
    调用OnBoard.c中OnBoard_KeyCallback()进一步处理——>
    调用OnBoard_SendKeys()构造消息包,准备触发应用按键事件【注意这个应用之前必须通过RegisterForKeys()注册接收按键事件的任务ID】——>

    调用osal_msg_send()向系统发送消息——>
    调用osal_set_event()设置事件发生标志——>
    调用SampleApp_ProcessEvent()处理事件——>
    最终调用SampleApp_HandleKeys()处理具体按键事件


 

注:

1,根据实际需要在在hal_key.c中HalKeyConfig()中,修改代码,其中原有程序查询方式下只对上,下,左,右四个按键进行配置处理;中断方式只是sw6,sw7进行配置处理。

2,在应用层SampleApp_HandleKeys()添加具体按键事件

此帖出自RF/无线论坛

最新回复

不错的分享,就这两种方法都给列出来啦。   详情 回复 发表于 2019-6-27 17:35
点赞 关注
 

回复
举报

2618

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

不错的分享,就这两种方法都给列出来啦。

此帖出自RF/无线论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表