在Linux内核中,按键驱动是用来处理硬件按键的输入事件,包括按键的按下和释放等。本文主要讨论了基于RK3588平台的按键驱动,涉及到两种类型的按键驱动:GPIO按键驱动和ADC按键驱动。 我们来看ADC按键驱动。在`adc-keys.c`文件中,`probe`函数是初始化过程的关键。它从设备树(DTS)中获取ADC的参考电压,并将其转换为mV单位。接着,驱动会读取所有ADC按键的配置,包括它们在按下时对应的电压值和键值。驱动会设置输入设备参数,创建一个循环任务,用于定期检测按键状态。循环任务会读取ADC采样的电压值,根据比较结果来判断按键是否被按下。如果按键的电压值与设定的阈值接近,就会报告按键的按下或释放事件。 然后,我们转向GPIO按键驱动。在`gpio_keys.c`文件中,`probe`函数同样负责初始化。它从DTS中读取GPIO按键的属性,如自动重复、键值、标签、中断号等。这里还会检查按键是否支持唤醒系统以及是否可禁用。防抖时间(debounce_interval)也在这里设置。接下来,驱动会为每个GPIO按键分配参数,包括GPIO口、极性、防抖机制、中断号等。中断服务程序和中断触发类型会被设置好,最后注册input设备并可能设置其唤醒功能。 当GPIO按键被按下时,会触发中断函数`gpio_keys_gpio_isr`。这个函数会判断按键是否能唤醒系统,如果是并在系统休眠时,它会触发唤醒事件。之后,会报告按键按下事件并启动延时任务。延时任务`gpio_keys_gpio_work_func`会在特定延迟后执行,读取GPIO电平并上报按键事件。 RK3588平台的按键驱动分为ADC和GPIO两种,它们都通过Linux内核的input子系统来处理按键事件。ADC驱动依赖于ADC控制器来检测电压变化,而GPIO驱动则直接监测GPIO引脚的电平状态。两者都通过中断服务程序和延时任务来确保事件的准确报告,从而为上层应用提供可靠的按键输入信息。
2025-06-27 10:28:24 743KB RK3588
1
STM32 (基于HAL库)4×4矩阵按键驱动程序
2024-05-22 12:04:21 4.49MB stm32
1
二种方法驱动键盘按键与鼠标点击。有需要的拿走吧。里面有例程。
1
winces3c2410下gpio实现四按键驱动
2023-01-02 09:45:51 41KB winces3c2410下gpio实现四按键驱动
1
s3c2440 按键驱动程序 s3c2440 按键驱动程序 s3c2440 按键驱动程序
2022-12-17 21:21:57 7KB s3c2440 按键驱动程序
1
ButtonDrive 自己写的一个按键驱动,支持单双击、连按、长按;采用回调处理按键事件(自定义消抖时间),使用只需3步,创建按键,按键事件与回调处理函数链接映射,周期检查按键。 源码地址: 版权和许可 ButtonDrive 遵循 开源许可协议,可以免费在商业产品中使用,并且不需要公开私有代码。 鼓励代码共享和尊重原作者的著作权,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布(作为开源或闭源商业软件),但必须根据协议保留原作者版权声明。 前言 前几天写了个按键驱动,参考了的数据结构的用法,逻辑实现并不一样。 在这里感谢所有的开源开发者,让我从中学到了很多,同时网络也是一个好平台,也希望所有的开发者能形成良性循环,从网络中学知识,回馈到网络中去。感谢的作者,感谢两位rtt的大佬:、。 Button_drive简介 Button_drive是一个小巧的按键驱
2022-07-29 15:14:09 296KB C
1
树莓派3b+上的按键驱动,支持四种触发方式,read,poll,休眠唤醒和异步通知。
2022-07-26 12:00:35 11KB 树莓派 驱动 按键
1
按键驱动程序防止抖动的源代码
2022-07-26 09:00:43 3KB arm linux
1
基于飞思卡尔单片机XS128的按键驱动程序,改程序调试通过,只需修改IO即可移植和使用。
2022-07-19 21:09:53 335KB XS128
1