Chinaunix首页 | 论坛 | 博客
  • 博客访问: 775083
  • 博文数量: 37
  • 博客积分: 575
  • 博客等级: 中士
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-12 10:43
个人简介

活到老,学到老!

文章分类

全部博文(37)

文章存档

2019年(4)

2018年(4)

2015年(1)

2014年(14)

2011年(1)

2010年(13)

我的朋友

分类: 嵌入式

2014-08-08 16:07:32

此文对osal不做分析,纯帮助自己记忆,主要涉及到hal_key.c
中断模式时:
0.此处序号为0,表示在初始化过程中,InitBoard时设置了回调函数,用户可设置为中断或者非中断模式
    HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);
1.用户按下按键触发中断HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )或者是P2的GPIO中断
中断服务程序中通过中断标志排除异常非按键中断,调用函数halProcessKeyInterrupt,
其中清除中断标志,主要是25ms后向Hal_TaskID所在任务发送事件 HAL_KEY_EVENT,此25ms即为防抖动作用。
2.Hal_TaskID的任务Hal_ProcessEvent,处理事件,调用函数HalKeyPoll,在通过扫描IO,赋值keys。
调用初始化时设置的回调函数,OnBoard_KeyCallback,(其中会执行系统级的按键处理,用户可自行添加代码,这里分析错了,正常情况下,OnBoard_SendKeys返回ZSuccess)
另外,它还调用了OnBoard_SendKeys向用户任务以消息的形式发送KEY_CHANGE
事件
3.在用户任务GenericApp_ProcessEvent中,处理MSG中的KEY_CHANGE事件,调用了GenericApp_HandleKeys,
此处为用户级的按键处理程序。


轮询模式:
理解了以上,这就比较简单了
0.在初始化HalKeyConfig中,Hal_TaskID所在任务发送事件 HAL_KEY_EVENT
1.
同样在任务Hal_ProcessEvent中,处理事件,调用函数HalKeyPoll,在通过扫描IO,赋值keys,而后的也如上一样。
同时设置100ms后,再次触发事件 HAL_KEY_EVENT。即轮询周期为100ms。




阅读(2922) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~