日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

android 查看gpio状态_GPIO子系统重要概念

發(fā)布時(shí)間:2024/8/1 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 查看gpio状态_GPIO子系统重要概念 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

來源:百問網(wǎng)

作者:韋東山

本文字?jǐn)?shù):3161,閱讀時(shí)長(zhǎng):5分鐘

1.1 引入

  • 要操作GPIO引腳,先把所用引腳配置為GPIO功能,這通過Pinctrl子系統(tǒng)來實(shí)現(xiàn)。
  • 然后就可以根據(jù)設(shè)置引腳方向(輸入還是輸出)、讀值──獲得電平狀態(tài),寫值──輸出高低電平。
  • 以前我們通過寄存器來操作GPIO引腳,即使LED驅(qū)動(dòng)程序,對(duì)于不同的板子它的代碼也完全不同。
  • 當(dāng)BSP工程師實(shí)現(xiàn)了GPIO子系統(tǒng)后,我們就可以:

a. 在設(shè)備樹里指定GPIO引腳

b. 在驅(qū)動(dòng)代碼中:

使用GPIO子系統(tǒng)的標(biāo)準(zhǔn)函數(shù)獲得GPIO、設(shè)置GPIO方向、讀取/設(shè)置GPIO值。

這樣的驅(qū)動(dòng)代碼,將是單板無關(guān)的。

1.2 在設(shè)備樹中指定引腳

在幾乎所有ARM芯片中,GPIO都分為幾組,每組中有若干個(gè)引腳。所以在使用GPIO子系統(tǒng)之前,就要先確定:它是哪組的?組里的哪一個(gè)?

在設(shè)備樹中,“GPIO組”就是一個(gè)GPIO Controller,這通常都由芯片廠家設(shè)置好。我們要做的是找到它名字,比如“gpio1”,然后指定要用它里面的哪個(gè)引腳,比如。

有代碼更直觀,下圖是一些芯片的GPIO控制器節(jié)點(diǎn),它們一般都是廠家定義好,在xxx.dtsi文件中:

我們暫時(shí)只需要關(guān)心里面的這2個(gè)屬性:

gpio-controller;#gpio-cells = <2>;

“gpio-controller”表示這個(gè)節(jié)點(diǎn)是一個(gè)GPIO Controller,它下面有很多引腳。

“#gpio-cells = <2>”表示這個(gè)控制器下每一個(gè)引腳要用2個(gè)32位的數(shù)(cell)來描述。

為什么要用2個(gè)數(shù)?其實(shí)使用多個(gè)cell來描述一個(gè)引腳,這是GPIO Controller自己決定的。比如可以用其中一個(gè)cell來表示那是哪一個(gè)引腳,用另一個(gè)cell來表示它是高電平有效還是低電平有效,甚至還可以用更多的cell來示其他特性。

普遍的用法是,用第1個(gè)cell來表示哪一個(gè)引腳,用第2個(gè)cell來表示有效電平:

GPIO_ACTIVE_HIGH : 高電平有效GPIO_ACTIVE_LOW : 低電平有效

定義GPIO Controller是芯片廠家的事,我們?cè)趺匆媚硞€(gè)引腳呢?在自己的設(shè)備節(jié)點(diǎn)中使用屬性"[-]gpios",示例如下:

上圖中,可以使用gpios屬性,也可以使用name-gpios屬性。

1.3 在驅(qū)動(dòng)代碼中調(diào)用GPIO子系統(tǒng)

在設(shè)備樹中指定了GPIO引腳,在驅(qū)動(dòng)代碼中如何使用?

也就是GPIO子系統(tǒng)的接口函數(shù)是什么?

GPIO子系統(tǒng)有兩套接口:基于描述符的(descriptor-based)、老的(legacy)。前者的函數(shù)都有前綴“gpiod_”,它使用gpio_desc結(jié)構(gòu)體來表示一個(gè)引腳;后者的函數(shù)都有前綴“gpio_”,它使用一個(gè)整數(shù)來表示一個(gè)引腳。

要操作一個(gè)引腳,首先要get引腳,然后設(shè)置方向,讀值、寫值。

驅(qū)動(dòng)程序中要包含頭文件,#include // descriptor-based或#include // legacy

