pinctrl 子系统学习

pinctrl子系统是Linux驱动中用于管理设备引脚的重要组件,它负责从设备树中读取pin配置,设置引脚的复用功能和电气特性。通过pinctrl,可以灵活地配置如GPIO、UART等外设的引脚,实现不同功能的切换。例如,配置MX6UL系列芯片的UART1_RTS_B、GPIO1_IO05等引脚的复用和电气属性。
摘要由CSDN通过智能技术生成

pinctrl 子系统简介

Linux 驱动讲究驱动分离与分层,是驱动分离与分层思想下的产物。

pinctrl 子系统用途

  • 获取设备树中 pin 信息。
  • 根据获取到的 pin 信息来设置 pin 的复用功能
  • 根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。

pinctrl子系统例程

&iomuxc {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hog_1>;
	imx6ul-evk {
		pinctrl_hog_1: hoggrp-1 {
			fsl,pins = <
				MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
				MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059
				MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x17059
				MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x13058
			>;
		};
...
		pinctrl_flexcan1: flexcan1grp{
			fsl,pins = <
				MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x1b020
				MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x1b020
			>;
		};
...
		pinctrl_wdog: wdoggrp {
			fsl,pins = <
				MX6UL_PAD_LCD_RESET__WDOG1_WDOG_ANY 0x30b0
			>;
		};
	};
};

pinctrl-names 里定义了该引脚有哪些状态。分别对应pinctrl-0 pinctrl-1``pinctrl-x.

宏详细介绍

#define MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x0090 0x031C 0x0000 0x5 0x0

5个值的含义如下所示
<mux_reg conf_reg input_reg mux_mode input_val>

mux_reg: 寄存器偏移地址,IOMUXC 外 设 寄 存 器 起 始 地 址 为 0x020e0000,因此0x020e0000+0x0090=0x020e0090, IOMUXC_SW_MUX_CTL_PAD_UART1_RTS_B 寄存器地址
正 好 是 0x020e0090.

conf_reg: 寄存器偏移地址,和 mux_reg 一样, 0x020e0000+0x031c=0x020e031c,这个就是寄存器 IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B 的地址.

input_reg: 寄存器偏移地址, 有些外设有 input_reg 寄存器,有 input_reg 寄存器的外设需要配置 input_reg 寄存器.

mux_reg: mux_reg寄存器值

input_val: conf_reg 寄存器的值,设置一个 PIN 的电气特性的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值