1、iomuxc节点
汇总所需引脚的配置信息
pinctrl子系统预存iomux节点信息
相当于一个寄存器配置器的集合。
所有pin的控制器都属于这一节点。
imx6ull.dtsi
/*节点标签:节点完整的名字*/
iomuxc: iomuxc@20e0000 {
/*由此属性匹配pinctrl子系统驱动*/
compatible = "fsl,imx6ul-iomuxc";
reg = <0x20e0000 0x4000>;
};
- compatible:用来与pinctrl子系统的平台驱动做匹配
- reg:引脚配置寄存器的基地址是0x020e0000,地址范围是0x4000。后置mux reg、conf reg、input reg 都是相对于此基地址而言的。
imx6ull-alientek-emmc.dts
此为野火的设备树源码
/* &节点标签 追加属性 */
&iomuxc {
/* 表示使用的引脚具有哪些状态 */
pinctrl-names = "default","init","sleep";
/* 引用了其它的节点,见下 */
pinctrl-0 = <&pinctrl_hog_1>; //当设置为default状态使用 pinctrl-0 引脚组
pinctrl-1 =<&xxx>; //代表init状态
pinctrl-2 =<&yyy>; //代表sleep状态
...
/* 引脚组节点,包含若干个引脚的配置信息 */
pinctrl_uart1: uart1grp {
/* imx6ull的pinctrl子系统用此属性名(fsl,pins)来记录引脚的配置信息,其它开发板同类节点可能不叫 fsl,pins */
fsl,pins = <
MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
>;
};
...
}
2、节点引脚配置方式
- pinctrl-names:定义引脚状态
- pinctrl-0:定义第0种状态需要使用到的引脚组,可引用其他节点标识
- pinctrl-1:定义第1种状态需要使用到的引脚组,以此类推
- …
3、节点配置信息记录
-
fsl,pins
结合imx6ull的pinctrl子系统驱动使用
以该属性来标识引脚的配置信息
别的开发板可能使用别的名字 -
fsl,pins属性值
一个宏+一个十六进制数
MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
宏定义原型
原子的宏定义在 imx6ull-pinfunc-snvs.h 和 imx6ull-pinfunc.h
#define MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x0084 0x0310 0x0000 0 0
- 宏值含义
mux_reg | conf_reg | input_reg | mux_mode | input_val |
---|---|---|---|---|
复用寄存器的偏移地址 | 属性寄存器偏移地址 | 引脚输入设置寄存器偏移地址,此处没有设置为0 | 复用寄存器的值 | 输入设置寄存器的值 |
0x0084 | 0x0310 | 0 | 0 | 0 |
16进制数用来设置引脚属性寄存器的具体值(变化太多,一一为其定义宏不现实)
mux_reg:引脚复用设置寄存器
的偏移地址
conf_reg:引脚属性设置寄存器
的偏移地址
-
input_reg:
引脚输入设置寄存器
的偏移地址
引脚需要输入功能时设置 -
mux_mode:复用寄存器设置值
设置引脚复用 -
input_value:输入寄存器设置值
设置引脚输入特性 -
十六进制数
属性寄存器设置值
因为可取的值太多,独立设置
如果把这个16进制数也做到宏里面,那么宏的数目太多了