NXP RT1052 GPIO设置--寄存器

参考:IMX+RT开发实战指南

1、配置时钟。

RT1052 的所有外设的时钟由一个专门的外设来管理,叫 CCM(Clock ControlerModule), CCM 在《IMXRT1050RM》 (参考手册)的第 18 章有详细的讲解。


 

这 2 个位包含 3 个有效选择, 0b00 表示该时钟关闭, 0b01 和 0b11 表示在 RT1052 芯片的 RUN 模式下都开启该时钟。其中 RUN、 WAIT、 STOP 是 RT1052 芯片的运行模式,关注 RUN 模式即可,它指芯片的正常运行状态。
 /* 开启 GPIO1 端口的时钟 */

/* 清空控制 GPIO1 端口时钟的 bit26、 bit27 */
 CCM_CCGR1 &= ~(unsigned int)(3<<26);

 /* 把 bit26、 bit27 设置为 0b01,即开启 GPIO1 时钟 */
 CCM_CCGR1 |= (unsigned int)(1<<26);

 

 

 

main.c


#include "MIMXRT1052.h"


/**
  *   主函数
  */
int main(void)
{	
	 /* 清空控制 GPIO1 端口时钟的 bit26、 bit27 */

	 CCM_CCGR1 &= ~(unsigned int)(3<<26);

	 /* 把 bit26、 bit27 设置为 0b01,即开启 GPIO1 时钟 */
	 CCM_CCGR1 |= (unsigned int)(1<<26);

	 /* 设置 MUX 寄存器为 0x05,表示把引脚用于普通 GPIO */
	 IOMUXC_MUX_GPIO_AD_B0_09 = (unsigned int)0x05;

	 /* 设置 PAD 寄存器控制引脚的属性 */
	 IOMUXC_PAD_GPIO_AD_B0_09 = (unsigned int)0x070B0;

	 /* 属性配置说明:
	 十六进制数 0x070B0 = 二进制数 0b0000 0111 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: 0b1 拉/保持器配置: 使能
	 bit13: PUE: 0b1 拉/保持器选择: 上下拉
	 bit14~bit15: PUS: 0b01 上拉/下拉选择: 47K 欧上拉
	 bit16: HYS: 0b0 滞回器配置: 关闭
	 (仅输入时有效,施密特触发器,使能后可以过滤输入噪声)
	 bit17~bit31: -: 0b0 寄存器保留项
	 */

	 /* 设置 GPIO1_09 引脚的方向,使用输出模式 */
	 GPIO1_GDIR |= (unsigned int)(1<<9);

	 /* 控制引脚为低电平,点亮 LED 灯 */
	 GPIO1_DR &= ~(unsigned int)(1<<9);	
	while(1);

}

// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)
{	
}

 #include "MIMXRT1052.h"



/* 地址可查阅 参考手册-GPIO 章节-GPIO Memory Map */
/* GPIO1 外设基地址 */
#define GPIO1_BASE (unsigned int)(0x401B8000u)

/* 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)

/* 地址可查阅 IOMUXC Memory Map/Register Definition */

/* 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 )

/* 地址可查阅 参考手册-CCM 章节-CCM Memory Map/Register Definition */
/* 时钟控制外设基地址 */
#define CCM_BASE (unsigned int)(0x400FC000u)

/* 时钟配置寄存器 CCM_CCGR1 地址 */
#define CCM_CCGR1 *(unsigned int*)(CCM_BASE + 0x6C)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值