新闻  |   论坛  |   博客  |   在线研讨会
iTOP-iMX6开发板-GPIO读写配置文档_V1.0《1》
魔法城堡 | 2019-10-18 11:20:08    阅读:300   发布文章

本文档主要介绍 iMX6 板子 gpio 引脚读写配置。有关平台文件的设备注册的资料可以参

考“iTOP-iMX6-平台文件注册设备”文档。注册的设备名称是“gpio_ctl”。

硬件环境:iMX6 开发板:核心板 v_1.2、底板 v_2.2(以及 v_2.1 底板)。

软件环境:Ubuntu12.04。

1.1 配置文件简述

配置 gpio 需要研究三个文件,分别为“ arch/arm/plat-mxc/include/mach/iomux-

mx6q.h”、“arch/arm/mach-mx6/board-mx6q_topeet.h”、“arch/arm/mach-

mx6/board-mx6q_topeet.c”。

其中“arch/arm/plat-mxc/include/mach/iomux-mx6q.h”文件为 IMX6 所有 IO 及其

每个 IO 所有功能的定义集合,用户可通过此文件来查询某个 IO 的功能的定义。

“arch/arm/mach-mx6/board-mx6q_topeet.h”文件用来定义初始化 IMX6 对应需要

用到的 IO 口的功能。在该文件对 gpio 进行初始化。

“arch/arm/mach-mx6/board-mx6q_topeet.c”文件为 IMX6 的板级初始化文件,在

该文件可以对 gpio 引脚进行设置。

1.2 硬件介绍

1.2.1 底板部分

查看 v_2.2 版本的 iMX6 底板原理图。我们以下面的 5 个引脚为例。进行下面的操作。

1.jpg

下图是 v_2.1 版本的底板原理图。

2.jpg

在底板原理图上搜索各个网络标号“EIM_D17”、“EIM_D18”、“EIM_D20”、

“KEY_ROW5”、“EIM_D19”。可以查看到均连接到板对板连接器。也就是全都连接到核

心板上。接下来去看核心板原理图。

1.2.2 核心板部分

搜索上述的网络标号,查看连接到核心板的什么位置。如下图。

由上图可知,五个引脚分别接到核心的“EIM_D17”、“EIM_D18”、“EIM_D20”、

“GPIO_1”、“EIM_D19”引脚。接下来在“arch/arm/plat-mxc/include/mach/iomux-

mx6q.h”查看各个 IO 口的功能定义。

1.3 软件配置

1.3.1 iomux-mx6q.h 文件

iomux-mx6q.h 文件主要功能是查询某个 IO 的功能的定义。

进入 iMX6 内核源码目录,使用“vi arch/arm/plat-mxc/include/mach/iomux-

mx6q.h”命令打开 iomux-mx6q.h 文件。如下图。

5.jpg

搜索上述查看到的五个引脚名称。

以引脚 1 为例。使用“/EIM_D17”搜索到如下信息。如下图。

6.jpg

由上图可以看见扩展总线”EIM_D17”被定义为 8 种功能。我们在使用该引脚是要注

意,无论是初始化还是定义功能,都不能冲突,避免自己使用的功能被其他功能占用。

EIM_D17 配置为 GPIO 功能时使用的是定义为:_MX6Q_PAD_EIM_D17__GPIO_3_17。

其中 _MX6Q_PAD_EIM_D17__GPIO_3_17 被定义为:

#define _MX6Q_PAD_EIM_D17__GPIO_3_17 \

IOMUX_PAD(0x03A8, 0x0094, 5, 0x0000, 0, 0)

这个宏比较关键,其原型为:

#define IOMUX_PAD(_pad_ctrl_ofs,_mux_ctrl_ofs,_mux_mode,_sel_input_ofs,_sel_input,_pad_ctrl)

IOMUX_PAD 宏有 6 个参数,每个参数的意思是:

7.jpg

引脚 2、3、12 和引脚 1 定义类似。不再赘述。再搜索一下引脚 10 的定义。使用

“/GPIO_1”命令,查看到如下信息。(注意 GPIO 为 MX6Q_PAD 之后的 GPIO)

9.jpg

由 上 图 可 知 , GPIO_1 配 置 为 GPIO 功 能 时 使 用 的 定 义 为 :

_MX6Q_PAD_GPIO_1__GPIO_1_1 。

现在可以暂时总结一下我们得到的信息。如下图。

10.jpg

1.3.2 board-mx6q_topeet.h 文件

board-mx6q_topeet.h 文件用来定义初始化 IMX6 对应需要用到的 IO 口的功能。

在 board-mx6q_topeet.h 文件中要搜索使用的 IO 有没有没被定义为其他功能,有的话

需要注释掉,然后添加自己的初始化定义。

在内核源码目录输入“vi arch/arm/mach-mx6/board-mx6q_topeet.h”命令,打开

board-mx6q_topeet.h 文件。如下图。

11.jpg

还是以 EIM_D17 的配置为例进行操作。使用”/MX6Q_PAD_EIM_D17”搜索初始化信

息,查看到该功能已经被初始化。把该初始化注释掉,如下图。

12.jpg

再次搜素没有发现其他相关定义。其他引脚与此类似。要保证没有被其他功能定义

(iomux-mx6q.h 文件中的定义)。还需要注释掉一个地方,如下图。

13.jpg

下面给上述引脚添加初始化。如下图。

14.jpg

注意,是添加到 mx6q_topeet_pads[]之中。

1.3.3 board-mx6q_topeet.c 文件

board-mx6q_topeet.c 文件可以对 gpio 引脚进行设置。

在 board-mx6q_topeet.c 文件中我们将要使用的 gpio 管脚有可能被其他功能占用,需

要我们把其他功能注释掉、或者设置为 NULL。

在 iMX6 的内核源码目录,使用”vi arch/arm/mach-mx6/board-mx6q_topeet.c”命

令打开 board-mx6q_topeet.c 文件,如下图。

15.jpg

使用命令“/IMX_GPIO_NR(3, 17)”查找 EIM_D17 对应的配置。(此处应注意 17 和前

面的逗号之间有个空格,不然搜索不到)。把搜索到配置修改为 NULL。如下图。

16.jpg

其它引脚与此类似。全部修改如下图。

至此。我们的配置就都做完了。注意:IMX_GPIO_NR(1, 1)一共有两处。

按照”iTOP-i.MX6 开发板之全能版使用手册”中的内核编译步骤,进行编译内核。重新

烧写到开发板。进行下一步测试。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客