下表列出常用的函數(shù):

有前綴“devm_”的含義是“設(shè)備資源管理”(Managed Device Resource),這是一種自動(dòng)釋放資源的機(jī)制。它的思想是“資源是屬于設(shè)備的,設(shè)備不存在時(shí)資源就可以自動(dòng)釋放”。

比如在Linux開發(fā)過程中,先申請(qǐng)了GPIO,再申請(qǐng)內(nèi)存;如果內(nèi)存申請(qǐng)失敗,那么在返回之前就需要先釋放GPIO資源。

如果使用devm的相關(guān)函數(shù),在內(nèi)存申請(qǐng)失敗時(shí)可以直接返回:設(shè)備的銷毀函數(shù)會(huì)自動(dòng)地釋放已經(jīng)申請(qǐng)了的GPIO資源。

建議使用“devm_”版本的相關(guān)函數(shù)。

舉例,假設(shè)備在設(shè)備樹中有如下節(jié)點(diǎn):

foo_device {compatible = "acme,foo";...led-gpios = , /* red */ , /* green */ ; /* blue */power-gpios = ;};

那么可以使用下面的函數(shù)獲得引腳:

struct gpio_desc *red, *green, *blue, *power;red = gpiod_get_index(dev, "led", 0, GPIOD_OUT_HIGH);green = gpiod_get_index(dev, "led", 1, GPIOD_OUT_HIGH);blue = gpiod_get_index(dev, "led", 2, GPIOD_OUT_HIGH);power = gpiod_get(dev, "power", GPIOD_OUT_HIGH);

要注意的是,gpiod_set_value設(shè)置的值是“邏輯值”,不一定等于物理值。
什么意思?

舊的“gpio_”函數(shù)沒辦法根據(jù)設(shè)備樹信息獲得引腳,它需要先知道引腳號(hào)。

引腳號(hào)怎么確定?

在GPIO子系統(tǒng)中,每注冊(cè)一個(gè)GPIO Controller時(shí)會(huì)確定它的“base number”,那么這個(gè)控制器里的第n號(hào)引腳的號(hào)碼就是:base number + n。

但是如果硬件有變化、設(shè)備樹有變化,這個(gè)base number并不能保證是固定的,應(yīng)該查看sysfs來確定base number。

1.4 sysfs中的訪問方法

在sysfs中訪問GPIO,實(shí)際上用的就是引腳號(hào),老的方法。

a. 先確定某個(gè)GPIO Controller的基準(zhǔn)引腳號(hào)(base number),再計(jì)算出某個(gè)引腳的號(hào)碼。方法如下:

② 然后進(jìn)入某個(gè)gpiochip目錄,查看文件label的內(nèi)容
③ 根據(jù)label的內(nèi)容對(duì)比設(shè)備樹
label內(nèi)容來自設(shè)備樹,比如它的寄存器基地址。用來跟設(shè)備樹(dtsi文件)比較,就可以知道這對(duì)應(yīng)哪一個(gè)GPIO Controller。
下圖是在100asK_imx6ull上運(yùn)行的結(jié)果,通過對(duì)比設(shè)備樹可知gpiochip96對(duì)應(yīng)gpio4:


所以gpio4這組引腳的基準(zhǔn)引腳號(hào)就是96,這也可以“cat base”來再次確認(rèn)。① 先在開發(fā)板的/sys/class/gpio目錄下,找到各個(gè)gpiochipXXX目錄:

② 然后進(jìn)入某個(gè)gpiochip目錄,查看文件label的內(nèi)容
③ 根據(jù)label的內(nèi)容對(duì)比設(shè)備樹
label內(nèi)容來自設(shè)備樹,比如它的寄存器基地址。用來跟設(shè)備樹(dtsi文件)比較,就可以知道這對(duì)應(yīng)哪一個(gè)GPIO Controller。
下圖是在100asK_imx6ull上運(yùn)行的結(jié)果,通過對(duì)比設(shè)備樹可知gpiochip96對(duì)應(yīng)gpio4:


所以gpio4這組引腳的基準(zhǔn)引腳號(hào)就是96,這也可以“cat base”來再次確認(rèn)。

