lv11 嵌入式開發 中斷控制器14

目錄

1 中斷控制器

?編輯

2 Exynos4412下的中斷控制器

2.1 概述

2.2 特征

?編輯

2.3 中斷狀態

2.4 中斷類型

2.5 中斷控制器GIC中斷表

3 中斷控制器寄存器詳解

3.1 ICDDCR(Interrupt Controller Distributor Control Register)

3.2?ICDISER_CPU(Interrupt Controller Distributor Set-Enable Register for CPU)

3.3 ICDIPTR_CPU(Interrupt Controller Distributor Interrupt Processor Targets Register for CPU)

3.4 ICCICR_CPUn(Interrupt Controller CPU Interface Control Register for CPU n)

3.5 補充:中斷控制器優先級設置寄存器

4?GPIO中斷編程?

4.1 外設層次設置

4.2 中斷控制器層次設置

4.3 程序代碼


1 中斷控制器

cpu本身是沒辦法區分中斷來自哪個外設,無法應對同時產生的中斷等等許多問題。

三星公司設計了中斷控制器來解決問題

?中斷控制器作用

  • 多個中斷同時產生時可對這些中斷掛起排隊,然后按照優先級依次發送給CPU處理 ?
  • 可以為每一個中斷分配一個優先級 ?
  • 一個中斷正在處理時若又產生其它中斷,可將新的中斷掛起,待CPU空閑時再發送 ?
  • 可以為每一個中斷選擇一個CPU處理 ?
  • 可以為每一個中斷選擇一個中斷類型(FIQ或IRQ) ?
  • CPU接收到中斷信號后并不能區分是哪個外設產生的,此時CPU可查詢中斷控制器來獲取當前的中斷信號是由哪個硬件產生的,然后再進行對應的處理 ?
  • 可以打開或禁止每一個中斷 ?... ...

2 Exynos4412下的中斷控制器

中斷控制器內容較多,只進行簡單分析,實際開發很少去配置中斷控制器,因為crotex-A系列處理,一般開發的時候會安裝大型操作系統,操作系統內部會把中斷控制器相關代碼會實現好。包括中斷控制器寄存器的配置等,我們只需要使用中斷函數即可。

2.1 概述

2.2 特征

  • 支持三種中斷類型:
    • 軟件生成中斷(SGI)(與之前SWI軟中斷指令不是一回事,注意區分)
    • 私有外圍中斷(PPI)(只能發送給某一個特定的CPU)
    • 共享外圍中斷(SPI)(這類中斷可以發送給任意一個CPU,使用最多)
  • 可編程中斷,使您能夠設置:
    • 中斷的安全狀態。(安全狀態可以觸發FIQ和IRQ,非安全中斷只能觸發IRQ)
    • 中斷的優先級級別。
    • 中斷的啟用或禁用。
    • 接收中斷的處理器。

2.3 中斷狀態

2.4 中斷類型

2.5 中斷控制器GIC中斷表

劃分了0~159個中斷號,其中

0~15 SGI 代表了軟中斷,

16~31 PPI只能發送給一個特定的CPU

32~159 SPI 共享中斷

串口 ID 84~87

WDT ID 75

外部中斷,如ID57 代表EINT[9],實驗中使用較多

3 中斷控制器寄存器詳解

寄存器內容從9.5開始介紹

3.1 ICDDCR(Interrupt Controller Distributor Control Register)

中斷控制器分發器控制寄存器(總開關)

全局使能用于監視外設中斷信號并將掛起中斷轉發給CPU接口。

0 = GIC忽略所有外設中斷信號,不將掛起中斷轉發給CPU接口。

1 = GIC監視外設中斷信號,并將掛起中斷轉發給CPU接口。

3.2?ICDISER_CPU(Interrupt Controller Distributor Set-Enable Register for CPU)

CPU的中斷控制器分發器設置使能寄存器(小開關)

