imx6系列--引脚复用及特性设置(设备树)

本文详细介绍了 IOMUX 引脚复用机制,包括如何通过复用控制寄存器和引脚控制寄存器来配置引脚功能及特性。通过具体的设备树设置示例,展示了如何为 UART 和 GPIO 设置不同的引脚功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 简介
IOMUX:让IC的多个功能模块共享一个引脚。
每个模块都需要设置每个引脚的性能,如上下拉 高阻等,对于每个引脚都有高达8个复用选项。
相关寄存器:
32位的复用控制寄存器(IOMUXC_SW_MUX_CTL_PAD_ or IOMUXC_SW_MUX_CTL_GRP_) ,用于选择复用模式。
32位的引脚控制寄存(IOMUXC_SW_PAD_CTL_PAD_ orIOMUXC_SW_PAD_CTL_GRP_) ,用于配置每个引脚特性。
32位通用寄存器(GPR0 to GPR13)
32位输入选择寄存器 xxxxx_INPUT,用于选择输入信号。

模块功能简图
这里写图片描述

datasheet:相关章节
Chapter 4​: External Signals and Pin Multiplexing 引脚复用
Chapter 31​: IOMUX Controller (IOMUXC) 引脚复用控制器

二 驱动文件相关

寄存器配置宏: /arch/arm/boot/dts/Imx6ul-pinfunc.h
举例详解:

#define    MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05                0x0030 0x02BC 0x0000 5 0

其对应意义:
即:复用控制寄存器IOMUXC_SW_MUX_CTL_PAD_SNVS_TAMPER5 的偏移地址:30h offset
引脚控制寄存器IOMUXC_SW_PAD_CTL_PAD_SNVS_TAMPER5 的偏移地址:2BCh offset
输入寄存器的偏移地址:无,则写0 ; 有则写相应的 偏移地址。例如:IOMUXC_UART6_RX_DATA_SELECT_INPUT:64Ch offset
复用模式值:见 datasheet的Chapter 4: External Signals and Pin Multiplexing 章节,则,写5
输入值:输入寄存器值xxxx_INPUT。
读取设备树文件:/drivers/pinctrl/Pinctrl-imx.c

设备树设置:
例如:

pinctrl_uart4: uart4grp {
    fsl,pins = <
        MX6UL_PAD_LCD_CLK__UART4_DCE_TX     0x1b0b1
        MX6UL_PAD_LCD_ENABLE__UART4_DCE_RX  0x1b0b1
        /*设置为引脚流控*/
        //MX6UL_PAD_LCD_HSYNC__UART4_DTE_RTS    0x1b0b1
        //MX6UL_PAD_LCD_VSYNC__UART4_DTE_CTS    0x1b0b1
        /*设置为普通GPIO*/
        MX6UL_PAD_LCD_HSYNC__GPIO3_IO02     0xb0b0
        MX6UL_PAD_LCD_VSYNC__GPIO3_IO03     0xb0b0
    >;
};

注:最后一个值 为该引脚的性能配置值,可根据需求修改。 0x80000000表示无效配置,即取默认配置。0x4xxxxxxxxx,表示设置了SION软件标志位。

    0x80000000 is special and means "I don't know and don't change from the default"
    Bit 30 set to 1 means: software input on (SION) whcih means that the logical value of an output can be read back
### IMX6ULL 处理器的引脚复用配置方法 IMX6ULL 是一款功能强大的嵌入式处理器,其引脚支持多种外设功能的复用。为了实现特定的功能(如 GPIO),需要对引脚进行相应的配置。以下是关于 IMX6ULL 引脚复用配置的相关信息: #### 1. IO 复用GPIO 的基本步骤 对于 IMX6ULL,将某个引脚复用GPIO 功能通常涉及以下几个方面的工作[^1]: - **确认目标引脚**:通过查阅硬件原理图找到对应的物理引脚编号及其名称。 - **设置寄存器**:利用 IOMUXC 模块中的相关寄存器来完成引脚复用配置- `SW_MUX_CTL_PAD` 寄存器用于指定该引脚的功能模式。 - `SW_PAD_CTL_PAD` 寄存器则负责配置引脚的电气特性,例如上下拉电阻、驱动能力等。 #### 2. 使用汇编操作 GPIO 除了 C 语言编程之外,也可以采用汇编指令直接访问内存地址的方式来控制 GPIO。这种方法更加底层,适合深入理解硬件机制的学习者[^2]。具体来说,可以通过加载 bin 文件至 SD 卡并执行相应命令完成初始化过程。 #### 3. 手册中提到的具体配置实例 以 SNVS 模块下的 BOOT_MODE0 引脚为例,在实际应用过程中可能需要调整如下参数[^3]: ```c // 假设我们正在处理的是BOOT_MODE0这个特殊用途的pin. IOMUXC->SNVS_SW_MUX_CTL_PAD_BOOT_MODE0 = VALUE_FOR_GPIO; // 设置GPIO模式 IOMUXC->SNVS_SW_PAD_CTL_PAD_BOOT_MODE0 |= (BIT(7)|BIT(8)); // 启用内部上拉, 并选择合适的驱动力度 ``` 以上代码片段展示了如何通过修改寄存器值把一个原本属于安全网络子系统(SNVS)部分的信号线重新定义为通用输入/输出端口(GPIO),同时还设置了必要的电平属性以便于后续正常使用。 #### 4. 实际案例分析——点亮 LED 当涉及到具体的项目实施时,比如让开发板上的一个小灯泡亮起来,则不仅限于理论层面的知识点掌握还需要结合实物连接情况综合考虑。下面给出了一段基于上述原则构建而成的例子程序摘录: ```c #include "fsl_common.h" int main(void){ CLOCK_EnableClock(kCLOCK_Gpio1); /* Enable clock for GPIO module */ // Configure pin as output direction GPIO_PinInit( GPIO1, 21, &(gpio_pin_config_t){kGPIO_DigitalOutput, 0} ); while(true){ GPIO_TogglePinsOutput(GPIO1, 1U << 21); SDK_DelayAtLeastUs(500*1000, ClockManager_GetFreq()); } } ``` 此段示范性源码实现了周期性的改变第21号针脚的状态从而达到闪烁效果的目的。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值