转载

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

本文根据一周CC2541笔记汇总得来——

适合概览和知识快速索引——

全部链接:

中级教程-OSAL操作系统/OSAL操作系统-实验01 OSAL初探

【插入】SourceInsight-工程建立方法

中级教程-OSAL操作系统(OSAL系统解基本套路)

中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

中级教程-OSAL操作系统(ADC-光敏电阻)

OSAL操作系统-实验16 串口波特率扩展

OSAL操作系统-实验17 AT命令初步

OSAL操作系统-实验20 模拟IIC通信+硬件IIC(Mpu6050)

OSAL 操作系统-实验 23 PWM 输出(改变占空比)

OSAL 操作系统-实验 24 看门狗 WachDog

OSAL操作系统-实验25 SNV内部Flash数据读写

OSAL 操作系统-实验 29 系统睡眠等级研究

OSAL 操作系统-实验 31 从机广播功率修改

一、OLED

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

二、OSAL 操作系统-实验 11 普通按键

按键的中断代码和使用方法

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

P01 即是 cc2054x 的 p0.1, 通过 10k 电阻接地, 因此 p0.1 作为输入的时候, 常态就是低电平, 当 s1, 按下的时候, p0.1 变成高电平。 ❤  在 Hal_key.c (ble-cc254x-1.3.2-osal/components/hal/target/cc2540eb) 中,  是  osal 

的按键

驱动文件
, 主要是实现 按键的初始化与中断服务函数 , 里边也包含 向按键的驱动 , 5 向

按键与 s1 按键相比, 多了一个 adc 采样, 5 向按键, 实际上是先触发一个按键中断, 然后,

再进行 adc 采样, 每个方向的按键被按下后, 由于分压不一样, 因此 adc 数值也就不一样,

这样就能区分不同的按键了。

驱动比较复杂,应用相对简单

Hal_key.c (ble-cc254x-1.3.2-osal/components/hal/target/cc2540eb)

S1 按键的 io 定义如下:

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

上升沿触发P01引脚

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

(用了很多宏定义!便于移植)

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

默认为上升沿中断

279-281是P01口中断配置

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

中断函数为halProcessKeyInterrupt()

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

在该中断处理函数中检测中断标志位,如果触发中断了则用延时去抖(纯延时)。

  • 上面是按键事件检测
  • 下面是按键事件传输到应用层处理

Hal_drivers.c (ble-cc254x-1.3.2-osal/components/hal/common)

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

这个在 2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系... 中负责 处理中断事件

216 行, 就是按键中断并延时去抖动后的查询函数调用

这个 HalKeyPoll 就在Hal_key.c

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

查询到按键按下

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

435 行, 执行一个回调函数, 该 回调函数 直接就是在我们的应用层的 同时注意到一点 notify (下面代码);不采用中断时用来标记当前按键状态是否转变,采用中断时也要根据keys的值相应设置

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

上面用到回调技术是在下面设置的@!!

OSAL_SimpleBLETest.c

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

105 行定义了该 回调函数 ,  至于这个函数在哪里别赋值等, 我这里点到即可, 不作深入分析了。

总之 , 现在知道, 只要有按键按下,就会执行 SimpleBLETest_ProcessEvent 这个函

数, 其实,按键释放的时候也都有一个按键消息送上来,方便我们对按键状态做判断。而

SimpleBLETest_ProcessEvent 这个函数,就是在我们的应用层里的。至此,按键流程分析

完毕。

应用层

simpleBLETest.c

  • 初始化注册按键事件  

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

这样一旦有按键中断发生就会触发uint16 SimpleBLETest_ProcessEvent( uint8 task_id, uint16 events )函数

逐层进入会到static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys )

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

三、OSAL 操作系统-实验 12 五向按键

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

电路图:

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

注意: 上面, P20 即是 cc2054x 的 p2.0, 作为 中断 输入;而 P06 即是 P0.6,作为  ADC 采样输入,5 向按键与 s1 按键相比,多了一个 adc采样,5向按键,实际上是先触发一个按键中断,然后,再进行 adc 采样,每个方向的按键被按下后,由于分压不一样,因此 adc 数值也就不一样, 这样就能区分不同的按键了。
IO定义:
hal_key.c
2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

P2.0 定 义 按 键 为 下 降 沿 沿 触 发

P0.6为ADC采样输入

设置GPIO(初始化函数中)

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

HalKeyConfig中设置中断

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

299~301 行,这是 p2.0 的 io 中断使能,其中断函数在:HAL_ISR_FUNCTION的halProcessKeyInterrupt()中

在该函数中和key1的用法类似,判断是否是按键按下并进行延时去抖(纯延时去抖)

去抖和延时之后程序跑到哪了呢???

    在Hal_drivers.c中的Hal_ProccessEvent中!

当检测到按键按下事件后就会调用HalKeyPoll进行处理,如下:

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

在HalKeyPoll中有一个回调函数,该回调函数就在应用层中,从而实现了 按键按下的消息传送到应用层的业务逻 辑:

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

下面 是这个回调函数的定义处~

在应用层中OSAL_SimpleBLETest.c:

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系...

104 行定义了该回调函数, 或者, 至于这个函数在哪里别赋值等, 我这里点到即可, 不作深入分析了。

总之 ,  只要有按键按下,就会执行 SimpleBLETest_ProcessEvent 这个函数, 其实,按键释放的时候也都有一个按键消息送上来,方便我们对按键状态做判断。而SimpleBLETest_ProcessEvent 这个函数,就是在我们的应用层里的。至此,按键流程分析完毕。

应用层

应用层类似于key1,注册+事件处理(参考上面)

未完~关注我的cc2541分类

正文到此结束
Loading...