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

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

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

關(guān)于Linux的GPIO中斷知識(shí)

CHANBAEK ? 來(lái)源:頭條號(hào)科G棧 ? 作者:頭條號(hào)科G棧 ? 2023-03-24 11:27 ? 次閱讀

嵌入式系統(tǒng)中,經(jīng)常會(huì)用到gpio外部中斷來(lái)獲取外部事件,比如按鍵、傳感器、網(wǎng)絡(luò)通信等等。一般中斷都會(huì)綁定一個(gè)中斷回調(diào)函數(shù),來(lái)執(zhí)行產(chǎn)生中斷后的一些任務(wù)。Linux的中斷是操作系統(tǒng)管理的資源,需要在內(nèi)核層配置中斷以及綁定回調(diào)函數(shù)。

內(nèi)核編程可以直接修改內(nèi)核源碼,也可以使用Linux提供的模塊編程方式。使用模塊很方便,編譯很快而且可以很方便的插入和移除。當(dāng)然插入和移除操作需要管理員權(quán)限,與模塊相關(guān)的命令有l(wèi)smod、insmod和rmmod。

詳細(xì)的模塊編程的方法網(wǎng)上和書(shū)上一大堆,很容易找到。

主要結(jié)構(gòu)

1、init函數(shù)

2、exit函數(shù)

3、module_init和module_exit

4、作者、版權(quán)聲明等。

注意:模塊的編譯需要用到源碼,就是安裝一個(gè)以headers結(jié)尾的東西。

poYBAGQdGJOAP9qqAAD0Ym67QpQ900.jpg

在/usr/src下會(huì)有對(duì)應(yīng)的目錄,使用uname -r看看版本是否一致,如果不一樣一般是當(dāng)前系統(tǒng)的要比較舊,可以使用apt-get upgrade升級(jí)系統(tǒng)。不同的版本編譯的模塊不能加載,會(huì)提示格式無(wú)法識(shí)別之類(lèi)的錯(cuò)誤。

pYYBAGQdGJSAdUBnAAF2kME8ls0819.jpg

另外,內(nèi)核編程用到的頭文件和應(yīng)用編程用到的頭文件也不是一個(gè)系統(tǒng)的,內(nèi)核編程用的是

/usr/src/linux-headers-xxx/include下的頭文件,而應(yīng)用編程用的是/usr/include/下的頭文件。

ok,回到gpio中斷。

在init函數(shù)里,使用gpio需要先請(qǐng)求一個(gè)并配置它的模式,使用gpio_request_one()函數(shù),三個(gè)參數(shù)分別是gpio號(hào)、模式和名稱(chēng)。

poYBAGQdGJWAfVv-AACp1VnnvMs411.jpg

使用函數(shù)enable_irq()使能中斷,參數(shù)是中斷號(hào),gpio對(duì)應(yīng)的中斷號(hào)可以使用gpio_to_irq()獲取。

pYYBAGQdGJaAH3iaAAB2ZmRG79I535.jpg

調(diào)用request_irq()配置中斷的回調(diào)函數(shù)、觸發(fā)方式、名稱(chēng)和傳入?yún)?shù)。

poYBAGQdGJeAcQCVAAETXnuL9Fc086.jpg

在exit函數(shù)中,對(duì)應(yīng)的我們需要釋放中斷和對(duì)應(yīng)的gpio。

pYYBAGQdGJiAD4tyAACGmt4nrYs482.jpg

編寫(xiě)中斷回調(diào)函數(shù)。中斷回調(diào)函數(shù)的格式定義如下:

pYYBAGQdGJmAWQIJAABX5SG6nkM389.jpg

Linux的中斷函數(shù)分為了兩個(gè)部分:頂半部和底半部。 頂半部是真正的回調(diào)函數(shù),執(zhí)行在中斷上下文中,一般是不能被打斷的,所以這里要盡可能短,只做非做不可的事。

poYBAGQdGJmAJ9VqAABgGMcbJzk901.jpg

底半部由頂半部觸發(fā),執(zhí)行中斷回調(diào)的其他不太緊急的事務(wù)。底半部的機(jī)制由軟中斷、tasklet、工作隊(duì)列等(不知道是否有其它新技術(shù)了)。底半部的程序會(huì)參與內(nèi)核的調(diào)度,可以被中斷。

pYYBAGQdGJqAK6XBAADaLTZC1Cw446.jpg

