OSAL操作系统实验学习笔记05
来源:互联网 发布:adobe dw软件序列号 编辑:程序博客网 时间:2024/05/17 07:14
OSAL操作系统实验的按键实现
按键有两种工作模式:轮询(Poll)和中断(Interrupt)
轮询
按键处理函数是HalKeyPoll (void),这个函数会在HAL的事件处理Hal_ProcessEvent()中的HAL_KEY_EVENT事件处理过程中被调用,轮询周期由#define HAL_KEY_POLLING_VALUE 100这边定义,通过在配置函数中设置软件定时器osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT,HAL_KEY_POLLING_VALUE);来启动定时器,当溢出的时候向HAL发出HAL_KEY_EVENT事件。
在事件处理函数中会检查当前是否使能中断模式,如果使能的话就跳到中断模式操作,否则重新启动定时器,轮询时间按100ms算。
HalKeyPoll()函数中会调用按键回调函数,根据按键状态来处理按键信息。
中断
对应处理函数是 halProcessKeyInterrupt (void)会在对应管脚的中断处理函数中被调用。
根据配置函数的参数interruptEnable的情况来设置中断或者轮询。
中断处理函数如下:
按键中断处理函数:
当检查到有按键按下则会启动一个定时事件,定时长度有HAL_KEY_DEBOUNCE_VALUE定义。最终执行函数还是在HAL的事件处理函数中的HAL_KEY_EVENT中被执行。
清楚了这两个概念我们就来理一理按键实现的步骤:
1.首先是按键的驱动,驱动包括定义和初始化
定义:
#define HAL_KEY_SW_6_PORT P0#define HAL_KEY_SW_6_BIT BV(1)#define HAL_KEY_SW_6_SEL P0SEL#define HAL_KEY_SW_6_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_6_EDGEBIT BV(0)#define HAL_KEY_SW_6_EDGE HAL_KEY_RISING_EDGE//HAL_KEY_FALLING_EDGE`
初始化(io设置,中断设置和中断使能,中断处理程序):
GPIO设置:
HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT); /* Set pin function to GPIO */ HAL_KEY_SW_6_DIR &= ~(HAL_KEY_SW_6_BIT); /* Set pin direction to Input */
//函数是HalKeyInit()
中断设置和中断使能:
/* Rising/Falling edge configuratinn */
PICTL &= ~(HAL_KEY_SW_6_EDGEBIT); /* Clear the edge bit */
/* For falling edge, the bit must be set. */
#if (HAL_KEY_SW_6_EDGE == HAL_KEY_FALLING_EDGE)
PICTL |= HAL_KEY_SW_6_EDGEBIT;
#endif
/* Interrupt configuration:
* - Enable interrupt generation at the port
* - Enable CPU interrupt
* - Clear any pending interrupt
*/
HAL_KEY_SW_6_ICTL |= HAL_KEY_SW_6_ICTLBIT;
HAL_KEY_SW_6_IEN |= HAL_KEY_SW_6_IENBIT;
HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT);
//函数是void HalKeyConfig ()
中断处理程序:
if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT) /* Interrupt Flag has been set */
{
HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */
//由中断函数HAL_ISR_FUNCTION()进入中断处理函数void halProcessKeyInterrupt ()
备注:定义io和使能中断后,当按键按下的时候触发中断,进入中断处理程序 halProcessKeyInterrupt (),
经过HalKeyPoll ()找到按键按下的消息,执行回调函数SimpleBLETest_ProcessEvent ,回调函数执行我们的APP.
2.应用层按键使用
RegisterForKeys( SimpleBLETest_TaskID );//注册按键,这里一定要注册, 否则底层驱动就不会发送按键事件上来
simpleBLECentral_HandleKeys();//LCD显示按键状态.
- OSAL操作系统实验学习笔记05
- OSAL操作系统实验学习笔记01
- OSAL操作系统实验学习笔记02
- OSAL操作系统实验学习笔记03
- OSAL操作系统实验学习笔记04
- OSAL操作系统实验学习笔记08
- Z-STACK学习笔记-OSAL分析
- Z-Stack协议学习笔记2--OSAL系统框架专题
- ZigBee学习之7——OSAL(操作系统抽象层)API解读
- zigbee学习一OSAL运行方式的理解和简单组网实验
- 操作系统学习笔记:操作系统类型
- 操作系统学习笔记--操作系统基本概念
- OSAL(操作系统抽象层)API解读
- 《Orange's 一个操作系统的实现》学习笔记(一) 实验环境搭建
- OSAL
- OSAL
- 计算机学习笔记--操作系统
- 计算机学习笔记--操作系统
- 完全复制一个UIView
- JDK、JRE、JVM的关系
- Spring和SpringMVC的区别和比较
- 如何使用C++创建COM组件(ATL项目)
- 欢迎使用CSDN-markdown编辑器
- OSAL操作系统实验学习笔记05
- eclipse初学者(一)
- Python安装
- phpMyAdmin添加多台服务器
- Bzoj 2154: Crash的数字表格(积性函数)
- mysql知识点
- Mac下安装ionic和cordova,并生成iOS项目
- android的jni访问linux原生so
- detached entity passed to persist异常