這個寄存器用于設置每個CPU對應的中斷使能位。通過設置該寄存器的特定位,可以啟用或禁用特定中斷信號的傳遞給相應的CPU核心。具體的寄存器位定義和功能取決于使用的中斷控制器的架構和規范。

?

[31:0] 只有32位,我們總共需要管理160位,所有使用了多個寄存器地址。每個中斷ID對應寄存器參考下表:

3.3 ICDIPTR_CPU(Interrupt Controller Distributor Interrupt Processor Targets Register for CPU)

即用于CPU的中斷控制器分發器中斷處理器目標寄存器。(選擇CPU)

例如,值為0x3(00000011)表示待處理的中斷將被發送到處理器0和1。對于三星CPU來說高4位無效。

中斷信號需要1280位去管理,160*8bit = 1280bit,一個寄存器只能管理32bit,需要40個寄存器。

對應關系:

例:管理6號中斷,由CPU2來出來

那么寄存器如下圖設置。

3.4 ICCICR_CPUn(Interrupt Controller CPU Interface Control Register for CPU n)

控制指定CPU核心的中斷控制器CPU接口的行為,包括使能和禁用中斷處理、配置FIQ和IRQ中斷的優先級等功能。(中斷控制器到CPU之間的開關)

3.5 補充:中斷控制器優先級設置寄存器

4?GPIO中斷編程?

要求:KEY3按下時產生中斷,來點亮LED

4.1 外設層次設置

讓外部的硬件控制器產生一個中斷信號發送給中斷控制器

GPIO下降沿產生中斷,對應核心板GPX1_1

?GPX與中斷寄存器對應關系

?

?中斷控制寄存器

使能中斷?

?這個寄存器一般不需要我們寫,中斷發送即會置1 ,用于判斷中斷發生

4.2 中斷控制器層次設置

讓中斷控制器接收外設產生的中斷信號并對其進行管理然后再轉發給CPU處理

ICDDCR置1,打開全局中斷,使其能接收外設產生的中斷信號并轉發到CPU接口

ICDISER_CPU,25位置1,使能57號中斷,使中斷控制器接收到57號中斷后能將其轉發到CPU接口

ICDIPTR14,000000001,選擇CPU0來處理57號中斷

ICCICR,使能中斷控制器和CPU0之間的接口,使中斷控制器轉發的中斷信號能夠到達CPU0
?

4.3 程序代碼

#include "exynos_4412.h"int main()
{/*外設層次 - 讓外部的硬件控制器產生一個中斷信號發送給中斷控制器*//*將GPX1_1設置成中斷功能*/GPX1.CON = GPX1.CON | (0xF << 4);/*設置GPX1_1的中斷觸發方式為下降沿觸發*/EXT_INT41_CON = EXT_INT41_CON & (~(0x7 << 4)) | (0x2 << 4);/*使能GPX1_1的中斷功能*/EXT_INT41_MASK = EXT_INT41_MASK & (~(1 << 1));/*中斷控制器層次 - 讓中斷控制器接收外設產生的中斷信號并對其進行管理然后再轉發給CPU處理*//*全局使能中斷控制器使其能接收外設產生的中斷信號并轉發到CPU接口*/ICDDCR = ICDDCR | 1;/*在中斷控制器中使能57號中斷,使中斷控制器接收到57號中斷后能將其轉發到CPU接口*/ICDISER.ICDISER1 = ICDISER.ICDISER1 | (1 << 25);/*選擇由CPU0來處理57號中斷*/ICDIPTR.ICDIPTR14 = ICDIPTR.ICDIPTR14 & (~(0xFF << 8)) | (0X01 << 8);/*使能中斷控制器和CPU0之間的接口,使中斷控制器轉發的中斷信號能夠到達CPU0*/CPU0.ICCICR = CPU0.ICCICR | 1;GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);while(1){   /*點亮LED2*/GPX2.DAT = GPX2.DAT | (1 << 7); /*延時*/Delay(1000000);/*熄滅LED2*/GPX2.DAT = GPX2.DAT & (~(1 << 7));/*延時*/Delay(1000000);}   return 0;
}

