日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

RK3568外部IO中斷示例

武漢萬(wàn)象奧科 ? 2023-11-03 13:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?

  1. 外部IO中斷介紹

本篇文章以萬(wàn)象奧科HD-RK3568-IOT評(píng)估板中GPIO30為例,介紹Linux內(nèi)核中斷的注冊(cè)方法,使用中斷的方式檢測(cè)GPIO30是否出現(xiàn)上升沿信號(hào)。中斷在linux、設(shè)備驅(qū)動(dòng)開(kāi)發(fā)里使用的都非常多,可以更加實(shí)時(shí)的檢測(cè)GPIO30的狀態(tài)。

Linux內(nèi)核提供了中斷的注冊(cè)接口:

  1. 注冊(cè)中斷

頭文件 include\linux\interrupt.h

定義文件 include\linux\interrupt.h

函數(shù)原型 int request_irq(unsigned int irq, /* 做實(shí)參傳遞給中斷服務(wù)函數(shù)第1個(gè)參數(shù) */

Irq_handler_t handler, /* 中斷服務(wù)函數(shù)指針 */

unsigned long flags,

const char *name,

void *dev_id); /* 做實(shí)參傳遞給中斷服務(wù)函數(shù)第2個(gè)參數(shù) */

函數(shù)功能: 向內(nèi)核注冊(cè)一個(gè)中斷服務(wù)函數(shù);

當(dāng)發(fā)生中斷號(hào)為irq的中斷時(shí),會(huì)執(zhí)行handler指針函數(shù)。

函數(shù)參數(shù):

irq: 中斷編號(hào)(每個(gè)中斷有唯一的編號(hào))。

handler: 中斷服務(wù)函數(shù)指針。

原型 typedef irqreturn_t(*irq_handler_t)(int, void *)。

flag: 中斷的標(biāo)志,用來(lái)描述本中斷的基本特征的。

有固定的值,由中斷源的特征決定;

比如外中斷有: 上升沿,下降沿觸發(fā)中斷這類(lèi)標(biāo)志。

name: 中斷名字,注冊(cè)后會(huì)出現(xiàn)cat /proc/interrupts

dev_id: 這個(gè)參數(shù)是傳遞給中斷服務(wù)函數(shù)。

對(duì)共享中斷來(lái)說(shuō),這個(gè)參數(shù)一定有要;

當(dāng)注銷(xiāo)共享中斷中的其中一個(gè)時(shí),用這個(gè)標(biāo)識(shí)要注銷(xiāo)哪一個(gè)。

對(duì)于有唯一入口的中斷,可以傳遞NULL;

但是一般來(lái)說(shuō)都會(huì)傳遞一個(gè)有意義指針,在中斷程序中使用,以方便編程。

返回值 0 標(biāo)識(shí)成功

-EINVAL (無(wú)效參數(shù)22) 表示中斷號(hào)無(wú)效。

-EBUSY (設(shè)備或者資源忙16) 表示中斷已經(jīng)被占用。

2) 注銷(xiāo)中斷

void free_irq(unsigned int irq, void *dev_id)

irq: 要注銷(xiāo)的中斷號(hào)

dev_id: 其實(shí)就是注冊(cè)時(shí)需要使用的dev參數(shù),在共享中斷必不可少,不能傳遞NULL。

注意:為防止在注銷(xiāo)時(shí)同時(shí)發(fā)生中斷,調(diào)用時(shí)候,先禁掉中斷。

3) 中斷開(kāi)啟與關(guān)閉

禁止中斷:

void disable_irq_nosync(unsigned int irq);

void disable_irq(unsigned int irq);

參數(shù): irq,要禁止的中斷對(duì)應(yīng)的編號(hào)。

注意:在中斷服務(wù)程序中不能使用disable_irq這個(gè)函數(shù),否則內(nèi)核崩潰,可以使用disable_irq_nosync,

disable_irq: 函數(shù)調(diào)用后,函數(shù)不會(huì)馬上返回,而等待中斷程序執(zhí)行完成才返回,在中斷調(diào)用會(huì)導(dǎo)致死鎖。

使能中斷:

void enable_irq(unsigned int irq);

參數(shù): irq, 要使能的中斷對(duì)應(yīng)的編號(hào)。

4) 獲取irq中斷號(hào)

Int gpio_to_irq(unsigned int irq);

參數(shù): irq,要使能的中斷對(duì)應(yīng)的編號(hào)

  1. 外部IO中斷驅(qū)動(dòng)編寫(xiě)
    1. IO原理圖
wKgZomVEizqAAaH_AAFy1JumMiQ719.png

圖 2.1 GPIO0_D6

GPIO0_D6=0*32+(4-1)-8+6=30

    1. 驅(qū)動(dòng)示例代碼

#include

#include

#include

#include

#include

#define GPIO_PIN 30 // 替換為你的GPIO引腳

static unsigned int irq_number;

// GPIO中斷處理函數(shù)

static irqreturn_t gpio_irq_handler(int irq, void *dev_id) {

printk("GPIO中斷觸發(fā)!\n");

return IRQ_HANDLED;

}

