嵌入式学习小组
直播中

崔丹

7年用户 178经验值
私信 关注

iMX6板子gpio引脚的读写配置

本文档主要介绍出iMX6板子gpio引脚读写配置。有关平台文件的设备注册的资料可以参
考“iTOP-iMX6-平台文件注册设备”文档。注册的设备名称是“gpio_ctl”。
硬件环境:iMX6 开发板:核心板 v_1.2、底板 v_2.2(以及 v_2.1 底板)。
软件环境:Ubuntu12.04。

回帖(3)

秦玫

2020-12-28 17:49:34
  配置文件简述
  配置 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 引脚进行设置。
举报

毕建录

2020-12-28 17:50:34
  
  硬件介绍
  1.2.1 底板部分
  查看 v_2.2 版本的 iMX6 底板原理图。我们以下面的 5 个引脚为例。进行下面的操作。
  
  下图是 v_2.1 版本的底板原理图。
  
  在底板原理图上搜索各个网络标号“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 口的功能定义。
举报

丁浩

2020-12-28 17:51:28
  软件配置
  1.3.1 iomux-mx6q.h 文件
  iomux-mx6q.h 文件主要功能是查询某个 IO 的功能的定义。
  进入 iMX6 内核源码目录,使用“vi arch/arm/plat-mxc/include/mach/iomux-
  mx6q.h”命令打开 iomux-mx6q.h 文件。如下图。
  
  搜索上述查看到的五个引脚名称。
  以引脚 1 为例。使用“/EIM_D17”搜索到如下信息。如下图。
  
  由上图可以看见扩展总线”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 开发板之全能版使用手册”中的内核编译步骤,进行编译内核。重新烧写到开发板。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分