中断控制器在SOC中的位置

中断控制器需要做什么事情

  • 从某个 简单中断处理器 的角度考虑 整个过程
既然处理中断的最核心模块是 中断控制器 , 那么 我们就应该了解 中断控制器的典型工作流程 .
在了解工作过程中自然了解到 中断控制器留给 CPU 的接口.从而达到怎么控制中断控制器来处理中断的过程.
// 中断控制器
1. 中断控制器汇集各类外设发出的中断信号
2. 中断控制器告诉CPU , 此时CPU在吃到第5根阳春面,这一根吃到了一半
// CPU
3. CPU保存当前程序的运行环境
4. CPU置位PC,中断服务程序处理中断
// 软件
5. 软件ISR中保存环境
6. 软件判断中断源
7. 软件根据中断源做事情
8. 软件清除中断,通过读写中断控制器和外设相关的寄存器来实现。
9. 软件控制 CPU 告知 中断控制器中断处理完毕,并恢复(硬件和软件保存的)现场 // 当interrupt handler处理完了一个中断的时候,会向写CPU interface的寄存器从而通知GIC CPU已经处理完该中断。
// CPU
10.CPU 继续吃第5根阳春面剩下的一半  

中断控制器实例

  • stm32f407
armv7    cortex-m3   stm32f407armv7没提及
cortex-m3 ??? // m4 欠缺// Chapter 6 Nested Vectored Interrupt Controller支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。并通过NVIC管理NVIC是Cortex-M3核心的一部分Nest Vector Interrupt Controller,嵌套中断向量控制器,是用来管理中断嵌套的,核心任务在于其优先级的管理。NVIC给每个中断赋予先占优先级(抢占优先级)和次占优先级(响应优先级)。stm32f407STM32并没有使用CM3内核的全部东西,而是只用了它的一部分STM32f407 有 10个内核中断和 82 个可屏蔽中断,(编号-3 - 88)将CM3内核的中断向量表进行了重新编排将编号-3至6的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,从编号7开始为外部中断,这些中断优先级都是可以自行设置的。编号7开始为外部中断,共82个(编号7-88)并将 一些外部中断通过 EXTI 引出到 gpioEXTI是ST公司在其STM32产品上扩展的外中断控制。它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断(PVD,RTC alarm,USB wakeup,ethernet wakeup),以及软件中断。其输出最终被映射到NVIC的相应通道。
  • s3c2440
  • code
armv4t arm929t s3c2440armv4t没有描述中断   arm920t没有描述中断
s3c2440S3C2440A中的中断控制器接收来自60个中断源的请求。这些中断源由内部外设(如DMA控制器、UART、IIC等)提供。在这些中断源中,UARTn、AC97和EINTn中断被“或”连接到中断控制器。当接收到来自内部外设和外部中断请求管脚的多个中断请求时,需要仲裁,仲裁过程取决于硬件优先级逻辑,结果被写入中断挂起寄存器,这有助于用户通知从各种中断源生成的中断。中断控制器在仲裁程序之后请求ARM920T核心的FIQ或IRQ中断。
  • imx6ull
armv7 cortex-a7 imx6ullarmv7 rf没提及
cortex-a7 trmChapter 8 eneric Interrupt Controller集成的GIC负责对 大量中断源 进行 整理和仲裁。它提供:•屏蔽中断。•中断的优先顺序。•向目标处理器分配中断。•跟踪中断状态。•通过软件生成中断。•支持安全扩展。•支持虚拟化扩展。集成的GIC符合ARM通用中断控制器(GIC)体系结构规范的版本2.0。
imx6ullGeneral Interrupt Controller (GIC) with 128 interrupts supportChapter 3 Interrupts and DMA Events全局中断控制器(GIC)从所有芯片源收集多达128个中断请求,并提供与Cortex A7 CPU的接口。前32个中断是CPU接口的私有中断。下表不包括这些中断。除了CPU专用的中断之外,所有中断都连接到GPC。每个中断可以配置为正常或安全中断。还支持软件强制寄存器和软件优先级屏蔽。此表描述了ARM Cortex A7中断源:

