Hylicos - MINI2440 - 中断控制

中断

中断源管理

中断是一种异步异常,CPU需要处理很多来自设备的中断请求,而CPU引出的line只有IRQ线和FIQ线,所以就得引入中断控制器帮助CPU搞清楚是中断的来源。
MINI2440的中断控制器,可以接受来自60个中断源的请求。提供这些中断源的是内部外设,如DMA 控制器、 UART、IIC 等等。在这些中断源中,UARTn、AC97 和EINTn 中断对于中断控制器而言是“或”关系。
当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T 内核的FIQ 或IRQ。

在这里插入图片描述

中断控制器对于中断源的是层次化的,因为中断源很多,而中断源寄存器的位数是有限的,无法表达过多的中断源。每个bit都表达一个中断源,而多个子中断源对应中断源寄存器的同一个bit:
在这里插入图片描述
同样的,多个外部中断源,对应同一个bit:
在这里插入图片描述

中断过程

根据中断类型,SRCPND的置位过程有些不同:

  • 子中断。中断发生后SUBSRCPND相应位置1,如果没有INTSUBMASK屏蔽,那么SRCPND相应的bit被置1,表示挂起等待处理。
  • 不带子中断。中断发生后SRCPND相应位置1,如果没有被INTMSK屏蔽,那么SRCPND相应的bit被置1,表示挂起等待处理。
  • 外部中断。EINT0-EINT3发生后SRCPND相应位置1,如果没有被INTMSK屏蔽,那么等待进一步处理。EINT4-EINT23发生后EINTPEND相应位置1,如果没有被EINTMASK屏蔽,那么SRCPND相应位EINT4-7或EINT8-23置1,如果没有被INTMSK屏蔽,等待进一步处理。
    在这里插入图片描述
    SRCPND中有bit被置位,根据对应的MASK bit是否被置位,判断是否发给CPU处理,fip和irq都是可以被屏蔽的。
    如果没有被屏蔽,那么看中断模式:
  • 快中断,直接把信号送到FIQ线上
  • 普通中断,SRCPND可以有多位置1(FIQ 只能有一个),多置位情况下,需要经过priority选出一个最高优先级的去执行,选出的中断的INTPND的对应bit置1.
    注意,这个过程都是硬件完成,软件的职责是读取INTPND,分清哪个中断源触发了中断,然后让CPU执行到正确的,响应的,处理函数。

开启中断

  • 如果是不带子中断的内部中断,只需设置INTMSK,让它不屏蔽中断就可以了;
  • 如果是带子中断的内部中断,需设置INTSUBMSK和INTMSK,让它门不屏蔽中断就可以了;
  • 如果是外部中断,对于EINT4-23需要设置EINTMASK和INTMSK。对于EINT0-EINT3只需设置INTMSK;
    注意,Arm Core中CPSR寄存器的I位和F位,是决定中断是否有效的总开关。

清除中断

  • 如果是不带子中断的内部中断,只需清除SRCPND、INTPND,注意清除需对应位写1。
  • 如果是带子中断的内部中断,需清除SRCPND和SUBSRCPND、INTPND,注意先清除SUBSRCPND,再清除SRCPND。 因为,如果你先清除SRCPND的话,然后在清除SUBSRCPND的过程中,SRCPND会以为又有中断发生, 又会置1,也就是说一次中断会响应两次。所以必须先掐断源头。
  • 如果是外部中断,对于EINT4-23需要清除EINTPEND和SRCPND、INTPND(同样注意顺序)。对于EINT0-EINT3只需清除SRCPND、INTPND。

外部中断源,次级中断源,主中断源的关系

在这里插入图片描述
平级映射
S3C2440A的中断控制器所能提供的信息只是哪个主中断源上来了中断,例如,28号主中断源上来了中断,还需要进一步确定到底是哪一个次级中断源上(INT_RXD0、INT_TXD0、INT_ERR0)来了中断。

因为有多个中断源,自然用数组表示最方便直观,并且这个数组包含在LMOSEM内核的可执行文件中。IRQ_MAX定义为71。为什么是71,不是只有60个中断源吗?因为我们为了直接用数组下标寻找intfltdsc_t结构,采用了平级映射的方法,例如,28号主中断源发生了中断,发现它其中包含有3个次级中断源,就用28加上一个次级偏移量:SINT_OFFSET(32),找到相应的intfltdsc_t结构。再如,5号主中断源发生了中断,发现它其中包含有16个外部中断源,就用5加上一个外部次级偏移量EINT_OFFSET(47),找到相应的intfltdsc_t结构。不难发现,数组下标031对应的是主中断源,数组下标3246对应的是次级中断源,数组下标47~70对应的是外部中断源。

HAL_DEFGLOB_VARIABLE(intfltdsc_t,machintflt)[IRQ_MAX];	//71

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL面试总结

MySQL优化 1.MySQL如何定位慢查询 1.1开源工具 1.2MySQL自带慢日志 1.3解答 2.EXPLAIN 2.1解答 3.什么是索引 4.B树 4.1数据结构对比 5.聚簇索引(聚集索引) 6.覆盖索引 7.索引创建原则 8.什么情况下索引失效 9.你对sql优化经验 10.事务 11.MVCC 11.主从…

开源堡垒机JumpServer本地安装并配置公网访问地址

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…

Python多线程爬虫——数据分析项目实现详解

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言爬虫获取cookie网站爬取与启动CS…

Spring boot项目java bean和xml互转

