查看datasheet和确认GPIO复用引脚scheme

通过查看mt7628 datasheet可以明确复用关系:

在这里我以I2S对应的GPIO引脚为例。

查看 mt7628an.dtsi 文件中对gpio的注册

$(TOPDIR)假定为宿主机上 OpenWrt 的编译目录。
在$(TOPDIR)/target/linux/ramips/dts/mt7628an.dtsi 里找到gpio注册,结合 datasheet 中 GPIO pin share scheme 与 mt7628an.dtsi 中的定义可以知道:

mt7628 的 GPIO 一共被分为3组,gpio0,gpio1,gpio2,@后紧跟的数字为寄存器起始地址。

查看 mt7620.c 文件中对 gpio 及相应复用功能的定义

引脚复用的定义在$(TOPDIR)/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620n/linux-3.18.29/arch/mips/ralink/mt7620.c 文件中,(注:内核版本因实际情况而定,我选用的为3.18.29)在这里我们只需要查看我们关注的gpio即可,在这里只需要注意 i2s 功能相应的定义,结果如下:

可以看到其中164 行FUNC中对于功能和引脚的说明,其中第一个参数 "i2s" 为功能名称,第二个参数 “0” 为功能编号,第三个参数 "0" 为起始的 GPIO 编号,第四个参数 “4” 为该功能共占用的 GPIO 管脚数目,总结起来就是 i2s 复用的 gpio 是从 GPIO#0 开始,共4个引脚,为 GPIO#0~GPIO#3。

之后需要查看 ralink group 包括的 group,结果如下:

可以看到 234 行 i2s 被包括在其中,下面就需要进行最关键的操作了。

修改 WRTNODE2R.dts 中的 ralink group 设定

也即把要使用的gpio对应的复用功能释放掉,将功能名称添加到 ralink group 即可。如下所示,添加 "i2s"。

在 WRTNODE2R.dts 中对 GPIO 进行注册

注册的方法可以参照 $(TOPDIR)/target/linux/ramips/dts/RT-N14U.dts
注:dts里对设备的注册很简单,如gpio-leds的注册,compatible要与Led的驱动leds-gpio.c里compatible对应,label是设备的名字,设备注册成功,在WRTnode文件系统下就会有相应的label设备名,在这里我以i2s 功能中 I2S_SDO对应的 GPIO#1 为例,注册如下:
gpios = <&gpio0 1 1>, 这是指定对应的gpio引脚为gpio0分组中的1号引脚 GPIO#1,编号从0号开始。到了这一步就已经万事具备了,我们重编译内核,然后把新的 firmware 烧录到我们的板子里面就可以啦。

查看GPIO对应设备名与使用

新的固件烧录重启后,进入 /sys/class/leds 查看即可。

在这里,就看到我们在上一步执行成功的结果了。控制也很容易,进入该设备目录,里面会有 brigtness 文件,往该sysfs文件写入 0 或者 1 就可以控制高低电平了,这里默认direction 为输出,需要改变方向,修改 direction 文件。如下所示:

到了这里,完整的分析与注册使用过程就结束了。
如果觉得对你有帮助,就给我点赞吧,有问题也可以直接给我评论或者补充,:-D

