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;
}
中断处理下一篇
相关文章:
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…...
IDEA 出现问题:Idea-操作多次commit,如何合并为一个并push解决方案
❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…...
贝蒂的捣蛋小游戏~(C语言)
引言: 前面贝蒂已经给大家介绍了选择,循环结构~,今天贝蒂就基于这两种结构,为大家讲解一种捣蛋小游戏的设计思路和方法哦。 1.游戏要求 游戏要求: 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字,猜数字的过…...
c# 判断是否连接公网
有一个需求,软件需要在连接公网的状态下才能使用,否则弹出提示 我们判断一下网络不通情况 1.系统未开启网络:例如关掉了WIFI,拔掉网线 2.网络已连接无internet:连接了路由器,但路由器未连接外网 对于以上…...
unity 2d 入门 飞翔小鸟 场景延续(八)
1、新建c#脚本如下 代码,在前方生成生成自身图片并3s后销毁自身,在碰撞物体后小鸟死亡后不删除自身 using System.Collections; using System.Collections.Generic; using UnityEngine;public class CopyScene : MonoBehaviour { //要复制的对象public…...
scrapy介绍,并创建第一个项目
一、scrapy简介 scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted异步网络框架,可以加快我们的下载速度。 Scrapy文档地址:http://scrapy-chs.readthedocs.io/z…...
Rust语言项目实战(九 - 完结) - 胜利与失败
回顾 在前面的章节中,我们已经实现了这个游戏中大部分的模块和功能,我们可以指挥我们的战机左右移动,并发射子弹;我们还创造了一堆的侵略者,从屏幕上方缓缓降落,试图到达屏幕的底部。 本章中,我们将对游戏的输赢作出最后的裁决,到底是我们的保卫者英勇无敌,还是侵略…...
【Linux系统编程】项目自动化构建工具make/Makefile
介绍: make和Makefile是用于编译和构建C/C程序的工具和文件。Makefile是一个文本文件,其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件,里面保存的是依赖关系和依赖方法。make是一个命令行工具&a…...
harmony开发之Text组件的使用
TextInput、TextArea是输入框组件,通常用于响应用户的输入操作,比如评论区的输入、聊天框的输入、表格的输入等,也可以结合其它组件构建功能页面,例如登录注册页面。 图片来源黑马程序员 Text组件的使用: 文本显示组…...
using meta-SQL 使用元SQL 六
%Table Syntax %Table(recname) Description Use the %Table construct to return the SQL table name for the record specified with recname. 使用%Table构造返回使用recname指定的记录的SQL表名。 This construct can be used to specify temporary tables for runn…...
如何将浮点数点左边的数每三位添加一个逗号,如 12000000.11 转化为『12,000,000.11』
// 方法二 function format1(number) {return Intl.NumberFormat().format(number); } // 方法三 function format2(number) {return number.toLocaleString("en"); }...
朴素贝叶斯 贝叶斯方法
朴素贝叶斯 贝叶斯方法 背景知识 贝叶斯分类:贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。先验概率:根据以往经验和分析得到的概率。我们用 P ( Y ) P(Y) P(Y)来代表在没有训练数据前假设…...
探索鸿蒙 TextInput组件
TextInput 根据组件名字,可以得知他是一个文本输出框。 声明代码👇 TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本,跟网页开发中的placeholder一样的 text:输入框当前的文本内容 特殊属…...
CNN,DNN,RNN,GAN,RL+图像处理常规算法(未完待续)
好的,让我们先介绍一些常见的神经网络模型,然后再讨论图像处理的常规算法。 神经网络模型: 1. CNN(卷积神经网络) 原理: CNN主要用于处理图像数据。它包含卷积层、池化层和全连接层。卷积层通过卷积操作…...
C# 语法笔记
1.ref、out:参数传递的两种方式 ref:引用传递 using System; namespace CalculatorApplication {class NumberManipulator{public void swap(ref int x, ref int y){int temp;temp x; /* 保存 x 的值 */x y; /* 把 y 赋值给 x */y temp; /* 把 t…...
el-table 表格多选(后端接口搜索分页)实现已选中的记忆功能。实现表格数据和已选数据(前端分页)动态同步更新。
实现效果:(可拉代码下来看:vue-demo: vueDemo) 左侧表格为点击查询调用接口查询出来的数据,右侧表格为左侧表格所有选择的数据,由前端实现分页。 两个el-table勾选数据联动更新 实现逻辑: el-…...
Vue3自定义Hooks定义
在Vue3中,自定义Hooks的定义是通过创建一个函数来共享逻辑或状态,以便在多个组件之间重复使用。Vue3中的自定义Hooks与React中的自定义Hooks非常相似,但有一些细微的差别。 要定义一个自定义Hook,可以按照以下步骤进行操作&#x…...
为什么Java程序员需要掌握多线程?揭秘并发编程的奥秘
为什么Java程序员需要掌握多线程?揭秘并发编程的奥秘 个人简介前言多线程对于Java的意义📌1.提高程序性能:📌2 提高用户体验:📌3支持并发处理:📌4 资源共享和同步:&#…...
数组实现循环队列(新增一个空间)
目录 一、前言 1.如何实现循环? 2.如何判断队列为空? 3.如何判断队列为满? 二、循环队列的结构定义 三、循环队列的创建及其初始化 四、入队 五、出队 六、取队头元素 七、取队尾元素 八、判空 九、判满 十、销毁队列 一、前言 …...
Mysql 索引概念回顾
一、什么是索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...


