在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

gpio子系統API詳解

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:Jasonangel ? 2023-09-27 17:17 ? 次閱讀

gpio 子系統 API

gpio 子系統中操作一個 GPIO 需要如下幾步:

1、of_find_compatible_node
2、of_get_named_gpio
3、gpio_request
4、控制gpio(gpio_direction_input、gpio_direction_output……)
5、gpio_free

1)of_find_compatible_node 函數在設備樹中根據 device_type 和 compatible 這兩個屬性查找指定的節點,此處是為了獲取在設備樹中設置的 GPIO 的節點句柄。如果其他地方有獲得句柄,那么可以直接使用這個句柄。

2) of_get_named_gpio ,獲取所設置的 gpio number。

3) gpio_request ,請求這個 gpio 。如果其他地方請求了這個 gpio,還沒有釋放,那么我們會請求不到。

4)請求到這個 gpio 以后,我們就可以對它進行操作,比如獲取到它的值,設置它的值。

5)使用完以后,釋放這個 gpio。

原理圖:

圖片

博主手里有一個 正點原子 imx6ull 開發板,查原理圖,發現蜂鳴器直連的 GPIO 是 GPIO5_1。我把此 IO 口拉低,蜂鳴器就會響。

在設備樹中增加如下代碼(imx6ull-alientek-emmc.dts)

test:test {
 compatible = "Jason_hello";
 hello = < &gpio5 1 GPIO_ACTIVE_HIGH >;
};

設置 GPIO 為 GPIO5_1,高電平有效,但實際上第三個參數我沒有使用。

gpio.c

#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >
#include < linux/gpio.h >
#include < linux/of.h >
#include < linux/of_gpio.h >

static int __init mypinctrl_init(void)
{
 int gpionum = 0;
 int ret = 0;
 struct device_node *node = NULL;
 
 node = of_find_compatible_node(NULL,NULL,"Jason_hello");
 if(!node){
  printk("get node errorn");
  return ret;
 }
 
 gpionum = of_get_named_gpio(node,"hello",0);
 if(gpionum < 0){
  printk("get gpionum errorn");
  return ret;
 }
 
 ret = gpio_request(gpionum,"hello");
 if(ret){
  printk("gpio_request errorn");
  return ret;
 }
  
 printk("gpio(%d) value = %dn",gpionum,ret);
  
 ret = gpio_get_value(gpionum);
  
 printk("gpio(%d) value = %dn",gpionum,ret);
  
 gpio_direction_output(gpionum,0);  // 設置 gpio 輸出低電平
  
 ret = gpio_get_value(gpionum);
  
 printk("gpio(%d) value = %dn",gpionum,ret);
  
 return 0;
}

static void __exit mypinctrl_exit(void)
{
 printk("%sn",__func__);
}

module_init(mypinctrl_init);
module_exit(mypinctrl_exit);

MODULE_LICENSE("GPL");

Makefile

KERNELDIR := /home/book/linux/tool/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek

CURRENT_PATH := $(shell pwd)

obj-m := gpio.o

build: kernel_modules

kernel_modules:
 $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
 $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

在 Linux 內核源碼根目錄中輸入 make dtbs,編譯一份設備樹,下載進開發板。

在 kernel/drivers/misc/ 中新建文件夾,命名為 mygpio,里面放置 gpio.c 和 Makefile。然后輸入 make 編譯出 gpio.ko。然后拷貝進板子,insmod 上去,可以發現蜂鳴器有響。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1402

    瀏覽量

    40882
  • Linux
    +關注

    關注

    87

    文章

    11408

    瀏覽量

    212126
  • API
    API
    +關注

    關注

    2

    文章

    1551

    瀏覽量

    63222
