Linux系统C应用编程之GPIO操作
在Linux系统中,一切皆是文件。Linux把一切事物都抽象成文件,如果要操作一个事物,那么只需要操作它对应的文件即可。本章节我们操作的对象是GPIO,那么我们就要首先了解GPIO相关的文件。
打开SecureCRT,在根文件下有一个名为/sys的文件夹,这里面存放着我们许多外设相关的文件。

本章我们讨论GPIO,所以我们找到GPIO相关的文件。
进入到GPIO相关的文件夹后,我们看到了如下文件:

export:用于将指定编号的 GPIO 引脚导出。在使用 GPIO 引脚之前,需要将其导出,导出成功之 后才能使用它。
unexport:将导出的 GPIO 引脚删除。当使用完 GPIO 引脚之后,我们需要将导出的引脚删除。
gpiochipX: (X:1,2,3,4,5),对应着IMX6ULL芯片上的IO组,GPIO1~GPIO5,每一个gpiochipX管理这一个GPIO组,我们随便进入一个gpiochipX来看看里面。

base:里面的值与gpiochipX的X相同,表示基地址。

label:标签,对应GPIO的名称,

我们也可以从数据手册里面找到GPIO1的地址,这里似乎有着什么联系.....

ngpio:表示这组GPIO的数量,一般都为32。

我们可以通过一张表来直观地看到GPIO的组成形式:

比如我们要操作GPIO4_IO12,表示GPIO4组下的第12个IO口,第四组的基地址是96,偏移地址是12,那么GPIO4_IO12就是96+12 = 108,即gpiochip108。
如果要使用它,就要先导出它的文件,gpioX, X是其GPIO的编号,使用如下命令:
要删除也很简单:
导出来后可以看到:

可以看到GPIOW目录下多了一个gpio108的文件夹。我们看看里面有什么。

根据字面的意思我们也能理解:
active_low 正反逻辑,正逻辑:高1低0,反逻辑:高0低1;
direction:方向,输入还是输出;
edge:触发模式,通常用于中断,上升/下降/both;
vaule:0表示低电平,1表示高电平,正逻辑下。
可想而知,我们只需要修改这些文件的值,就可以达到控制IO口的目的了。
同样地,我们也可以编写C语言来操控这些文件,就能达到控制io的目的。
参考文献:
1、【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4
2、IMX6UL参考手册