Linux 内核层和 用户层 配置 GPIO 引脚(2)

设置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 的内容还有太多要写,就先写到这把。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9e2f6ac34124bd6756eb232b9933975d.html