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 索引概念回顾
一、什么是索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...