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

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

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

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

迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

北京迅為電子 ? 2025-05-29 14:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE圖形處理器。RK3568支持4K解碼和1080P編碼,支持SATA/PCIE/USB3.0外圍接口。RK3568內(nèi)置獨立NPU,可用于輕量級人工智能應用。RK3568支持安卓11和linux系統(tǒng),主要面向物聯(lián)網(wǎng)網(wǎng)關、NVR存儲、工控平板、工業(yè)檢測、工控盒、卡拉OK、云終端、車載中控等行業(yè)。

?

迅為RK3568開發(fā)板瑞芯微Linux安卓鴻蒙ARM核心板人工智能AI主板

wKgZO2gwC5aAKVRCAAHgt_IIj5U256.png

第131章GPIO子系統(tǒng)API函數(shù)的引入

事實上,在前面中斷課程中,已經(jīng)簡單接觸到了GPIO子系統(tǒng)中的API函數(shù),其中用來獲取gpio中斷編號的gpio_to_irq函數(shù)就屬于GPIO子系統(tǒng)中的API函數(shù),在本章節(jié)中將對GPIO子系統(tǒng)進行簡單的介紹。

在目前的Linux內(nèi)核主線中,GPIO(通用輸入/輸出)子系統(tǒng)存在兩個版本,這里將兩個版本區(qū)分為新版本和舊版本。新版本GPIO子系統(tǒng)接口是基于描述符(descriptor-based)來實現(xiàn)的,而舊版本的GPIO子系統(tǒng)接口是基于整數(shù)(integer-based)來實現(xiàn)的,在Linux內(nèi)核中為了保持向下的兼容性,舊版本的接口在最新的內(nèi)核版本中仍然得到支持,而隨著時間的推移,新版本的GPIO子系統(tǒng)接口會越來越完善,最終完全取代舊版本,所以在本課程中主要講解新版本的GPIO子系統(tǒng)接口。

新的GPIO子系統(tǒng)接口需要與與設備樹(Device Tree)結(jié)合使用。使用設備樹和新的GPIO接口可以更加靈活地配置和管理系統(tǒng)中的GPIO資源,提供了更好的可擴展性和可移植性。所以如果沒有設備樹,就無法使用新的GPIO接口。

那要如何對新舊GPIO子系統(tǒng)接口進行區(qū)分呢,一個明顯的區(qū)別是新的GPIO子系統(tǒng)接口使用了以"gpiod_"作為前綴的函數(shù)命名約定,而舊的GPIO子系統(tǒng)接口使用了以"gpio_"作為前綴的函數(shù)命名約定。

一些區(qū)分新舊 GPIO子系統(tǒng)接口的示例如下所示:

新的 GPIO子系統(tǒng)接口示例如下所示:

gpiod_set_value()

gpiod_direction_input()

gpiod_direction_output()

gpiod_get_value()

gpiod_request()

AI寫代碼

cpp

舊的 GPIO子系統(tǒng)接口示例:

gpio_set_value()

gpio_direction_input()

gpio_direction_output()

gpio_get_value()

gpio_request()

AI寫代碼

cpp

上面也提到了新的 GPIO子系統(tǒng)接口是基于描述符(descriptor-based)來實現(xiàn)的,由struct gpio_desc結(jié)構(gòu)體來表示,該結(jié)構(gòu)體定義在內(nèi)核源碼的“drivers/gpio/gpiolib.h”目錄下。具體內(nèi)容如下所示:

struct gpio_desc {

struct gpio_device gdev; // GPIO設備結(jié)構(gòu)體

unsigned long flags; //標志位,用于表示不同的屬性

/*標志位符號對應的位號*/

#define FLAG_REQUESTED 0 // GPIO已請求

#define FLAG_IS_OUT 1 // GPIO用作輸出

#define FLAG_EXPORT 2 //受sysfs_lock保護的導出標志

#define FLAG_SYSFS 3 //通過/sys/class/gpio/control導出的標志

#define FLAG_ACTIVE_LOW 6 // GPIO值為低電平時激活

#define FLAG_OPEN_DRAIN 7 // GPIO為開漏類型

#define FLAG_OPEN_SOURCE 8 // GPIO為開源類型

#define FLAG_USED_AS_IRQ 9 // GPIO連接到中斷請求(IRQ)

#define FLAG_IS_HOGGED 11 // GPIO被獨占占用

#define FLAG_TRANSITORY 12 // GPIO在休眠或復位時可能失去值

/*連接標簽*/

const char *label; // GPIO的名稱

const char *name; // GPIO的名稱

};