arm 芯片上的中断控制器发展及种类

  • arm 出了两款 中断控制器
  • 一个是针对cortex-m 的nvic(stm32f407 使用的)
  • 一个是针对 cortex-a 的gic (imx6ull使用的)
s3c2440)(ARMv5t ARM920T) 使用的是 gic 还是 nvic ?应该是三星买的或者自己的中断控制器的IP
s3c6410(armv6 ARM1176JZF-S) 使用的中断控制器的IP是 Vectored Interrupt Controller, ARM PrimeCell
PL192
s5pv210(armv7 cortex-A8) 使用的 中断控制器 是 由4个ARM PrimeCell PL192矢量中断控制器级连(daisy-chain)而成
exynos4412(armv7 cortex-A9) 使用的 中断控制器 是 arm的GIC
arm cortex-m 使用 NVIC // 适用于单核?
arm cortex-a 使用 GIC  // 适用于多核和单核?gic  是有 单独的 RF和trm 的.
nvic 的 RF和trm  分别在 cortex-m 处理器的 RF和trm 中.问题:cortex-a 和 cortex-m 在中断系统上有什么不同?cortex-a 可以使用 NVIC吗?
  • NVIC
对于ARM架构的soc,使用较多的中断控制器是VIC(Vector Interrupt Controller)至于能不能嵌套,看具体实现.区分中断优先级硬件判断中断源并主动跳转对应处理程序地址stm32 等 cortex-m0 m1 m4 m0+ 用的 可嵌套中断控制器单核时代用的用于对中断信号进行处理,然后给 arm corearm7 arm11 cortex-a8(这几个都是单核)VIC是处于芯片外设和ARM内核之间的一个模块,对芯片所有外设中断进行管理,决定哪些中断源可以产生中断、产生哪种类型的中断以及中断后执行哪段服务程序。ARM处理器内核具有两个中断输入:向量中断请求(IRQ)和快速中断请求(FIQ)。向量中断控制器使用32个中断请求输入,可将其编程分配为FIQ或向量IRQ类型。可编程分配机制意味着外设中断的优先级可动态分配和调整。

NVIC

  • RF
没有NVIC的RF
cpu的RF(armv7m的RF)没提及
  • TRM
没有NVIC的trm
cpu的TRM(cortex-m4的TRM arm_cortexm4_processor_trm_100166_0001_00_en.pdf)提及Chapter 6 Nested Vectored Interrupt ControllerNVIC支持多达240个中断,每个中断的优先级最高可达256级,可以动态更改。
处理器和NVIC可以进入非常低功耗的睡眠模式,让唤醒控制器(WIC)来识别和优先处理中断。
此外,处理器支持电平和脉冲中断。本节包含以下小节:
•6.1.1第6-62页上的NVIC中断。
•6.1.2第6-62页的低功率模式。
•6.1.3第6-62页上的电平与脉冲中断。NVIC中断NVIC支持多达240个中断,每个中断具有多达256个优先级。您可以动态更改中断的优先级。NVIC与处理器核心接口紧密耦合,实现低延迟中断处理和对延迟中断的高效处理。NVIC维护堆叠或嵌套中断的知识,以启用中断的尾部链接。您只能从特权模式完全访问NVIC,但如果启用配置和控制寄存器,则可以使中断在用户模式下进入挂起状态。任何其他用户模式访问都会导致总线故障。除非另有说明,否则可以使用字节、半字和字访问访问所有NVIC寄存器。NVIC寄存器位于SCS内。不管处理器的端状态如何,所有的NVIC寄存器和系统调试寄存器都是小端。
低功率模式处理器实现可以包括唤醒中断控制器(WIC)。这使得处理器和NVIC进入一个非常低功耗的睡眠模式,从而使WIC能够识别和优先处理中断。处理器完全实现了等待中断(WFI)、等待事件(WFE)和发送事件(SEV)指令。此外,处理器还支持使用SLEEPONEXIT,这会导致处理器核心在从异常处理程序返回到线程模式时进入睡眠模式。有关更多信息,请参阅ARM®v7-M架构参考手册。电平中断与脉冲中断处理器同时支持电平和脉冲中断。在ISR访问设备时,一个电平中断被保持到被清除为止。脉冲中断是边缘模型的一种变体。你必须确保脉冲是在Cortex-M4时钟FCLK的上升沿采样的,而不是异步的。对于电平中断,如果在从中断程序返回之前信号未被解除,则中断再次进入挂起状态并重新激活。这对于FIFO和基于缓冲区的设备特别有用,因为它可以确保它们通过单个ISR或通过重复调用而不需要额外的工作。这意味着设备在assert中保持信号,直到设备为空。脉冲中断可以在ISR期间重新设置,以便中断可以同时处于挂起状态和活动状态。如果另一个脉冲在中断仍处于挂起状态时到达,则中断仍处于挂起状态,ISR仅运行一次。脉冲中断主要用于外部信号和速率或重复信号。
  • GIC
    进入多核时代以后,GIC(General Interrupt Controller)的应用也开始逐渐变多。GIC 可以实现中断嵌套单核时代用的用于对中断信号进行处理,然后给 arm corecortex-a9( Cor tex-A9 为单核 ,Cortex-A9 MPCore 为多核)GIC为中断控制器,不要和ARM core的中断搞混了,这些中断都是连接到ARM core的IRQ或者FIQ上的。