static int __init mymodule_init(void) {

int ret;

// 請(qǐng)求GPIO

ret = gpio_request(GPIO_PIN, "my_gpio");

if (ret) {

printk("無(wú)法請(qǐng)求GPIO %d\n", GPIO_PIN);

return ret;

}

// 配置GPIO引腳為輸入

ret = gpio_direction_input(GPIO_PIN);

if (ret) {

printk("無(wú)法配置GPIO %d 為輸入\n", GPIO_PIN);

gpio_free(GPIO_PIN);

return ret;

}

// 請(qǐng)求GPIO中斷

irq_number = gpio_to_irq(GPIO_PIN);

ret = request_irq(irq_number, gpio_irq_handler, IRQF_TRIGGER_RISING, "my_gpio_irq", NULL);

/* IRQF_TRIGGER_RISING 上升沿有效 */

if (ret) {

printk("無(wú)法請(qǐng)求GPIO中斷 %d\n", irq_number);

gpio_free(GPIO_PIN);

return ret;

}

printk("模塊加載成功\n");

return 0;

}

static void __exit mymodule_exit(void) {

// 釋放GPIO中斷

free_irq(irq_number, NULL);

// 釋放GPIO

gpio_free(GPIO_PIN);

printk("模塊卸載成功\n");

}

module_init(mymodule_init);

