pinctrl_hog_1 子节点所使用的 PIN 配置信息MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059解析

pinctrl_hog_1 子节点所使用的 PIN 配置信息
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059

宏定义:
#define MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x0090 0x031C 0x0000
0x5 0x0

PIN 配置信息展开为:
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x0090 0x031C 0x0000
0x5 0x0 0x17059

解析:
0x0090 0x031C 0x0000 0x5 0x0
这 5 个值的含义如下所示:

综上所述可知:
0x0090:mux_reg 寄存器偏移地址,设备树中的 iomuxc 节点就是 IOMUXC 外设对应的节
点 , 根 据 其 reg 属 性 可 知 IOMUXC 外 设 寄 存 器 起 始 地 址 为 0x020e0000 。 因 此
0x020e0000+0x0090=0x020e0090,IOMUXC_SW_MUX_CTL_PAD_UART1_RTS_B 寄存器地址
正 好 是 0x020e0090 , 大 家 可 以 在 《 IMX6ULL 参 考 手 册 》 中 找 到
IOMUXC_SW_MUX_CTL_PAD_UART1_RTS_B 这个寄存器的位域图,如图 45.1.2.2 所示:
pinctrl_hog_1 子节点所使用的 PIN 配置信息MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059解析_第1张图片
pinctrl_hog_1 子节点所使用的 PIN 配置信息MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059解析_第2张图片

因此可知,0x020e0000+mux_reg 就是 PIN 的复用寄存器地址。
0x031C:conf_reg 寄存器偏移地址,和 mux_reg 一样,0x020e0000+0x031c=0x020e031c,
这个就是寄存器 IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B 的地址。
0x0000:input_reg 寄存器偏移地址,有些外设有 input_reg 寄存器,有 input_reg 寄存器的外设需要配置 input_reg 寄存器。没有的话就不需要设置,UART1_RTS_B 这个 PIN 在做GPIO1_IO19 的时候是没有 input_reg 寄存器,因此这里 intput_reg 是无效的。
0x5:mux_reg寄存器值,在这里就相当于设置IOMUXC_SW_MUX_CTL_PAD_UART1_RTS_B 寄存器为 0x5,也即是设置 UART1_RTS_B 这个 PIN 复用为 GPIO1_IO19。
0x0:input_reg 寄存器值,在这里无效。
这就是宏 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 的含义,看的比较仔细的同学应该
会发现并没有 conf_reg 寄存器的值,config_reg 寄存器是设置一个 PIN 的电气特性的,这么重要的寄存器怎么没有值呢?回到示例代码 45.1.2.3 中,第 9 行的内容如下所示:
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 我们上面已经分析了,就剩下了一个 0x17059,反应快的同学应该已经猜出来了,0x17059 就是 conf_reg 寄存器值!此值由用户自行设置,通过 此 值 来设 置 一个 IO 的 上 / 下拉 、 驱动 能 力和速 度 等 。在 这 里就 相 当于 设 置寄 存 器IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B 的值为 0x17059。

conf_reg 寄存器值的含义如下:
pinctrl_hog_1 子节点所使用的 PIN 配置信息MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059解析_第3张图片
pinctrl_hog_1 子节点所使用的 PIN 配置信息MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059解析_第4张图片
pinctrl_hog_1 子节点所使用的 PIN 配置信息MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059解析_第5张图片

bit0 : 高低电平切换速度选择 0低速1高速
bit5:3 :驱动能力选择
 000 DSE_0_output_driver_disabled_ — output driver disabled; 禁止输出
 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_ — R0(260 Ohm @
 3.3V, 150 [email protected], 240 Ohm for DDR) -R0:260欧姆@3.3v;150欧姆@1.8v
 010 DSE_2_R0_2 — R0/2 -R0的二分之一,一下类同
 011 DSE_3_R0_3 — R0/3
 100 DSE_4_R0_4 — R0/4
 101 DSE_5_R0_5 — R0/5
 110 DSE_6_R0_6 — R0/6
 111 DSE_7_R0_7 — R0/7
bit7:6 :速度选择
 00 SPEED_0_low_50MHz_ — low(50MHz) 最低50MHz
 01 SPEED_1_medium_100MHz_ — medium(100MHz)中间值100MHz
 10 SPEED_2_medium_100MHz_ — medium(100MHz)中间值100MHz
 11 SPEED_3_max_200MHz_ — max(200MHz) 最大200MHz
bit11 :漏极开路
 0 ODE_0_Open_Drain_Disabled — Open Drain Disabled :禁止漏极开路
 1 ODE_1_Open_Drain_Enabled — Open Drain Enabled: 使能漏极开路
bit12 :使能字段
 0 PKE_0_Pull_Keeper_Disabled — Pull/Keeper Disabled: 禁止拉/保持
 1 PKE_1_Pull_Keeper_Enabled — Pull/Keeper Enabled: 使能拉/保持
bit13 :使能输出状态保存
使能输出状态保存器可以在内核供电关掉之后,使IO的输出自动维持在关电之前的逻辑状态(需要注意的是输出状态保存器不能与上下拉同时工作)。其价值同样可以体现在低功耗的应用中
  0 PUE_0_Keeper — Keeper :保持
  1 PUE_1_Pull — Pull :上拉
bit15:14 :设置上下拉电阻阻值
主要作用是提高输出信号的驱动能力、确定输入信号的电平(防止干扰)
  00 PUS_0_100K_Ohm_Pull_Down — 100K Ohm Pull Down :100K欧姆的拉低
  01 PUS_1_47K_Ohm_Pull_Up — 47K Ohm Pull Up :47K欧姆的拉高
  10 PUS_2_100K_Ohm_Pull_Up — 100K Ohm Pull Up :100K欧姆的拉高
  11 PUS_3_22K_Ohm_Pull_Up — 22K Ohm Pull Up :22K欧姆的拉高
bit16 :磁滞使能字段,作为输入时有效
  0 HYS_0_Hysteresis_Disabled — Hysteresis Disabled:禁止磁滞
  1 HYS_1_Hysteresis_Enabled — Hysteresis Enabled: 使能磁滞
pinctrl_hog_1 子节点所使用的 PIN 配置信息MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059解析_第6张图片

你可能感兴趣的:(linux,驱动开发,c语言)