AI寫代碼

cpp

(1)struct gpio_device gdev是一個struct gpio_device類型的字段,用于表示GPIO設備的相關信息。struct gpio_device結(jié)構(gòu)體通常包含設備的底層硬件控制器等信息。

(2)unsigned long flags:用于表示GPIO的標志位,以表示不同的屬性。通過使用位操作,每個標志位可以單獨設置或清除。

(3)第5-14行用于表示不同標志位的符號常量,與flags字段中的位號相對應。例如,在flags字段中的第0位表示FLAG_REQUESTED,第1位表示FLAG_IS_OUT,以此類推

(4)const char *label:這是一個指向字符串的指針,表示GPIO的標簽或名稱。

(5)const char *name:這是一個指向字符串的指針,表示GPIO的名稱。

上面需要重點關注的是然后struct gpio_device結(jié)構(gòu)體,該結(jié)構(gòu)體同樣定義在內(nèi)核源碼的“drivers/gpio/gpiolib.h”目錄下,具體內(nèi)容如下所示:

struct gpio_device {

int id; // GPIO設備ID

struct device *dev; //對應的設備結(jié)構(gòu)體指針

struct cdev chrdev; //字符設備結(jié)構(gòu)體

struct device *mockdev; //模擬設備結(jié)構(gòu)體指針

struct module *owner; //擁有該GPIO設備的內(nèi)核模塊指針

struct gpio_chip *chip; //對應的GPIO芯片結(jié)構(gòu)體指針

struct gpio_desc *descs; // GPIO描述符數(shù)組指針

int base; // GPIO編號的起始值

u16 ngpio; // GPIO的數(shù)量

const char *label; // GPIO設備的標簽

void *data; //與GPIO設備相關的數(shù)據(jù)指針

struct list_head list; //用于將GPIO設備結(jié)構(gòu)體連接到鏈表中

#ifdef CONFIG_PINCTRL

/*

*如果啟用了CONFIG_PINCTRL選項,GPIO控制器可以選擇描述它們在SoC中服務的實際引腳范圍。

*此信息將由pinctrl子系統(tǒng)用于配置相應的GPIO引腳。

*/

struct list_head pin_ranges; //描述GPIO控制器引腳范圍的鏈表

#endif

};

AI寫代碼

cpp

該結(jié)構(gòu)體是用來描述GPIO設備的數(shù)據(jù)結(jié)構(gòu),關于該結(jié)構(gòu)體的參數(shù)介紹如下所示:

(1)int id:整型字段,表示GPIO設備的ID。每個GPIO設備可以有一個唯一的ID。

(2)struct device *dev:指向struct device的指針,表示與GPIO設備相關聯(lián)的設備結(jié)構(gòu)體。

(3)struct cdev chrdev:字符設備結(jié)構(gòu)體,用于實現(xiàn)GPIO設備的字符設備接口。

(4)struct device *mockdev:指向struct device的指針,用于表示GPIO設備的模擬設備結(jié)構(gòu)體。

(5)struct module *owner:指向擁有該GPIO設備的內(nèi)核模塊的指針。

(6)struct gpio_chip *chip:指向struct gpio_chip的指針,表示與GPIO設備關聯(lián)的GPIO芯片(GPIO控制器)結(jié)構(gòu)體。

(7)struct gpio_desc *descs:指向struct gpio_desc數(shù)組的指針,表示與GPIO設備關聯(lián)的GPIO描述符。每個GPIO描述符用于描述GPIO的屬性和狀態(tài)。

(8)int base:表示GPIO編號的起始值。

(9)u16 ngpio: 16位無符號整型字段,表示GPIO的數(shù)量。

(10)const char *label:指向字符串的指針,表示GPIO設備的標簽或名稱。

(11)void *data:指向與GPIO設備相關的數(shù)據(jù)的指針,用于存儲和訪問與GPIO設備相關的自定義數(shù)據(jù)。

(12)struct list_head list:將GPIO設備結(jié)構(gòu)體連接到鏈表中的字段,用于管理多個GPIO設備的列表。

