赞
踩
PAD:应该是指焊盘 IOMUX控制器:mux:数据选择器,主要是用于信号的切换,实质与机械触点式电子开关一样是开关 WS:指software,软件。 CTL:指control,控制。 GRP:General Purpose Register通用目的寄存器 32位软件多路复用控制寄存器: 1)IOMUXC_SW_MUX_CTL_PAD_<某焊盘名字> 2)IOMUXC_SW_MUX_CTL_GRP_<组名> 网上有人说: IO 复用功能选择器(IOMUXC)的寄存器非常多,主要可以分为四组: ① IOMUXC_GPR 寄存器组,用于通用控制设置。 ② IOMUXC_SNVS 组,主要用于GPIO5 的控制。 ③ IOMUXC_SNVS_GPR 寄存器组,暂时没用到。 ④ IOMUXC 组,用于指定IO 的复用功能选择和IO属性设置。 在IO 设置的时候,实际上我们只用到了②和④
①、获取设备树中 pin 信息。
②、根据获取到的 pin 信息来设置 pin 的复用功能
③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。
对于我们使用者来讲,只需要在设备树里面设置好某个 pin 的相关属性即可,其他的初始化工作均由 pinctrl 子系统来完成, pinctrl 子系统源码目录为 drivers/pinctrl。
1)pinctrl 驱动程序是通过读取“fsl,pins”属性值来获取 PIN 的配置信息
pinctrl_test: testgrp {
fsl,pins = <
/* 设备所使用的PIN的两部分配置信息 */
>;
};
两部分配置信息=设置的复用功能+设置的UART1_RTS_B的电气特性。
设置 UART1_RTS_B 这个 PIN 为 GPIO1_IO19和同时设置电气属性
为:fsl,pins = <MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059>;
即:fsl,pins = <0x0090 0x031C 0x0000 0x5 0x0 0x17059>;
#define MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x0090 0x031C 0x0000 0x5 0x0
//0x0090:mux控制寄存器偏移地址
//0x031C:pad控制寄存器偏移地址
//0x0000:select_input控制寄存器偏移地址
//0x5e:mux模式
//0x0:select_input寄存器值
看完了Linux 4.1.15设置复用功能的宏,看看ARM®Cortex®-A7 的硬件设计
IO复用去配置寄存器:IOMUXC_SW_MUX_CTL_PAD_xxx_xxx_xxx_xxx,
IO电气属性配置寄存器:IOMUXC_SW_PAD_CTL_PAD_xxx_xxx_xxx_xxx。
(IOMUXC_SW_MUX_CTL_PAD_UART1_RTS_B)寄存器如图
下图描述了焊盘UART1_RTS_B的IO复用寄存器的各位功能说明和各位在芯片系统中的地址映射。
我们发现焊盘UART1_RTS_B有10种模式可以选择。
fsl,pins = <MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059>;
fsl,pins = <0x0090 0x031C 0x0000 0x5 0x0 0x17059>;
0x17059是用于给pad控制寄存器IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B的0到15位赋值:0x17059
电气属性去配置寄存器IOMUXC_SW_PAD_CTL_PAD_xxx_xxx_xxx,在《IMX6ULL参考手册》的第32章
IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B
下图描述了焊盘UART1_RTS_B的电气属性寄存器的各位功能说明和各位在芯片系统中的地址映射。
检查设备树,确保某外设所使用的 IO 没有被其他的外设使用
/FT5426 触摸芯片用到了4个IO,这里是其中的一个复位IO,还有一个中断IO、I2C2的SCL和SDA,使用pinctrl设置PIN的复用和电气属/
pinctrl_tsc: tscgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0xF080 /* TSC_INT */
>;
};
vscode中ctrl+f
搜索GPIO1_IO09和gpio1 9,看使用第一组GPIO中的第9号GPIO的节点数量是否为1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。