本文根据一周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,注册+事件处理(参考上面)

未完~关注我的cc2541分类

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~的更多相关文章

  1. 5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  2. 4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  3. 3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  4. 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  5. STM32 OSAL操作系统抽象层的移植

    文章目录 什么是 OSAL? 源码安装 Linux 上OSAL的移植 STM32上OSAL的移植 关键点 测试代码 结语 附件 什么是 OSAL? 今天同学忽然问我有没有搞过OSAL,忽然间一头雾水, ...

  6. 【SIKIA计划】_04_C#中级教程 (2015版)笔记

    IKIC#中级教程 (2015版)正常模式指的是不会影响程序的正常运行.1,在VS中我们使用Console.Write(或者WriteLine)方法向控制台输出变量的值,通过这个我们可以查看变量的值是 ...

  7. PS教程:20个新鲜出炉的 Photoshop 中级教程

    Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享最新20个 Photoshop 进阶教程,提高你的图片处理技巧,制作时尚的效果.这些教程可以帮助把你的想法 ...

  8. 最适合入门的Laravel中级教程(二)用户认证

    之前的初级教程主要是学习简单的增删改查: 接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序: 我们先来学习 laravel 的用户认证功能: 在现代网站中基本都有用户系统: 而我们每开 ...

  9. 最适合入门的Laravel中级教程(一)

    Laravel 是一个全栈框架: 我们使用 Laravel 开发业务常见有 3 个方向: 前端页面和后端逻辑混合的应用 主要是面向对 SEO 有需求的项目: 比如说新闻资讯博客文章等: 一般在控制器中 ...

随机推荐

  1. Android安全开发之UXSS漏洞分析

    0X01 前言 XSS是我们比较熟悉的一种攻击方式,包括存储型XSS.反射型XSS.DOM XSS等,但UXSS(通用型XSS)另外一种不同的漏洞类型,主要体现在漏洞的载体和影响范围上. XSS问题源 ...

  2. spring知识大全(4)

    5 Spring对事务的支持 一.AOP事务的含义: 事务当作一个切面,动态地织入到目标对象,形成一个代理对象. 二.Spring的事务机制 Spring支持声明式事务. Spring使用事务服务代理 ...

  3. jQuery常用的插件及功能汇总-持续

    1.图片轮播 jquery.soChange.js 2.滚动展示 MSClass.js 3.md5加密 md5.js 4.cookie操作 cookie.js 5.

  4. BLE资料应用笔记 -- 持续更新

    BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...

  5. 优化后的 google提供的汉字转拼音类(针对某些htc等手机的不兼容情况)

    /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Versi ...

  6. XML增、删、改

    今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 一.简单介绍 using System.Xml; ...

  7. swift 如何给tabBarItem的相关设计

    //设置tabBarItem的title,以及点击和不点击状态图片 self.tabBarController.tabBarItem = UITabBarItem(title: "投资理财& ...

  8. allegro中焊盘的设置

    用Cadence的pad designer制作pad的时候会遇到为thermal relief和anti pad设计尺寸的问题 Thermal relief:正规的中文翻译应该叫做防散热PAD.它主要 ...

  9. 【Visual Lisp】人机交互与数据处理(表除外)-lisp

    ;;本专题所讲述的内容是人机交互以及常规数据处理技术;;★★★01.人机交互★★★;;△△△键盘输入交互△△△(getint "请输入整数");;从键盘输入整数,如果不是整数则重复 ...

  10. middleware - bodyparser

    express4之前,bodyparser是express下的一个对象. express4把bodyparser分离出来. 本文中的实例基于以下的这个请求 $.ajax({ url: '/save', ...