(13)struct list_head pin_ranges (僅在啟用CONFIG_PINCTRL選項時存在):用于描述GPIO控制器引腳范圍的鏈表。如果配置了GPIO控制器的引腳范圍,該鏈表將包含描述每個范圍的元素。

在上面一系列的參數(shù)中,要重點關注的是struct gpio_chip *chip這一結(jié)構(gòu)體,表示與GPIO設備關聯(lián)的GPIO芯片(GPIO控制器)結(jié)構(gòu)體,該結(jié)構(gòu)體定義在內(nèi)核源碼目錄下的“include/linux/gpio/driver.h”文件中,具體內(nèi)容如下所示

struct gpio_chip {

const char *label; // GPIO芯片標簽

struct gpio_device gpiodev; // GPIO設備

struct device *parent; //父設備指針

struct module *owner; //擁有者模塊指針

int (*request)(struct gpio_chip *chip, unsigned offset);//請求GPIO

void (*free)(struct gpio_chip *chip, unsigned offset); //釋放GPIO

int (*get_direction)(struct gpio_chip *chip, unsigned offset); //獲取GPIO方向

int (*direction_input)(struct gpio_chip *chip, unsigned offset); //設置GPIO為輸入

int (*direction_output)(struct gpio_chip *chip, unsigned offset, int value); //設置GPIO為輸出

int (*get)(struct gpio_chip chip, unsigned offset); //獲取GPIO值

int (*get_multiple)(struct gpio_chip chip, unsigned long *mask, unsigned long *bits); //獲取多個GPIO的值

void (*set)(struct gpio_chip chip, unsigned offset, int value); //設置GPIO值

void (*set_multiple)(struct gpio_chip chip, unsigned long mask, unsigned long *bits); //設置多個GPIO的值

int (*set_config)(struct gpio_chip *chip, unsigned offset, unsigned long config); //設置GPIO配置

int (*to_irq)(struct gpio_chip chip, unsigned offset); //將GPIO轉(zhuǎn)換為中斷

void (*dbg_show)(struct seq_file *s, struct gpio_chip chip); //在調(diào)試信息中顯示GPIO

int base; // GPIO編號的基準值

u16 ngpio; // GPIO的數(shù)量

const char *const *names; // GPIO的名稱數(shù)組

..........

};

AI寫代碼

cpp

struct gpio_chip *chip這一結(jié)構(gòu)體用于描述GPIO芯片的屬性和操作函數(shù),可以通過函數(shù)指針調(diào)用相應的函數(shù)來請求、釋放、設置、獲取GPIO的狀態(tài)和數(shù)值等操作,從而實現(xiàn)對GPIO的控制和管理,需要注意的是這個結(jié)構(gòu)體中的一系列函數(shù)都不需要我們來填充,這些工作都是由芯片原廠工程師來完成的,我們只需要學會新gpio子系統(tǒng)相應API函數(shù)的使用即可。

在接下來的章節(jié)中將對常用的新gpio子系統(tǒng)API函數(shù)進行講解。

————————————————

版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA版權協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。

