作用
- pinctrl系统
- 获取设备树中的pin信息
- 根据pin信息设置复用功能。如作GPIO或I2C的SDA。
- 根据pin信息设置电器特性,如上下拉,速度,驱动能力等
- 因引脚复用功能,速度,上下拉等
- GPIO子系统
- 初始化GPIO设置输入输出,读写GPIO值
- 提供相应的API函数等
- 屏蔽了GPIO的设置过程
PINCTRL
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 表 示 将
UART1_RTS_B 这个 IO 复用为 GPIO1_IO19
<mux_reg conf_reg input_reg mux_mode input_val> conf_reg
0x0090 0x031C 0x0000 0x5 0x0
因此可知,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 寄存器值,在这里无效。
struct pinctrl_desc {
const char *name;
struct pinctrl_pin_desc const *pins;
unsigned int npins;
const struct pinctrl_ops *pctlops;
const struct pinmux_ops *pmxops;
const struct pinconf_ops *confops;
struct module *owner;
#ifdef CONFIG_GENERIC_PINCONF
unsigned int num_custom_params;
const struct pinconf_generic_params *custom_params;
const struct pin_config_item *custom_conf_items;
#endif
};
pinctrl_desc由半导体厂商提供
这三个ops是PIN控制器的参数
GPIO子系统
GPIO常用API
gpio_request(unsigned gpio, const char *label)
gpio_free(unsigned gpio)
gpio_direction_input(unsigned gpio) # 设置为输入
gpio_direction_output(unsigned gpio, int value) # 数值为输出,值为value
int gpio_get_value(unsigned gpio)
void gpio_set_value(unsigned gpio, int value)