在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

RK3568外部IO中斷示例

武漢萬象奧科 ? 2023-11-03 13:56 ? 次閱讀

?

  1. 外部IO中斷介紹

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

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

  1. 注冊中斷

頭文件 include\linux\interrupt.h

定義文件 include\linux\interrupt.h

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

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

unsigned long flags,

const char *name,

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

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

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

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

irq: 中斷編號(每個中斷有唯一的編號)。

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

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

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

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

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

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

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

對共享中斷來說,這個參數(shù)一定有要;

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

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

但是一般來說都會傳遞一個有意義指針,在中斷程序中使用,以方便編程

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

-EINVAL (無效參數(shù)22) 表示中斷號無效。

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

2) 注銷中斷

void free_irq(unsigned int irq, void *dev_id)

irq: 要注銷的中斷號

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

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

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

禁止中斷:

void disable_irq_nosync(unsigned int irq);

void disable_irq(unsigned int irq);

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

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

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

使能中斷:

void enable_irq(unsigned int irq);

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

4) 獲取irq中斷號

Int gpio_to_irq(unsigned int irq);

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

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

圖 2.1 GPIO0_D6

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

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

#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;

// 請求GPIO

ret = gpio_request(GPIO_PIN, "my_gpio");

if (ret) {

printk("無法請求GPIO %d\n", GPIO_PIN);

return ret;

}

// 配置GPIO引腳為輸入

ret = gpio_direction_input(GPIO_PIN);

if (ret) {

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

gpio_free(GPIO_PIN);

return ret;

}

// 請求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("無法請求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ū)動編譯成模塊,insmod加載模塊后。 由于驅(qū)動檢測GPIO0_D6上升沿有效,當(dāng)給該引腳提供高電平時,會觸發(fā)中斷執(zhí)行中斷處理函數(shù)。

wKgaomVEi0uAQ_CwAAA8UPgHinc576.png

圖3.1 觸發(fā)IO中斷

?

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

    關(guān)注

    16

    文章

    1238

    瀏覽量

    53284
  • 評估板
    +關(guān)注

    關(guān)注

    1

    文章

    587

    瀏覽量

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

    關(guān)注

    1

    文章

    317

    瀏覽量

    22087
  • RK3568
    +關(guān)注

    關(guān)注

    5

    文章

    561

    瀏覽量

    5907
