色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

Linux中pinctrl操作GPIO只需要幾步

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

pinctrl 子系統 API

pinctrl 子系統的 API 有很多,對于驅動工程師來說,pinctrl 操作一個 GPIO 只需要三步:

1、devm_pinctrl_get
2、pinctrl_lookup_state
3、pinctrl_select_state

Linux 中,加 devm_ 開頭的函數,代表這個函數支持資源管理。一般情況下,我們寫一個驅動程序,在程序開頭都會申請資源,比如內存、中斷號等,萬一后面哪一步申請出錯,我們要回滾到第一步,去釋放已經申請的資源,這樣很麻煩。后來 Linux 開發出了很多 devm_ 開頭的函數,代表這個函數有支持資源管理的版本,不管哪一步出錯,只要錯誤退出,就會自動釋放所申請的資源。

1)devm_pinctrl_get:用于獲取設備樹中自己用 pinctrl 建立的節點的句柄;

2) pinctrl_lookup_state:用于選擇其中一個 pinctrl 的狀態,同一個 pinctrl 可以有很多狀態。比如 GPIO50 , 一開始初始化的時候是 I2C ,設備待機時候,我希望切換到普通 GPIO 模式,并且配置為下拉輸入,省電 。這時候如果 pinctrl 節點有描述,我們就可以在代碼中切換 pin 的功能,從 I2C 功能切換成普通 GPIO 功能;

3) pinctrl_select_stat:用于真正設置,在上一步獲取到某個狀態以后,這一步真正設置為這個狀態。

對于 pinctrl 子系統的設備樹配置,是遵守 service 和 client 結構

client 端各個平臺基本都是一樣的,server 端每個平臺都不一樣,使用的字符串的配置也不一樣。

設備樹配置:

//client端,設置不同狀態
&test {
 pinctrl-names = "default","test_low","test_high";
 pinctrl-0 = < &test_default >;
 pinctrl-1 = < &test_low >;
 pinctrl-2 = < &test_high >;
 gpio = < &gpio5 1 GPIO_ACTIVE_LOW >;
 status = "okay";
};

//server 即 pin controller 端,設置 GPIO 幾種功能狀態
&gpio5 {
 test_default:test_default{};
  
 test_low:test_low{
  fsl,pins = <
   MX6UL_PAD_GPIO5_IO01__GPIO5_IO01 0x17059
  >
 };
  
 test_high:test_low{
  fsl,pins = <
   MX6UL_PAD_GPIO5_IO01__GPIO5_IO01 0x1b0b1
  >
 };
};

pinctrl.c

#include < linux/init.h >
#include < linux/kernel.h >
#include < linux/module.h >
#include < linux/platform_device.h >
#include < linux/delay.h >
#include < linux/pinctrl/pinctrl.h >
#include < linux/pinctrl/consumer.h >

static int __init mypinctrl_init(void)
{
 int ret = 0;
 struct pinctrl *pctrl;
 struct platform_device *pdev;
 struct pinctrl_state *test_high;
 struct pinctrl_state *test_low;
  
 pctrl = devm_pinctrl_get(&pdev- >dev);
 if(IS_ERR(pctrl)){
  ret = PTR_ERR(pctrl);
  printk("devm_pinctrl_get errorn");
  return ret;
 }
  
 test_high = pinctrl_lookup_state(pctrl,"test_high");
 if(IS_ERR(pctrl)){
  ret = PTR_ERR(test_high);
  printk("pinctrl_lookup_state test_high errorn");
  return ret;
 }
  
 test_low = pinctrl_lookup_state(pctrl,"test_low");
 if(IS_ERR(pctrl)){
  ret = PTR_ERR(test_low);
  printk("pinctrl_lookup_state test_low errorn");
  return ret;
 }
  
 pinctrl_select_state(pctrl,test_low);
 udelay(200);
 pinctrl_select_state(pctrl,test_high);
  
 return 0;
}

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

module_init(mypinctrl_init);
module_exit(mypinctrl_exit);

MUDULE_LICENSE("GPL");

Makefile 與上面相同,只是更改一下編譯輸出的名字。

這個驅動加載上去,可以切換GPIO口的功能狀態,我這里只是控制GPIO輸出高低,具體看你設備樹怎么配,比如你可以配置某個GPIO一開始是I2C功能,待機時候是普通GPIO功能,達到省電的目的。

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

    關注

    87

    文章

    11296

    瀏覽量

    209360
  • API
    API
    +關注

    關注

    2

    文章

    1499

    瀏覽量

    61975
  • 子系統
    +關注

    關注

    0

    文章

    109

    瀏覽量

    12396
  • GPIO
    +關注

    關注

    16

    文章

    1204

    瀏覽量

    52060
