Linux中pinctrl和gpio子系统笔记

Linux驱动讲究驱动分离与分层,pinctrl和gpio子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架。

pinctrl子系统

一般情况下soc的pin设置如下:
(1)打开引脚所对应时钟;
(2)设置这个 PIN 的复用功能;
(3)设置这个 PIN 的电气属性;
(4)若该pin设置为gpio,则需设置该gpio为输入或者输出功能;
(5)然后就可以读取gpio数据寄存器。

pinctrl 子系统主要工作内容(配置复用功能和电气属性):

①、获取设备树中 pin 信息。
②、根据获取到的 pin 信息来设置 pin 的复用功能
③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。
对于我们使用者来讲,只需要在设备树里面设置好某个 pin 的相关属性即可(复用功能和电气属性),其他的初始化工作均由 pinctrl 子系统来完成。gpip初始化工作由gpio子系统实现。
示例:

pinctrl_led: ledgrp {
	fsl,pins = <
		MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /* LED0 */
		>;
};

MX6UL_PAD_GPIO1_IO03__GPIO1_IO03:表示将该pin复用为gpio3。电气属性值为 0x10B0,设置gpio1_3的上/下拉、驱动能力和速度等。
这是一个宏定义:

#define MX6UL_PAD_GPIO1_IO03__GPIO1_IO03	0x0068 0x02F4 0x0000 0x5 0x0

这 5 个值的含义如下所示:

<mux_reg conf_reg input_reg mux_mode input_val>

其中,
mux_reg:复用功能寄存器的偏移地址。
复用寄存器地址=基地址+偏移地址=0x020e0000+0x0068=0x020e005c
conf_reg:配置功能寄存器的偏移地址
input_reg
mux_mode:mux_reg复用功能寄存器的值,此处为复用为gpio1_3
input_val
0x10B0为conf_reg配置功能寄存器的值,此值由用户自行设置,通过此值来设置一个 IO 的上/下拉、驱动能力和速度等。在这里就相当于设置寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的值为 0x10B0。

gpio子系统

如果 pinctrl 子系统将一个 PIN 复用为 GPIO 的话,那么接下来就要用到 gpio 子系统了。将pinctrl信息添加进来(相当于设备节点)。gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO为输入输出,读取 GPIO 的值等。
示例:

gpioled {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "atkalpha-gpioled";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_led>;
	led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
	status = "okay";
	}

pinctrl-0 属性设置 LED 灯所使用的 PIN 对应的 pinctrl 节点。
led-gpio 属性指定了 LED 灯所使用的 GPIO,在这里就是 GPIO1 的 IO03,低电平有效。

检查 PIN 是否被其他外设使用!!!

①、检查 pinctrl 设置。
②、如果这个 PIN 配置为 GPIO 的话,检查这个 GPIO 有没有被别的外设使用。
假如PIN为 GPIO1_IO03,则在.dts文件中搜索GPIO1_IO03和gpio1 3,有其他外设使用的话将其屏蔽。设备树编写完成以后使用“make dtbs”命令重新编译设备树,然后使用新编译出来的dtb 文件启动 Linux 系统。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值