收藏 0人收藏

    評論

    相關(guān)推薦

    HZ-EVM-RK3568-技術(shù)規(guī)格書

    電子發(fā)燒友網(wǎng)站提供《HZ-EVM-RK3568-技術(shù)規(guī)格書.pdf》資料免費(fèi)下載
    發(fā)表于 04-17 15:47 ?0次下載

    HZ-CORE-RK3568-規(guī)格書

    電子發(fā)燒友網(wǎng)站提供《HZ-CORE-RK3568-規(guī)格書.pdf》資料免費(fèi)下載
    發(fā)表于 04-17 15:45 ?0次下載

    rk3568開發(fā)工具

    rk3568開發(fā)工具
    發(fā)表于 04-16 17:03 ?1次下載

    RK3568原理圖及規(guī)格書資料

    RK3568 IoT設(shè)備官方參考原理圖
    發(fā)表于 02-07 15:28 ?4次下載

    RK3568內(nèi)置MCU開發(fā)介紹之一

    本文介紹RK3568內(nèi)置的MCU的開發(fā)流程,首先介紹MCU程序的構(gòu)建方法,然后介紹MCU核心與ARM CORTEX A55 AP核心之間的mailbox通信。 RK3568內(nèi)置有4*cortex
    的頭像 發(fā)表于 12-01 16:09 ?1353次閱讀
    <b class='flag-5'>RK3568</b>內(nèi)置MCU開發(fā)介紹之一

    【迅為】瑞芯微RK3588開發(fā)板RK3568開發(fā)板區(qū)別及優(yōu)勢

    RK3568開發(fā)板
    的頭像 發(fā)表于 11-18 14:19 ?1137次閱讀
    【迅為】瑞芯微<b class='flag-5'>RK</b>3588開發(fā)板<b class='flag-5'>RK3568</b>開發(fā)板區(qū)別及優(yōu)勢

    瑞芯微RK3568 USB驅(qū)動

    瑞芯微RK3568 USB驅(qū)動程序
    發(fā)表于 11-11 14:18 ?3次下載

    RK3568燒錄工具

    RK3568 燒錄工具
    發(fā)表于 11-11 14:16 ?7次下載

    開發(fā)更便利!迅為RK3568/RK3588 定制分區(qū)鏡像發(fā)布

    開發(fā)更便利!迅為RK3568/RK3588 定制分區(qū)鏡像發(fā)布
    的頭像 發(fā)表于 11-11 14:00 ?884次閱讀
    開發(fā)更便利!迅為<b class='flag-5'>RK3568</b>/<b class='flag-5'>RK</b>3588 定制分區(qū)鏡像發(fā)布

    RK3568 編譯sdk技巧

    我司RK3568對外提供源代碼是以sdk的形式提供,包括但不僅限于uboot、kernel、buildroot、debian源碼。在編譯sdk的過程中往往需要安裝大量的第三方安裝包,同時也要保證宿主
    的頭像 發(fā)表于 08-30 11:44 ?875次閱讀
    <b class='flag-5'>RK3568</b> 編譯sdk技巧

    米爾RK3568加推工控板和工控機(jī),更豐富的場景應(yīng)用

    國產(chǎn)之星-瑞芯微RK3568一直備受關(guān)注,米爾電子推廣的RK3568核心板采用創(chuàng)新LGA設(shè)計(jì),核心板質(zhì)量更可靠,成本更優(yōu)。除米粉派RK3568(MYD-LR3568開發(fā)板)之外,米爾加
    的頭像 發(fā)表于 08-02 08:01 ?665次閱讀
    米爾<b class='flag-5'>RK3568</b>加推工控板和工控機(jī),更豐富的場景應(yīng)用

    迅為RK3568驅(qū)動指南|如何在Linux中使用模擬SPI

    瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和MaliG522EE圖形處理器。RK3568支持4K解碼和1080P編碼,支持
    的頭像 發(fā)表于 08-01 13:37 ?2938次閱讀
    迅為<b class='flag-5'>RK3568</b>驅(qū)動指南|如何在Linux中使用模擬SPI

    RK3568核心板橋梁監(jiān)測設(shè)備接口應(yīng)用

    RK3568核心板橋梁監(jiān)測設(shè)備接口應(yīng)用-迅為電子
    的頭像 發(fā)表于 07-24 15:18 ?525次閱讀
    <b class='flag-5'>RK3568</b>核心板橋梁監(jiān)測設(shè)備接口應(yīng)用

    RK3568開發(fā)板支持AMP雙系統(tǒng)

    RK3568開發(fā)板支持AMP雙系統(tǒng)
    的頭像 發(fā)表于 06-04 15:33 ?1001次閱讀
    <b class='flag-5'>RK3568</b>開發(fā)板支持AMP雙系統(tǒng)

    深度對比!瑞芯微RK3562J比RK3568J好在哪里?

    作為瑞芯微的明星產(chǎn)品——RK3568J,憑借其出色的性能及豐富的外設(shè)接口成為國內(nèi)眾多工業(yè)客戶的最佳選擇。隨著RK3568J的大規(guī)模應(yīng)用,很多客戶開始針對RK3568J的價格偏高、功耗偏高等問題提出
    的頭像 發(fā)表于 04-29 08:07 ?1292次閱讀
    深度對比!瑞芯微<b class='flag-5'>RK</b>3562J比<b class='flag-5'>RK3568</b>J好在哪里?

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 国模私拍大尺度视频在线播放 | 日本黄色片www | 免费中国一级啪啪片 | 狠狠狠色丁香婷婷综合久久88 | 欧美3区| 日本不卡免费新一区二区三区 | 男人视频在线观看 | 波多野结衣在线网址 | 男人午夜免费视频 | 操www| 日韩免费视频一区 | 亚洲欧美综合一区二区三区四区 | 日本xxwwxxww视频免费丝袜 | 最新日韩中文字幕 | 欧美成人高清性色生活 | 午夜精品在线视频 | 欧美午夜电影 | 在线永久免费观看黄网站 | 国产精品成人va在线观看入口 | 簧片免费视频 | 在线亚洲国产精品区 | 高清影院在线欧美人色 | 操狠狠 | 亚洲qingse| 午夜在线播放视频在线观看视频 | h视频在线免费看 | 欧美日韩一区二区三区视频在线观看 | 婷婷六月在线 | 久久综合欧美成人 | 午夜精品久久久久久久四虎 | 午夜视频你懂的 | 亚洲成人99 | 香蕉午夜视频 | 久久精品国产免费 | 五月综合色婷婷影院在线观看 | 成年人的毛片 | 99久久国产免费中文无字幕 | 欧美成人免费午夜全 | 日韩午夜免费 | www.久色| 亚洲一区二区三区不卡视频 |