设置GPIO的方向,如果是输出同时设置电平:
/* set as input or output, returning 0 or negative errno */
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);
获取输入引脚的电平:
/* GPIO INPUT: return zero or nonzero */
int gpio_get_value(unsigned gpio);
设置输出:
void gpio_set_value(unsigned gpio, int value);
释放申请的GPIO对象
void gpio_free(unsigned gpio);
将GPIO映射为IRQ中断:
/* map GPIO numbers to IRQ numbers */
int gpio_to_irq(unsigned gpio);
/* map IRQ numbers to GPIO numbers (avoid using this) */
int irq_to_gpio(unsigned irq);
设置GPIO IRQ中断类型:
set_irq_type(gpio_to_irq( gpio), IRQ_TYPE_EDGE_FALLING);
用户层配置 GPIO需要确认 内核 menuconfig 中 Device Drivers -》 GPIO Support 设 y .
在 /sys/class/gpio 目录下如下所示 :
root@salvator-x:/sys/class/gpio# ls export gpiochip361 gpiochip419 gpiochip453 gpiochip496 gpiochip357 gpiochip393 gpiochip437 gpiochip468 unexport
gpiochip 后面的数字 是每个bank 的基地址 也就是 GP0 对应 gpiochip468
那么 GP0_07 的 ID 就是 468 + 7 ;(可能不同的内核版本,或者 开发板不一样 )通过 :
root@salvator-x:/sys/class/gpio# echo 475 > export
会对应生成 gpio475 目录
root@salvator-x:/sys/class/gpio/gpio475# ls active_low device direction edge power subsystem uevent value
通过
root@salvator-x:/sys/class/gpio/gpio475# echo 1 >value root@salvator-x:/sys/class/gpio/gpio475# echo 0 >value root@salvator-x:/sys/class/gpio/gpio475# echo "in" > direction root@salvator-x:/sys/class/gpio/gpio475# echo "out" > direction
来控制输出输入 ,电平高低 。
最后,关于 Pinctrl 的内容还有太多要写,就先写到这把。