RT1052 的 GPIO 配置

        才玩没几天, 随便写写~

        飞思卡尔的芯片需要有一定的能力才能驾驭。要不是缺芯, 也根本不会玩它, 看了datasheet,功能怪强悍,但是上手难度较大。

从官网的demo来看, 基本上外设例子都有, 就拿最简单的点灯配置来说, 这个要比STM32复杂多了.

先说下IO口的复用选择,以 URAT3_TX 引脚为例:

        在fsl_iomuxc.h文件里搜索到 IOMUXC_GPIO_EMC_13_LPUART3_TX、IOMUXC_GPIO_AD_B1_06_LPUART3_TX、IOMUXC_GPIO_B0_08_LPUART3_TX

具体选哪个需要看你的硬件实际连线情况。

 

 

 

/**************************************************
        bit[31:17]:     -:        0 b         寄存器保留项
        bit16:            HYS:    0 b            滞回器配置: 关闭 (仅输入时有效,施密特触发器,使能后可以过滤输入噪声)
        bit[15:14]:        PUS:    00 b        上拉/下拉选择: 关闭了上下拉及保持器,任意值无效
        bit13:            PUE:    0 b            拉/保持器选择: 关闭了上下拉及保持器,任意值无效
        bit12:            PKE:    0 b            拉/保持器配置: 关闭
        bit11:            ODE: 0 b            开漏配置: 关闭 (开漏高阻态常用于总线配置,如I2C )
        bit[10:8]:        ---: 000 b            寄存器保留项
        bit[7:6]:        SPEED:10 b             带宽 : medium(100MHz)
        bit[5:3]:          DSE:    110 b         驱动强度: R0/6 (仅作为输出时有效 )
        bit[2:1]:          ---:    00 b        寄存器保留项
        bit0:           SRE:    0 b           压摆率: 慢压摆率
    ****************************************************/

#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)

/**
  *   主函数
  */
int main(void)
{	
	/* 开启GPIO1端口的时钟 */
	
	/* 清空控制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)0x000B0;
	
	/*  属性配置说明:
		十六进制数0x000B0 = 二进制数0000 0000 0000 1011 0000 b
	*/
	
		
	/* 设置GPIO1_09引脚的方向,使用输出模式 */
	GPIO1_GDIR |= (unsigned int)(1<<9);

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

}

再看一个 LED 灯的例子

void LED_Init(void)
{
	gpio_pin_config_t led_config;
	
	//IO功能设置
	IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_03_GPIO1_IO03,0);	//GPIO_AD_B0_03配置为ALT5,即GPIO1_3
    
	//配置IO引脚GPIO_AD_B0_03和GPIO_SD_B1_03的功能
	//低转换速度,驱动能力为R0/6,速度为100Mhz,关闭开路功能,使能pull/keepr
	//选择keeper功能,下拉100K Ohm,关闭Hyst
	IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_03_GPIO1_IO03,0x10B0);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B1_03_GPIO3_IO03,0x10B0);

    led_config.direction=kGPIO_DigitalOutput;	//输出
	led_config.interruptMode=kGPIO_NoIntmode;	//不使用中断功能
	led_config.outputLogic=1;					//默认高电平,LED灯关闭
	GPIO_PinInit(GPIO1,3,&led_config); 	        //初始化GPIO1_3
}

再看一组 AD 引脚的配置

IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_B1_11_GPIO1_IO27,        /* GPIO_AD_B1_11 is configured as GPIO1_IO27 */
      0U);     
IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_B1_11_GPIO1_IO27,        /* GPIO_AD_B1_11 PAD functional properties : */
      0xB0u);                                 /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: R0/6
                        

 再看一组串口引脚的配置

IOMUXC_SetPinMux(
	    IOMUXC_GPIO_AD_B0_12_LPUART1_TX,        /* GPIO_AD_B0_12 is configured as LPUART1_TX */
	    0U);                                    /* Software Input On Field: Input Path is determined by functionality */
	IOMUXC_SetPinMux(
	    IOMUXC_GPIO_AD_B0_13_LPUART1_RX,        /* GPIO_AD_B0_13 is configured as LPUART1_RX */
	    0U);                                    /* Software Input On Field: Input Path is determined by functionality */
