当前位置: 首页 > news >正文

做企业网站都有什么平台专业做网站的公司

做企业网站都有什么平台,专业做网站的公司,哪家网站设计公司好,手表网站海外购靠谱吗在前几篇笔记之中都是使用的GPIO输出功能,还没有用过GPIO输入功能,本章就来学习一下如果在Linux下编写GPIO输入驱动程序。正点原子STM32MP1开发板上有三个按键,就使用这些按键来完成GPIO输入驱动程序,同时利用原子操作来对按键值进…

在前几篇笔记之中都是使用的GPIO输出功能,还没有用过GPIO输入功能,本章就来学习一下如果在Linux下编写GPIO输入驱动程序。正点原子STM32MP1开发板上有三个按键,就使用这些按键来完成GPIO输入驱动程序,同时利用原子操作来对按键值进行保护

Linux下按键驱动原理

按键驱动和LED驱动原理上来讲基本都是一样的,都是操作GPIO,只不过一个是读取GPIO的高低电平,一个是从GPIO输出高低电平。本章实现按键输入,在驱动程序中使用一个整形变量来表示按键值,应用程序通过read函数来读取按键值,判断按键有没有按下。在这里,这个保存按键值的变量就是个共享资源,驱动程序要向其写入按键值,应用程序要读取
按键值。所以要对其进行保护,对于整形变量而言首选的就是原子操作,使用原子操作对变量进行赋值以及读取。Linux下的按键驱动原理很简单,接下来开始编写驱动。

注意,本章例程只是为了演示Linux下GPIO输入驱动的编写,实际中的按键驱动并不会采用本章中所讲解的方法,Linux下的input子系统专门用于输入设备!

硬件原理图分析

开发板上有三个按键:KEY0、KEY1和WK_UP,原理图如下图所示:
按键原理图
从上图可以看出,按键KEY0 、KEY1和WK_UP这三个按键分别连接到正点原子STM32MP1开发板的PG3、PH7和PA0这三个IO上。本节只用到KEY0这个按键,从上图可以看出,KEY0接了一个10K的上拉电阻,因此KEY0没有按下的时候PG3应该是
高电平,当KEY0按下以后PG3就是低电平

实验程序编写

修改设备树文件

在根节点“/”下创建KEY节点,命名为“key”,节点内容如下:

示例代码29.3.1.1 创建KEY节点 
1 key { 
2     compatible = "alientek,key"; 
3     status = "okay"; 
4     key-gpio = <&gpiog 3 GPIO_ACTIVE_LOW>; 
5 };

按键驱动程序编写

这里总体跟驱动LED的结构是类似的。

首先在设备结构体key_dev中,定义一个原子变量atomic_t的keyvalue。

在初始化函数keyio_init中,与之前的区别就是在最后调用gpio_direction_input设定gpio为输入模式。

key_open中,只要调用keyio_init初始化按键。

key_read中,通过gpio_get_value来读取IO口当前电平,如果读到0,也就是低电平,在维持高电平,也就是按键持续按下进入while循环等待释放,释放后设置atomic_set为KEY0VALUE(0XF0)。然后通过atomic_read读取原子变量。

在mykey_init中,调用(atomic_t)ATOMIC_INIT(0)初始化原子变量,然后通过atomic_set设置原子变量为INVAKEY(0X00)。

编写测试APP

这里就是在open这个字符设备之后,在while死循环中,read值,以此来判断按键是否按下。

运行测试

编译驱动程序和测试APP

编译驱动程序

把Makefile的obj-m改成key.o,然后“make”就可以了。

编译测试APP

可以通过如下命令编译keyApp.c:

arm-none-linux-gnueabihf-gcc keyApp.c -o keyApp

运行测试

将上一小节编译出来的key.ko和keyApp这两个文件拷贝到rootfs/lib/modules/5.4.31目录中,重启开发板,进入到目录lib/modules/5.4.31中,输入如下命令加载key.ko驱动模块:

depmod //第一次加载驱动的时候需要运行此命令
modprobe key.ko //加载驱动

加载成功后通过如下命令来测试:

./keyApp /dev/key

按下开发板上的KEY0,keyApp就会过去并输出案件信息,如下图所示:
按键运行结果
从上图可以看出,当按下KEY0以后就会打印出“KEY0 Press, value = 0XF0”表示按键按下。但是可能会发现,有时候按下一次KEY0但是会输出好几行“KEY0 Press, value = 0XF0”,这是因为代码没有做按键消抖处理。

如果要卸载驱动可以使用如下命令:

rmmod key.ko

总结

按键输入和之前的LED驱动是很相似的,只是在驱动之中要换成gpio_direction_input表示这个GPIO是输入的。然后使用原子变量的时候是在key_read之中,通过原子变量控制读操作不会产生并发竞争。

http://www.shuangfujiaoyu.com/news/58887.html

相关文章:

  • 美国服务器购买网站发帖百度秒收录网站分享
  • 做下载网站挣钱吗怎么制作一个自己的网站
  • 织梦dedecms多语言网站文章怎么公司网站设计要多少钱
  • 做正规小说网站有哪些搜索seo怎么优化
  • 北京社保网站做社保增减员上海自媒体推广
  • 做网站work什seo管家
  • 制作个人网站的六个步骤如何做免费网络推广
  • 网站安全风险提示单搜索引擎调词平台哪个好
  • 怎样做一个属于自己的小程序discuz论坛seo设置
  • 如何在百度创建网站企业网络推广的方式有哪些
  • 在线美工班级优化大师官方免费下载
  • 网站密度桂林网站设计制作
  • 免费网站空间申请哪个好长沙官网网站推广优化
  • 如何给自己的公司网站做优化小说百度风云榜
  • 131美女做爰网站怎样去推广自己的网店
  • 建设外贸商城网站郑州seo技术外包
  • wordpress图片搬到聚合图床厦门网站推广优化哪家好
  • 北京网站seo公司百度招商加盟推广
  • 营业执照咋做网等网站艾滋病多久能检查出来
  • 外贸网站模板推荐小程序推广赚佣金平台
  • php如何网站做修改网址ip地址查询工具
  • 江阴外贸网站制作seo优化的网站
  • 做纺织行业的网站太原网站制作优化seo
  • 北京做网站设计公司谷歌seo外链
  • 顺义网站开发东莞关键词优化推广
  • 手机网站数据加载推广软件的app
  • 桂林网站设计公司谷歌seo招聘
  • 自己做的网站能放到网上么免费创建自己的网站
  • 本地wordpress后台很慢北京网优化seo优化公司
  • 房产网站开发文档网站发布与推广方式