vendor/nxp-opensource/kernel_imx/include/dt-bindings/pinctrl/pins-imx8mm.h
iMX_8M_Mini_RM_RevB.pdf
飞思卡尔的io配置与全志、瑞芯微做法有点不同。 飞思卡尔的pinctrl注册时的格式为:<mux_reg conf_reg input_reg mux_val input_val pad_val > 其中, mux_reg:复用寄存器地址 conf_reg:配置寄存器地址 input_reg:输入寄存器地址 mux_val:复用寄存器值 input_val:输入寄存器值 pad_val:管脚速率、开漏等功能选择
例如: 上述方框内最后形成 0x1F0 0x458 0x000 0x0 0x0 0x19 对应格式<mux_reg conf_reg input_reg mux_val input_val pad_val >
例如 MX8MM_IOMUXC_SPDIF_RX_GPIO5_IO4 0x19 即 0x1EC 0x454 0x000 0x5 0x0 0x19
从原理图设计中,一定可以知道使用芯片的哪一个管脚,这里是GPIO5_IO[4]
从iMX_8M_Mini_RM_RevB.pdf中搜索关键字,GPIO5_IO[4] 可以找到 这里找到了 GPIO5_IO[4] 对应的MUX寄存器 IOMUXC_SW_MUX_CTL_PAD_SPDIF_RX 可得出 mux_reg = 0x1EC
从iMX_8M_Mini_RM_RevB.pdf中搜索关键字,SPDIF_RX,该关键字是从IOMUXC_SW_MUX_CTL_PAD_SPDIF_RX 得出。 搜索找到了IOMUXC_SW_PAD_CTL_PAD_SPDIF_RX 可得出 conf_reg = 0x454
从iMX_8M_Mini_RM_RevB.pdf中翻看 第8章里面的IOMUXC节部分,这部分有SELECT_INPUT寄存器。 但是这些SELECT_INPUT 中没有SPDIF_RX 、GPIO5_IO[4]关键字,所以对于GPIO5_IO[4]没有input_reg寄存器,于是 input_reg = 0x0
从mux_reg寄存器的内容中选择对应的功能,选择ALT5功能。 于是 mux_val = 0x05
因为不存在input_reg寄存器,所以填写0, input_value = 0x0
从conf_reg寄存器的内容中选择对应的功能。 例如选择 00X X1 — Drive strength X1 1X FAST — Select fast slew rate (SR=0) 那么 pad_val = 00011001 = 0x19 pad_val = PAD_CTL_SRE_MAX | PAD_CTL_DSE_255
0x1EC 0x454 0x0 0x05 0x0 0x19
以上的推导只是配置参数上推导出寄存器数据,不过通常直接使用pins-imx8mm.h 中定义好的管脚配置,这样既快速又正确。
原理图找到gpio 号 :GPIO5_IO[4]在数据手册iMX_8M_Mini_RM_RevB.pdf中查找GPIO5_IO[4]找到寄存器的名称 IOMUXC_SW_MUX_CTL_PAD_SPDIF_RXvendor/nxp-opensource/kernel_imx/include/dt-bindings/pinctrl/pins-imx8mm.h 中搜寻SPDIF_RX 与 GPIO5_IO4 即可找出MX8MM_IOMUXC_SPDIF_RX_GPIO5_IO4