前面几篇文章,从最基础的寄存器点灯,到设备树点灯,再到GPIO子系统点灯,一步步了解嵌入式Linux开发的各种点灯原理。
点灯用到的都是GPIO的输出功能,这篇,通过按键的使用,来学习GPIO输入功能的使用。
1 硬件介绍
1.1 板子上按键原理图
先来看原理图,我板子上有4个按键sw1~sw4:
1.1.1 SW1
SW1是板子的系统复位按键,不可编程使用
1.1.3 SW4
SW4是BOOT_MODE1脚,用来进行串行烧录模式切换,需要再与复位键配合使用。
本篇仅测试按键功能,因此可以该按键。
本实验使用SW2和SW4这两个按键来进行实验。
引脚宏定义后面的值,是对引脚功能的配置:
SW2:0x3080,即0011 0000 1000 0000
SW4:0xF080,即1000 0000 1000 0000
对照之前讲解GPIO的PAD寄存器的配置,根据两个按键的实际电路配置上拉或下拉。
注:SW4 (MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11)这个GPIO,在设备中实际已经被其它设备(spi4)使用了。
在imx6ull-myboard.dts的300多行处,有:
理论上我们应该把这里的配置给注释掉,因为1个IO是不能同时进行2种功能的。由于本次实验不使用spi4,暂且也先不管它,看看会有什么影响,如果影响了本实验,再给把这里的配置给注掉。
2.1.2 添加key节点
在根节点下创建名为key的按键节点,内容如下:
2.2 编写按键驱动程序
按键驱动,也属于字符设备驱动,和之前的字符设备驱动的框架一样,主要的修改点在按键的硬件初始化配置已经按键的读取。
新建一个key-Bsp.c
2.2.1 按键的硬件初始化
初始化的流程,就是使用OF函数来从设备树中获取key节点,然后使用GPIO子系统的API函数,将GPIO配置为输入。
2.2.2 读取按键的值
读取按键的值,也是GPIO子系统的API函数来读取。读取到按键的值后,将该值传递出来给应用层使用,注意这里使用了原子操作的方式atomic_set和atomic_read实现数据的写入和读取。
2.3 编写按键应用程序
新建一个key-Ap
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!