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

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM