当配置为输出时,可以写入内部寄存器来控制输出引脚上驱动的状态。当配置为输入时,可以通过读取内部寄存器的状态来检测输入的状态。此外,GPIO外设可以产生CORE中断。
GPIO是控制芯片IOMUX的模块之一
GPIO功能是通过8个寄存器、一个边缘检测电路和中断产生逻辑提供的。
支持五组GPIO,GPIO1~GPIO5,具体列表可看imx数据手册
整体架构图如下
GPIO功能描述
当配置为输出时(GPIO_GDIR位= 1),数据位中的值GPIO数据寄存器(GPIO_DR)驱动在相应的GPIO线上。当一个信号被配置为输入(GPIO_GDIR位= 0)时,可以从相应的GPIO_PSR位读取输入的状态。
GPIO物理结构图
GPIO编程
输入的编程大概分为三步,输出类似
1.配置IOMUX选择GPIO模式(Via IOMUX Controller (IOMUXC))。
2. 配置GPIO方向寄存器到输入(GPIO_GDIR[GDIR] set to 0b)。
3.从数据寄存器/垫状态寄存器读取值。
中断配置:
除了通用的输入/输出函数,边缘检测逻辑GPIO外设反映了一个给定的GPIO信号是否发生了转换,该信号被配置为一个输入(GDIR位= 0)中断控制寄存器(GPIO_ICR1和GPIO_ICR2)可用于独立配置每个输入信号的中断条件(低到高转换、高到低转换、低或高)。中断控制单元由32个中断控制子单元组成,每个子单元处理一条单独的中断线
GPIO内存映射/寄存器定义
8个32为寄存器,寄存器地址映射到内存地址,具体映射地址可参考imx数据手册1357页
GPIOx_DR
数据位。这个寄存器定义了当信号被配置为输出时GPIO输出的值(GDIR [n] = 1)。写入此寄存器的内容存储在一个寄存器中。读取GPIO_DR返回存储在寄存器中的值,如果信号被配置为输出(GDIR[n]=1),或者输入信号的值,如果被配置为输入(GDIR[n]=0)
GPIOx_GDIR
位域,为0表述输入,为1表示输出
GPIOx_PSR
GPIO_PSR是一个只读寄存器。每个位存储相应输入信号的值(在IOMUX中配置)。这个寄存器使用ipg_clk_s时钟进行计时,这意味着只有在访问这个位置时才对输入信号进行采样。
GPIOx_ICR1
GPIO_ICR1包含16个双位字段,其中每个字段指定不同输入信号的中断配置
00 LOW_LEVEL — 低信号中断
01 HIGH_LEVEL — 高信号中断
10 RISING_EDGE — 上升沿中断
11 FALLING_EDGE — 下降沿中断
GPIOx_ICR2
GPIO_ICR2包含16个2位字段,其中每个字段指定不同输入信号的中断配置,同上
GPIOx_IMR
中断使能,位域
GPIOx_ISR
中断状态寄存器
GPIO_ISR是中断状态指示灯。每个位表示是否满足相应输入信号的中断条件。当一个中断条件满足时(由相应的中断条件寄存器字段决定),这个寄存器中的相应位被设置。
GPIOx_EDGE_SEL
GPIO_EDGE_SEL可以用来覆盖ICR寄存器的配置。如果设置GPIO_EDGE_SEL位,则相应信号中的上升沿或下降沿产生中断。