module_exit(mymodule_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("zou");

MODULE_DESCRIPTION("Sample GPIO and Timer Interrupt Kernel Module");

  1. 外部IO中斷驗(yàn)證

將驅(qū)動(dòng)編譯成模塊,insmod加載模塊后。 由于驅(qū)動(dòng)檢測(cè)GPIO0_D6上升沿有效,當(dāng)給該引腳提供高電平時(shí),會(huì)觸發(fā)中斷執(zhí)行中斷處理函數(shù)。

wKgaomVEi0uAQ_CwAAA8UPgHinc576.png

圖3.1 觸發(fā)IO中斷

?

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1334

    瀏覽量

    56477
  • 評(píng)估板
    +關(guān)注

    關(guān)注

    1

    文章

    1041

    瀏覽量

    31344
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    321

    瀏覽量

    23304
  • RK3568
    +關(guān)注

    關(guān)注

    5

    文章

    655

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    RK3568 Android11編譯環(huán)境搭建及報(bào)錯(cuò)解決指南

    在嵌入式開(kāi)發(fā)領(lǐng)域,RK3568 芯片憑借其出色的性能被廣泛應(yīng)用。基于 RK3568 進(jìn)行 Android11 系統(tǒng)的開(kāi)發(fā),首先要搭建好編譯環(huán)境。本文將詳細(xì)介紹在 Ubuntu20.04 系統(tǒng)上搭建 RK3568 Android1
    的頭像 發(fā)表于 02-04 17:37 ?2170次閱讀
    <b class='flag-5'>RK3568</b> Android11編譯環(huán)境搭建及報(bào)錯(cuò)解決指南

    迅為RK3576對(duì)比RK3568:AI算力與接口的全面躍遷

    迅為RK3576對(duì)比RK3568:AI算力與接口的全面躍遷
    的頭像 發(fā)表于 12-22 15:24 ?2537次閱讀
    迅為<b class='flag-5'>RK</b>3576對(duì)比<b class='flag-5'>RK3568</b>:AI算力與接口的全面躍遷

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開(kāi)發(fā)板Linux驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號(hào)導(dǎo)出詳解

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開(kāi)發(fā)板Linux驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號(hào)導(dǎo)出詳解
    的頭像 發(fā)表于 11-21 13:25 ?1703次閱讀
    【迅為工業(yè)<b class='flag-5'>RK3568</b>穩(wěn)定可靠】itop-<b class='flag-5'>3568</b>開(kāi)發(fā)板Linux驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn):<b class='flag-5'>RK3568</b>內(nèi)核模塊符號(hào)導(dǎo)出詳解

    【作品合集】合眾HZ-RK3568開(kāi)發(fā)板測(cè)評(píng)

    合眾HZ-RK3568開(kāi)發(fā)板測(cè)評(píng)作品合集 產(chǎn)品介紹: HZ-EVM-RK3568開(kāi)發(fā)板采用核心板+底板組合形式設(shè)計(jì),兩者通過(guò)四個(gè)80PIN穩(wěn)定可靠的板對(duì)板連接器連接,擴(kuò)展RK3568全部資源接口功能
    發(fā)表于 09-10 10:22

    迅為RK3568開(kāi)發(fā)板模型推理測(cè)試實(shí)戰(zhàn)LPRNet?車(chē)牌識(shí)別

    迅為RK3568開(kāi)發(fā)板模型推理測(cè)試實(shí)戰(zhàn)LPRNet 車(chē)牌識(shí)別
    的頭像 發(fā)表于 08-25 14:55 ?1589次閱讀
    迅為<b class='flag-5'>RK3568</b>開(kāi)發(fā)板模型推理測(cè)試實(shí)戰(zhàn)LPRNet?車(chē)牌識(shí)別

    【HZ-RK3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】HZ-RK3568開(kāi)發(fā)板操作系統(tǒng)編譯

    開(kāi)發(fā)環(huán)境搭建好了后,接下來(lái)就是HZ-RK3568開(kāi)發(fā)板操作系統(tǒng)編譯工作。 一、menuconfig 先確保虛擬機(jī)的開(kāi)發(fā)環(huán)境OK。 sudo apt install build-essential
    發(fā)表于 08-17 09:15

    rk3568快速開(kāi)機(jī) 快速啟動(dòng)實(shí)現(xiàn)

    想了解下rk官方目前對(duì)rk3568快速開(kāi)機(jī)的實(shí)現(xiàn)有哪些,是否有成熟的方案。在官方文檔上看到rv1126方案,不知道可否應(yīng)用在rk3568上。有專(zhuān)業(yè)人士回答嗎
    發(fā)表于 08-07 08:37

    迅為RK3568?重制版RK3568驅(qū)動(dòng)指南全面升級(jí)

    迅為RK3568 重制版RK3568驅(qū)動(dòng)指南全面升級(jí)
    的頭像 發(fā)表于 07-28 15:25 ?3723次閱讀
    迅為<b class='flag-5'>RK3568</b>?重制版<b class='flag-5'>RK3568</b>驅(qū)動(dòng)指南全面升級(jí)

    【HZ-RK3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】合眾HZ-RK3568開(kāi)發(fā)板初次使用

    、HDMI接口 ⑤、4G與Debug Type-C接口、NVMe接口 ⑥、RK3568核心模塊部分 至于底板提供的兩路CAN接口,以及背面提供的MIPI-CS1接口,適配OV13850攝像頭,這里就不
    發(fā)表于 07-27 23:52

    RK3568 EVB開(kāi)發(fā)板 深度休眠與快速醒的工作流程

    RK3568 EVB開(kāi)發(fā)板關(guān)于深度休眠和喚醒流程的分析
    的頭像 發(fā)表于 07-22 09:49 ?1100次閱讀
    <b class='flag-5'>RK3568</b> EVB開(kāi)發(fā)板 深度休眠與快速醒的工作流程

    RK3568開(kāi)發(fā)板暗藏32位兼容開(kāi)關(guān)?飛凌嵌入式帶你一鍵解鎖!

    RK3568是一款64位處理器,飛凌嵌入式為其提供的交叉編譯器也是64位的,然而部分用戶(hù)可能需要在RK3568開(kāi)發(fā)板上運(yùn)行32位應(yīng)用。本文將詳細(xì)闡述如何使用32位交叉編譯器,編譯出32位應(yīng)用,并使其能夠在飛凌嵌入式RK3568開(kāi)
    的頭像 發(fā)表于 07-19 08:49 ?4601次閱讀
    <b class='flag-5'>RK3568</b>開(kāi)發(fā)板暗藏32位兼容開(kāi)關(guān)?飛凌嵌入式帶你一鍵解鎖!

    【HZ-RK3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】HZ-RK3568開(kāi)發(fā)板初步接觸

    首先感謝合眾恒躍與發(fā)燒友論壇提供的機(jī)會(huì)! 一、開(kāi)箱 首先是一個(gè)大盒子,上面赫然“工業(yè)領(lǐng)域嵌入式產(chǎn)品專(zhuān)家”! 打開(kāi)后,一塊很大的黑色PCB。 開(kāi)發(fā)板由底板和核心板組成,核心板基于瑞芯微RK3568
    發(fā)表于 07-10 23:19

    迅為RK3568開(kāi)發(fā)板實(shí)操-HDF驅(qū)動(dòng)配置UART

    對(duì)于不同的平臺(tái),需要在對(duì)應(yīng)的平臺(tái)目錄修改對(duì)應(yīng)的 hcs 文件,接下來(lái)示例為在 rk3568下新增 uart4 uart9 uart7 的修改方法。 修改 vendor/hihope/rk3568
    的頭像 發(fā)表于 06-27 15:58 ?702次閱讀

    迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng) GPIO操作函數(shù)實(shí)驗(yàn)

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

    Rockchip RK3568技術(shù)參考手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《Rockchip RK3568技術(shù)參考手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 05-17 17:24 ?57次下載
    永顺县| 绵竹市| 聂拉木县| 庄河市| 城口县| 华坪县| 五寨县| 高尔夫| 牡丹江市| 德化县| 司法| 赫章县| 鄂州市| 凉城县| 泌阳县| 阳原县| 靖西县| 竹溪县| 新昌县| 炎陵县| 巴中市| 乌恰县| 怀集县| 新巴尔虎左旗| 多伦县| 芦溪县| 老河口市| 平乐县| 丘北县| 平塘县| 吴堡县| 德昌县| 万山特区| 合山市| 东明县| 探索| 双柏县| 隆尧县| 龙海市| 漯河市| 惠州市|