RT1052 的 GPIO 配置
Posted 快乐的老鼠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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要多一些。
以上是关于RT1052 的 GPIO 配置的主要内容,如果未能解决你的问题,请参考以下文章