LED硬件基本知识
首先我们都知道LED的基本操作,通过上拉或下拉电阻的方式实现LED的开关,这里不再介绍。那么怎么知道GPIO地址在那个位置1,也就是如何通过位操作来实现硬件的开关呢?
IMX6ULL 的 GPIO 操作方法
GPIO 的控制涉及 4 大模块:CCM、IOMUXC、GPIO 模块本身,框图如下:
GPIOx为GPIO group,里面包换不同个数的引脚,有芯片手册来看:
GPIO时钟配置:
GPIOx 要用 CCM_CCGRy 寄存器中的 2 位来决定该组 GPIO 是否使能。哪组 GPIO 用哪个 CCM_CCGR 寄 存器来设置,请看上图红框部分
00:该 GPIO 模块全程被关闭 ②
01:该 GPIO 模块在 CPU run mode 情况下是使能的;在 WAIT 或 STOP 模式下,关闭
10:保留
11:该 GPIO 模块全程使能
以CCRG1为例
IOMUX Controller:
选择功能:
IOMUXC_SW_MUX_CTL_PAD_<PADNAME> :Mux pad xxx,选择某个 pad 的功能
IOMUXC_SW_MUX_CTL_GRP_<GROUP NAME>:Mux grp xxx,选择某组引脚的功能
配置上下拉电阻
IOMUXC_SW_PAD_CTL_PAD_<PAD_NAME>:pad pad xxx,设置某个 pad 的参数
IOMUXC_SW_PAD_CTL_GRP_<GROUP NAME>:pad grp xxx,设置某组引脚的参数
当然还有读写功能以及方向配置:
① 设置 CCM_CCGRx 寄存器中某位使能对应的 GPIO 模块 // 默认是使能的,上图省略了
② 设置 IOMUX 来选择引脚用于 GPIO
③ 设置 GPIOx_GDIR 中某位为 0,把该引脚设置为输入功能
④ 读 GPIOx_DR 或 GPIOx_PSR 得到某位的值(读 GPIOx_DR 返回的是 GPIOx_PSR 的值)