Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    【萌新入门】如何编写一个应用程序,调用Tina Linux提供的GPIO驱动,实现某个GPIO脚的电平周期反转

    MR Series
    7
    16
    5995
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • marchand
      marchand LV 4 last edited by

      最近在跟着韦老师的视频学习Linux驱动开发,根据韦老师的视频教程:4826bfd8-c877-4bf0-9f35-0b314f21ffd5-20220424074136.png 想编写一个D1-H哪吒开发板的GPIO驱动测试程序,实现某个GPIO脚的电平周期反转。去../drives/gpio文件夹下找了一下GPIO驱动,发现有好多文件,不知道这些文件都对应的啥意思,也没有找到上图中说的open/write/read函数。请各位大佬指点。

      1 Reply Last reply Reply Quote Share 0
      • YuzukiTsuru
        柚木 鉉 LV 9 last edited by

        有四个方法,第一个是使用sunxi-gpio提供的接口。这个接口使用比较方便,灵活,但是必须是sunxi平台的才能用。
        另外一个方法是用<asm/gpio.h>提供的操作,先申请GPIO,然后绑定到一个功能上,再操作。有点像arduino的设置pinMode然后digitalwirte
        还有一个方法是使用文件操作,export出gpio用echo操作高低电平
        最后一个方法是内存映射,使用<dev/mem>的mmap直接操作对应的内存空间

        L 1 Reply Last reply Reply Quote Share 2
        • whycan
          whycan晕哥 LV 9 last edited by

          380d8c73-6d32-4d48-97fc-3efc1c4bf341-image.png

          建议先按裸奔流程来, 可以用对照芯片手册,设置这几个寄存器,就可以驱动对应的gpio了。

          linux shell 配合 devmem 命令可以直接操作寄存器。

          如果自己DIY GPIO 就按韦老师教程的流程,然后用函数操作上面寄存器即可。

          S 1 Reply Last reply Reply Quote Share 2
          • whycan
            whycan晕哥 LV 9 last edited by

            参考链接: 全志D1开发板添加基于中断的 gpio-key 按键驱动

            1 Reply Last reply Reply Quote Share 0
            • L
              lgkgkfg LV 6 @YuzukiTsuru last edited by

              @yuzukitsuru 请教下,这几种速度怎么样,我在用户态调用SYSFS接口,太慢了,是不是操作IO还是在内核态写驱动,暴露接口给用户态更合适?

              YuzukiTsuru 1 Reply Last reply Reply Quote Share 0
              • YuzukiTsuru
                柚木 鉉 LV 9 @lgkgkfg last edited by

                @lgkgkfg 是,在内核控制更方便些,不过一些高速操作都使用高速外设了

                T 1 Reply Last reply Reply Quote Share 0
                • T
                  The_Qiang LV 4 @YuzukiTsuru last edited by

                  @yuzukitsuru 在 【萌新入门】如何编写一个应用程序,调用Tina Linux提供的GPIO驱动,实现某个GPIO脚的电平周期反转 中说:

                  @lgkgkfg 是,在内核控制更方便些,不过一些高速操作都使用高速外设了

                  我也请教一下😨
                  40f7f169-9da9-4ae2-adef-c685e76aba0a-image.png
                  tina SDK关于GPIO的参考文档里给出的介绍
                  799d4d25-1d02-4bef-b842-5fee768a3be7-image.png
                  如图,上面的这个gpio编号如何计算。例如PC1口。
                  另外我编译ko文件时没有这个<mach/gpio.h>(抄的V853的led驱动头文件引用)

                  YuzukiTsuru 1 Reply Last reply Reply Quote Share 0
                  • YuzukiTsuru
                    柚木 鉉 LV 9 @The_Qiang last edited by YuzukiTsuru

                    @the_qiang D1是RISCV,与ARM的不太一样,没有先删了看看能不能编译过,能就没问题
                    编号计算:

                    全志引脚计算器 AllwinnerPin 小工具发布
                    https://bbs.aw-ol.com/topic/1166/share/1

                    T 2 Replies Last reply Reply Quote Share 0
                    • T
                      The_Qiang LV 4 @YuzukiTsuru last edited by

                      @yuzukitsuru 在 【萌新入门】如何编写一个应用程序,调用Tina Linux提供的GPIO驱动,实现某个GPIO脚的电平周期反转 中说:

                      @the_qiang D1是RISCV,与ARM的不太一样,没有先删了看看能不能编译过,能就没问题
                      编号计算:

                      全志引脚计算器 AllwinnerPin 小工具发布
                      https://bbs.aw-ol.com/topic/1166/share/1

                      感谢大佬,是我向太复杂了,真就是你另一个标题里的PC1 = ('C'-'A')*32+1

                      1 Reply Last reply Reply Quote Share 0
                      • T
                        The_Qiang LV 4 @YuzukiTsuru last edited by

                        @yuzukitsuru 大佬,我再问俩问题,
                        像gpio_direction_output()这一类gpio操作的函数,延迟是什么级别的 能达到<5us嘛
                        不修改设备树的情况下,单字符驱动,不用虚拟总线,直接使gpio_request()可以达到操作dht11,ds18b20之类的要求吗

                        YuzukiTsuru 1 Reply Last reply Reply Quote Share 0
                        • YuzukiTsuru
                          柚木 鉉 LV 9 @The_Qiang last edited by

                          @the_qiang 使用i2c外设,可以到800K

                          T 1 Reply Last reply Reply Quote Share 0
                          • T
                            The_Qiang LV 4 @YuzukiTsuru last edited by

                            @yuzukitsuru 就是说这个gpio_direction_output()的响应速度不能满足dht11这类对时序要求高的传感器嘛?
                            方便一点的办法是使用I2C设备来传嘛

                            YuzukiTsuru 1 Reply Last reply Reply Quote Share 0
                            • YuzukiTsuru
                              柚木 鉉 LV 9 @The_Qiang last edited by

                              @the_qiang 是,超过100k的都用外设

                              1 Reply Last reply Reply Quote Share 0
                              • S
                                shuai.yin LV 3 @whycan last edited by

                                @whycan 请教一下,我使用devmem2会报总线错误呢, 基地址是 0x0300b000
                                root@TinaLinux:/mnt/UDISK# devmem2 0x0300b024
                                /dev/mem opened.
                                Memory mapped at address 0x7f7eea5000.
                                Bus error

                                WhycanService 1 Reply Last reply Reply Quote Share 0
                                • WhycanService
                                  WhycanService LV 8 @shuai.yin last edited by

                                  @shuai-yin 用sunxi_dump

                                  S 1 Reply Last reply Reply Quote Share 0
                                  • S
                                    shuai.yin LV 3 @WhycanService last edited by

                                    @whycanservice 是的,使用sunxi_dump是OK的。非常感谢您的回答

                                    1 Reply Last reply Reply Quote Share 0
                                    • 1 / 1
                                    • First post
                                      Last post

                                    Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                                    行为准则 | 用户协议 | 隐私权政策