GIC

  • RF
cpu的RF(armv7a的RF)没提及
gic v2的RF(IHI0048B_b_gic_architecture_specification.pdf)有提及
  • TRM
cpu的TRM(Cortex-A7 Technical ReferenceManua.pdf)有少量提及
gic的TRM //gic_pl390_r0p0_trm.pdf 还没找到在 http://infocenter.arm.com/help/index.jsp 中的 corelink控制器和外设中的 system controllers 中,包括GIC-600AE Generic Interrupt ControllerGIC-600 Generic Interrupt ControllerGIC-500 Generic Interrupt ControllerGIC-400 Generic Interrupt ControllerPL390 - Generic Interrupt ControllerPL19x - Vectored Interrupt Controller
#########################################################cpu的TRM
GIC功能描述
本节提供Cortex-A7 MPCore GIC的功能描述:•GIC内存映射。•第8-4页上的中断源。•第8-5页上的中断优先级格式。•第8-5页上的GIC配置。
GIC是位于Cortex-A7 MPCore处理器中的单个功能单元。GIC由一个共享分发块和几个CPU接口组成。对于多处理器设备中的每个处理器,有:•一个CPU接口。•虚拟接口控件。•虚拟CPU接口。Cortex-A7 MPCore处理器可支持多达480个共享外设中断(SPI)。
所有中断源都由唯一的ID标识。Cortex-A7 MPCore处理器具有以下中断源:软件生成的中断sgi是通过写入软件生成的中断寄存器(GICD_SGIR)来生成的。每个处理器接口最多可生成16个sgi,即ID0-ID15。SGI具有边缘触发属性。中断的软件触发相当于外设输入上中断信号的边缘转换。共享外设中断spi由相关中断输入线上生成的事件触发。GIC可支持与外部IRQS信号对应的多达480个spi。可用spi的数量取决于Cortex-A7 MPCore处理器的实现配置。允许值为0-480,以32步为单位。从ID32开始。SPI可以配置为边缘触发或活动高级别敏感。专用外设中断PPI是由特定于单个处理器的外设产生的中断。每个CPU接口有七个PPI:传统nFIQ信号(PPI0)当GIC中断旁路生效时,例如复位后,外部nFIQ信号绕过中断分配器逻辑,并直接将中断请求驱动到相应的处理器。当一个处理器使用GIC而不是外部nFIQ信号时,通过启用它自己的CPU接口,nFIQ信号像其他中断线一样被处理并使用ID28。中断是激活的低电平敏感。安全物理计时器事件(PPI1)这是由安全物理计时器生成的事件,使用ID29。中断是级别敏感的。非安全物理计时器事件(PPI2)这是由非安全物理计时器生成的事件,使用ID30。中断是级别敏感的。传统近红外信号(PPI3)当GIC中断旁路生效时,例如复位后,外部nIRQ信号绕过中断分配器逻辑,并直接将中断请求驱动到相应的处理器。当处理器使用GIC而不是外部nIRQ信号时,通过启用其自己的CPU接口,nIRQ信号被像其他中断线一样处理并使用ID31。中断是激活的低电平敏感。虚拟计时器事件(PPI4)这是从虚拟计时器生成的事件,使用ID27。中断是级别敏感的。虚拟机监控程序计时器事件(PPI5)这是在Hypervisor模式下由物理计时器生成的事件,并使用ID26。中断是级别敏感的。虚拟维护中断(PPI6)ARM通用中断控制器体系结构规范中的虚拟化扩展支持允许在多种情况下生成维护中断。虚拟维护中断使用ID25。中断是级别敏感的。GIC配置
表8-2列出了GIC的可配置选项。
实现定义为GIC是否存在。
如果将设计配置为排除GIC:•SPI信号不可用。•保留外设数据库[39:15],软件可以读取配置库
地址寄存器,用于确定GIC(如果GIC存在于外部系统中)的位置。
参见第4-83页的配置基址寄存器。
Cortex-A7微处理器总是包含虚拟中断信号nVIRQ和nVFIQ,而不管GIC是否存在。
每个处理器有一个nVIRQ和一个nVFIQ。
如果将处理器配置为排除GIC,则输入管脚nVIRQ和nVFIQ可以绑定到HIGH(如果未使用),也可以由SoC中的外部GIC驱动。
如果将处理器配置为包含GIC,并且使用GIC,则必须将输入引脚nVIRQ和nVFIQ绑定到HIGH。
这是因为内部GIC会生成虚拟中断信号给处理器。
如果将处理器配置为包含GIC,而GIC未被使用,则输入引脚nVIRQ和nVFIQ可以由SoC中的外部GIC驱动GIC程序员模型
本节介绍Cortex-A7 MPCore GIC的程序员模型:•Distributor 摘要。
•第8-8页上的Distributor 寄存器说明。•CPU接口寄存器摘要,第8-13页。
•CPU接口寄存器说明,见第8-14页。•虚拟接口控制寄存器摘要,第8-16页。
•第8-17页上的虚拟接口控制寄存器说明。•虚拟CPU接口寄存器摘要,第8-18页。
•虚拟CPU接口寄存器说明,第8-19页。