收藏 人收藏

    評論

    相關推薦

    一文搞懂Linux pinctrl/gpio子系統

    GPIO的寄存器操作。分享給剛剛接觸外設bsp的小伙伴們。當然后面有時間還會分享GPIO子系統框架和pinctrl子系統框架,先知道黑盒怎么使用,然后咱再打開仔細瞅瞅。
    發表于 06-09 09:52 ?3157次閱讀

    Linux LED子系統詳解

    Linux LED子系統詳解
    的頭像 發表于 06-10 10:37 ?1723次閱讀
    Linux LED<b class='flag-5'>子系統</b><b class='flag-5'>詳解</b>

    飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統GPIO子系統

    軟件控制設備上的GPIO信號。在Linux的GPIO子系統中,提供了一組API函數來管理和操作GPIO引腳。以下是一些常用的
    發表于 03-24 15:41

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統GPIO子系統

    軟件控制設備上的GPIO信號。在Linux的GPIO子系統中,提供了一組API函數來管理和操作GPIO引腳。以下是一些常用的
    發表于 03-25 13:29

    GPIO應用于Linux LED子系統和輸入事件偵測的具體使用方法

    的時候,用戶可以直接使用Linux的LED子系統來對指定的GPIO口進行設置和操作,比如LED的亮滅或者設置觸發方式等。如果是將GPIO設置為輸入狀態偵測輸入信號的高低變化,一旦電平發生變化,內核就會
    發表于 08-24 11:28

    基于GPIO子系統的LED驅動程序分享

    Pinctrl 子系統把引腳的復用、配置抽出來,做成 Pinctrl 子系統,給 GPIO、I2C 等模塊使用。讓我們在使用某個引腳功能時不用去一個個查芯片手冊。這會涉及 2 個對象:pin
    發表于 12-16 07:16

    怎樣去使用linux下的pintcrl和gpio子系統

    pinctrl和gpio內部的原理是如何實現的?怎樣去使用linux下的pintcrl和gpio子系統呢?
    發表于 03-07 13:38

    Android開發手冊—API函數詳解

    Android開發手冊—API函數詳解
    發表于 10-17 09:01 ?13次下載
    Android開發手冊—<b class='flag-5'>API</b>函數<b class='flag-5'>詳解</b>

    基于Android開發手冊—API函數詳解

    基于Android開發手冊—API函數詳解
    發表于 10-24 09:06 ?18次下載
    基于Android開發手冊—<b class='flag-5'>API</b>函數<b class='flag-5'>詳解</b>

    Linux內核GPIO操作函數的詳解分析

    本文檔的主要內容詳細介紹的是Linux內核GPIO操作函數的詳解分析免費下載。
    發表于 01-22 16:58 ?28次下載

    gpio和pinctrl子系統的關系與區別

    gpio 和 pinctrl 子系統在內核里的使用率非常高,和嵌入式產品的關聯非常大。從這兩個子系統開始學習驅動開發是個不錯的入門選擇。
    的頭像 發表于 03-15 11:40 ?5369次閱讀

    【i.MX6ULL】驅動開發6——GPIO子系統點亮LED

    本篇介紹了使用**Pinctrl子系統GPIO子系統**的方式來點亮LED,與之前的寄存器版點亮LED與設備樹版點亮LED的最大區別在于不需要直接操作寄存器了,而是使用API函數來配
    的頭像 發表于 05-21 21:50 ?3385次閱讀
    【i.MX6ULL】驅動開發6——<b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b>點亮LED

    RK3568pinctrl 和 gpio 子系統詳解

    如果 pinctrl 子系統將 PIN 復用為 GPIO,那么接下來就要配置 gpio 子系統,且 gpio
    的頭像 發表于 12-20 10:22 ?2969次閱讀
    RK3568pinctrl 和 <b class='flag-5'>gpio</b> <b class='flag-5'>子系統</b><b class='flag-5'>詳解</b>

    從Linux平臺來研究GPIO軟件框架

    方法,讓它可以像單片機一樣簡單的操作 IO 口,這得益于各路 Linux 大神對系統底層的封裝。 在 Linux 中有 pinctrl 和 gpio 子系統,它們提供了 API 接口給
    的頭像 發表于 09-28 16:05 ?738次閱讀
    從Linux平臺來研究<b class='flag-5'>GPIO</b>軟件框架

    瑞芯微RK3568-iomuxc和pinctrl子系統初窺

    pinctrl子系統作用:從設備樹中獲取PIN的描述信息來設置PIN的復用和電氣屬性,PIN可復用為I2C、SPI、GPIO。gpio子系統作用:初始化
    發表于 12-20 10:10 ?54次下載
    主站蜘蛛池模板: 女性一级全黄生活片免费看 | 野外啪啪抽搐一进一出 | 宅宅午夜亚洲精品 | 午夜激情啪啪 | 美女被曹 | 欧美猛交喷潮在线播放 | 欧美潘金莲一级风流片a级 欧美片欧美日韩国产综合片 | 在线视频久久 | 18年大片免费在线观看 | 99久久精品国产自免费 | 国内一区二区三区精品视频 | 激情在线播放免费视频高清 | 免费啪啪小视频 | 日本一二区视频 | 日本一区二区三区免费看 | 一区不卡视频 | 一级毛片真人免费观看 | 午夜爱爱免费视频 | 老司机精品免费视频 | 欧美午夜免费观看福利片 | 丁香视频在线 | 亚洲最大成人在线 | 在线91精品亚洲网站精品成人 | 超大乳抖乳露双乳视频 | 三级视频中文字幕 | 在线免费观看你懂的 | 欧美午夜网 | 午夜精| 久久精品re | 天天透天天射 | 欧美激情第一欧美在线 | 中文在线最新版天堂 | 逼逼视频网站 | 久久青草免费免费91线频观看 | 成成人看片在线 | 400部大量精品情侣网站 | 天堂在线观看中文字幕 | 影音先锋色偷偷米奇四色 | 黄色绿像一级片 | 精品女同同性视频很黄很色 | 黄色网在线看 |