OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3617|回复: 1

有个问题不明白,请教大家。关于GPIO申请的疑惑。

[复制链接]

8

主题

61

帖子

0

精华

高级会员

Rank: 4

积分
685
金钱
685
注册时间
2019-4-24
在线时间
43 小时
发表于 2020-9-27 11:31:41 | 显示全部楼层 |阅读模式
在IMX6ULL开发指南里面说如果需要使用某个GPIO,需要先申请,申请成功之后才能使用。
但是在pinctrl和gpio子系统试验里面,5_gpioled的例程中
在 int led_init(void)里面找到GPIO,就直接使用了,这不是跟前面的冲突了吗?

static int __init led_init(void)
{
        int ret = 0;

        /* 设置LED所使用的GPIO */
        /* 1、获取设备节点:gpioled */
        gpioled.nd = of_find_node_by_path("/gpioled");
        if(gpioled.nd == NULL) {
                printk("gpioled node not find!\r\n");
                return -EINVAL;
        } else {
                printk("gpioled node find!\r\n");
        }

        /* 2、 获取设备树中的gpio属性,得到LED所使用的LED编号 */
        gpioled.led_gpio = of_get_named_gpio(gpioled.nd, "led-gpio", 0);
        if(gpioled.led_gpio < 0) {
                printk("can't get led-gpio");
                return -EINVAL;
        }
        printk("led-gpio num = %d\r\n", gpioled.led_gpio);

        这里没有用gpio_request()申请IO
        /* 3、设置GPIO1_IO03为输出,并且输出高电平,默认关闭LED灯 */
        ret = gpio_direction_output(gpioled.led_gpio, 1);
        if(ret < 0) {
                printk("can't set gpio!\r\n");
        }
        .....
}
这怎么解释?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

200

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
1063
金钱
1063
注册时间
2019-9-19
在线时间
194 小时
发表于 2020-9-28 11:40:19 | 显示全部楼层
这涉及到gpio的使用是否符合内核通用写法问题,gpio_request()申请IO相当于告诉内核:这个GPIO我已经占用了,其他模块不能使用,若其他模块申请此GPIO就会报GPIO冲突提示。而教程是提供一个参考例程,也可以加上gpio_request来告诉内核占用情况,这是符合标准写法,而不用gpio_request也可以,只是自己需要注意GPIO是否会被其他模块占用,程序上考虑这个问题即可。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 16:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表