按键功能驱动的实现是通过ADC分压,使每个按键检测的电压值不同,从而实现区分不同的按键。按下或者弹起中断之后,通过中断触发,主动检测当前电压识别出对应的按键。最后再通过input子系统将获取按键的键值并上报给应用层。
这篇文章介绍,如何使用杂项设备框架编写一个简单的按键驱动,完成编写、编译、安装、测试等流程,了解一个杂项字符设备驱动的开发流程。
Linux内核下的 drivers/input/keyboard/gpio_keys.c实现了一个体系结构无关的GPIO按键驱动,使用此按键驱动,只需在设备树gpio-key节点添加需要的按键子节点即可。驱动的实现非常简单,但是较适合于实现独立式按键驱动。
输入设备种类很多,有GPIO按键、鼠标、电阻触摸屏、电容触摸屏、USB键盘、遥控手柄等等。 安装它能产生的数据类型,可以分为(前面3项比较容易理解,后面的就属于扩展了):
本文介绍了如何通过驱动程序实现按键中断,并分析了中断方式的优缺点。作者首先介绍了按键中断的基本原理和实现方法,然后通过实例详细阐述了中断方式的驱动程序设计思路和步骤。最后,作者总结了驱动程序的设计和实现过程中需要注意的问题,并提供了相应的解决方案。
工作队列常见的使用形式是配合中断使用,在中断的服务函数里无法调用会导致休眠的相关函数代码,有了工作队列机制以后,可以将需要执行的逻辑代码放在工作队列里执行,只需要在中断服务函数里触发即可,工作队列是允许被重新调度、睡眠。
从图中可以看到按键断开时,由于接了上拉电阻,所以CPU检测到默认是高电平的,当按键被按下时,电路导通,所以KEY0引脚变成低电平,即低电平有效。
点灯用到的都是GPIO的输出功能,这篇,通过按键的使用,来学习GPIO输入功能的使用。
1.写出最底层Led_Open(),Led_Write(),Led_Read() 2.如何让内核知道下面有我们写好的操作硬件的函数呢?定义一个file_operations结构体(指向Led_Open等底层函数)。使用函数regsiter_chrdev(major,”first_drv”,&first_drv_fops)注册告诉内核(通过major索引)。 3.regsiter_chrdev被谁调用?被驱动入口函数调用。first_drv_init() 4.如何知道调用first_drv_init(),还是其他的函数呢?利用宏module_init(first_drv_init)定义一个结构体,结构体中有函数指针,指向入口函数。 5.出口函数first_drv_exit。卸载驱动unregsiter_chrdev(major,”first_drv”,&first_drv_fops)。如何知道何时来调用first_drv_exit?module_init(first_drv_exit)定义一个结构体,结构体中有函数指针,指向入口函数。
沿着中断的处理流程,GIC之下的中断控制器涉及这4个重要部分:handleB、GPIO Domain、handleC、irq_chip
上篇文章:【i.MX6ULL】驱动开发9——Linux IO模型分析,介绍了linux中的五种I/O模型,本篇,就来使用阻塞式I/O和非用阻塞式I/O两种方式进行按键的读取实验,并对比之前使用输入捕获和中断法检测的按键程序,查看CPU的使用率是否降低。
按键在嵌入式开发中,是比较重要的,也是常见的外设,因此,很有必要学习,也要掌握编写基础的按键驱动,通常最基本的情况下,都是使用状态机的框架来出来,因为尽管硬件电路上有滤波电路,但还是要软件滤波的。(软件滤波很多采集系统中都是用到的)。 在学习过程中,可以自己尝试编写简单的单机,组合按键单机等,锻炼思维。当然网上有很多的按键驱动库,值得收藏,其中思想是比较好的,可以学习其思路,同事也可以在了解功能后,移植到自己的项目中。
前面有篇文章使用杂项设备完成了按键驱动的编写,实现了按键轮询检测,通过read函数向应用层传递按键值,这篇文章使用按键为例,介绍Linux内核里中断的注册方法,使用中断的方式检测按键是否按下,中断在单片机、设备驱动开发里使用的都非常多,可以更加实时的检测到按键触发的情况。
按键是嵌入式产品中不可或缺的一部分,但往往受制于结构尺寸等因素,按键数量有限,如何利用有限的按键实现更多的骚操作,本文介绍一种优雅的按键实现方法,纯c语言实现,只需要与底层接口对接便可以轻松移植到嵌入式平台,实现单击、连击、短按、长按功能。
理想状况是:按下、松开按键,各产生一次中断,也只产生一次中断。 但是对于机械开关,它的金属弹片会反复震动。GPIO电平会反复变化,最后才稳定。一般是几十毫秒才会稳定。 如果不处理抖动的话,用户只操作一次按键,会发生多次中断,驱动程序可能会上报多个数据。
在此节之前,我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架、自动创建设备节点、linux中断、poll机制、异步通知、同步互斥/非阻塞、定时器去抖动。 其中驱动框架如下: 1)写file_op
本文介绍了如何通过Linux驱动程序实现按键中断,并通过实例代码进行了详细说明。首先介绍了如何安装和编译驱动程序,然后描述了如何使用按键中断,最后给出了完整的代码示例和注释。
移植移植infoNES模拟器到嵌入式linux上,并增加支持声音输出和按键 代码放在了github上。 https://github.com/yongzhena/infoNES 先来个效果截图: 按键
当我们休眠时,如果想唤醒,则需要添加中断唤醒源,使得在休眠时,这些中断是设为开启的,当有中断来,则会退出唤醒,常见的中断源有按键,USB等.
在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态。
这节课讲解如何在中断系统中使用设备树,也就是用设备树如何描述中断。 中断体系在4.x内核中变化很大,中断体系又跟pinctrl系统密切相关,pinctrl中又涉及GPIO子系统,这样讲下去的话,设备树课程就变成驱动专题了,所以我打算只讲中断体系统,对于pinctrl、gpio等系统留待以后在驱动课程中扩展。
我在100ASK_IMX6ULL售后群里,发现很多初学者只有单片机基础,甚至没有单片机基础。在学习Linux时,对很多概念比较陌生,导致不知道学什么,也不知道学了之后有什么用。所以我趁着五一假期,编写此文。
pdata->num_row_gpios = nrow = of_gpio_named_count(np, “row-gpios”);
怎么把handleA、GIC Domain和GPIO Domain、irq_chipA和irq_chipB这4个结构体组织起来,irq_domain是核心。
前两篇文章介绍了letter-shell串口终端和cmd-parse串口命令解析器在高云FPGA GW1NSR-4C SoC上的移植:
妈妈怎么知道卧室里小孩醒了? ① 时不时进房间看一下:查询方式 简单,但是累 ② 进去房间陪小孩一起睡觉,小孩醒了会吵醒她:休眠-唤醒 不累,但是妈妈干不了活了 ③ 妈妈要干很多活,但是可以陪小孩睡一会,定个闹钟:poll方式 要浪费点时间,但是可以继续干活。 妈妈要么是被小孩吵醒,要么是被闹钟吵醒。 ④ 妈妈在客厅干活,小孩醒了他会自己走出房门告诉妈妈:异步通知 妈妈、小孩互不耽误
介绍STM32F407新建寄存器工程流程,介绍输入模式的配置方式,以按键为例完成按键输入检测。
本项目是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。 项目资源下载请参见:https://download.csdn.net/download/m0_38106923/87537836
文章介绍了如何利用驱动精灵软件对Windows系统进行驱动安装。主要包括驱动精灵软件的下载和安装、驱动精灵软件的使用方法、如何进行驱动备份和还原、如何进行驱动更新和优化等。同时,文章还介绍了如何使用驱动精灵软件进行声卡驱动、显卡驱动、网卡驱动等驱动程序的安装和更新。
对4×4矩阵式键盘电路的键值进行编码,编程实现在LCD液晶显示器上显示每个按键的“0-F”序号
linux中input子系统与I2C子系统类似,也被主观分成三部分:输入驱动、输入设备和输入核心。
对4×4矩阵式键盘电路的键值进行编码,编程实现在LCD液晶显示器上显示每个按键的ASCII码。
所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。
弹性按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一 下子断开,使用按键时会产生如图带波纹信号,需要用软件消抖处理滤波,不方便输入检测。当然有专用的去抖电路,也有专用的去抖芯片,但通常我们用软件延时的方法就能解决抖动问题,没有必要添加多余的硬件电路。
调安全温度范围我们用按键来实现,但是得用定时器来扫描,不然会影响获取温度;
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weidongshan.tmall.com/(天猫)
这是基于Linux系统开发板设计一个小项目-数码相册,在LCD屏上可以显示完成常见的图片显示,翻页、旋转、缩放等功能。
仅需要 M3 CPU 内核,总线解码模块,RAM模块,ROM模块,简单的外设模块,在配合软件驱动,一个最简的M3 SOC 系统即可运行。这里演示如何在资源有限的硬件平台上,仅利用其中的CPU部分,搭建最简单的系统。在\m3designstart\logical\cortexm3integration_ds_obs\verilog文件夹中有两个VerilogHDL文件:cortexm3ds_logic.v和CORTEXM3INTEGRATIONDS.v。其中前者是经过扰乱的Cortex-M3CPU代码,后者是对外的接口文件。
之前一个老友写的MultiButton开源按键组件的剖析讲解,它的设计思想简洁且高效,这篇文章我上周也分享出来给大家共同来学习了。
学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言、单片机、开源项目、物联网、操作系统、Linux等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资料库。
本文介绍了如何通过按键驱动程序实现按键事件和防抖,并对代码和测试效果进行了详细说明。
按键有两种驱动方式,一种是独立按键,一种是矩阵按键。1个独立按键要占用1个IO口,IO口不能共用。而矩阵按键的IO口是分时片选复用的,用少量的IO口就可以驱动翻倍级别的按键数量。比如,用8个IO口只能驱动8个独立按键,但是却可以驱动16个矩阵按键(4x4)。因此,按键少的时候就用独立按键,按键多的时候就用矩阵按键。这两种按键的驱动本质是一样的,都是靠识别输入信号的下降沿(或上升沿)来识别按键的触发。 独立按键的硬件原理基础,如上图,P2.2这个IO口,在按键K1没有被按下的时候,P2.2口因为单片机内部自带上拉电阻把电平拉高,此时P2.2口是高电平的输入状态。当按键K1被按下的时候,按键K1左右像一根导线连接到电源的负极(GND),直接把原来P2.2口的电平拉低,此时P2.2口变成了低电平的输入状态。编写按键驱动程序,就是要识别这个电平从高到低的过程,这个过程也叫下降沿。多说一句,51单片机的P1,P2,P3口是内部自带上拉电阻的,而P0口是内部没有上拉电阻的,需要外接上拉电阻。除此之外,很多单片机内部其实都没有上拉电阻的,因此,建议大家在做独立按键电路的时候,养成一个习惯,凡是按键输入状态都外接上拉电阻。 识别按键的下降沿触发有四大要素:自锁,消抖,非阻塞,清零式滤波。 “自锁”,按键一旦进入到低电平,就要“自锁”起来,避免不断触发按键,只有当按键被松开变成高电平的时候,才及时“解锁”为下一次触发做准备。 “消抖”,按键是一个机械触点器件,在接触的瞬间必然存在微观上的机械抖动,反馈到电平的瞬间就是“高,低,高,低...”这种不稳定的电平状态是一种干扰,但是,按键一旦按下去稳定了之后,这种状态就消失,电平就一直保持稳定的低电平。消抖的本质就是滤波,要把这种接触的瞬间抖动过滤掉,避免按键的“一按多触发”。 “非阻塞”,在处理消抖的时候,必须用到延时,如果此时用阻塞的delay延时就会影响其它任务的运行效率,因此,用非阻塞的定时延时更加有优越性。 “清零式滤波”,在消抖的时候,有两种境界,第一种境界是判断两次电平的状态,中间插入“固定的时间”延时,这种方法前后一共判断了两次,第一次是识别到低电平就进入延时的状态,第二次是延时后再确认一次是否继续是低电平的状态,这种方法的不足是,“固定的时间”全凭经验值,但是不同的按键它们的抖动时间长度是不同的,除此之外,前后才判断了两次,在软件的抗干扰能力上也弱了很多,“密码等级”不够高。第二种境界就是“清零式滤波”,“清零式滤波”非常巧妙,抗扰能力超强,它能自动过滤不同按键的“抖动时间”,然后再进入一个“稳定时间”的“N次识别判断”,更加巧妙的是,在“抖动时间”和“稳定时间”两者时间内,只要发现一次是高电平的干扰,就马上自动清零计时器,重新开始计时。“稳定时间”一般取20ms到30ms之间,而“抖动时间”是隐藏的,在代码上并没有直接描写出来,但是却无形地融入了代码之中,只有慢慢体会才能发现它的存在。 具体的代码如下,实现的功能是按一次K1或者K2按键,就触发一次蜂鸣器鸣叫。
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第19章 STM32H7的GPIO应用之按键FIFO
本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码水平,和其它专栏相比,本专栏的优势在于:
按键作为常用的输入系统,如何准确并高效的获取按键值,是一个经常要面对的问题,常用的按键检测方式有如下几种方式:
源码地址:https://gitee.com/MR_Wyf/hal-cubemx-rt-thread.git
Allwinner 平台支持三种不同类型的Key:GPIO-Key,ADC-Key,AXP-Key。其中,GPIOKey又包括普通的gpio 按键和矩阵键盘。
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第6章 STM32H7工程模板建立(IAR8) 本章教程为大
领取专属 10元无门槛券
手把手带您无忧上云