5.jpg
从上图可以看到该引脚可以复用成 7 种不同的模式。其中 ALT5(0101)表示可以复用为 GPIO1_IO28。
所以我们可以看到 i.MX6 ULL 的 GPIO 不止 GPIO1_IO00-GPIO1_IO09 这 10 个,其它的 IO 也可以复用为 GPIO。
在第四章节我们可以看到 i.MX6 ULL 的 GPIO 一共有 5 组:GPIO1、GPIO2、GPIO3、GPIO4、GPIO5,其中 GPIO1
有 32 个 IO(IO0-IO31),GPIO2 有 22 个 IO(IO0-IO21),GPIO3 有 29 个 IO(IO0-IO28),GPIO4 有 29个 IO(IO0-IO28),GPIO5 有 12 个 IO(IO0-IO11),这样 i.MX6 ULL 一共有 124 个 GPIO。如果我们想要
查看每个 IO 能复用成什么功能,可以查看第 4 章,如果我们要设置某个 IO 的功能,需要查看第 32 章。
9 92 .2 IO 引脚配置 引脚配置
IO 引脚的配置我们需要参考第 32 章节,在 9.1 章节我们看到每个 IO 都有一个“SW_MUX_CTL_PAD_XX_XX”
的寄存器,例如 SW_MUX_CTL_PAD_GPIO1_IO00。该寄存器在 6.1 章节我们介绍了,主要是用来配置 IO 引脚
的模式。然后我们在该章节看到还有一个“SW_PAD_CTL_PAD_XX_XX”的寄存器,例如
“SW_PAD_CTL_PAD_GPIO1_IO00”寄存器,如下图所示:
6.jpg
从上图可以看到 SW_PAD_CTL_PAD_GPIO1_IO00 寄存器的地址是 0X20E02E8,他也是一个 32 位的寄存器,我
们可以看到改寄存器按照位划分成了几种功能设置,如下:
HYS(bit16):用来使能迟滞比较器,当 IO 作为输入功能的时候有效,用于设置输入接收器的施密特触发
器是否使能。如果需要对输入波形进行整形的话可以使能此位。此位为 0 的时候禁止迟滞比较器,为 1 的
时候使能迟滞比较器。PUS(bit15-bit14)用来设置上下拉电阻的。
PUE(bit13)当 IO 作为输入的时候,这个位用来设置 IO 使用上下拉还是状态保持器。状态保持器在 IO 作
为输入的时候才有用,当外部电路断电以后此 IO 口可以保持住以前的状态。
PKE(bit12)用来使能或者禁止上下拉/状态保持器功能。
ODE(bit11)IO 作为输出的时候,此位用来禁止或者使能开路输出。
SPEED(bit7-bit6)当 IO 用作输出的时候,此位用来设置 IO 速度。
DSE(bit5-bit3)当 IO 用作输出的时候用来设置 IO 的驱动能力。
SRE(bit0)设置压摆率。
9 93 .3 GPIO 配置 配置
在 9.1 和 9.2 章节我们介绍了这两个寄存器“SW_MUX_CTL_PAD_XX_XX”和“SW_PAD_CTL_PAD_XX_XX”
用来配置 IO 引脚,在本章我们来学习一下 GPIO 功能的配置(GPIO 属于 IO 引脚中的一种复用功能)。比如
GPIO1_IO00 这个 IO 可以复用为 I2C2_SCL、ENET1_REF_CLK1、GPIO1_IO00、WDOG3_WDOG_B 等 9 种复用功能,
GPIO1_IO00 只是其中的一种,具体配置成哪种复用功能,需要看下我们的硬件设计中这个 IO 是作为哪种功
能来设计的。如果我们把该引脚用来控制 LED 发光二极管,那我们的程序就要把这个 IO 配置成 GPIO 模式,
然后我们还需要对 GPIO 的功能进行配置,我们可以参考手册的第 28 章“General Purpose Input/Output
(GPIO)”。在该章节我们可以看到 GPIO 的结构如下图所示所示: