91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

迅為RK3568驅動指南GPIO子系統 GPIO操作函數實驗

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

掃碼添加小助手

加入工程師交流群

迅為電子RK3568驅動指南GPIO子系統 GPIO操作函數實驗

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

?

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

wKgZO2gwC5aAKVRCAAHgt_IIj5U256.png

第133章 GPIO操作函數實驗

從本章節將對新gpio子系統中操作GPIO的相關api接口函數進行講解。

133.1 函數介紹

1獲取 GPIO 的方向函數:

(1)函數原型:

int gpiod_get_direction(struct gpio_desc *desc);

(2)頭文件:

#include

(3)參數:

desc:指向GPIO描述符的指針。

(4)函數功能:

gpiod_get_direction函數用于獲取GPIO的方向,即判斷GPIO是輸入還是輸出。

(5)返回值:

返回值為整型,表示GPIO的方向。如果成功獲取到GPIO方向,返回值為GPIO_LINE_DIRECTION_IN(0)表示輸入,或GPIO_LINE_DIRECTION_OUT(1)表示輸出。如果獲取失敗,返回值為負數,表示錯誤碼。

該函數的作用是獲取給定GPIO描述符所代表的GPIO的方向。通過該函數,可以確定GPIO 是配置為輸入還是輸出。返回值可以用于進一步判斷和處理GPIO的方向相關邏輯。

2配置 GPIO 的方向函數:

(1)函數原型:

int gpiod_direction_input(struct gpio_desc *desc);

int gpiod_direction_output(struct gpio_desc *desc, int value);

(2)頭文件:

#include

(3)參數:

desc:指向GPIO描述符的指針。

value(僅適用于 gpiod_direction_output):初始輸出值,可以是0或1。

(4)函數功能:

gpiod_direction_input 函數用于配置GPIO的方向為輸入。

gpiod_direction_output 函數用于配置GPIO的方向為輸出,并可指定初始輸出值。

(5)返回值:

返回值為整型,表示配置GPIO方向的結果。

如果成功配置GPIO方向,返回值為0。

如果配置失敗,返回值為負數,表示錯誤碼。

這兩個函數用于配置GPIO的方向。gpiod_direction_input 將給定的GPIO描述符所代表的GPIO配置為輸入模式。而 gpiod_direction_output 將GPIO配置為輸出模式,并可以指定初始輸出值。

3讀取GPIO的電平狀態函數:

(1)函數原型:

int gpiod_get_value(const struct gpio_desc *desc);

(2)頭文件:

#include

(3)參數:

desc:指向GPIO描述符的指針。

(4)函數功能:

gpiod_get_value 函數用于讀取 GPIO 的電平狀態。

(5)返回值:

返回值為整型,表示GPIO的電平狀態。

如果成功讀取到 GPIO 的電平狀態,返回值為 0 或 1,分別表示低電平和高電平。

如果讀取失敗,返回值為負數,表示錯誤碼。

該函數用于讀取給定GPIO描述符所代表的GPIO的電平狀態。通過調用該函數,可以獲取GPIO當前的電平狀態,以便進一步處理和判斷GPIO的狀態。

4設置 GPIO 的電平狀態函數:

(1)函數原型:

void gpiod_set_value(struct gpio_desc *desc, int value);

(2)頭文件:

#include

(3)參數:

desc:指向GPIO描述符的指針。

value:要設置的 GPIO 的電平狀態,可以是0或1。

(4)函數功能:

gpiod_set_value 函數用于設置GPIO的電平狀態。

(5)返回值:無(void)

該函數用于設置給定GPIO描述符所代表的GPIO的電平狀態。通過調用該函數,您可以將GPIO 設置為特定的電平狀態,以便控制外部設備或執行其他相關操作。

value 參數表示要設置的 GPIO 的電平狀態,可以是 0 或 1。當 value 為 0 時,表示設置 GPIO 為低電平;當 value 為 1 時,表示設置 GPIO 為高電平。

該函數沒有返回值,因為它只是執行設置操作而不需要返回任何結果。

在使用該函數之前,需要確保 GPIO 已經被正確地配置為輸出模式。

5將 GPIO 描述符轉換為中斷編號函數:

(1)函數原型:

int gpiod_to_irq(const struct gpio_desc *desc);

(2)頭文件:

#include

(3)參數:

desc:指向 GPIO 描述符的指針。

(4)函數功能:

gpiod_to_irq 函數用于將 GPIO 描述符轉換為中斷號。

(5)返回值:

返回值為整型,表示中斷號。

如果成功將GPIO描述符轉換為中斷號,返回值為大于等于0的中斷號。

如果轉換失敗,返回值為負數,表示錯誤碼。

該函數用于將給定GPIO描述符所代表的GPIO轉換為對應的中斷號。

133.2 驅動程序的編寫

本實驗對應的網盤路徑為:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\87_gpioctrl06。

編寫完成的gpio_api.c代碼如下所示,添加的代碼已加粗表示。

#include

#include

#include

#include

struct gpio_desc *mygpio1; // GPIO 描述符指針

int dir, value, irq; // 方向、值和中斷號變量

//平臺設備初始化函數

int mydriver_probe(struct platform_device *dev) {

printk("This is mydriver_probe\n");

// 獲取GPIO描述符

mygpio1 = gpiod_get_optional(&dev->dev, "my", 0);

if (mygpio1 == NULL) {

printk("gpiod_get_optional error\n");

return -1;

}

gpiod_direction_output(mygpio1, 0); // 將 GPIO 設置為輸出模式并設置初始值為低電平

gpiod_set_value(mygpio1, 1); // 設置 GPIO 為高電平

dir = gpiod_get_direction(mygpio1); // 獲取 GPIO 的方向

if (dir == GPIOF_DIR_IN) {

printk("dir is GPIOF_DIR_IN\n"); // 輸出方向為輸入

} else if (dir == GPIOF_DIR_OUT) {

printk("dir is GPIOF_DIR_OUT\n"); // 輸出方向為輸出

}

value = gpiod_get_value(mygpio1); // 獲取 GPIO 的值

printk("value is %d\n", value); // 輸出 GPIO 的值

irq = gpiod_to_irq(mygpio1); // 將 GPIO 轉換為中斷號

printk("irq is %d\n", irq); // 輸出中斷號

return 0;

}

// 平臺設備的移除函數

static int my_platform_remove(struct platform_device *pdev)

{

printk(KERN_INFO "my_platform_remove: Removing platform device\n");

// 清理設備特定的操作

// ...

return 0;

}

const struct of_device_id of_match_table_id[] = {

{.compatible="mygpio"},

};

// 定義平臺驅動結構體

static struct platform_driver my_platform_driver = {

.probe = my_platform_probe,

.remove = my_platform_remove,

.driver = {

.name = "my_platform_device",

.owner = THIS_MODULE,

.of_match_table = of_match_table_id,

},

};

// 模塊初始化函數

static int __init my_platform_driver_init(void)

{

int ret;

// 注冊平臺驅動

ret = platform_driver_register(&my_platform_driver);

if (ret) {

printk(KERN_ERR "Failed to register platform driver\n");

return ret;

}

printk(KERN_INFO "my_platform_driver: Platform driver initialized\n");

return 0;

}

// 模塊退出函數

static void __exit my_platform_driver_exit(void)

{

// 注銷平臺驅動

gpiod_put(mygpio2);

platform_driver_unregister(&my_platform_driver);

printk(KERN_INFO "my_platform_driver: Platform driver exited\n");

}

module_init(my_platform_driver_init);

module_exit(my_platform_driver_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("topeet");

AI寫代碼

cpp

133.3 運行測試

133.3.1 編譯驅動程序

對于Makefile的內容注釋已在上圖添加,保存退出之后,來到存放gpio_api.c和Makefile文件目錄下,如下圖(圖133-1)所示:

wKgZPGg2ub6AYhDPAABOTHGYago932.png

圖 133-1

然后使用命令“make”進行驅動的編譯,編譯完成如下圖(圖133-2)所示:

wKgZO2g2ub-ALS0hAAF3VGWssmo753.png

圖 133-2

編譯完生成gpio_api.ko目標文件,如下圖(圖133-3)所示:

wKgZO2g2ub-ADi_lAAB4oXqVKEw627.png

至此驅動模塊就編譯成功了。

133.3.2 運行測試

首先需要確保當前開發板使用的內核鏡像是我們在132.2小節中修改設備樹后編譯生成的鏡像,然后啟動開發板,使用以下命令進行驅動的加載,如下圖(圖133-4)所示:

insmod gpio_api.ko

wKgZO2g2ub-AKGeHAADdjymHNyE934.png

圖 133-4

在驅動程序中首先會將GPIO的方向設置為輸出,并且設置為了高電平,所以上面的第一個打印IO口方向為輸出,而由于已經設置為了高電平,所以第二個打印1表示引腳為高電平,第三個打印的值為113,表示gpio轉換的中斷號,然后使用以下命令進行驅動的卸載,如下圖所示:

rmmod gpio_api.ko

wKgZPGg2ub-AQ7EoAACr9o9_HJs682.png

圖 133-5

至此,GPIO操作函數實驗就完成了。

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

    關注

    16

    文章

    1280

    瀏覽量

    54056
  • RK3568
    +關注

    關注

    5

    文章

    584

    瀏覽量

    6396
  • 迅為電子
    +關注

    關注

    0

    文章

    64

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RK3568開發板驅動指南Linux中通用SPI設備驅動

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

    北京RK3568開發板OpenHarmony系統南向驅動開發內核HDF驅動框架架構

    北京RK3568開發板OpenHarmony系統南向驅動開發內核HDF驅動框架架構
    的頭像 發表于 03-11 14:13 ?1108次閱讀
    北京<b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b>開發板OpenHarmony<b class='flag-5'>系統</b>南向<b class='flag-5'>驅動</b>開發內核HDF<b class='flag-5'>驅動</b>框架架構

    RK3568驅動指南GPIO子系統實戰:實現動態切換引腳復用功能

    RK3568驅動指南GPIO子系統實戰:實現動態
    的頭像 發表于 05-22 14:27 ?858次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b><b class='flag-5'>驅動</b><b class='flag-5'>指南</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b>實戰:實現動態切換引腳復用功能

    RK3568開發板驅動指南GPIO子系統三級節點操作函數實驗

    RK3568開發板驅動指南GPIO子系統三級節點
    的頭像 發表于 05-26 15:39 ?816次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b>開發板<b class='flag-5'>驅動</b><b class='flag-5'>指南</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b>三級節點<b class='flag-5'>操作</b><b class='flag-5'>函數</b><b class='flag-5'>實驗</b>

    更新 | 持續開源 RK3568驅動指南第十一篇-pinctrl子系統

    《iTOP-RK3568開發板驅動開發指南》更新,本次更新內容對應的是驅動(第十一期_pinctrl子系統-全新升級)視頻,后續資料會不斷更
    發表于 10-18 11:12

    RK3568核心板

    RK3568核心板
    的頭像 發表于 03-03 15:55 ?2188次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b>核心板

    RK3568pinctrl 和 gpio 子系統詳解

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

    基于RK3568開發板的嵌入式學習之Linux驅動視頻

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

    RK3568開發板GPIO之外接模塊

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

    RK3568開發板驅動開發指南-輸入子系統

    RK3568開發板驅動開發指南-輸入子系統
    的頭像 發表于 02-23 15:11 ?1579次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b>開發板<b class='flag-5'>驅動</b>開發<b class='flag-5'>指南</b>-輸入<b class='flag-5'>子系統</b>

    RK3568開發板SPI驅動指南-mcp2515驅動編寫:讀寄存器函數

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

    【北京】iTOP-RK3568OpenHarmony系統南向驅動開發GPIO基礎知識

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

    RK3568驅動指南|第十二篇 GPIO子系統-第135章 GPIO子系統與pinctrl子系統相結合實驗

    RK3568驅動指南|第十二篇 GPIO子系統-第135章 GPIO
    的頭像 發表于 05-23 13:47 ?357次閱讀
    <b class='flag-5'>RK3568</b><b class='flag-5'>驅動</b><b class='flag-5'>指南</b>|第十二篇 <b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b>-第135章 <b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b>與pinctrl<b class='flag-5'>子系統</b>相結合<b class='flag-5'>實驗</b>

    RK3568開發板驅動指南GPIO子系統GPIO子系統API函數的引入

    RK3568開發板驅動指南GPIO子系統
    的頭像 發表于 05-29 14:05 ?449次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3568</b>開發板<b class='flag-5'>驅動</b><b class='flag-5'>指南</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b><b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b>API<b class='flag-5'>函數</b>的引入

    RK3568驅動指南|第十二篇 GPIO子系統-第130章 GPIO的調試方法

    RK3568驅動指南|第十二篇 GPIO子系統-第130章 GPIO的調試方法
    的頭像 發表于 06-03 11:32 ?521次閱讀
    <b class='flag-5'>RK3568</b><b class='flag-5'>驅動</b><b class='flag-5'>指南</b>|第十二篇 <b class='flag-5'>GPIO</b><b class='flag-5'>子系統</b>-第130章 <b class='flag-5'>GPIO</b>的調試方法
    主站蜘蛛池模板: 成人亚洲欧美在线电影www色 | 欧美顶级xxxxbbbb | 午夜免费福利在线 | 五月婷婷六月综合 | 加勒比啪啪 | 久久久久久99 | 性网站免费 | chinese国产videoxx实拍 | 亚洲高清网站 | 日本高清不卡视频 | 萝l在线精品社区资源 | 最近最新中文字幕在线第一页 | 色免费在线 | 手机看片福利久久 | 六月丁香啪啪 | 天堂成人一区二区三区 | 午夜污片| 国产男女交性视频播放免费bd | 亚洲精品久久久久午夜 | 亚洲精品资源 | 在线电影天堂 | 午夜片在线 | 狂野欧美性猛交xxxx免费 | 亚洲精品成人久久久影院 | 国产激烈床戏无遮挡在线观看 | 九月婷婷亚洲综合在线 | 黄视频免费在线看 | 一级特黄色片 | 手机在线你懂的 | 97伊人久久| 欧美色爱综合 | 欧美高清一级片 | 亚洲国产精 | 综合99| 99精品久久久久久久婷婷 | 精品国产欧美一区二区最新 | 日本一视频一区视频二区 | yy6080理aa级伦大片一级 | 欧美黑粗 | 国产小视频在线观看www | aaa一区二区三区 |