linux驱动--GPIO

    第一天写博客,先从工作最简单、最基础的写起,希望在未来的时光里,对有缘看见这篇文章的你和不断成长的自己又一些帮助吧。

一、概述

        GPIO中断时linux驱动开发最基础,最简单驱动。可以在内核驱动中设置使用GPIO,也可以在应用层模拟使用,查看GPIO的使用情况,为在驱动中使用某个引脚做测试。内核已经有一套完整的GPIO的驱动了,只要会调用各个接口去使用起来就行了。内核将GPIO所以可用的接口由0~MAX_INT的整数编号。可以实现GPIO的各个功能:普通引脚、中断、模拟各个协议等。

二、GPIO内核驱动使用

        1、GPIO的引脚编号规则(由原理图找相应的芯片规格书,找到功能引脚对应的GPIO引脚)

                GPIO1 【4】    =      (1 - 1)*32 + 4  =  4

                GPIO6  【11】    =     (11 - 1)*32 + 11  =  171

                *注:公司用的imx6系列芯片

                   由底板原理图:pcpu6_v02_sf-20180604.pdf     6UL_IIC1_SCL(1)

                   找核心板原理图:FETIMX6UL_V1.1_p.pdf       UART4_TXD(2)        UART4_TX_DATA(3)

                   找参考手册:IMX6UL参考手册(RM)_201604.pdf        UART4_TX_DATA(4)    ***GPIO1 【28】***

        2、普通引脚使用

                #define      PS2_DATA_PIN    171

                1)、注册GPIO
             gpio_request(PS2_DATA_PIN,"ps2-data");
                2)、设置方向
            gpio_direction_input(PS2_DATA_PIN);
                    gpio_direction_output(PS2_DATA_PIN,1);
                3)、获取和设置GPIO值
                    gpio_get_value(PS2_DATA_PIN);
                    gpio_set_value(PS2_DATA_PIN,1);

        3、GPIO 中断使用

                1)、设置为中断
            int irq_num1 = 0;

                    irq_num1 = gpio_to_irq(PS2_DATA_PIN); //返回中断编号,是request_irq(),free_irq()的参数

                 2)、注册中断
            err = request_irq(irq_num1,irq_fuction,IRQF_TRIGGER_FALLING,"tiny4412_key1",dev);
                    实现irq_fuction()中断处理函数,完成中断,中断不易处理太耗时的工作,但是调用一下其他函数,或者置个标志位,在其他函数里处理还是可以的。

三、GPIO 用户空间使用

    在应用层配置GPIO,测试GPIO能不能用,输出控制都可以实现,在linux系统跑起来后,在文件系统里执行

    1、进入GPIO配置主目录

cd /sys/class/gpio
申请一个gpio引脚,引脚号同上,成功会在当前目录生成一个该gpio的目录,失败则提示buzy
echo 43 > ./export
进入gpio目录,对其进行配置和控制
cd gpio43
将引脚配置为输出模式
echo "out" > ./direction 
控制引脚输出1、0
echo 1 > ./value

echo 0 > ./value

    2、中断的设置

        没写这个,用户空间没有用到,想想可能很少用到,就没写,用到的时候再看他人的博客!

四、学以致用

    我项目中用GPIO模拟PS2键盘驱动,涉及GPIO的普通用法和中断用法,有兴趣的可以看一下

    第一篇博文就写到这里,新的开始,一点一滴记录自己的成长过程!

    赠语:书山有路勤为径

              学海无涯苦做舟

猜你喜欢

转载自blog.csdn.net/meng_xing_/article/details/80751416