IOMUXC_SetPinConfig(
	    IOMUXC_GPIO_AD_B0_12_LPUART1_TX, 0x10B0u);
IOMUXC_SetPinConfig(
	    IOMUXC_GPIO_AD_B0_13_LPUART1_RX, 0x10B0u);
	/* GPIO_AD_B0_12 is configured as LPUART8_TX */
	/* Software Input On Field: Input Path is determined by functionality */
	IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_10_LPUART8_TX, 0U);

	/* GPIO_AD_B0_13 is configured as LPUART8_RX */
	/* Software Input On Field: Input Path is determined by functionality */
	IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_11_LPUART8_RX, 0U);

    /* GPIO_AD_B1_10 PAD functional properties : */
	IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_10_LPUART8_TX,
	                    IOMUXC_SW_PAD_CTL_PAD_SRE(0U)			/* Slew Rate Field: Slow Slew Rate */
	                    | IOMUXC_SW_PAD_CTL_PAD_DSE(6U)			/* Drive Strength Field: R0/6 */
	                    | IOMUXC_SW_PAD_CTL_PAD_SPEED(2U)		/* Speed Field: medium(100MHz) */
	                    | IOMUXC_SW_PAD_CTL_PAD_ODE(0U)			/* Open Drain Enable Field: Open Drain Disabled */
	                    | IOMUXC_SW_PAD_CTL_PAD_PKE(1U)			/* Pull / Keep Enable Field: Pull/Keeper Enabled */
	                    | IOMUXC_SW_PAD_CTL_PAD_PUS(0U)			/* Pull Up / Down Config. Field: 100K Ohm Pull Down */
	                    | IOMUXC_SW_PAD_CTL_PAD_HYS(0U));		/* Hyst. Enable Field: Hysteresis Disabled */
//  IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_10_LPUART8_TX, 0x10B0u);

/* GPIO_AD_B1_11 PAD functional properties : */
	IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_11_LPUART8_RX,
	                    IOMUXC_SW_PAD_CTL_PAD_SRE(0U)			/* Slew Rate Field: Slow Slew Rate */
	                    | IOMUXC_SW_PAD_CTL_PAD_DSE(6U)			/* Drive Strength Field: R0/6 */
	                    | IOMUXC_SW_PAD_CTL_PAD_SPEED(2U)		/* Speed Field: medium(100MHz) */
	                    | IOMUXC_SW_PAD_CTL_PAD_ODE(0U)			/* Open Drain Enable Field: Open Drain Disabled */
	                    | IOMUXC_SW_PAD_CTL_PAD_PKE(1U)			/* Pull / Keep Enable Field: Pull/Keeper Enable Field: Pull/Keeper Enabled */
	                    | IOMUXC_SW_PAD_CTL_PAD_PUE(0U)			/* Pull / Keep Select Field: Keeper */
	                    | IOMUXC_SW_PAD_CTL_PAD_PUS(0U)			/* Pull Up / Down Config. Field: 100K Ohm Pull Down */
	                    | IOMUXC_SW_PAD_CTL_PAD_HYS(0U));		/* Hyst. Enable Field: Hysteresis Disabled */
//  IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_11_LPUART8_RX, 0x10B0u);

	              

再看一些LCD引脚的配置

IOMUXC_SetPinMux(IOMUXC_GPIO_B0_00_LCD_CLK, 0U);
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_00_LCD_CLK, 0x01B0B0u);

总结:

        现在发现它的GPIO设置也没有想象中那么复杂,第一步是IOMUXC_SetPinMux, 主要是告知芯片我要使用具体某个功能, 第二部是 IOMUXC_SetPinConfig,就是配置上下拉,开漏, 速度和驱动强度等。 当然这款芯片的GPIO配置项比STM32要多一些。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值