首页 > 其他分享 >字符设备驱动-3.gpio驱动(按键中断)

字符设备驱动-3.gpio驱动(按键中断)

时间:2023-01-31 21:11:05浏览次数:38  
标签:调用 gpio 函数 read APP 按键 驱动

APP 读取按键

  1. 查询方式
  2. 休眠-唤醒方式
  3. poll 方式
  4. 异步通知方式

第2、3、4种方法,都涉及中断服务程序。

查询方式

image

APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置 GPIO 为输入引脚。 APP 调用 read 时,导致驱动中对应的 read 函数被调用,它读取寄存器,把引脚状态直接返回给 APP,APP需要反复read查询引脚电平状态。

休眠-唤醒方式

image

  1. APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置GPIO 为输入引脚;并且注册 GPIO 的中断处理函数。
  2. APP 调用 read 时,导致驱动中对应的 read 函数被调用,如果有按键数据则直接返回给 APP;否则 APP 在内核态read函数中休眠。
  3. 当用户按下按键时, GPIO 中断被触发,导致驱动程序之前注册的中断服务程序被执行。它会记录按键数据,read函数被唤醒,执行驱动代码,把按键数据返回给APP(用户空间)。

poll 方式

上面的休眠-唤醒方式有个缺点:如果一直没操作按键,那么 APP 就会永远休眠。
我们可以给 APP 定个闹钟,这就是 poll 方式。当超时后就直接返回不再休眠。
image

  1. APP 调用 open 时,导致驱动中对应的 open 函数被调用,在里面配置GPIO 为输入引脚;并且注册 GPIO 的中断处理函数。
  2. APP 调用 poll 或 select 函数,意图是“查询”是否有数据,这 2 个函数都可以指定一个超时时间,即在这段时间内没有数据的话就返回错误。这会导致驱动中对应的 poll 函数被调用,如果有按键数据则直接返回给 APP;否则 APP 在内核态休眠一段时间。
  3. 当按下按键时, GPIO 中断被触发,导致驱动程序之前注册的中断服务程序被执行。它会记录按键数据,并唤醒休眠中的 APP。如果用户没按下按键,但是超时时间到了,内核也会唤醒 APP。

所以 APP 被唤醒有 2 种原因:用户操作了按键,超时。被唤醒的 APP 在内核态继续运行,即继续执行驱动代码,把“状态”返回给 APP(的用户空间)。APP 得到 poll/select 函数的返回结果后,如果确认是有数据的,则再调用 read 函数,这会导致驱动中的 read 函数被调用,这时驱动程序中含有数据,会直接返回数据。

标签:调用,gpio,函数,read,APP,按键,驱动
From: https://www.cnblogs.com/fuzidage/p/17080773.html

相关文章

  • Linux USB 主机控制器和设备驱动
    USB的全称是UniversalSerialBus,顾名思义:通用串行总线。提到总线,联想一下,在你心目中总线总是用来干嘛的?还记得I2C总线?I2C总线上挂有二条信号线,一条是SCL、SDA,这......
  • Qt 按键添加图标
    1、开发环境:Qt5.12.2,QtCreate4.8.22、直接上代码/*按键上背景*/QPixmappixmap(":/Resourses/images/easyicon_net.png");QPixmapfitpixmap=pixmap.......
  • linux驱动编写(pwm驱动)
     pwm方波可以用来控制很多的设备,比如它可以被用来控制电机。简单来说,就是单位时间内的方波越多,那么电机的转速就会越快;反之就越慢。通过这个特性,soc就可以轻松地利用pwm对......
  • LVGL触摸事件处理机制及驱动注意事项
    事件处理框架:通过周期性调用lv_indev_read_timer_cb函数,从底层获取事件并进行处理。触摸事件处理函数:indev_pointer_proc  -》indev_proc_press、indev_proc_releasep......
  • vue3实现禁用物理按键返回,但是可以通过自定义app-bar的返回按钮返回
    1.注意app-bar是一个所有页面都会用到的顶部title栏,里面左侧有返回按钮;2.基于1,在app-bar组件的setup里添加这个代码:onMounted(()=>{//不能少history.pu......
  • nuc900 nand flash mtd 驱动
    nuc900nandflashmtd驱动,请参考! /**Copyright©2009Nuvotontechnologycorporation.**WanZongShun<[email protected]>**Thisprogramis......
  • 设备树中节点设置status = "disabled"后不匹配驱动原因分析
    参考:https://z.itpub.net/article/detail/B6989B3B5DE25C01FEE3CD122EBA0829https://blog.csdn.net/weixin_43512663/article/details/118511195 自己写的platform_d......
  • USB设备驱动开发-USB Gadget Driver
    一、LinuxUSBGadgetDriver功能为了与主机端驱动设备的USBDeviceDriver概念进行区别,将在外围器件中运行的驱动程序称为USBGadgetDriver。其中,Host端驱动设备的驱动......
  • PCI设备驱动(二)
    LinuxPCI设备驱动代码必须扫描系统中所有的PCI总线,寻找系统中所有的PCI设备(包括PCI-PCI桥设备)。系统中的每条PCI总线都有个编号number,根PCI总线的编号为0。一、总线链......
  • Linux下编写USB驱动实例
    USB是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,USB就是简写,中文叫通用串行总线。我......