ARM中断种类

  • 对于 soc core 来说,中断只有两种,一个是IRQ 一个是 FIQ
中断源 分类 Cortex-M进入模式 ARM7进入模式 Cortex-A进入模式
一般外设 IRQ handler工作模式 IRQ异常模式 IRQ异常模式
电源键 FIQ handler工作模式 FIQ异常模式 FIQ异常模式
SWI指令 SWI(不是中断,是异常) handler工作模式 SVC异常模式 SVC异常模式

其他资料

  • 谈谈ARM中断嵌套

  • 《Cortex-M0权威指南》之体系结构—嵌套中断控制器(NVIC)

  • stm32之中断系统

  • STM32 (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解

  • cortex-a8裸机系列:第十二章中断控制器与外部中断

  • Cortex_A8 S5PV210 中断控制

  • 基于S3C6410的ARM11学习(六) 核心初始化之关闭所有中断

  • ARM体系结构之中断控制器

  • ARM7单片机(学习ing)—(二)、中断控制编程—01

  • 学习小结–ARM7中断原理

  • ARM7内核寄存器、中断向量控制器

  • ARM7学习笔记——中断向量控制器VIC

  • ARM9的中断控制器

  • arm9的中断

  • ARM9中断控制器

  • ARM11—中断—向量中断控制器(VIC)—结合s3c6410

  • S5PV210的向量中断控制器

  • s3c2440中断控制器

GIC
  • ARM GIC中断控制器介绍

  • ARM中断及中断控制器GIC

  • Crotex A9 中断流程

soc(九) 中断控制器相关推荐

  1. 扩展中断控制器8259实验_「正点原子FPGA连载」第十三章双核AMP实验

    1)摘自[正点原子]领航者 ZYNQ 之嵌入式开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?&id= ...

  2. ARM GICv3中断控制器

    changelog: 2019年02月17日 初稿 2020年03月1日 fix typos以及增加中断路由 1. 前言 GIC,Generic Interrupt Controller.是ARM公司 ...

  3. 扒开ARM中断控制器的底裤来看看!

    GIC 硬件原理 GIC,Generic Interrupt Controller.是ARM公司提供的一个通用的中断控制器.主要作用为:接受硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理. ...

  4. 剖析ARM中断控制器与GIC中断控制器

    目录 简介:GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1-V4( ...

  5. 基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器、串口、pflash支持

    基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器.串口.pflash支持 添加串口支持 真实板卡的初期调试中,串口打印可谓神器,几乎所有的SOC都会带有串口这个外设,因 ...

  6. Linux 中断 —— ARM GIC 中断控制器

    GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1-V4(V2最多支持 ...

  7. 初识片选信号和中断控制器

    片选信号 片选存储芯片的片选 小总结: cpu 发出的片选信号,寻找相应的存出控制器,进行数据的存取 存储控制器和外设相连,按照所需要的协议接口进行调用,驱动外设. 1.确定外设和cpu相连的管脚 2 ...

  8. 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...

    <嵌入式linux应用程序开发完全手册>中断控制器操作(外部中断)学习笔记 一.ARM中断体系 当一个"异常"发生时,或者说当收到一个中断触发信号时,ARM9将会自动完 ...

  9. AR# 58294 Zynq-7000 SoC: PS SPI 控制器文档升级

    Zynq-7000 SoC: PS SPI 控制器文档升级 注:本文为笔者自己翻译的<AR# 58294 Zynq-7000 SoC: PS SPI Controller documentati ...

最新文章

  1. 为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法
  2. access open 知乎_NX使用——远程IDE利器
  3. innoDB 存储引擎
  4. java 应用程序无法运行_关于解决浏览器无法运行小应用程序问题
  5. IDEA开启Run Dashboard窗口
  6. [Linux]信号量
  7. mysql 关联查询_mysql数据库调优(二)
  8. redisTemplate.opsForValue()中方法讲解
  9. 离职潮来袭,但为什么HR还是很难招到人?
  10. Linux社区代码风格
  11. python数据处理源代码_python数据分析与应用源数据和代码
  12. GHOSTXP_SP3电脑公司装机特别版 V30.0[NTFS]
  13. wps底板颜色怎么去掉_wps怎么把复制网页的灰色阴影去掉 底纹去掉方法
  14. element-ui+vue,翻页添加首页、尾页跳转按钮
  15. 未来科技蒲公英大飞_大烟草的下跌告诉我们关于大科技的未来
  16. 地图原点半径距离经纬度计算
  17. 15K的前端应届毕业生,就因为掌握了这些知识点!(前端企业级开发必备)
  18. Real-Time High-Resolution Background Matting
  19. 树莓派蜂鸣器python代码_树莓派+蜂鸣器=整点报时器
  20. Aspose.Words模板创建Word【一】

热门文章

  1. 持续交付到底有什么价值?
  2. 无偏估计唯一性_请问,参数估计的无偏性和一致性有什么异同吗?
  3. 令狐冲和TCP/IP协议的第三层协议的关系
  4. win10设备管理没有android,win10电脑不能识别安卓设备怎么办_win10电脑识别不了安卓设备的解决方法...
  5. 自学软件测试的3个技巧,萌新必看!
  6. 可完全分离的二维矢量图加密域鲁棒可逆水印算法(一)
  7. STL案例 - 员工分组
  8. Vue 保留两位小数
  9. MongoDBC++开发(四)bsoncxx::builder::stream::document的增删改查操作
  10. 二极管损坏的原因有哪些?