chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux中pinctrl操作GPIO只需要幾步

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:Jasonangel ? 2023-09-27 17:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

pinctrl 子系統(tǒng) API

pinctrl 子系統(tǒng)的 API 有很多,對(duì)于驅(qū)動(dòng)工程師來(lái)說(shuō),pinctrl 操作一個(gè) GPIO 只需要三步:

1、devm_pinctrl_get
2、pinctrl_lookup_state
3、pinctrl_select_state

Linux 中,加 devm_ 開頭的函數(shù),代表這個(gè)函數(shù)支持資源管理。一般情況下,我們寫一個(gè)驅(qū)動(dòng)程序,在程序開頭都會(huì)申請(qǐng)資源,比如內(nèi)存、中斷號(hào)等,萬(wàn)一后面哪一步申請(qǐng)出錯(cuò),我們要回滾到第一步,去釋放已經(jīng)申請(qǐng)的資源,這樣很麻煩。后來(lái) Linux 開發(fā)出了很多 devm_ 開頭的函數(shù),代表這個(gè)函數(shù)有支持資源管理的版本,不管哪一步出錯(cuò),只要錯(cuò)誤退出,就會(huì)自動(dòng)釋放所申請(qǐng)的資源。

1)devm_pinctrl_get:用于獲取設(shè)備樹中自己用 pinctrl 建立的節(jié)點(diǎn)的句柄;

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

3) pinctrl_select_stat:用于真正設(shè)置,在上一步獲取到某個(gè)狀態(tài)以后,這一步真正設(shè)置為這個(gè)狀態(tài)。

對(duì)于 pinctrl 子系統(tǒng)的設(shè)備樹配置,是遵守 service 和 client 結(jié)構(gòu) 。

client 端各個(gè)平臺(tái)基本都是一樣的,server 端每個(gè)平臺(tái)都不一樣,使用的字符串的配置也不一樣。

設(shè)備樹配置:

//client端,設(shè)置不同狀態(tài)
&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 端,設(shè)置 GPIO 幾種功能狀態(tài)
&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 與上面相同,只是更改一下編譯輸出的名字。

