GPIO是比较常用的资源,比如说控制LED灯亮灭,控制LCD上电,控制模块的复位电路,做外设的中断脚等等,这些都有对GPIO的操作和使用,所以说,GPIO开发是驱动开发中必不可少的操作,而且也是最基础的东西。
我们在驱动开发过程中,有时候我们不能确定自己使用和申请的gpio是否对了,我们可以把它对应的数值给打印出来,通过对比对应的数值可以确定我们具体使用的是哪个数值;下面依旧是拿rk平台来举例:
这里使用的是 GPIO7_C5 来举例。首先,需要计算出代表 GPIO7_C5 的值,算法如下:
GPIO7_C5 = 7x32 + (C-A)x8 + 5 = 7x32+2x8+5 = 245;
(注:最前面和 32 相乘的数字因为是 gpio7,所以是 732。如果是 gpio3,那就是 332;
括号里面的 A、B、C、D 分别代表数值 0、1、2、3,在计算时候分别对应去减即可。
这里因为是 C5,所以用 C-A,如果是 B3,就是 B-A;最后的+5 是因为是 GPIO7_C5,
如果是 GPIO7_C4,那么最后就+4。)
此外,我们还可以通过以下两个命令来查看确认(其他平台可能节点不同,不过名称基本上是pinmux-pins):
cat /d/pinctrl/pinctrl/pinmux-pins 或者 cat /sys/kernel/debug/pinctrl/pinctrl/pinmux-pins
cat /sys/kernel/debug/gpio //查看GPIO当前的申请使用情况和当前的电平状态
com-all-enable = <&gpio4 RK_PC5 GPIO_ACTIVE_LOW>;
代表 gpio4 C5 口为低电平
RK_PC5 为宏定义 取值范围为0~31