原文鏈接:https://blog.csdn.net/BeiJingXunWei/article/details/135569658

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

    關注

    25

    文章

    5990

    瀏覽量

    109900
  • GPIO
    +關注

    關注

    16

    文章

    1299

    瀏覽量

    55235
  • RK3568
    +關注

    關注

    5

    文章

    609

    瀏覽量

    7230
  • 迅為電子
    +關注

    關注

    0

    文章

    72

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RK3568開發(fā)板驅(qū)動指南Linux中通用SPI設備驅(qū)動

    RK3568開發(fā)板驅(qū)動指南Linux中通用SPI設備驅(qū)動
    的頭像 發(fā)表于 01-23 11:02 ?3233次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>Linux中通用SPI設備<b class='flag-5'>驅(qū)動</b>

    北京RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)內(nèi)核HDF驅(qū)動框架架構(gòu)

    北京RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動
    的頭像 發(fā)表于 03-11 14:13 ?1349次閱讀
    北京<b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>OpenHarmony<b class='flag-5'>系統(tǒng)</b>南向<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>內(nèi)核HDF<b class='flag-5'>驅(qū)動</b>框架架構(gòu)

    RK3568驅(qū)動指南GPIO子系統(tǒng)實戰(zhàn):實現(xiàn)動態(tài)切換引腳復用功能

    RK3568驅(qū)動指南GPIO子系統(tǒng)實戰(zhàn):實現(xiàn)動態(tài)
    的頭像 發(fā)表于 05-22 14:27 ?1406次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b>實戰(zhàn):實現(xiàn)動態(tài)切換引腳復用功能

    RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)三級節(jié)點操作函數(shù)實驗

    RK3568開發(fā)板驅(qū)動指南GPIO
    的頭像 發(fā)表于 05-26 15:39 ?1099次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b>三級節(jié)點操作<b class='flag-5'>函數(shù)</b>實驗

    更新 | 持續(xù)開源 RK3568驅(qū)動指南第十一篇-pinctrl子系統(tǒng)

    《iTOP-RK3568開發(fā)板驅(qū)動開發(fā)指南》更新,本次更新內(nèi)容對應的是驅(qū)動(第十一期_pinctrl子系
    發(fā)表于 10-18 11:12

    基于RK3568開發(fā)板的嵌入式學習之Linux驅(qū)動視頻

    基于RK3568開發(fā)板的嵌入式學習之Linux驅(qū)動視頻
    的頭像 發(fā)表于 05-19 16:30 ?1587次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b>基于<b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>的嵌入式學習之Linux<b class='flag-5'>驅(qū)動</b>視頻

    RK3568開發(fā)板系統(tǒng)編程手冊全新升級

    RK3568開發(fā)板系統(tǒng)編程手冊全新升級
    的頭像 發(fā)表于 06-25 15:50 ?1762次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>系統(tǒng)</b>編程手冊全新升級

    RK3568開發(fā)板GPIO之外接模塊

    RK3568開發(fā)板GPIO之外接模塊
    的頭像 發(fā)表于 08-24 17:41 ?2560次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>GPIO</b>之外接模塊

    RK3568開發(fā)板Debian系統(tǒng)使用python 進行攝像頭開發(fā)

    RK3568開發(fā)板Debian系統(tǒng)使用python 進行攝像頭開發(fā)
    的頭像 發(fā)表于 09-14 16:58 ?2425次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>Debian<b class='flag-5'>系統(tǒng)</b>使用python 進行攝像頭<b class='flag-5'>開發(fā)</b>

    RK3568開發(fā)板驅(qū)動開發(fā)指南-輸入子系統(tǒng)

    RK3568開發(fā)板驅(qū)動開發(fā)指南-輸入子系統(tǒng)
    的頭像 發(fā)表于 02-23 15:11 ?1851次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)指南</b>-輸入<b class='flag-5'>子系統(tǒng)</b>

    RK3568開發(fā)板SPI驅(qū)動指南-mcp2515驅(qū)動編寫:讀寄存器函數(shù)

    RK3568開發(fā)板SPI驅(qū)動指南-mcp2515驅(qū)動
    的頭像 發(fā)表于 01-20 14:43 ?1314次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>開發(fā)板</b>SPI<b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>-mcp2515<b class='flag-5'>驅(qū)動</b>編寫:讀寄存器<b class='flag-5'>函數(shù)</b>

    【北京】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)GPIO基礎知識

    【北京】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)
    的頭像 發(fā)表于 03-06 11:23 ?841次閱讀
    【北京<b class='flag-5'>迅</b><b class='flag-5'>為</b>】iTOP-<b class='flag-5'>RK3568</b>OpenHarmony<b class='flag-5'>系統(tǒng)</b>南向<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>GPIO</b>基礎知識

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

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

    RK3568驅(qū)動指南GPIO子系統(tǒng) GPIO操作函數(shù)實驗

    電子RK3568開發(fā)板驅(qū)動指南GPIO
    的頭像 發(fā)表于 05-28 15:24 ?790次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b> <b class='flag-5'>GPIO</b>操作<b class='flag-5'>函數(shù)</b>實驗

    RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法

    RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法
    的頭像 發(fā)表于 06-03 11:32 ?815次閱讀
    <b class='flag-5'>RK3568</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>|第十二篇 <b class='flag-5'>GPIO</b><b class='flag-5'>子系統(tǒng)</b>-第130章 <b class='flag-5'>GPIO</b>的調(diào)試方法