一些必要的頭文件:

poYBAGQdGJuAFtnIAABoIJoFLQo753.jpg

編譯模塊我看大家都用make,還好寫(xiě)個(gè)簡(jiǎn)單的Makefile也不復(fù)雜。小寫(xiě)的makefile有時(shí)候make不認(rèn)識(shí),不知道什么原因,如果遇到改成大寫(xiě)就好。

pYYBAGQdGJyAN5bwAAB--6K7yvI558.jpg

make然后插入模塊

poYBAGQdGJ6AYI5PAATRfq80Ci0435.jpg

查看模塊lsmod

pYYBAGQdGJ6AMRHqAAEDZnzp8mE054.jpg

使用dmesg查看log信息。如果init函數(shù)有printk打印可以看到信息。

poYBAGQdGJ-AfL8aAAOw2PNrkxE689.jpg

在/proc/interrupts中可以看到中斷比較詳細(xì)的信息,紅框就是我們的gpio中斷。

pYYBAGQdGKKAWyJpAALl5Dg6Ggo332.jpg

在/proc/stat中也有關(guān)于中斷的信息。intr(黃框)就是所有的中斷統(tǒng)計(jì)情況,最后四個(gè)(紅線)就是gpio中斷的次數(shù)。

poYBAGQdGKOAXwRNAAFBFjdAc4w110.jpg

在proc/irq/下有以中斷號(hào)命名的目錄,目錄下有跟中斷相關(guān)的文件。

poYBAGQdGKOANHv8AAFTjwi30bA297.jpg

關(guān)于Linux的gpio中斷目前就知道這么多了,歡迎大家補(bǔ)充交流。 限于個(gè)人水平,肯定會(huì)有遺漏和錯(cuò)誤的地方,還望大家海涵。 在另一篇關(guān)于字符設(shè)備的專(zhuān)欄里,我會(huì)講如何通過(guò)創(chuàng)建字符設(shè)備把內(nèi)核的數(shù)據(jù)(比如中斷處理的結(jié)果)傳給用戶空間,歡迎大家閱讀。

