Exynos_4412——中断控制器

news2024/12/26 3:12:51

目录

一、中断控制器

中断控制器的作用:

二、Exynos_4412下的中断控制器

它支持三种类型的中断

可以编程设置:

三、中断控制器详解

四、中断控制器编程


一、中断控制器

外设产生的中断信号,先要经过中断控制器,中断是异常的一种,如果没有中断控制器,多个外设一起产生中断我们该执行哪一个?在中断处理程序中又收到了中断应该打断吗?

在处理IRQ的时候,会将CPSR写入IRQ_SPSR,然后将CPU切换为IRQ模式,把状态改成ARM状态,把I位写成1禁止全部的IRQ,所以中断这样是我们不想要的。4412是一个四核的CPU,在发送中断前要确定发送给哪个CPU。任何一个外部设备都能触发FIQ和IRQ,只是FIQ速度快一些。还有很多问题,为了解决这些问题,三星公司在设计时就加了一个中断控制器

中断优先级只是决定排队的先后,但是高优先级的不能打断低优先级的中断。

中断控制器的作用:

多个中断同时产生时可对这些中断挂起排队,然后按照优先级依次发送给CPU处理
可以为每一个中断分配一个优先级
一个中断正在处理时若又产生其它中断,可将新的中断挂起,待CPU空闲时再发送
可以为每一个中断选择一个CPU处理
可以为每一个中断选择一个中断类型(FIQ或IRQ)
CPU接收到中断信号后并不能区分是哪个外设产生的,此时CPU可查询中断控制器 来获取当前的中断信号是由哪个硬件产生的,然后再进行对应的处理
可以打开或禁止每一个中断
... ...

二、Exynos_4412下的中断控制器

它支持三种类型的中断

SGI:软中断,不是ARM架构里的那个SWI,这个是多核处理器之间用的比较多,一般操作系统内核中会使用。

PPI:私有外设中断

SPI:共享外设中断可以发送给任何一个CPU去执行。

可以编程设置:

安全模式和非安全模式:安全状态可以触发FIQ和IRQ,非安全状态只可以触发IRQ,咱们一般只使用IRQ

配置中断优先级:

打开或者关闭一些中断:

接收中断的处理器:

 中断状态说明:可以选择这几种状态

一共有160个中断信号

中断控制器(GIC)有0-159个中断信号ID,只是起到标识作用没有其它作用

128个SPI   16个PPI     16个SGI

我们这次使用的GPIO中断是EINT[9],也就是外部中断9

 

三、中断控制器详解

真正做开发时这些中断控制器的配置其实是不需要自己写的,ARM-cortex-A9系列的控制器一般都要跑个Linux或者Android操作系统,而这些东西操作系统都为我们写好了,直接调就行。但现在是裸机开发,所以把相关的寄存器找到配置一次

写0忽略全部的外部中断信号,并且不将挂起的中断转发到CPU的接口

写1 监控所有的外部中断,并将挂起的中断转发到CPU的接口

相当于GIC(中断控制器)的总开关。

5个32位的寄存器控制这160个中断 

 下面这个寄存器用来为每一个中断选择处理他的CPU

 4412是一个四核的CPU所以高四位是没有用的。

 

一共需要40个寄存器来管理这160个中断归属于哪一个CPU处理

 正常上电只能使用CPU0,想使用其它的CPU要设置很多CPU相关的寄存器。

上面是中断控制器和CPU之间的接口,他就像一个开关用哪个就要打开哪个

不设置FIQ和IRQ默认是给IRQ所以我们就不设置了,因为本来就是要做IRQ的实验

然后因为只有一个中断所以也不需要设置中断优先级。

所以我们一共需要设置4个寄存器就可以了

ICDDCR:中断总开关

ICDISER:每个中断的小开关,我们要打开57号中断的开关

ICDIPTR:确定我们的57号中断发送给哪个CPU处理,暂时只能是CPU0

ICCICR:中断控制器和CPU之间的接口

四、中断控制器编程

#include "exynos_4412.h"