b. 基于sysfs操作引腳:
以100ask_imx6ull為例,它有一個(gè)按鍵,原理圖如下:

那么GPIO4_14的號(hào)碼是96+14=110,可以如下操作讀取按鍵值:

echo 110 > /sys/class/gpio/exportecho in > /sys/class/gpio/gpio110/directioncat /sys/class/gpio/gpio110/valueecho 110 > /sys/class/gpio/unexport

注意:如果驅(qū)動(dòng)程序已經(jīng)使用了該引腳,那么將會(huì)export失敗,會(huì)提示下面的錯(cuò)誤:

對(duì)于輸出引腳,假設(shè)引腳號(hào)為N,可以用下面的方法設(shè)置它的值為1:

echo N > /sys/class/gpio/exportecho out > /sys/class/gpio/gpioN/directionecho 1 > /sys/class/gpio/gpioN/valueecho N > /sys/class/gpio/unexport

可以點(diǎn)擊“了解更多”與韋東山老師交流

總結(jié)

以上是生活随笔為你收集整理的android 查看gpio状态_GPIO子系统重要概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 小辣椒福利视频导航 | 亚洲天堂久久 | 少妇资源 | 热久久亚洲 | 日日碰狠狠添天天爽无码 | 日b视频免费 | 夜色综合网 | 成人黄色小说视频 | 亚洲社区在线观看 | 最新av在线网站 | 五月天国产在线 | 国产中文字幕一区二区三区 | 国产网站大全 | 中国黄色片视频 | 久久精品高清 | 黑人精品一区二区三区不 | 欧美日韩一级二级三级 | 成人区人妻精品一区二区不卡视频 | 日本a级片免费 | 精品99久久 | 日本不卡一 | 在线观看精品国产 | 公交上高潮的丁芷晴 | 欧美日韩精品在线视频 | 午夜美女福利视频 | 日韩精选在线观看 | 亚洲av成人精品一区二区三区 | 日本亲与子乱ay中文 | 色图综合 | 国产精品入口日韩视频大尺度 | 成人午夜毛片 | 国产传媒视频 | 国产一区二区三区在线观看 | 国产精品人人人人 | 狠狠撸在线 | 狠狠操夜夜操 | 欧美在线观看一区二区 | 意大利少妇愉情理伦片 | 怨女1988国语版在线观看高清 | bt男人天堂 | 涩涩视频在线免费看 | 久久久青草 | 久久久久久成人精品 | 色噜噜综合 | 色欧美88888久久久久久影院 | 草草影院1| 亚洲va欧美va国产综合久久 | 日韩中文字幕免费视频 | 亚洲欧洲综合av | 中日韩免费视频 | 夜夜嗨av一区二区三区免费区 | 最新中文字幕av专区 | 800av在线视频 | 国产成人精品女人久久久 | 久一区二区三区 | 欧美综合亚洲图片综合区 | 国产精品二 | 欧美一区二区三区免费在线观看 | 精品av一区二区 | 一区二区三区网站 | 日韩av中文字幕在线播放 | 草莓视频18免费观看 | 在线观看欧美日韩 | 欧美碰碰碰 | 成人91免费 | av网址在线看 | 免费无码毛片一区二区app | 九九人人 | 欧美久久久久久久久久久 | 成人网入口 | 免费三片在线观看网站v888 | 97超碰人人看| 日韩在线视频二区 | 亚洲图片二区 | 久草99 | 日韩三级视频 | 亚洲va韩国va欧美va | 久久精品欧美日韩精品 | 国偷自拍 | 欧美日本激情 | 国产大片b站 | 中文在线免费观看 | 亚洲精品国产无码 | 国产99久久久 | 潘金莲一级淫片免费放动漫 | 丰满熟妇人妻av无码区 | 日韩精品免费一区二区夜夜嗨 | 中国国产毛片 | 日本视频免费在线播放 | 亚洲av乱码久久精品蜜桃 | 一个色在线 | 尤物网址在线观看 | 欧美一区二区三区在线观看 | 成人自拍视频在线观看 | 欧美1234区 | 操校花视频 | 人人妻人人澡人人爽 | 欧美精品在线观看视频 | 久久免费手机视频 |