找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4288|回复: 0
打印 上一主题 下一主题
收起左侧

CC2530的按键流程

[复制链接]
跳转到指定楼层
楼主
ID:76127 发表于 2015-4-18 00:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按键有两种实现方式查询和中断,其初始位置在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()添加具体按键事件


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表