1 Gpio dts中gpio的獲取方法

2021-10-03 16:40:40 字數 1264 閱讀 1195

1.在dts中建立乙個裝置節點

1.1 kernel/arch/arm/boot/dts/sharkle.dtsi

++++

cust_gpios: cust_gpios ;

++++

1.2 kernel/arch/arm/boot/dts/sp9820e-2h10-native.dts

++++

&cust_gpios ;

++++

2.獲取node中的gpio並使用

1.1 通過節點和名字獲取gpio pin腳。		

gpios[i].pin = of_get_named_gpio(pdev->dev.of_node, gpios[i].name, 0);

if (gpios[i].pin < 0)

2.2 申請gpio口,此函式會在底層使能對應gpio enable mask bit。

ret = gpio_request(gpios[i].pin, gpios[i].name);

if (ret < 0)

2.3 以上兩步操作完之後,如果沒有報錯的花,就可以使用linux提供的函式對gpio進行操作了,比較常用的有

可以在檔案kenerl/include/asm-generic/gpio.h 和 include/linux/gpio.h中檢視

static inline int gpio_get_value(unsigned gpio);

static inline void gpio_set_value(unsigned gpio, int value);

static inline int gpio_direction_input(unsigned gpio);

static inline int gpio_direction_output(unsigned gpio, int value);

3 從gpio中對映中斷

3.1 使用一下函式可以從gpio pin中獲取到對應的irq_num(中斷號)

gpio->eint_num = gpio_to_irq(gpio->pin); //轉換irq_num(中斷號)

if (gpio->eint_num < 0)

ret = request_irq(gpio->eint_num, cust_handler, flags|irqf_no_suspend, gpio->name, null); //註冊中斷

if (ret)

MTK中GPIO的使用

一 gpio有關的函式 1 gpio modesetup 函式原型 void gpio modesetup kal uint16 pin,kal uint16 conf dada 功能 設定gpio的工作模式是作為gpio,還是作為專有功能介面。引數 pin gpio 的pin腳號,對應於原理圖上m...

arm中GPIO巨集的分析

linux核心標頭檔案中關於s3c2410 gpio的巨集 一 gpio暫存器定義 1 define gpcon x reg2 0x56000000,x 0x10 這句是定義2410的gpio的控制暫存器,注意 reg2的引數是暫存器的實體地址,這個實體地址經 reg2巨集轉換為虛擬位址,對照241...

zynq中各種GPIO方式的區別

zynq可以提供多種方式提供gpio的能力,早上到公司就想應該先搞清楚裡面的各種區別,因為我自己不自然就只會用自己的最熟悉的方案來實現,所以在此總結一下 很多帖子討論這個,當然是因為簡單了 但是好像都沒有整理完整 zynq中gpio有四種,其中ps中mio emio兩種,而pl中同樣有兩種情況,ax...