Linux-笔记 嵌入式Linux pinctrl子系统与gpio子系统

一、pinctrl子系统

        1、主要功能:

                1)获取设备树中pin的信息

                2)根据获取到的pin信息设置pin的复用功

                3)根据获取到的pin信息设置电气特性。

                只需要在设备树中设置好某个pin的相关属性,其他工作由pinctrl子系统完成。

        2、如何配置

               1)在开发板对应的.dts文件中可以查看到对iomuxc节点追加的内容,其中有一条配置信息为MX6UL_PAD_UART1_RTS_B__GPIO1_IO19    0x17059 (SD卡检测引脚) ,我们分两部分看,前面说pinctrl子系统用于配置复用功能和设置电器属性,这里的配置信息又刚好有两项,分开解析。

                2)查看MX6UL_PAD_UART1_RTS_B__GPIO1_IO19的定义,最终在imx6ul-pinfunc.h中找到定义,可以看到是个宏:#define MX6UL_PAD_UART1_RTS_B__GPIO1_IO19     0x0090 0x031C 0x0000 0x5 0x0,后面跟着五个数字,查看资料五个数字含义如下:

  <mux_reg   conf_reg   input_reg   mux_mode    input_val>                                     0x0090    0x031C     0x0000         0x5           0x0

                mux_reg:偏移地址,IOMUXC外设寄存器的起始地址是0x020e0000,加上这个偏移地址0x0090得到的地址刚好是PIN 的复用寄存器地址。

                conf_reg:conf_reg偏移地址,基地址加上cong_reg这个偏移地址得到的就是UART1_RTS_B寄存器的地址。                                                                                                                input_reg:input_reg偏移地址,根据实际去设置,这里设置成0x00就是没有这个寄存器。                                                                                                                                                            mux_mode:设置复用寄存器的值,这里是0x5等于设置复用为GPIO1_IO19。                                  input_val:这里没有设置。

                3)最后分析0x17059,这个就是conf_reg寄存器的值,也就是电器属性。

二、gpio子系统

        1、在根节点’/‘下添加相应设备的gpio子节点

test {
    /*节点内容*/
}

        2、添加pinctrl信息

1 test {
2     pinctrl-names = "default";
3     pinctrl-0 = <&pinctrl_test>;
4     /* 其他节点内容 */
5 };

        3、添加gpio属性信息

1 test {
2     pinctrl-names = "default";
3     pinctrl-0 = <&pinctrl_test>;
4     gpio = <&gpio1 0 GPIO_ACTIVE_LOW>;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值