由上图可以看见扩展总线”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 个参数,每个参数的意思是:
引脚 2、3、12 和引脚 1 定义类似。不再赘述。再搜索一下引脚 10 的定义。使用
“/GPIO_1”命令,查看到如下信息。(注意 GPIO 为 MX6Q_PAD 之后的 GPIO)
由 上 图 可 知 , GPIO_1 配 置 为 GPIO 功 能 时 使 用 的 定 义 为 :
_MX6Q_PAD_GPIO_1__GPIO_1_1 。
现在可以暂时总结一下我们得到的信息。如下图。
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 文件。如下图。
还是以 EIM_D17 的配置为例进行操作。使用”/MX6Q_PAD_EIM_D17”搜索初始化信
息,查看到该功能已经被初始化。把该初始化注释掉,如下图。
再次搜素没有发现其他相关定义。其他引脚与此类似。要保证没有被其他功能定义
(iomux-mx6q.h 文件中的定义)。还需要注释掉一个地方,如下图。
下面给上述引脚添加初始化。如下图。
注意,是添加到 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 文件,如下图。
使用命令“/IMX_GPIO_NR(3, 17)”查找 EIM_D17 对应的配置。(此处应注意 17 和前
面的逗号之间有个空格,不然搜索不到)。把搜索到配置修改为 NULL。如下图。
其它引脚与此类似。全部修改如下图。
至此。我们的配置就都做完了。注意:IMX_GPIO_NR(1, 1)一共有两处。
按照”iTOP-i.MX6 开发板之全能版使用手册”中的内核编译步骤,进行编译内核。重新
烧写到开发板。进行下一步测试。