GPIO配置,参考文档:IMXRT1050RM.pdf
以GPIO1_IO01为列。
GPIO1基地址:GPIOn base address: 401B_8000h + (n-1)×4000h =401B_8000h (n=1)
如下图,则GPIO1的地址
/* GPIO1 寄存器地址,强制转换成指针 */
#define GPIO1_DR *(unsigned int*)(GPIO1_BASE+0x00)
#define GPIO1_GDIR *(unsigned int*)(GPIO1_BASE+0x04)
#define GPIO1_PSR *(unsigned int*)(GPIO1_BASE+0x08)
#define GPIO1_ICR1 *(unsigned int*)(GPIO1_BASE+0x0C)
#define GPIO1_ICR2 *(unsigned int*)(GPIO1_BASE+0x10)
#define GPIO1_IMR *(unsigned int*)(GPIO1_BASE+0x14)
#define GPIO1_ISR *(unsigned int*)(GPIO1_BASE+0x18)
#define GPIO1_EDGE_SEL *(unsigned int*)(GPIO1_BASE+0x1C)
GPIO复用IOMUX:
IOMUX 由其左侧的 IOMUXC 控制(C 表示 Controler), IOMUXC 提供寄存器给用户进行配置,它又分成 MUX Mode(IO 模式控制)以及 Pad Settings(Pad 配置)两个部分:
MUX Mode 配置
MUX Mode 就是用来配置引脚的复用功能,按上面的例子,即是具体是用于网络外设 ENET 的数据接收,还是用于 PWM 外设的输出引脚,当然,也可以配置成普通的 IO 口,仅用于控制输出高低电平。
Pad Settings 配置
Pad Settings 用于配置引脚的属性,例如驱动能力,是否使用上下拉电阻,是否使用保持器,是否使用开漏模式以及使用施密特模式还是 CMOS 模式等。关于属性的介绍会在后面给出,在学习各种外设时,也将会接触到这些属性在不同场合下的应用。在 IOMUXC 外设中关于 MUX Mode 和 Pad Settings 寄存器。
IOMUXC 控制类型 | 寄存器名称 |
MUX Mode | IOMUXC_SW_MUX_CTL_PAD_XXXX |
Pad Settings | IOMUXC_SW_PAD_CTL_PAD_XXXX |
以GPIO1_IO09为例:则为IOMUXC_SW_MUX_CTL_PAD_ GPIO_AD_B0_09 以及
IOMUXC_SW_PAD_CTL_PAD_ GPIO_AD_B0_09
/* IOMUXC 基地址 */
#define IOMUXC_BASE (unsigned int)(0x401F8000u)
/* MUX 模式选择寄存器 IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_09 ,强制转换成指针*/
#define IOMUXC_MUX_GPIO_AD_B0_09 *(unsigned int*)(IOMUXC_BASE + 0xE0 )
/* PAD 属性设置寄存器 IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B0_09 ,强制转换成指针*/
#define IOMUXC_PAD_GPIO_AD_B0_09 *(unsigned int*)(IOMUXC_BASE + 0x2D0 )
IOMUXC_SW_MUX_CTL_PAD_ GPIO_AD_B0_09
该寄存器主要有两个配置域,分别是 SION 和 MUX_MODE,其中 SION用于设置引脚在输出模式下同时开启输入通道。MUX_MODE 的配置有其他几种模式。
SW_PAD_CTL_PAD_GPIO_AD_B0_09引脚属性寄存器。
HYS 设置使用施密特模式的滞后功能, PUS 配置上下拉电阻的阻值,其它的还包含 PUE、 PKE、 ODE、 SPEED、 DSE 及
SRE 的配置。
当输出缓冲区使能时,引脚被配置为输出模式。在输出缓冲区中,又包含了如下的属性配置:
DSE 驱动能力
DSE 可以调整芯片内部与引脚串联电阻 R0 的大小,从而改变引脚的驱动能力。例如, R0 的初始值为 260 欧姆,在 3.3V 电压下其电流驱动能力为 12.69mA,通过 DSE 可以把 R0 的值配置为原值的 1/2、 1/3…1/7 等。
SRE 压摆率配置
压摆率是指电压转换速率,可理解为电压由波谷升到波峰的时间。增大压摆率可减少输出电压的上升时间。 RT1052 的引脚通过 SRE 支持低速和高速压摆率这两种配置。压摆率是大信号特性,下面的带宽是小信号特性。
SPEED 带宽配置
通过 SPEED 可以设置 IO 的带宽,分别可设置为 50MHz、 100MHz 以及 200MHz。带宽的意思是能通过这个 IO 口最高的信号频率,通俗点讲就是方波不失真,如果超过这个频率方波就变正弦波。但是这个带宽要区别于 IO 的翻转速率, IO 的翻转速率的信号来自于 GPIO 这个外设,而 IO 的带宽只是限制了 IO 口引脚的物理特性, IO 口的信号可以来自于内部定时器输出的 PWM 信号,也可以来自于GPIO 翻转输出的信号,两者相比之下, PWM 信号的频率是远远高于 GPIO 翻转输出的信号频率。况且 1052 没有高速 GPIO, GPIO 的翻转率约为 10M, 1060 系列则有高速 GPIO, GPIO 翻转速率达到了逆天的 150M。 但要使用 1060 的快速GPIO,需要改用 GPIO 编号。
ODE 开漏输出配置
通过 ODE 可以设置引脚是否工作在开漏输出模式。在该模式时引脚可以输出高阻态和低电平,输出高阻态时可由外部上拉电阻拉至高电平。开漏输出模式常用在一些通讯总线中,如 I2C。
当输入缓冲区使能时,引脚被配置为输入模式。在输入缓冲区中,又包含了如下的属
性配置
HYS 滞后使能
RT1052 的输入检测可以使用普通的 CMOS 检测或施密特触发器模式(滞后模式)。施密特触发器具有滞后效应,对正向和负向变化的输入信号有不同的阈值电压,常被用于电子开关、波形变换等场合,如检测按键时,使用施密特模式即可起到消抖的功能。
Pull/Keeper 上下拉、保持器
引脚的控制逻辑中还包含了上下拉、保持器的功能。芯片内部的上拉和下拉电阻可以将不确定的信号钳位在高、低电平,或小幅提高的电流输出能力,上拉提供输出电流,下拉提供输入电流。注意这些上下拉配置只是弱拉,对于类似 I2C 之类的总线,还是必须使用外部上拉电阻。 RT1052 芯片的电源模块中包含转换器,当转换器停止工作时,保持器会保持输入输出电压。
上下拉、保持器可以通过如下属性配置:
PUS 上下拉配置
PUS 可配置项可选为 100K 欧下拉以及 22K 欧、 47K 欧及 100K 欧上拉。
PUE 上下拉、保持器选择
上下拉功能和保持器功能是二选一的,可以通过 PUE 来选择。
PKE 上下拉、保持器配置
上下拉功能和保持器还通过 PKE 来控制是否使能。
注意,当引脚被配置为输出模式时,不管上下拉、保持器是什么配置,它们都会被关闭。
最后:
1配置复用模式
/* 设置 MUX 寄存器为 0x05,表示把引脚用于普通 GPIO */
SW_MUX_CTL_PAD_GPIO_AD_B0_09 = (unsigned int)0x05
2、设置PAD 属性配置
/* 设置 PAD 寄存器控制引脚的属性 */
IOMUXC_PAD_GPIO_AD_B0_09 = (unsigned int)0x000B0;
/* 属性配置说明:
十六进制数 0x000B0 = 二进制数 0b0000 0000 0000 1011 0000
*/
/* bit0: SRE: 0b0 压摆率: 慢压摆率
bit1~bit2: -: 0b00 寄存器保留项
bit3~bit5: DSE: 0b110 驱动强度: R0/6 (仅作为输出时有效 )
bit6~bit7: SPEED:0b10 带宽 : medium(100MHz)
bit8~bit10: -: 0b000 寄存器保留项
bit11: ODE: 0b0 开漏配置: 关闭
(开漏高阻态常用于总线配置,如 I2C )
bit12: PKE: 0b0 拉/保持器配置: 关闭
bit13: PUE: 0b0 拉/保持器选择: 关闭了上下拉及保持器,任意值无效
bit14~bit15: PUS: 0b00 上拉/下拉选择: 关闭了上下拉及保持器,任意值无效
bit16: HYS: 0b0 滞回器配置: 关闭
(仅输入时有效,施密特触发器,使能后可以过滤输入噪声)
bit17~bit31: -: 0b0 寄存器保留项
*/
GPIO 的 GDIR 方向寄存器的说明《General Purpose Input/Output(GPIO)》章节
GDIR 寄存器中的每个数据位控制 GPIO 端口其中一个引脚的方向,为 1 时表示输出,为 0 时表示输入
/* 设置 GPIO1_09 引脚的方向,使用输出模式 */
GPIO1_GDIR |= (unsigned int)(1<<9);
控制时把 GPIO1 对应的 GDIR 寄存器的 bit9 赋值为 1, 即可把它设置为输出模式,它表示的就是 GPIO1 端口的 GDIR 寄存器指针,并且包含“ * ”取指针操作。
用(1<<9)这种运算来表示。如 bit10 为 1 的数字,则用(1<<10)表示。
使用“|=”这种位操作方法是为了避免影响到寄存器中的其它位。GPIO1_GDIR = (unsigned int)(1<<9);
而使用“|=”只会修改 bit9,其它寄存器位不变。
控制引脚输出电平
DR 数据寄存器中的每个数据位控制 GPIO 端口其中一个引脚的电平,为 1 时表示高电平,为 0 时表示低电平。
1/* 控制引脚为高电平,关闭 LED 灯 */
GPIO1_DR |= (unsigned int)(1<<9);
/* 控制引脚为低电平,点亮 LED 灯 */
GPIO1_DR &=~ (unsigned int)(1<<9);
标签:GPIO1,NXP,引脚,--,RT1052,配置,PAD,寄存器,GPIO From: https://blog.51cto.com/u_15904120/5917879