pinctrl和GPIO子系统自学

作用

  • 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值