一款基于Cortex-A7芯片, IMX6ULL之IO与GPIO

        IMX6ULL是飞思卡尔旗下的一款基于Arm Cortex-A7芯片,跟Arm Cortex-M系列芯片一样,都有GPIO、UART、I2C、SPI、SD、USB、以太网等功能模块,其处理器主频可达到800M(单核),因此其像是一块增强型的单片机,因为其没有内部可供用户使用的RAM与ROM,因此需要外扩RAM与FLASH。

        IMX6ULL的GPIO共有5组,分别为GPIO1、GPIO2、GPIO3、GPIO4、GPIO5,而每组GPIO下又有多个IO,其中GPIO1有32个IO、GPIO2有22个IO、GPIO3有29个IO、GPIO4有29个IO、GPIO5有12个IO,总共有124个IO。

        IMX6ULL的GPIO在使用前需要进行配置,与STM32类似,首先需要使能GPIO的时钟源,其次对于IO的复用功能配置,最后配置GPIO的输入输出功能。

一、使能GPIO时钟源

        IMX6ULL的外设时钟设置,在参考手册《i.MX 6ULL Applications Processor Reference Manual》中的“Chapter 18:Clock Controller Module(CCM)”中配置,外设时钟使能相关的寄存器如下7个:CCM_CCGR0~CCM_CCGR6这7个寄存器。

 

每个CCM_CCGR都是32位寄存器,每2位控制一个外设的时钟开关,32位可以控制16个外设(CG0~CG15),如下图的CCM_CCGR寄存器的结构:

对于CCM_CCGR0寄存器,其所控制的16个外设如下图所示:

由于每2位控制一个外设,因此共有4种可能的时钟配置,如下图所示:

如上所示,GPIO2由CCM_CCGR0的位(31-30)配置,其它GPIO1~GPIO5也分别在CCM_CCGR1~6中的对应位配置,如下表所示:

二、IO复用与配置

        IO复用与配置在参考手册《i.MX 6ULL Applications Processor Reference Manual》中的“Chapter 32:IOMUX Controller(IOMUXC)”中配置。

每个IO引脚都有2个专门的配置寄存器,寄存器名称格式为:

其中“XXXX”表示对应的引脚名称,对应于引脚图中某个引脚所有功能的第一个功能,如下2图所示:

A、如上GPIO1_IO00引脚可以复用为I2C2_SCL、GPT1_CAPTURE等功能,对应的寄存器为:

B、如上ENET1_TX_DATA0引脚可以复用为UART5_CTS、CSI_DATA19等功能,对应的寄存器为:

 2.1、IOMUXC控制器时钟

在配置IOMUXC控制器前,需要使能该控制器的时钟源,即CCM_CCGR4(bit3:2)。

 2.2、IO的复用

每个IO都可以复用为其它外设功能,最多可配置8种, 通过IOMUXC_SW_MUX_CTL_PAD_XXXX寄存器进行配置,以GPIO1_IO00引脚为例,即以IOMUXC_SW_MUX_CTL_PAD_ GPIO1_IO00寄存器进行配置,如下图所示:

 

该寄存器地址为0X020E005C,是32位寄存器,只用到低5位,其中bit0~bit3(MUX_MODE)用于配置引脚GPIO1_IO00复用功能的。GPIO1_IO00可以复用ALT0~ALT8这个9个功能。初始默认为ALT5,即GPIO1_IO00功能,如果需要配置为I2C2_SCL时,将bit0~bit3(MUX_MODE)设置为ALT0即可。

其它引脚的复用配置类似。

2.3、IO的配置

IO配置是对IO引脚的参数,比如上/下拉、驱动能力等进行配置,以GPIO1_IO00引脚为例,即以IOMUXC_SW_PAD_CTL_PAD_ GPIO1_IO00寄存器进行配置,如下图所示:

该寄存器地址为0X020E02E8,是32位寄存器,只用到低17位,这些位分别用于配置IO的具体参数,如下图所示:

这些参数所配置的IO对应的功能图如下图所示:

2.3.1、HYS(bit16):迟滞比较器

迟滞比较器使能时,可以对输入的信号进行防抖,对于波形整形有帮助,其工作原理如下图所示:

比较器的门限范围是Vt-~Vt+,当输入电压Vi从在Vt-~Vt+范围内,输出并不会跳变,因此输入电压Vi从在Vt-~Vt+范围内的抖动,不会影响到输出;当Vi上升到Vt+时,输出Vo才跳到高电平,当Vi下降到Vt-时,输出Vo才跳到低电平,如下整形波形图;

2.3.2、上下拉/保持器(PKE(bit12)、PUE(bit13)、PUS(bit15:14))

