此博文最后修改时间 2016-12-31
一、简介
对CC2541按键程序部分理解
二、实验环境
协议栈版本:BLE-CC254x-1.3.2
编译软件:IAR 8.10
硬件:Smart RF开发板 CC2541
工程:SimpleBLEPeripheral
三、版权声明
博主:Jackie_Wuxi
声明:喝水不忘挖井人
四、细解(若理解有误,欢迎更正)
4.1前提
1)阅读 Amo的BLE-入门与提高教程(2014.10.22).pdf P128
2)CC2541之按键 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