中斷處理下一篇

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207434.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

當你還在糾結用什么技術時,這位獨立開發者用PHP和JavaScript實現財務自由了

大家好&#xff0c;我是風箏&#xff0c;微信搜「古時的風箏」&#xff0c;更多干貨 一個個人產品賣了5400萬&#xff0c;這大概就是最成功的獨立開發者了吧 這位獨立開發者是 levelsio&#xff0c;他的真名是 Pieter Levels&#xff0c;是一位荷蘭的獨立開發者。看看人家的工…

WPF DataGrid 動態增加列

方式一&#xff1a;通過DataGrid 數據源即DataTable&#xff0c;在DataTable里面動態增加了列之后&#xff0c;重新構造每一行數據&#xff0c;設置DataGrid.ItemsSource null; 然后再重新設置ItemsSource到DataTable public partial class MainWindow : Window{public MainWi…

【Java基礎系列】Cron表達式入門

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

優秀案例 | 元宇宙雙語財經科技主播“舒望”主持首屆粵港澳大灣區元宇宙國際傳播論壇

12月6日&#xff0c;由南方財經全媒體集團指導、大灣區元宇宙國際傳播實驗室(GBA MIC Lab&#xff09;主辦、南財國際傳播中心和21世紀經濟報道共同承辦&#xff0c;以“多元共創開放共享”為主題的首屆粵港澳大灣區元宇宙國際傳播論壇在廣州隆重開幕。 “立足灣區&#xff0c;…

Kubernetes - 為什么 K8S 在容器里不能調用自己?

問題描述 最近遇到一個神奇的現象&#xff0c;在 K8S 的 POD 容器中&#xff0c;比如 pod name&#xff1a;mini-appnamespace&#xff1a;devport&#xff1a;5050 那么&#xff0c;是無法在 mini-app 容器里執行以下命令&#xff0c;如果執行&#xff0c;會一直卡在這條命…

一文詳解Java單元測試Junit

文章目錄 概述、Junit框架快速入門單元測試概述main方法測試的問題junit單元測試框架優點&#xff1a;使用步驟&#xff1a; 使用案例包結構 Junit框架的常見注解測試 概述、Junit框架快速入門 單元測試概述 就是針對最小的功能單元&#xff08;方法&#xff09;&#xff0c;…

ROS rosbag

在ROS中的rosbag是一個命令行工具&#xff0c;主要用于記錄、回放和分析rostopic中的數據。它可以將指定rostopic中的數據記錄到.bag后綴的數據包中&#xff0c;以便于進行離線分析和處理。 在ROS系統中&#xff0c;rosbag可以通過命令行工具或ROS節點來使用。 通過rosbag命令…

數字圖像處理(實踐篇)十九 漫水填充

目錄 一 漫水填充算法--FloodFill 二 涉及的函數 三 實踐 一 漫水填充算法--FloodFill FloodFill漫水填充算法就是選中與種子點相連接的區域&#xff0c;利用指定顏色進行區域顏色填充。可以通過設置連通方式或像素的范圍控制填充的效果。通常是用來標記或者分離圖像的一部…

進程地址空間

引入地址空間 靜態變量和棧空間變量 靜態變量默認是被初始化的 存放在初始化和為初始化空間中 static已經變成了全局變量 命令行參數和環境變量的增長方向 這里觀察的是命令行參數和環境變量的地址 觀察命令行和環境變量表的地址 進程地址空間 如果他們是同一塊兒空間&am…

Ubuntu22.04 交叉編譯fdk-aac for Rv1106

一、下載fdk-aac git clone https://github.com/mstorsjo/fdk-aac.git 二、編譯 mkdir build cd buildcmake -DCMAKE_CXX_COMPILER/opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g -DCMAKE_C_COMPILER/opt/arm-rockchip830-linux-…

軟件測試——集成測試