這個(gè)驅(qū)動(dòng)加載上去,可以切換GPIO口的功能狀態(tài),我這里只是控制GPIO輸出高低,具體看你設(shè)備樹怎么配,比如你可以配置某個(gè)GPIO一開始是I2C功能,待機(jī)時(shí)候是普通GPIO功能,達(dá)到省電的目的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11624

    瀏覽量

    217848
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2133

    瀏覽量

    66182
  • 子系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    115

    瀏覽量

    13286
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1313

    瀏覽量

    55686
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文搞懂Linux pinctrl/gpio子系統(tǒng)

    注: 所有文章基于linux-3.13以上,本系列主要介紹 GPIO的一些基本知識(shí),驅(qū)動(dòng)操作GPIO的接口,應(yīng)用層通過(guò)sysfs操作
    發(fā)表于 06-09 09:52 ?3942次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-PinctrlGPIO子系統(tǒng)之Pinctrl子系統(tǒng)

    pinctrl(Pin Control)子系統(tǒng)是Linux內(nèi)核的一個(gè)模塊化子系統(tǒng),用于管理和控制硬件引腳(Pin)的配置和功能。它提供了一種統(tǒng)一的接口,使驅(qū)動(dòng)程序可以對(duì)硬件引腳進(jìn)行靈活的配置和控制
    發(fā)表于 03-22 09:23

    高通平臺(tái)中gpio簡(jiǎn)單操作和調(diào)試

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

    「正點(diǎn)原子Linux連載」第四十五章 pinctrlgpio子系統(tǒng)實(shí)驗(yàn)(一)

    。在這里大家只需要知道,當(dāng)設(shè)備和驅(qū)動(dòng)匹配成功以后platform_driver的probe成員變量所代表的函數(shù)就會(huì)執(zhí)行,在353行設(shè)置probe成員變量為imx6ul_pinctrl_probe函數(shù)
    發(fā)表于 03-19 14:58

    「正點(diǎn)原子Linux連載」第四十五章 pinctrlgpio子系統(tǒng)實(shí)驗(yàn)(二)

    1)實(shí)驗(yàn)平臺(tái):正點(diǎn)原子Linux開發(fā)板2)摘自《正點(diǎn)原子I.MX6U嵌入式Linux驅(qū)動(dòng)開發(fā)指南》關(guān)注官方微信號(hào)公眾號(hào),獲取更多資料:正點(diǎn)原子大家將imx35_gpio_hwdata
    發(fā)表于 03-19 14:59

    如何在嵌入式linux應(yīng)用層操作gpio

    嵌入式linux文件io方式操作gpio口示例在嵌入式linux應(yīng)用層操作
    發(fā)表于 12-16 06:19

    有什么方法讓Linux在一塊新的ARM SoC上運(yùn)行呢

    共存,實(shí)現(xiàn)引腳的GPIO和其他功能之間的復(fù)用,各SoC只需要實(shí)現(xiàn)統(tǒng)一的gpio_chip結(jié)構(gòu)體的成員函數(shù)即可;當(dāng)前GPIO、時(shí)鐘、pinmux等都能良好地進(jìn)行設(shè)備樹的映射處理,因此可方
    發(fā)表于 05-09 09:50

    RK3399開發(fā)板的pinctrlgpio子系統(tǒng)相關(guān)資料介紹

    ,驅(qū)動(dòng)工程師只做驅(qū)動(dòng),應(yīng)用工程師專注做應(yīng)用。  linux下的pintcrl和gpio子系統(tǒng)就類似于ST的“BSP庫(kù)”,但是linuxpinctrl
    發(fā)表于 09-16 17:27

    linuxgpio復(fù)用設(shè)置操作步驟

    要向大家介紹下如何寫一個(gè)python程序?qū)崿F(xiàn)控制Arduino才能控制的I/O接口。上篇文章也說(shuō)過(guò),如果想使用python程序,必須使用SD卡Linux系統(tǒng)。那么如何在Linux
    發(fā)表于 11-15 11:34 ?8042次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>中</b><b class='flag-5'>gpio</b>復(fù)用設(shè)置<b class='flag-5'>操作</b>步驟

    從TrueSTUDIO遷移STM32CubeIDE只需要簡(jiǎn)單幾步

    從TrueSTUDIO遷移到STM32CubeIDE只需要簡(jiǎn)單幾步
    的頭像 發(fā)表于 02-28 16:33 ?4230次閱讀

    Linux內(nèi)核GPIO操作函數(shù)的詳解分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux內(nèi)核GPIO操作函數(shù)的詳解分析免費(fèi)下載。
    發(fā)表于 01-22 16:58 ?28次下載

    gpiopinctrl子系統(tǒng)的關(guān)系與區(qū)別

    gpiopinctrl 子系統(tǒng)在內(nèi)核里的使用率非常高,和嵌入式產(chǎn)品的關(guān)聯(lián)非常大。從這兩個(gè)子系統(tǒng)開始學(xué)習(xí)驅(qū)動(dòng)開發(fā)是個(gè)不錯(cuò)的入門選擇。
    的頭像 發(fā)表于 03-15 11:40 ?6165次閱讀

    RK3568pinctrlgpio 子系統(tǒng)詳解

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

    Linux平臺(tái)來(lái)研究GPIO軟件框架

    方法,讓它可以像單片機(jī)一樣簡(jiǎn)單的操作 IO 口,這得益于各路 Linux 大神對(duì)系統(tǒng)底層的封裝。 在 Linux 中有 pinctrlgpio
    的頭像 發(fā)表于 09-28 16:05 ?1064次閱讀
    從<b class='flag-5'>Linux</b>平臺(tái)來(lái)研究<b class='flag-5'>GPIO</b>軟件框架

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實(shí)驗(yàn)
    的頭像 發(fā)表于 05-23 13:47 ?732次閱讀
    RK3568驅(qū)動(dòng)指南|第十二篇 <b class='flag-5'>GPIO</b>子系統(tǒng)-第135章 <b class='flag-5'>GPIO</b>子系統(tǒng)與<b class='flag-5'>pinctrl</b>子系統(tǒng)相結(jié)合實(shí)驗(yàn)