Spring boot项目实现java bean和xml互转 项目场景:互转方法使用jackson进行互转使用jaxws进行xml与bean的互转 搞定收工! 项目场景: 工作中需要给下游第三方收费系统做数据挡板,由于下游系统使用的是soap webservice,里面涉及各种…

牛客周赛 Round 21 解题报告 | 珂学家 | 堆栈的妙用

前言 整体评价 从A题中的Baidu, 可以猜到这场有几道题来自于百度校招。 其实B题有点意思,如果把十字星的范围放大,那就可以成为一个hard题。 D题也挺意思的,大概有两种思路,一种是从左到右枚举右端点,增量累加&…

【C/C++】C/C++编程——为什么学习 C++?

当提到C的时候,很多人会觉得语法复杂、学习曲线陡峭,并且好像与C语言还有点"纠缠不清"。尽管如此,C仍然是当今世界上最受欢迎和最有影响力的编程语言之一。特别是在当今快速发展的人工智能(AI)领域&#xff…

利用GPU加速自定义风格图像生成-利用GPU加速结合了ControlNet/ Lora的Stable Diffusion XL

点击链接完成注册,参加本次在线研讨会 https://www.nvidia.cn/webinars/sessions/?session_id240124-31319 随着AI技术的发展, 数字内容创建业务也变得越来越火热。生成式AI模型的发布, 让我们看到了人工智能在各行各业的潜力。您只需要用语言简单描述自己希望看…

黑马苍穹外卖学习Day10

文章目录 Spring Task介绍cron表达式入门案例 订单状态定时处理需求分析代码开发功能测试 WebSocket介绍入门案例 来单提醒需求分析代码开发 客户催单需求分析代码开发 Spring Task 介绍 cron表达式 入门案例 订单状态定时处理 需求分析 代码开发 新建一个task包里面编写代码…

REVIT二次开发批量编号

步骤1 步骤2 步骤3 实现代码using System; using System.Collections.Generic; using System.Linq; using Syste

《Python数据分析技术栈》第03章 03 可视化各级数据(Visualizing various levels of data)

03 可视化各级数据(Visualizing various levels of data) 《Python数据分析技术栈》第03章 03 可视化各级数据(Visualizing various levels of data) Whenever you need to analyze data, first understand if the data is stru…

C++三剑客之std::variant(二):深入剖析

目录 1.概述 2.辅助类介绍 2.1.std::negation 2.2.std::conjunction 2.3.std::is_destructible 2.4.std::is_object 2.5.is_default_constructible 2.6.std::is_trivially_destructible 2.7.std::in_place_type和std::in_place_index 3.原理分析 3.1.存储分析 3.2.…

【蓝桥杯EDA设计与开发】资料汇总以及立创EDA及PCB相关技术资料汇总(持续更新)

[18/01/2024]:目前为了准备蓝桥杯做一些资料贴,于是写下这一篇博客。 各种资料均来源于网络以及部分书籍、手册等文档,参考不保证其准确性。 如果在准备蓝桥杯,可与我私信共同学习!!!&#xf…

SCTP, TCP, UDP, IP, ICMP都在哪一层?(TCP/IP网络通信协议学习)

TCP/IP网络通信协议最早是由罗伯特卡恩(Robert E. Kahn)和文顿瑟夫(Vinton G. Cerf)于1972年提出的,它是一个实际的协议栈。 OSI七层网络通信协议最早是由国际标准化组织(ISO)于1977年提出的&am…

0基础转行做软件测试?一文教小白拿到初级岗位offer?

我认为入门软件测试需要四个方面的知识or技能,它们是:业务知识、职业素养、基础知识、技术知识。 职业素养是一切的根基,因为人在职场就必须拥有必要的职业素养,软件测试工程师也不例外。基础知识和技术知识是两大支柱&#xff0…

Kubernetes网络模型概述

Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管这些Pod是否运行在同一个Node中,都要求它们可以直接通过对方的IP进行访问。由于Kubernetes的网络模…

分布式锁的产生以及使用

日常开发中,针对一些需要锁定资源的操作,例如商城的订单超卖问题、订单重复提交问题等。 都是为了解决在资源有限的情况限制客户端的访问,对应的是限流。 单节点锁问题 目前针对这种锁资源的情况采取的往往是互斥锁,例如 java 里…

顶顶通用户申请和安装 空号识别 模块流程

一、申请 空号识别 授权 打开网址:http://my.ddrj.com,注册并登录。 点击“我的授权” -> “申请授权” (根据负责人的要求选择“在线”或是“离线”)。 找到名称为空号识别的授权并点击“加号”图标打开授权,然…

Uni-App三甲医院、医保定点三甲医院在线预约挂号系统源码

医院在线预约挂号系统是一种方便患者预约挂号的系统,患者可以通过该系统进行预约挂号,省去了到医院现场排队等待的时间,提高了就诊效率。随着医院信息化水平的不断发展,医院在线预约挂号管理系统已成为医院管理中不可或缺的一部分…

SQL-窗口函数

什么是窗口函数 可以像聚合函数一样对一组数据进行分析并返回结果,二者的不同之处在于,窗口函数不是将一组数据汇总成单个结果,而是为每一行数据都返回一个结果。 窗口函数组成部分 1.创建数据分区 窗口函数OVER子句中的PARTITION BY选项用…

大师学SwiftUI第6章 - 声明式用户界面 Part 3

安全域视图 SwiftUI还内置了创建安全文本框的视图。这一视图会把用户输入的字符替换成点以及隐藏敏感信息,比如密码。 SecureField(String, text: Binding):该初始化方法创建一个安全输入框。第一个参数定义占位文本,​​text​​参数为存储…