LInux针对PIN的配置推出了pinctrl子系统,针对GPIO的配置推出了gpio子系统。
1、pinctrl子系统
pinctrl子系统重点是设置PIN(有的SOC叫做PAD)的复用和电气属性。下面向设备树添加一个pinctrl节点模板:
功能:创建一个test设备,test使用了GPIO1_IO00这个PIN的GPIO功能。
添加过程:在imx6ull-alientek-emmc.dts文件,iomuxc节点中的“imx6ul-evk”子节点下添加"pinctrl_test"节点(节点前缀一定要是“pinctrl_”)。
pinctrl_test: testgrp{ fsl, pins = < MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 >; };
1.1 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19
在/arch/arm/imx6ul-pinfunc.h中进行了宏定义。
1.2 0x17059
设置配置寄存器的值,这个需要我们自己设置。
参考:https://www.cnblogs.com/Mike2019/p/13530450.html
2、GPIO子系统
如果 pinctrl 子系统将一个 PIN 复用为 GPIO ,那么接下来就要用到 gpio 子系
统了。 gpio 子系统就是用于初始化 GPIO 并且提供相应的 API 函数。
test{ pinctrl-names = "default"; pinctrl-0 = <&pinctrl_test>; GPIOA = <&gpio1 19 GPIO_ACTIVE_LOW>; //使用了GPIO1_IO19,低电平有效 }
&gpio1:表示该引脚所使用的IO属于GPIO1组
19: 表示GPIO1组的第19号IO
GPIO_ACTIVE_LOW:低电平有效
3、GPIO子系统API函数