• MT7628NN的GPIO复用控制


    版本:Openwrt19.07

    芯片:MT7268NN

    1、在源码 /target/linux/rampis/dts目录中,打开 mt7628an.dtsi  查看注册复用的GPIO

    gpio: gpio@600 {
    			compatible = "mediatek,mt7621-gpio";
    			reg = <0x600 0x100>;
    
    			interrupt-parent = <&intc>;
    			interrupts = <6>;
    
    			#interrupt-cells = <2>;
    			interrupt-controller;
    
    			gpio-controller;
    			#gpio-cells = <2>;
    		};
    
    		i2c: i2c@900 {
    			compatible = "mediatek,mt7621-i2c";
    			reg = <0x900 0x100>;
    
    			resets = <&rstctrl 16>;
    			reset-names = "i2c";
    
    			#address-cells = <1>;
    			#size-cells = <0>;
    
    			status = "disabled";      #disabled为该复用功能未启用,若需启用,改为 okay或禁用这一行。

    2、如果需要查看复用的GPIO引脚定义,编译过后,查看/build_dir/toolchain-mipsel_24kc_gcc-8.4.0_musl/linux-5.4.92/arch/mips/ralink/mt7620.c 文件

    static struct rt2880_pmx_func i2s_grp_mt7628[] = {
    	FUNC("antenna", 3, 0, 4),
    	FUNC("pcm", 2, 0, 4),
    	FUNC("gpio", 1, 0, 4),
    	FUNC("i2s", 0, 0, 4),
    };

    #( GPIO名称,编号,GPIO#起始号,占用引脚数),如 i2s功能组,编号为0 ,GPIO#0开始 ,占4个GPIO,即i2s功能组为 GPI#0 -- GPIO#3
    static struct rt2880_pmx_func spi_cs1_grp_mt7628[] = { FUNC("-", 3, 6, 1), FUNC("refclk", 2, 6, 1), FUNC("gpio", 1, 6, 1), FUNC("spi cs1", 0, 6, 1), };

      

    3、在源码 /target/linux/rampis/dts目录中,修改 mt7628an_xxxxx.dts  , 在state_default的gpio组中添加要改成GPIO控制的复用功能名称

    &state_default {
    	gpio {
    		#groups = "gpio","wled_an", "i2s", "i2c","refclk", "perst", "wdt", "spi cs1";
    		groups = "gpio","wled_an","i2s";
    		function = "gpio";
    	};
    };
    

    4、在用户态层控制GPIO

      在编译时,kernel_menuconfig中启用 Device Drivers ---> GPIO Suppot ---> sys/class/gpio/...(sysfs interface)

      升级固件后,在 /sys/class/gpio 会出现 gpio这个目录,包含有两个文件 export、unexport 和 3组GPIO控制器

      export     用于将指定编号的引脚导出,作为GPIO使用  

      unexport  用于将导出的GPIO删除掉

      gpiochip416、gpiochip448、gpiochip480     对应3组GPIO控制器,每组32个GPIO引脚

      导出GPIO:

      查看MT7628 datasheet文档中GPIO功能对应的 GPIO#N 引脚。

      如 无线wifi灯 wled_an 为 GPIO#44  ,44 - 32 = 12 在第2组gpiochip448中, 448 + 12 = 460 故:

    echo "460" > export
    

      导出成功后会在当前目录下生成 gpio460文件夹 ,文件夹内包含三个主要方法 direction、value、edge

      direction
        设置输出还是输入模式
        设置为输入:echo “in” > direction
        设置为输出:echo “out” > direction
      value
        输出时,控制高低电平;输入时,获取高低电平
        高电平:echo 1 > value
        低电平:echo 0 > value
      edge
        控制中断触发模式,引脚被配置为中断后可以使用poll() 函数监听引脚
        非中断引脚: echo “none” > edge
        上升沿触发:echo “rising” > edge
        下降沿触发:echo “falling” > edge
        边沿触发:echo “both” > edge

      综合:控制GPIO#44输出高电平,点亮wled_an灯

    echo "460" > export
    echo "out" > gpio460/direction
    echo "1" > gpio460/value
    

      

      

  • 相关阅读:
    《不懂说话你怎么带团队》读书笔记
    Java内存模型与指令重排
    线程的基本操作
    Spring MVC核心技术
    Spring MVC注解式开发
    Spring MVC执行流程
    大厂技术博客汇总
    内嵌tomcat启动速度慢
    Java 对IP请求进行限流.
    Java过滤XSS脚本, 可通过Appscan扫描
  • 原文地址:https://www.cnblogs.com/jackron/p/14457047.html
Copyright © 2020-2023  润新知