收藏 人收藏

    評論

    相關推薦

    一文搞懂Linux pinctrl/gpio子系統

    注: 所有文章基于linux-3.13以上,本系列主要介紹 GPIO的一些基本知識,驅動操作GPIO的接口,應用層通過sysfs操作
    發表于 06-09 09:52 ?2695次閱讀

    高通平臺中gpio簡單操作和調試

    //獲取gpio寄存器的值二、在kernel代碼操作gpio在代碼中有兩種方式操作gpio,一
    發表于 09-26 17:04

    「正點原子Linux連載」第四十五章 pinctrlgpio子系統實驗(一)

    。在這里大家只需要知道,當設備和驅動匹配成功以后platform_driver的probe成員變量所代表的函數就會執行,在353行設置probe成員變量為imx6ul_pinctrl_probe函數
    發表于 03-19 14:58

    「正點原子Linux連載」第四十五章 pinctrlgpio子系統實驗(二)

    1)實驗平臺:正點原子Linux開發板2)摘自《正點原子I.MX6U嵌入式Linux驅動開發指南》關注官方微信號公眾號,獲取更多資料:正點原子大家將imx35_gpio_hwdata
    發表于 03-19 14:59

    如何在嵌入式linux應用層操作gpio

    嵌入式linux文件io方式操作gpio口示例在嵌入式linux應用層操作
    發表于 12-16 06:19

    有什么方法讓Linux在一塊新的ARM SoC上運行呢

    共存,實現引腳的GPIO和其他功能之間的復用,各SoC只需要實現統一的gpio_chip結構體的成員函數即可;當前GPIO、時鐘、pinmux等都能良好地進行設備樹的映射處理,因此可方
    發表于 05-09 09:50

    RK3399開發板的pinctrlgpio子系統相關資料介紹

    ,驅動工程師只做驅動,應用工程師專注做應用。  linux下的pintcrl和gpio子系統就類似于ST的“BSP庫”,但是linuxpinctrl
    發表于 09-16 17:27

    AD9162通過SPI進行寄存器配置時,只需要配置sequence的寄存器嗎?

    對AD9162通過SPI進行寄存器配置時,只需要配置sequence的寄存器嗎?sequence外的其它寄存器就不用管了? sequence中有對寄存器的讀,這些讀操作可以不進行嗎? 謝謝。
    發表于 12-11 06:36

    linuxgpio復用設置操作步驟

    要向大家介紹下如何寫一個python程序實現控制Arduino才能控制的I/O接口。上篇文章也說過,如果想使用python程序,必須使用SD卡Linux系統。那么如何在Linux
    發表于 11-15 11:34 ?7595次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>中</b><b class='flag-5'>gpio</b>復用設置<b class='flag-5'>操作</b>步驟

    從TrueSTUDIO遷移STM32CubeIDE只需要簡單幾步

    從TrueSTUDIO遷移到STM32CubeIDE只需要簡單幾步
    的頭像 發表于 02-28 16:33 ?3525次閱讀

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

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

    gpiopinctrl子系統的關系與區別

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

    使用pinctrlgpio子系統實現LED燈驅動

    前邊已經學了兩種點燈,本質依然還是通過配置寄存器;在學習STM32的時候除了學習配置一下寄存器,基本都是使用庫來開發,那么在i.MX6ULL還使用寄存器開發明顯是不太適合,那么i.MX6ULL有更方便的開發呢,這篇就來學習一下使用 pinctrlgpio 子系統來完
    的頭像 發表于 04-03 10:17 ?1346次閱讀

    RK3568pinctrlgpio 子系統詳解

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

    Linux平臺來研究GPIO軟件框架

    方法,讓它可以像單片機一樣簡單的操作 IO 口,這得益于各路 Linux 大神對系統底層的封裝。 在 Linux 中有 pinctrlgpio
    的頭像 發表于 09-28 16:05 ?630次閱讀
    從<b class='flag-5'>Linux</b>平臺來研究<b class='flag-5'>GPIO</b>軟件框架
    主站蜘蛛池模板: 69夫妇交友群| 最近日本字幕MV免费观看在线 | 床伴在线观看免费高清完整泰剧第四集| 91综合久久久久婷婷| www色视频在线观看| 国产产乱码一二三区别免费| 国产区免费在线观看| 久见久热 这里只有精品| 免费看片A级毛片免费看| 日韩精品一区二区中文| 亚洲AV久久久久久久无码| 一本二卡三卡四卡乱码麻豆| 97精品国产高清在线看入口| 岛国片在线看| 精品国产福利在线视频| 美女屁股软件| 射漂亮黑b丝女| 艳鉧动漫片1~6全集在线| 99九九精品国产高清自在线| 鬼灭之刃花街篇免费樱花动漫 | 国产精品一区二区在线观看| 娇小8一12xxxx第一次| 男人J放进女人屁股免费观看| 内射老妇BBX| 无修肉动漫在线观看影片 | 天天看学生视频| 在线播放一区二区精品产| yellow片高清视频免费看| 国内自拍 在线 亚洲 欧美| 免费夜色污私人影院网站| 午夜插插插| 99er热精品视频国产免费| 国产精品久人妻精品| 辣文肉高h粗暴| 午夜宅宅伦电影网| 97国产精品视频在线观看| 国产精品亚洲第一区二区三区 | 亚洲成av人影院| 99热这里只有 精品| 国内视频在线精品一区| 青娱乐国产精品视频|