精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

關于Linux的GPIO中斷知識

CHANBAEK ? 來源:頭條號科G棧 ? 作者:頭條號科G棧 ? 2023-03-24 11:27 ? 次閱讀

嵌入式系統中,經常會用到gpio外部中斷來獲取外部事件,比如按鍵、傳感器、網絡通信等等。一般中斷都會綁定一個中斷回調函數,來執行產生中斷后的一些任務。Linux的中斷是操作系統管理的資源,需要在內核層配置中斷以及綁定回調函數。

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

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

主要結構

1、init函數

2、exit函數

3、module_init和module_exit

4、作者、版權聲明等。

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

poYBAGQdGJOAP9qqAAD0Ym67QpQ900.jpg

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

pYYBAGQdGJSAdUBnAAF2kME8ls0819.jpg

另外,內核編程用到的頭文件和應用編程用到的頭文件也不是一個系統的,內核編程用的是

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

ok,回到gpio中斷。

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

poYBAGQdGJWAfVv-AACp1VnnvMs411.jpg

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

pYYBAGQdGJaAH3iaAAB2ZmRG79I535.jpg

調用request_irq()配置中斷的回調函數、觸發方式、名稱和傳入參數。

poYBAGQdGJeAcQCVAAETXnuL9Fc086.jpg

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

pYYBAGQdGJiAD4tyAACGmt4nrYs482.jpg

編寫中斷回調函數。中斷回調函數的格式定義如下:

pYYBAGQdGJmAWQIJAABX5SG6nkM389.jpg

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

poYBAGQdGJmAJ9VqAABgGMcbJzk901.jpg

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

pYYBAGQdGJqAK6XBAADaLTZC1Cw446.jpg

一些必要的頭文件:

poYBAGQdGJuAFtnIAABoIJoFLQo753.jpg

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

pYYBAGQdGJyAN5bwAAB--6K7yvI558.jpg

make然后插入模塊

poYBAGQdGJ6AYI5PAATRfq80Ci0435.jpg

查看模塊lsmod

pYYBAGQdGJ6AMRHqAAEDZnzp8mE054.jpg

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

poYBAGQdGJ-AfL8aAAOw2PNrkxE689.jpg

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

pYYBAGQdGKKAWyJpAALl5Dg6Ggo332.jpg

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

poYBAGQdGKOAXwRNAAFBFjdAc4w110.jpg

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

poYBAGQdGKOANHv8AAFTjwi30bA297.jpg

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

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

    關注

    41

    文章

    3570

    瀏覽量

    129253
  • Linux
    +關注

    關注

    87

    文章

    11232

    瀏覽量

    208957
  • 中斷
    +關注

    關注

    5

    文章

    895

    瀏覽量

    41401
  • 函數
    +關注

    關注

    3

    文章

    4308

    瀏覽量

    62445
  • GPIO
    +關注

    關注

    16

    文章

    1196

    瀏覽量

    51934
收藏 人收藏

    評論

    相關推薦

    STM32 GPIO的外部中斷設計

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

    一文搞懂Linux pinctrl/gpio子系統

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

    淺析linux gpio中斷

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

    如何配置嵌入式LinuxGPIO中斷

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

    linux gpio中斷

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

    如何在嵌入式Linux中使用GPIO

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

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

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

    關于MPSoC的中斷處理介紹

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

    嵌入式Linux中斷驅動

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

    嵌入式LinuxGPIO中斷

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

    深度剖析GPIO中斷

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

    關于GPIO外設訪問及中斷設計

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

    如何配置GPIO中斷功能呢?

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

    RK3568外部IO中斷示例

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

    stm32 GPIO中斷配置教程

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