主要参照《iMX6ULL参考手册》中第 28 章:Chapter 28 General Purpose Input/Output (GPIO)。
一、概述
GPIO通用输入输出外设提供专用的通用引脚,可以配置为输入或输出。
当配置为输出时,可以写入内部寄存器以控制输出引脚上驱动的状态。当配置为输入时,可以通过读取内部寄存器的状态来检测输入的状态。此外,GPIO外围设备可以产生CORE中断。
GPIO是控制芯片IOMUX的模块之一。
GPIO功能通过八个寄存器、一个边缘检测电路和中断产生逻辑提供。
这八个寄存器是:
- Data register (GPIO_DR)
- GPIO direction register (GPIO_GDIR)
- Pad sample register (GPIO_PSR)
- Interrupt control registers (GPIO_ICR1, GPIO_ICR2)
- Edge select register (GPIO_EDGE_SEL)
- Interrupt mask register (GPIO_IMR)
- Interrupt status register (GPIO_ISR)
这些寄存器在GPIO内存MapRegister定义中有详细描述。每个GPIO输入端都有一个专用的边缘检测电路,可以通过软件配置该电路来检测输入信号的上升沿、下降沿、逻辑低电平或逻辑高电平。通过在中断掩码寄存器(GPIO IMR)中设置相应的位,可以选择性地屏蔽边缘检测电路的输出。这些合格的输出被连接在一起以生成两条1位中断线。
- 组合中断指示为GPIOx信号0 - 15
- 组合中断指示GPIOx信号16 - 31
此外,GPIO1提供了对其8个低阶中断源的可见性(即GPIO1中断n,对于n = 0 - 7)。然而,来自其他GPIOx的单个中断指示是不可用的。
GPIO边缘检测将在中断控制单元中进一步描述。
GPIO的整体功能将在GPIO功能描述中进一步描述。
1、结构图
GPIO子系统包含多个GPIO块,可以产生和控制多达32个通用信号。
GPIO软件的框图如图28-2所示。
2、特点
GPIO包括以下特性:
- 通用输入输出逻辑功能
- 使用数据寄存器(GPIO DR)驱动特定的数据输出
- 使用GPIO方向寄存器(GPIO GDIR)控制信号的方向
- 通过读取pad样本寄存器(GPIO PSR),使核心能够对相应输入的状态进行采样。
- GPIO中断功能
- 支持多达32个中断
- 标识中断边缘
- 向SoC中断控制器生成三个active-high中断
二、外部信号
这里的表格描述了GPIO的外部信号。
三、时钟
这里的表描述了GPIO的时钟源。
请参阅时钟控制器模块的时钟设置,配置和门控信息。
四、GPIO功能描述
本节提供了块的完整功能描述。
1、GPIO 功能
当IOMUX设置为GPIO模式时,GPIO信号可以作为通用输入输出。每个GPIO信号可以单独配置为使用GPIO方向寄存器(GPIO GDIR)的输入或输出。
当配置为输出(GPIO GDIR位= 1)时,GPIO数据寄存器(GPIO DR)中的数据位的值被驱动到相应的GPIO上。当一个信号被配置为输入(GPIO GDIR位= 0)时,可以从对应的GPIO PSR位读取输入的状态。
2、GPIO pad 结构
1、输入驱动
输入驱动特性:
- 可选择施密特触发器或CMOS输入模式。
- 在输入接收端输出到核心的缓冲器结构。
- 当IO供应(OVDD)断电时,接收器是三状态的。(接收输出的Keeper保持它以前的状态)。
2、输出驱动
输出驱动特性:
- 可选择CMOS或开式漏极输出类型
- 可选择的下拉保持器使能信号,使能上拉下拉和输出保持器。
- 可选择的上拉电阻22K, 47K, 100K和一个下拉电阻100KOhm。
- 在输出模式下,上拉、下拉和pad保持器被禁用。
- 每个操作模式有七个驱动强度。
- 额外的2位转换速率控制,可在50、100和200兆赫兹IO单元操作范围内选择,降低开关噪声。
1、驱动强度
驱动强度的选择可以使阻抗匹配,得到更好的信号完整性。
2、输出保持
一个简单的锁存器来保存输入值。
3、PU / PD / Keeper Logic
当Keeper使能时,上拉和下拉将被禁用,pad的输出值取决于Keeper。输出保持器由OVDD提供动力。当核心VDD断电或第一个逆变器为三态时,pad的状态可以保持不变。
Keeper 和 Pull 不能同时启用。
4、开漏
开放式漏极是一种电路技术,它允许多个设备在单线上进行双向通信。开式漏极驱动器通常使用一个外部或内部的上拉电阻来保持信号线高,直到设备吸收足够的电流将信号线拉低,通常用于有多个设备的总线。
3、GPIO编程
1、GPIO读模式
读取输入信号的编程顺序如下:
1、配置IOMUX为GPIO模式。
2、配置输入的GPIO方向寄存器。
3、从数据寄存器中读取值。
2、GPIO写模式
驱动输出信号的编程顺序如下:
1、配置IOMUX选择GPIO模式,如果需要通过PSR读取回环 pad 值,也可以启用SION。
2、配置GPIO方向寄存器输出。
3、将值写入数据寄存器。
4、中断控制单元
除了通用的输入输出功能外,GPIO外设中的边缘检测逻辑还可以反映在配置为输入(GDIR位= 0)的给定GPIO信号上是否发生了转换。中断控制寄存器(GPIO_ICR1和GPIO_ICR2)可以用来独立配置每个输入信号的中断条件(低到高过渡、高到低过渡、低或高)。关于GPIO_ICR1和GPIO_ICR2的设置,请参见GPIO内存映射寄存器定义。
中断控制单元由32个中断控制子单元组成,每个子单元处理单个中断线。
五、GPIO内存映射寄存器定义
有8个32位GPIO寄存器。所有寄存器都可以从IP接口访问。仅支持32位访问。
GPIO的内存映射如下表所示。