CC2541_Key部分理解

来源:互联网 发布:腰包 知乎 编辑:程序博客网 时间:2024/05/21 18:37

此博文最后修改时间  2016-12-31


一、简介

CC2541按键程序部分理解

 

二、实验环境

协议栈版本:BLE-CC254x-1.3.2

编译软件:IAR 8.10

硬件:Smart RF开发板 CC2541

工程:SimpleBLEPeripheral

 

三、版权声明

博主:Jackie_Wuxi

声明:喝水不忘挖井人

 

四、细解(若理解有误,欢迎更正)

4.1前提

1阅读 AmoBLE-入门与提高教程(2014.10.22).pdf  P128

2CC2541之按键 http://blog.csdn.net/feilusia/article/details/47336473

4.2详解

 

main初始化

1-InitBoard(OB_READY ); 

 

2-InitBoard调用HalKeyConfig(OnboardKeyIntEnable, OnBoard_KeyCallback); 该函数开启了按键中断    //决定了按键是用中断查询的

 

Hal_KeyIntEnable 用于中断和轮询的判断,pHalKeyProcessFunction 即OnBoard_KeyCallback函数


HalKeyConfig配置P01falling edge 触发中断,也可以配置成rising edge


3-hal_key.c中HAL_ISR_FUNCTION(halKeyPort0Isr, P0INT_VECTOR )调用halProcessKeyInterrupt()  //P01 对应按键S1


4-halProcessKeyInterrupt初次判断按键是否按下,函数末尾启动定时HAL_KEY_EVENT,



 5-任务Hal_ProcessEvent判断HAL_KEY_EVENT事件并调用HalKeyPoll 判断出哪个按键按下

(步骤4启动HAL_KEY_EVENT事件到HalKeyPoll 函数判断出哪个按键,这段时间相当于延迟时间,用于按键去抖)

 

6-HalKeyPoll调用pHalKeyProcessFunction,相当于调用OnBoard_KeyCallback


 

7-OnBoard_KeyCallback调用OnBoard_SendKeys, 同时涉及按键发现方式切换

 

中断方式发现按键和扫描方式发现按键切换代码


HalKeyConfig函数中


8-OnBoard_SendKeys调用osal_msg_send(registeredKeysTaskID, (uint8 *)msgPtr );

 

9-接下来就跳到注册了key的任务事件SYS_EVENT_MSG中去

RegisterForKeys( SimpleBLETest_TaskID );


 

 10-最后在simpleBLEPeripheral_HandleKeys 处理


五、参考文献

http://blog.csdn.net/feilusia/article/details/47336473

1 0