第4章 具体单板的GPIO操作方法
请使用GIT下载文档后,看图 4.1红框所示目录中各板子对应的文档及图片。
网盘中相同名字的目录下也有对应的视频。

为方便学习,在本文档中也把上述GIT目录中的文档添加进来了。
4.1 IMX6ULL的GPIO操作方法
表 4‑1 GPIO操作相关名词解释
| 名词 | 解释 |
|---|---|
| CCM | Clock Controller Module (时钟控制模块) |
| IOMUXC | IOMUX Controller,IO复用控制器 |
| GPIO | General-purpose input/output,通用的输入输出口 |
4.1.1 IMX6ULL的GPIO模块结构
参考资料:芯片手册《Chapter 28: General Purpose Input/Output (GPIO)》
有5组GPIO(GPIO1~GPIO5),每组引脚最多有32个,但是可能实际上并没有那么多。
- GPIO1有32个引脚:GPIO1_IO0~GPIO1_IO31;
- GPIO2有22个引脚:GPIO2_IO0~GPIO2_IO21;
- GPIO3有29个引脚:GPIO3_IO0~GPIO3_IO28;
- GPIO4有29个引脚:GPIO4_IO0~GPIO4_IO28;
- GPIO5有12个引脚:GPIO5_IO0~GPIO5_IO11;
- GPIO的控制涉及4大模块:CCM、IOMUXC、GPIO模块本身,框图如图 4.2

CCM
4.1.2 CCM用于设置是否向GPIO模块提供时钟
参考资料:芯片手册《Chapter 18: Clock Controller Module (CCM)》
GPIOx要用CCM_CCGRy寄存器中的2位来决定该组GPIO是否使能。哪组GPIO用哪个CCM_CCGR寄存器来设置,请看上图红框部分。
CCM_CCGR寄存器中某2位的取值含义如下:

图 4.3 CCM_CCGR
- 00:该GPIO模块全程被关闭
- 01:该GPIO模块在CPU run mode情况下是使能的;在WAIT或STOP模式下,关闭
- 10:保留
- 11:该GPIO模块全程使能
- GPIO2时钟控制:

图 4.4 GPIO2的时钟控制寄存器
- GPIO1、GPIO5时钟控制:

图 4.5 GPIO1/5的时钟控制寄存器
- GPIO3时钟控制:

图 4.6 GPIO3的时钟控制寄存器
- GPIO4时钟控制:

图 4.7 GPIO4的时钟控制寄存器
4.1.3 IOMUXC:引脚的模式(Mode、功能)
参考资料:芯片手册《Chapter 32: IOMUX Controller (IOMUXC)》。

图 4.8 IOMUXC
对于某个/某组引脚,IOMUXC中有2个寄存器用来设置它:
- 选择功能:
- IOMUXC_SW_MUX_CTL_PAD_<PADNAME> :Mux pad xxx,选择某个pad的功能
- IOMUXC_SW_MUX_CTL_GRP_<GROUP NAME>:Mux grp xxx,选择某组引脚的功能
某个引脚,或是某组预设的引脚,都有8个可选的模式(alternate (ALT) MUX_MODE)。

图 4.9 选择引脚功能