聲明:本文內(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)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    40

    文章

    3520

    瀏覽量

    128804
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207900
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    889

    瀏覽量

    41219
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4236

    瀏覽量

    61965
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1174

    瀏覽量

    51513
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32 GPIO的外部中斷設(shè)計(jì)

    在之前針對(duì)STM32的GPIO相關(guān)API函數(shù)及配置使用進(jìn)行了詳細(xì)的介紹,GPIO作為輸入引腳時(shí),調(diào)用相關(guān)讀信號(hào)引腳函數(shù)接口就可以在程序的循環(huán)中,輪詢的對(duì)輸入信號(hào)進(jìn)行讀取檢測(cè)操作,除了輪詢的方式訪問(wèn)
    發(fā)表于 04-14 10:51 ?1806次閱讀
    STM32 <b class='flag-5'>GPIO</b>的外部<b class='flag-5'>中斷</b>設(shè)計(jì)

    一文搞懂Linux pinctrl/gpio子系統(tǒng)

    注: 所有文章基于linux-3.13以上,本系列主要介紹 GPIO的一些基本知識(shí),驅(qū)動(dòng)操作GPIO的接口,應(yīng)用層通過(guò)sysfs操作GPIO
    發(fā)表于 06-09 09:52 ?2303次閱讀

    淺析linux gpio中斷

    最近用到gpio中斷,gpio中斷也是嵌入式系統(tǒng)用的比較多的。對(duì)于GPIO操作 linux 有一
    發(fā)表于 07-26 08:15

    如何配置嵌入式LinuxGPIO中斷

    做個(gè)STM32開(kāi)發(fā)的都知道,通過(guò)程序配置讓普通的GPIO口具有中斷功能。這樣對(duì)于設(shè)備檢測(cè)某些硬件的自動(dòng)設(shè)備要方便的多。那么在嵌入式的Linux是否具有這樣的功能呢?答案是肯定的,下面我們就來(lái)介紹一下
    發(fā)表于 11-04 07:18

    linux gpio中斷

    Linux是一套免費(fèi)使用和自由傳播的類(lèi)Unix操作系統(tǒng),是一個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。今天主要以linux gpio中斷源而做出的程
    發(fā)表于 11-17 15:50 ?5467次閱讀

    如何在嵌入式Linux中使用GPIO

    了解如何在嵌入式Linux中使用GPIO,特別強(qiáng)調(diào)Zynq-7000系列。 我們介紹了基本的用戶和內(nèi)核空間GPIO使用情況,以及GPIO,GPIO
    的頭像 發(fā)表于 11-26 07:02 ?3987次閱讀

    嵌入式Linux下使用GPIO中斷功能

    GPIO應(yīng)用是嵌入式設(shè)備最基本的應(yīng)用之一, 本文就基于Embedded Linux系統(tǒng)演示開(kāi)發(fā)GPIO中斷以及輸出相關(guān)的基本應(yīng)用示例.
    發(fā)表于 04-29 15:48 ?2480次閱讀
    嵌入式<b class='flag-5'>Linux</b>下使用<b class='flag-5'>GPIO</b><b class='flag-5'>中斷</b>功能

    LINUX GPIO如何驅(qū)動(dòng)源碼移植

    GPIO是嵌入式系統(tǒng)最簡(jiǎn)單、最常用的資源了,比如點(diǎn)亮LED,控制蜂鳴器,輸出高低電平,檢測(cè)按鍵,等等。GPIO分輸入和輸出,在Montavista linux-2.6.18中,有關(guān)GPIO
    發(fā)表于 06-26 17:43 ?4次下載
    <b class='flag-5'>LINUX</b> <b class='flag-5'>GPIO</b>如何驅(qū)動(dòng)源碼移植

    關(guān)于MPSoC的中斷處理介紹

    Intc外設(shè)的Device Tree 4. 擴(kuò)展MIO中斷 4.1. GPIO中斷控制器 4.2. 外設(shè)使用GPIO中斷控制器5. 檢查
    的頭像 發(fā)表于 05-07 15:34 ?3904次閱讀

    嵌入式Linux中斷驅(qū)動(dòng)

    用過(guò)STM32的大概都知道,基本每個(gè)GPIO管腳都支持中斷模式,這樣在檢測(cè)外部插入一個(gè)硬件設(shè)備時(shí),通過(guò)GPIO管腳電平中斷就非常方便。那么AM3354的片子是否支持
    發(fā)表于 11-01 16:57 ?4次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>中斷</b>驅(qū)動(dòng)

    嵌入式LinuxGPIO中斷

    做個(gè)STM32開(kāi)發(fā)的都知道,通過(guò)程序配置讓普通的GPIO口具有中斷功能。這樣對(duì)于設(shè)備檢測(cè)某些硬件的自動(dòng)設(shè)備要方便的多。那么在嵌入式的Linux是否具有這樣的功能呢?答案是肯定的,下面我們就來(lái)介紹一下
    發(fā)表于 11-01 17:37 ?6次下載
    嵌入式<b class='flag-5'>Linux</b>的<b class='flag-5'>GPIO</b><b class='flag-5'>中斷</b>

    深度剖析GPIO中斷

    本文介紹 GPIO 中斷,包括中斷示例及其各種功能。這是上一篇文章的延續(xù),該文章解釋了微控制器的并發(fā)和中斷的概念。
    的頭像 發(fā)表于 04-27 16:11 ?9020次閱讀
    深度剖析<b class='flag-5'>GPIO</b><b class='flag-5'>中斷</b>

    關(guān)于GPIO外設(shè)訪問(wèn)及中斷設(shè)計(jì)

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1170雙核下不同GPIO組的訪問(wèn)以及中斷設(shè)計(jì)。
    的頭像 發(fā)表于 09-05 10:00 ?1023次閱讀

    如何配置GPIO中斷功能呢?

    如何配置GPIO中斷功能呢? GPIO在嵌入式系統(tǒng)中經(jīng)常用于控制外設(shè),如LED、攝像頭、傳感器等。除此之外,GPIO還可以被配置為中斷功能
    的頭像 發(fā)表于 10-30 09:57 ?3306次閱讀

    RK3568外部IO中斷示例

    ?外部IO中斷介紹本篇文章以萬(wàn)象奧科HD-RK3568-IOT評(píng)估板中GPIO30為例,介紹Linux內(nèi)核中斷的注冊(cè)方法,使用中斷的方式檢測(cè)
    的頭像 發(fā)表于 11-03 13:56 ?781次閱讀
    RK3568外部IO<b class='flag-5'>中斷</b>示例