MT7628如何控制GPIO相关推荐

  1. Openwrt MT7628/MT7620/MT7621——GPIO及LED/KEY的功能实现

    GPIO及LED/KEY的功能实现 流程介绍 GPIO功能注册和控制 MT7628支持引脚功能的复用,通过配置GPIO1_MODE和GPIO2_MODE寄存器可指定引脚的功能,通常在dts文件中对引脚 ...

  2. 4412 GPIO读 和 ioremap控制GPIO寄存器

    一.配置GPIO读 在视频14的基础上做 1.利用拨码开关来实现GPIO输入 所以AP_SLEEP对应GPC0_3,然后在drivers/gpio/gpio-exynos4.c中对应EXYNOS4_G ...

  3. python控制gpio的一段代码抄的

    控制gpio一个范例 1 import RPi.GPIO as GPIO 2 import time 3 4 channels = [16,18,22,24,26,19,21,23] 5 6 def ...

  4. sysfs方式控制GPIO

    sysfs方式控制GPIO 使用"gpiolib"实现框架的平台可选择配置一个GPIO的sysfs用户接口,这不同于debugfs接口,因为它提供GPIO方向和值的控制,而不仅是显 ...

  5. matlab控制树莓派3b,树莓派3B+ 手机h5网页控制GPIO

    ezgif-4-5d181e9b42.gif 本文介绍如何在H5页面控制树莓派GPIO 仅实现以BCM编码方式控制GPIO,其他方式未做. 演示地址:http://gpio.exmll.cn/ 点击B ...

  6. python控制gpio产生固定数量的脉冲_STM32L151用dma控制GPIO口发出指定的脉冲个数的疑惑!...

    本帖最后由 mon51 于 2015-3-6 16:41 编辑 用DMA控制GPIO的一个IO脚,输出指定脉冲的个数项目,由于要低功耗!MCU主频不能高.采用的定时器联机,还是达不到输出150KHZ的 ...

  7. linux设备树sysfs,迅为-iMX6开发板-设备树内核-sys方式控制GPIO

    本文档主要讲解迅为-iMX6 开发板,通过 sys 文件的方式来控制 GPIO. 要通过 sys 控制 GPIO,需要做以下几步操作: 1 开启内核中的"GPIO_SYSFS"驱动 ...

  8. linux下使用gpio控制代码,zynq linux 下控制gpio的c代码

    在linux下控制gpio可以先用简单的命令行去控制下看看, 1. devmem 0x41200000 32 0x00000005 2.devicetree的结构如下 dip0: gpio_dip_s ...

  9. NanoPi-K2 控制GPIO

    NanoPi-K2控制GPIO 前言 定位GPIO位号 函数介绍 板子管脚定义 确定管脚位号 编写及编译 .KO 驱动文件 开发环境搭建 驱动编写 驱动加载 编写及编译APP文件 前言 网上关于Nan ...

最新文章

  1. 解决Windows 2003中不允许的父路径Active Server Pages错误'ASP 0131'的方法
  2. HDU 5389 Zero Escape
  3. SDNU 1178.能量项链(区间dp)
  4. linux 固定ip_linux固定IP
  5. 论文浅尝 | 机器阅读理解中常识知识的显式利用
  6. java a星寻路算法_用简单直白的方式讲解A星寻路算法原理
  7. 借力阿里云存储产品 延锋彼欧加速数字化重塑
  8. webStrom破解链接
  9. 局域网虚拟服务器的工作模式,三种虚拟局域网实现方式有哪些差异?实现虚拟局域网的工具推荐...
  10. 2021最新千月影视全新改版影视app系统源码(全开源)源码下载
  11. idea 配置maven插件
  12. 四,AXI总线协议解析
  13. R语言求一行(列表、list)数据的平均数
  14. 关于 厦门“怪虫” 的一点感概
  15. 构造器(constructor)
  16. Linux系统 黏着位(SBIT) 详解
  17. 求n的阶乘和求n的阶乘和——两种方法
  18. Linux命令——性能监控glance命令详解
  19. iOS开发 info.plist设置app启动页面
  20. 常用的http响应状态码大全

热门文章

  1. pd种知道每个数据的类型_每个数据科学家都应该知道的5个概念
  2. android 线程池
  3. spring— Spring与Web环境集成
  4. 基于模型的嵌入式开发流程_如何使用基于模型的测试来改善工作流程
  5. gcc汇编汇编语言_什么是汇编语言?
  6. 大数据项目交付国标_在紧迫的期限内交付大型项目
  7. 分布式系统开发注意点_分布式系统注意事项
  8. 使用Python发送电子邮件
  9. 4. time datetime 时间模块
  10. Spring DI模式 小样例