IMX6的gpio驱动。如果是通过像单片机一样通过寄存器来控制,过于复杂,寄存器的含义难以理解。好在linux提供一套函数。方便我们设置gpio输出状态和读取gpio状态。
一:先设置imx6 引脚为GPIO模式。
int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
该函数的输入参数就是board-mx6q_c_sabresd.h或者board-mx6dl_c_sabresd.h
文件中的宏定义。
因为board-mx6q_c_sabresd.c文件中包含宏
#include "board-mx6q_c_sabresd.h"
#include "board-mx6dl_c_sabresd.h"
比如你要设置的引脚是EIM_A20。你看这个pad
有很多功能定义。
#define MX6DL_PAD_EIM_A20__WEIM_WEIM_A_20 \
IOMUX_PAD(0x04F0, 0x0120, 0, 0x0000, 0, MX6DL_WEIM_NOR_PAD_CTRL)
#define MX6DL_PAD_EIM_A20__IPU1_DISP1_DAT_15 \
IOMUX_PAD(0x04F0, 0x0120, 1, 0x0000, 0, NO_PAD_CTRL)
#define MX6DL_PAD_EIM_A20__IPU1_CSI1_D_15 \
IOMUX_PAD(0x04F0, 0x0120, 2, 0x089C, 0, NO_PAD_CTRL)
#define MX6DL_PAD_EIM_A20__MIPI_CORE_DPHY_TEST_OUT_19 \
IOMUX_PAD(0x04F0, 0x0120, 4, 0x0000, 0, NO_PAD_CTRL)
#define MX6DL_PAD_EIM_A20__GPIO_2_18 \
IOMUX_PAD(0x04F0, 0x0120, 5, 0x0000, 0, NO_PAD_CTRL)
#define MX6DL_PAD_EIM_A20__TPSMP_HDATA_2 \
IOMUX_PAD(0x04F0, 0x0120, 6, 0x0000, 0, NO_PAD_CTRL)
#define MX6DL_PAD_EIM_A20__SRC_BT_CFG_20 \
IOMUX_PAD(0x04F0, 0x0120, 7, 0x0000, 0, NO_PAD_CTRL)
#define MX6DL_PAD_EIM_A20__EPDC_PWRCTRL_2 \
IOMUX_PAD(0x04F0, 0x0120, 8, 0x0000, 0, NO_PAD_CTRL)
这里我们选择MX6DL_PAD_EIM_A20__GPIO_2_18,这个就是把EIM_A20设置为gpio。
所以我们通过 mxc_iomux_v3_setup_pad(MX6DL_PAD_EIM_A20__GPIO_2_18);
来设置EIM_A20为gpio功能。
二:通过 gpio_direction_output 来设置GPIO为输出,通过gpio_set_value来设置输出值。
三:通过gpio_direction_input来设置GPIO为输入。通过gpio_get_value来获取输入 电平。
上面四个函数的参数就是 引脚编号,这里输入IMX_GPIO_NR(2,18)---这里的参数2和8来源 MX6DL_PAD_EIM_A20__GPIO_2_18.
基本就这么简单完成imx6的GPIO操作。