int main()
{
    GPX1.CON = GPX1.CON | (0xF << 4);
    EXT_INT41_CON = EXT_INT41_CON & (~(0x7 << 4)) | (0x2 << 4);
    EXT_INT41_MASK = EXT_INT41_MASK & (~(1 << 1));
    
    ICDDCR = ICDDCR | 1;
    ICDISER.ICDISER1 = ICDISER.ICDISER1 | (1 << 25);
    ICDIPTR.ICDIPTR14 = ICDIPTR.ICDIPTR14 & (~(0xFF << 8)) | (0x01 << 8);
    CPU0.ICCICR = CPU0.ICCICR | 1;


	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何解决软件项目管理中的冲突?

1、项目干系人间的良好沟通 项目干系人之间保持良好的沟通交流&#xff0c;是减少项目管理中冲突的重要手段。甲乙双方签订合同后&#xff0c;为保障项目的成功&#xff0c;在项目发生矛盾和困难时&#xff0c;需要双方相互理解和沟通&#xff0c;共同协商解决问题。 为了及时解…

Git(八) - IDEA 集成 GitHub

一、设置 GitHub 账号 二、分享工程到 GitHub 来到GitHub中发现已经帮我们创建好了git-test的远程仓库。 三、push 推送本地库到远程库 注意&#xff1a;push是将本地库代码推送到远程库&#xff0c;如果本地库代码跟远程库代码版本不一致&#xff0c; push的操作是会被拒绝的…

go 性能分析pprof和trace

runtime/pprof&#xff1a;采集程序&#xff08;非 Server&#xff09;的运行数据进行分析&#xff0c;用于可结束的代码块&#xff0c;如一次编解码操作等net/http/pprof&#xff1a;采集 HTTP Server 的运行时数据进行分析。用于不可结束的代码块&#xff0c;如 web 应用等 使…

​工程师如何对待开源

工程师如何对待开源 本文是笔者作为一个在知名科技企业内从事开源相关工作超过 20 年的工程师&#xff0c;亲身经历或者亲眼目睹很多工程师对待开源软件的优秀实践&#xff0c;也看到了很多 Bad Cases&#xff0c;所以想把自己的一些心得体会写在这里&#xff0c;供工程师进行…

linux的shell的概述

Shell 教程 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务。 Ke…

各种颜色的代码

颜色代码对照表如下&#xff1a; 关于16进制颜色代码&#xff1a; 这有必要了解一颜色系统的概念&#xff1a; RGB&#xff1a;RGB色彩模式是工业界的一种颜色标准&#xff0c;是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的&a…

MySQL的一些有意思的指令和函数

这个里面我准备记录一些比较有意思的MySQL的指令和函数&#xff0c;当然使用函数的时候我们要注意&#xff0c;会不会因为函数导致不走索引&#xff0c;走全表扫描的情况。 因为对索引字段做函数操作&#xff0c;可能会破坏索引值的有序性&#xff0c;因此优化器就决定放弃走树…

文本分类(LSTM+PyTorch)

本文的配套代码已上传至github&#xff0c;链接在文末&#xff0c;同时附带中文数据集。 一、传统方法的基本步骤 预处理&#xff1a;首先进行分词&#xff0c;然后是除去停用词&#xff1b;将文本表示成向量&#xff0c;常用的就是文本表示向量空间模型&#xff1b;进行特征…

回调函数、qsort函数、sort函数与lambda表达式

目录 目录 1、回调函数 2、sort函数 3、lambda表达式 4、qsort与sort函数使用lambda表达式 1、回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一 个函数&#xff0c;当这个指针被用来调用其所指向的函…

凝心聚力 开源共建 | 统信软件参与成立OpenKunlun开源固件社区

11月22日&#xff0c;统信软件携手国内固件厂商、处理器厂商、外设板卡厂商等数十家产业同仁参与共建的OpenKunlun开源固件社区正式成立&#xff01; OpenKunlun社区是在自愿、开源、平等和协作的基础上&#xff0c;由基础软硬件企业、高等院校、个人开发者共同参与的非营利性开…

STM32——STM32中断系统与EXTI外部中断

文章目录一、中断系统二、STM32中断系统三、NVIC&#xff08;嵌套中断向量控制器&#xff09;NVIC基本结构NVIC优先级分组四、EXTI&#xff08;外部中断&#xff09;EXTI简介EXTI基本结构AFIO复用IO口EXTI框图五、对射式红外传感器计次电路设计关键函数EXTI库函数文件&#xff…

SpringMVC与SpringBoot响应请求的流程

SpringMVC是基于Servlet的MVC模型&#xff0c;Model&#xff1a;一个或多个javabean对象&#xff0c;用于存储数据和业务逻辑&#xff1b;View&#xff1a;一个或多个jsp页面&#xff0c;拿到控制器提交的数据为模型提供数据显示&#xff1b;Controller&#xff1a;一个或多个s…

【消息中间件】RabbitMQ的工作模式

前 言 &#x1f349; 作者简介&#xff1a;半旧518&#xff0c;长跑型选手&#xff0c;立志坚持写10年博客&#xff0c;专注于java后端 ☕专栏简介&#xff1a;深入、全面、系统的介绍消息中间件 &#x1f330; 文章简介&#xff1a;本文将介绍RabbitMQ的工作模式 &#x1f353…

cubeIDE开发, stm32的CRC计算CubeMX配置及HAL库底层实现分析

一、stm32的CRC 1.1 CRC的简介及MCU关联说明 STM32的CRC(Cyclic Redundancy Check&#xff0c;循环冗余校验)计算单元使用一个固定的多项式发生器&#xff0c;从一个32位的数据字产生一个CRC码。在业务开发应用中&#xff0c;会基于CRC的技术用于验证数据传输或存储完整性。在E…

【python基础_05】面向对象1_对象和类、魔术方法

文章目录1. 类和对象1.1 使用对象组织数据的模版1.2 成员变量和成员方法1.3 实现代码2. 内置方法&#xff08;魔术方法&#xff09;2.1 构造方法&#xff1a; __init__()2.2 __call__()2.3 __len__()2.3 __str__()2.4 __getitem__()2.5 __setitem__()2.6 __delitem__()2.7 __lt…

【从零开始学习深度学习】35. 门控循环神经网络之门控循环单元(gated recurrent unit,GRU)介绍、Pytorch实现GRU并进行训练预测

在循环神经网络中&#xff0c;当时间步数较大或者时间步较小时&#xff0c;循环神经网络的梯度较容易出现衰减或爆炸。上一篇文章中介绍的裁剪梯度可以应对梯度爆炸&#xff0c;但无法解决梯度衰减的问题。因此&#xff0c;循环神经网络在实际中较难捕捉时间序列中时间步距离较…

Elastic-Job分布式任务调度(1):概述

1 什么是任务调度 我们可以先思考一下下面业务场景的解决方案&#xff1a; 某电商系统需要在每天上午10点&#xff0c;下午3点&#xff0c;晚上8点发放一批优惠券。某银行系统需要在信用卡到期还款日的前三天进行短信提醒。某财务系统需要在每天凌晨0:10结算前一天的财务数据…

【自学Python】Linux安装Python

Linux安装Python Python下载 Python下载地址 https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xzPython下载 我们在 Linux 终端中&#xff0c;直接使用 wget 命令&#xff0c;下载 Linux 版 Python 的安装包&#xff0c;我们在终端输入以下命令&#xff1a; wg…

PAT乙级|1094 谷歌的招聘

题源https://pintia.cn/problem-sets/994805260223102976/exam/problems/1071785997033074688 提交1&#xff1a;一个用例没过 提交2&#xff1a;AC 错因&#xff1a;输出需为字符串&#xff0c;例如在 200236 中找 4 位素数&#xff0c;解是0023 关键&#xff1a;第33行代码…

linphone android sdk 源码下载编译

前言 前面的有写过Android 使用Linphone SDK开发SIP客户端相关的文章, 在后续的开发过程中, 为了更深入了解linphone, 便尝试下载SDK源码自行编译. 关于linphone这里不作过多介绍, 可以参考前面的文章. Linphone-SDK 是一个将 Liblinphone 及其依赖项捆绑为 git 子模块的项目&a…