一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

CHANBAEK ? 來源:頭條號科G棧 ? 作者:頭條號科G棧 ? 2023-03-24 11:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

1、init函數(shù)

2、exit函數(shù)

3、module_init和module_exit

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

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

poYBAGQdGJOAP9qqAAD0Ym67QpQ900.jpg

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

pYYBAGQdGJSAdUBnAAF2kME8ls0819.jpg

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

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

ok,回到gpio中斷。

在init函數(shù)里,使用gpio需要先請求一個并配置它的模式,使用gpio_request_one()函數(shù),三個參數(shù)分別是gpio號、模式和名稱。

poYBAGQdGJWAfVv-AACp1VnnvMs411.jpg

使用函數(shù)enable_irq()使能中斷,參數(shù)是中斷號,gpio對應的中斷號可以使用gpio_to_irq()獲取。

pYYBAGQdGJaAH3iaAAB2ZmRG79I535.jpg

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

poYBAGQdGJeAcQCVAAETXnuL9Fc086.jpg

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

pYYBAGQdGJiAD4tyAACGmt4nrYs482.jpg

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

pYYBAGQdGJmAWQIJAABX5SG6nkM389.jpg

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

poYBAGQdGJmAJ9VqAABgGMcbJzk901.jpg

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

pYYBAGQdGJqAK6XBAADaLTZC1Cw446.jpg

一些必要的頭文件:

poYBAGQdGJuAFtnIAABoIJoFLQo753.jpg

編譯模塊我看大家都用make,還好寫個簡單的Makefile也不復雜。小寫的makefile有時候make不認識,不知道什么原因,如果遇到改成大寫就好。

pYYBAGQdGJyAN5bwAAB--6K7yvI558.jpg

make然后插入模塊

poYBAGQdGJ6AYI5PAATRfq80Ci0435.jpg

查看模塊lsmod

pYYBAGQdGJ6AMRHqAAEDZnzp8mE054.jpg

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

poYBAGQdGJ-AfL8aAAOw2PNrkxE689.jpg

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

pYYBAGQdGKKAWyJpAALl5Dg6Ggo332.jpg

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

poYBAGQdGKOAXwRNAAFBFjdAc4w110.jpg

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

poYBAGQdGKOANHv8AAFTjwi30bA297.jpg

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

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

    關(guān)注

    41

    文章

    3683

    瀏覽量

    131383
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

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

    關(guān)注

    5

    文章

    905

    瀏覽量

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

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64861
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1280

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

    淺析linux gpio中斷

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

    如何配置嵌入式LinuxGPIO中斷

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

    linux gpio中斷

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

    如何在嵌入式Linux中使用GPIO

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

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

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

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

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

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

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

    嵌入式LinuxGPIO中斷

    做個STM32開發(fā)的都知道,通過程序配置讓普通的GPIO口具有中斷功能。這樣對于設(shè)備檢測某些硬件的自動設(shè)備要方便的多。那么在嵌入式的Linux是否具有這樣的功能呢?答案是肯定的,下面我們就來介紹一下
    發(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 ?1w次閱讀
    深度剖析<b class='flag-5'>GPIO</b><b class='flag-5'>中斷</b>

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

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

    如何配置GPIO中斷功能呢?

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

    RK3568外部IO中斷示例

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

    stm32 GPIO中斷配置教程

    在嵌入式開發(fā)中,STM32微控制器因其高性能和豐富的外設(shè)而廣受歡迎。GPIO(通用輸入/輸出)中斷是STM32微控制器中常用的功能之一,它允許開發(fā)者在特定引腳上檢測到外部信號變化時快速響應。 1.
    的頭像 發(fā)表于 11-19 15:53 ?3454次閱讀