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

 

 

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

按键的中断代码和使用方法
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 定义如下:
上升沿触发P01引脚
 
(用了很多宏定义!便于移植)
 
默认为上升沿中断
279-281是P01口中断配置
 
中断函数为halProcessKeyInterrupt()
 
在该中断处理函数中检测中断标志位,如果触发中断了则用延时去抖(纯延时)。
 
  • 上面是按键事件检测
  • 下面是按键事件传输到应用层处理
 
Hal_drivers.c (ble-cc254x-1.3.2-osal\components\hal\common)
这个在 中负责 处理中断事件
216 行, 就是按键中断并延时去抖动后的查询函数调用
 
这个 HalKeyPoll就在Hal_key.c
查询到按键按下
 
435 行, 执行一个回调函数, 该 回调函数直接就是在我们的应用层的
 
同时注意到一点notify(下面代码);不采用中断时用来标记当前按键状态是否转变,采用中断时也要根据keys的值相应设置
 
上面用到回调技术是在下面设置的@!!
OSAL_SimpleBLETest.c
 
105 行定义了该 回调函数,  至于这个函数在哪里别赋值等, 我这里点到即可, 不作深入分析了。

总之, 现在知道, 只要有按键按下,就会执行 SimpleBLETest_ProcessEvent 这个函
数, 其实,按键释放的时候也都有一个按键消息送上来,方便我们对按键状态做判断。而
SimpleBLETest_ProcessEvent 这个函数,就是在我们的应用层里的。至此,按键流程分析
完毕。
 
应用层
simpleBLETest.c
  • 初始化注册按键事件  
这样一旦有按键中断发生就会触发uint16 SimpleBLETest_ProcessEvent( uint8 task_id, uint16 events )函数
逐层进入会到static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys )
 
三、OSAL 操作系统-实验 12 五向按键
 
电路图:
注意:上面, P20 即是 cc2054x 的 p2.0, 作为 中断输入;而 P06 即是 P0.6,作为  ADC采样输入,5 向按键与 s1 按键相比,多了一个 adc采样,5向按键,实际上是先触发一个按键中断,然后,再进行 adc 采样,每个方向的按键被按下后,由于分压不一样,因此 adc 数值也就不一样, 这样就能区分不同的按键了。

 
IO定义:
hal_key.c
P2.0 定 义 按 键 为 下 降 沿 沿 触 发
P0.6为ADC采样输入
 
设置GPIO(初始化函数中)
HalKeyConfig中设置中断
299~301 行,这是 p2.0 的 io 中断使能,其中断函数在:HAL_ISR_FUNCTION的halProcessKeyInterrupt()中
在该函数中和key1的用法类似,判断是否是按键按下并进行延时去抖(纯延时去抖)
 
去抖和延时之后程序跑到哪了呢???
    在Hal_drivers.c中的Hal_ProccessEvent中!
         当检测到按键按下事件后就会调用HalKeyPoll进行处理,如下:
 
在HalKeyPoll中有一个回调函数,该回调函数就在应用层中,从而实现了 按键按下的消息传送到应用层的业务逻辑:
 
下面是这个回调函数的定义处~
在应用层中OSAL_SimpleBLETest.c:
104 行定义了该回调函数, 或者, 至于这个函数在哪里别赋值等, 我这里点到即可, 不作深入分析了。
总之,  只要有按键按下,就会执行 SimpleBLETest_ProcessEvent 这个函数, 其实,按键释放的时候也都有一个按键消息送上来,方便我们对按键状态做判断。而SimpleBLETest_ProcessEvent 这个函数,就是在我们的应用层里的。至此,按键流程分析完毕。
 
应用层
应用层类似于key1,注册+事件处理(参考上面)

 



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4771662.html,如需转载请自行联系原作者

相关文章
|
10月前
|
关系型数据库 虚拟化 UED
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
389 7
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
|
6月前
|
JSON iOS开发 数据格式
最新研发flutter3.32+window_manager客户端OS管理系统
原创Flutter3.32+Dart3.8+Getx+Window_Manager实战桌面客户端os系统解决方案。支持macOS和windows两种主题风格、自定义桌面栅格布局。
470 50
|
运维 安全 Devops
Cisco NX-OS ACI 16.1(4h)F 发布 - 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件
Cisco NX-OS ACI 16.1(4h)F 发布 - 适用于 ACI 模式下的 Cisco Nexus 9000 系列交换机系统软件
129 0
|
6月前
|
Ubuntu 开发工具
Ubuntu 22.04 aarch64版本操作系统下编译ZLMediaKit教程
通过上述步骤,你可以在Ubuntu 22.04 aarch64版本上成功编译ZLMediaKit,这是一个相对简单而直接的过程,但可能会遇到一些需要根据具体系统环境和要求调整的地方。
857 0
|
7月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
391 0
|
10月前
|
网络协议 Linux 网络安全
Palo Alto PAN-OS 11.2.5 for KVM - ML 驱动的 NGFW
Palo Alto PAN-OS 11.2.5 for KVM - ML 驱动的 NGFW
386 10
Palo Alto PAN-OS 11.2.5 for KVM - ML 驱动的 NGFW
|
10月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
457 14
|
8月前
|
Cloud Native 安全 Linux
龙蜥操作系统:CentOS 谢幕之后,国产云原生系统的崛起之路
龙蜥操作系统(Anolis OS)是 CentOS 停止维护后,由阿里云等企业联合发起的开源项目。它以双内核架构和全栈优化为核心,提供无缝替代 CentOS 的方案,兼容主流生态并针对云计算场景深度优化。其技术亮点包括 RHCK 和 ANCK 双内核、性能优化、全栈安全及国密算法支持。龙蜥适用于云原生基础设施、企业级应用部署及开发环境,社区已吸引 200 多家单位参与。未来规划涵盖 AI 框架优化、RISC-V 架构适配及桌面环境构建,正重新定义云时代的操作系统边界。
2090 0
|
11月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
838 30
|
12月前
|
Web App开发 安全 Linux
【独家揭秘2025】VMware Workstation Pro虚拟机:免费安装教程大放送,一键解锁操作系统模拟神器!
VMware Workstation Pro 是由威睿(VMware)公司开发的一款功能强大的桌面虚拟化软件,允许用户在同一台物理计算机上同时运行多个操作系统,如Windows、..
1254 2
【独家揭秘2025】VMware Workstation Pro虚拟机:免费安装教程大放送,一键解锁操作系统模拟神器!

推荐镜像

更多