集成測試是在單元測試之后&#xff0c;將各個獨立單元&#xff08;通常是已經通過單元測試的模塊或組件&#xff09;組合在一起&#xff0c;測試它們在一起協同工作的過程。以下是進行集成測試的一般步驟和最佳實踐&#xff1a; 1. 明確定義集成測試的目標 確定集成測試的目標…

麒麟v10 數據盤初始化 gpt分區

麒麟v10 數據盤初始化 gpt分區 1、查看磁盤 lsblk2 、分區 parted2.1、 設置磁盤分區形式2.2、 設置磁盤的計量單位為磁柱2.3、 分區2.4、 查看分區 3、分區格式化4、 掛載磁盤4.1、新建掛載目錄4.2、掛載磁盤4.3、查看掛載結果 5、設置開機自動掛載磁盤分區5.1、 查詢磁盤分區…

ClamAV開源病毒庫使用例子

ClamAV是一個開源的反病毒引擎&#xff0c;用于檢測惡意軟件和病毒。ClamAV提供了一個名為cl_scanfile的函數&#xff0c;用于掃描單個文件是否包含病毒。以下是一個使用cl_scanfile函數的示例代碼&#xff1a; 首先&#xff0c;確保已經安裝了ClamAV庫。在Debian/Ubuntu系統中…

用AI來糾正錯別字和修飾文字

▲ 搜索“大龍談智能內容”關注GongZongHao▲ 在使用谷歌翻譯或百度翻譯將英語翻譯成中文時&#xff0c;有些句子讀起來不太流暢。我嘗試使用AI來幫助我修改翻譯后的中文&#xff0c;希望能讓句子更符合中文習慣。 使用百度文心一言嘗試一下。 文心一言的鏈接是這個&#x…

VUE3給table的head添加popover篩選、時間去除時分秒、字符串替換某字符

1. VUE3給table的head添加popover篩選 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

RHEL/CentOS的firewalld防火墻服務配置

從 RHEL/CentOS 7開始&#xff0c;使用新的防火墻服務——firewalld。這里介紹該防火墻服務的基本用法 一、防火墻服務管理&#xff1a;從 RHEL/CentOS 7開始采用Systemd作為新的系統管理器&#xff0c;而systemctl則是Systemd中用于管理服務的命令 # 啟動防火墻服務 systemct…

谷歌Gemini剛發就惹質疑:測試標準有失偏頗,效果視頻疑似剪輯

夢晨 克雷西 發自 凹非寺 量子位 | 公眾號 QbitAI 谷歌憋了許久的大招&#xff0c;雙子座Gemini大模型終于發布&#xff01;其中一圖一視頻最引人注目&#xff1a; 一圖&#xff0c;MMLU多任務語言理解數據集測試&#xff0c;Gemini Ultra不光超越GPT-4&#xff0c;甚至超越了…

OpenGL學習資料

1.學習網站 Song Ho Ahn LearnOpenGL GAMES101:現代計算機圖形學入門 OpenGL 官網 2.書籍 Fundamentals of computer graphics OpenGL ES 3.0編程指南 計算機圖形學(OpenGL版)第3版 3.參考的一些文章 顏色緩沖區 深度緩沖 VBO&#xff0c;VAO和EBO詳解 深入探索透視投影變…

實戰干貨!基于ERNIE Bot SDK的數字詩人聊天開發教程

隨著人工智能技術的不斷迭代發展&#xff0c;數字人的開發與應用需求也與日俱增&#xff0c;并且隨著大語言模型的發展&#xff0c;數字人也更智能&#xff0c;從最初的語音預制到現在的實時交流&#xff0c;目前已在很多場景都有廣泛應用。 虛擬客服&#xff1a;數字人可以通…

Mysql自動備份腳本(本地備份、遠程備份、刪除冗余備份)

Mysql自動備份腳本&#xff08;本地備份、遠程備份、刪除冗余備份&#xff09; 1. 腳本功能 自動備份mysql數據到服務器上&#xff0c;可以通過linux的 crontab定義備份周期。 自動刪除七天前的備份數據。 2. 腳本內容 #!/bin/bash # auth Eric source /etc/profile # 設…