2.3.2.1、上下拉功能配置

1、首先使能上下拉/保持器功能,PKE=1;

2、然后将PUE=1,使能上下拉,禁止保持器;

3、通过PUS配置上下拉电阻,如下图所示:

2.3.2.2、保持器功能配置

1、首先使能上下拉/保持器功能,PKE=1;

2、然后将PUE=0,使能保持器,禁止上下拉;

输入保持器

当外部电路断电时,输入保持器保存断电前的IO状态,内核可以随时读取IO状态;输入保持器始终使能。

输出保持器:当内核休眠断电时,输出保持器保持休眠前的IO状态,能够继续控制外部电路不受影响,输出保持器由PUE控制使能。

2.3.3、开漏输出(ODE(bit11))

IO输出时,可以配置为开漏输出,这样就需要内部上拉【PUE(bit13)、PUS(bit15:14)】,或外部上拉,否则无法输出高电平;一般在多设备挂在总线通信上使用。

2.3.4、输出驱动能力DSE(bit5:3)

当IO用作输出时,可以设置输出的电流驱动能力,可设为8个等级,如下图所示:

2.3.5、压摆率(SRE(bit0))

压摆率即IO电平跳变所需要的时间,比如从0到1跳变需要的时间越小,波形就越陡,则压摆率高;反之,所需要的时间越多,波形就越缓,压摆率越低;产品需要过EMC时,压摆率则需低一些,如果是高速通信,则压摆率要高一些。

三、GPIO配置

3.1、IO配置为GPIO功能框图

如上图所示IO配置为GPIO需要两步:1、IO复用与IO配置;2、如果将IO复用为GPIO功能,则还需要进行GPIO配置,如GPIO的输入\输出方向、输入\输出电平、中断控制等。

3.2、GPIO的功能框图

当IO用作GPIO时,GPIO的配置寄存器有8个,分别为:DR、DGIR、PSR、ICR1、ICR2、EDGE_SEL、IMR、ISR,这些寄存器分两组:一组用于IO状态配置,一组用于IO中断配置,如下图所示:

3.2.1、GPIO状态配置

GPIO状态由DR、GDIR、PSR寄存器进行配置。

GDIR寄存器用于配置GPIO的方向:输入/输出。GDIR寄存器32位,每一位对应一个GPIO;如果要设置GPIO为输入时就设置相应位为0,如果要设置为输出时相应位设置为1,如下图所示:

DR寄存器也是32位,每位对应一个GPIO。当GPIO 被配置为输出功能以后,向指定的位写入数据,则相应的 IO输出相应的高低电平,比如要设置 GPIO1_IO00输出高电平,那么就应该设置GPIO1.DR=1;当GPIO被配置为输入功能以后,此寄存器就保存着对应 IO的电平值,每个位对应一个 GPIO;比如当 GPIO1_IO00这个引脚接地的话,那么 GPIO1.DR 的bit0就是0。

PSR 寄存器也是一个 GPIO 对应一个位,读取相应的位即可获取对应的 GPIO 的状

态,也就是GPIO 的高低电平值。功能和输入状态下的DR 寄存器一样

3.2.2、GPIO中断配置

GPIO中断配置寄存器为:ICR1、ICR2、EDGE_SEL、IMR、ISR。

ICR1与ICR2用于选择中断触发电平,其中ICR1用于IO0~15的配置,ICR2 用于IO16~31的配置,也就是说每个GPIO用两位配置,如下图所示:

IMR 寄存器是中断屏蔽寄存器,用来控制GPIO的中断禁止和使能,如果使能某个GPIO 的中断,那么设置相应的位为1,如果要禁止中断,那么就设置相应的位为0。例如,要使能 GPIO1_IO00 的中断,那么就可以设置 GPIO1.MIR=1,如下图所示:

ISR是中断状态寄存器,只要某个 GPIO 的中断发生,那么ISR 中相应的位就会被置 1。所以,我们可以通过读取 ISR 寄存器来判断GPIO 中断是否发生,相当于ISR 中的这些位就是中断标志位。当我们处理完中断以后,必须清除中断标志位,清除方法就是向ISR 中相应的位写 1清零,如下图所示:

EDGE_SEL寄存器是边沿选择寄存器,会覆盖 ICR1和 ICR2的设置,如果相应的位被置 1,那么就相当与设置了对应的GPIO是上升沿和下降沿(双边沿)触发。例如,我们设置 GPIO1.EDGE_SEL=1,那么就表示 GPIO1_IO01 是双边沿触发中断,无论GFPIO1_CR1 的设置为多少,都是双边沿触发,如下图所示:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值