soc(九) 中断控制器

中断控制器在SOC中的位置

soc(九) 中断控制器_第1张图片

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

  • 从某个 简单中断处理器 的角度考虑 整个过程
既然处理中断的最核心模块是 中断控制器 , 那么 我们就应该了解 中断控制器的典型工作流程 .
在了解工作过程中自然了解到 中断控制器留给 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 	stm32f407

armv7
	没提及
cortex-m3 ??? // m4 欠缺
	// Chapter 6 Nested Vectored Interrupt Controller
	支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
	并通过NVIC管理
		NVIC是Cortex-M3核心的一部分
		Nest Vector Interrupt Controller,嵌套中断向量控制器,是用来管理中断嵌套的,核心任务在于其优先级的管理。
		NVIC给每个中断赋予先占优先级(抢占优先级)和次占优先级(响应优先级)。


stm32f407
	STM32并没有使用CM3内核的全部东西,而是只用了它的一部分
	STM32f407 有 10个内核中断和 82 个可屏蔽中断,(编号-3 - 88)
	将CM3内核的中断向量表进行了重新编排
		将编号-36的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,
		从编号7开始为外部中断,这些中断优先级都是可以自行设置的。编号7开始为外部中断,82(编号7-88)

	并将 一些外部中断通过 EXTI 引出到 gpio
		EXTI是ST公司在其STM32产品上扩展的外中断控制。
		它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断(PVD,RTC alarm,USB wakeup,ethernet wakeup),以及软件中断。
		其输出最终被映射到NVIC的相应通道。
	
  • s3c2440
  • code
armv4t arm929t s3c2440

armv4t
	没有描述中断	

arm920t
	没有描述中断
s3c2440
	S3C2440A中的中断控制器接收来自60个中断源的请求。
	
	这些中断源由内部外设(如DMA控制器、UART、IIC等)提供。在这些中断源中,UARTn、AC97和EINTn中断被“或”连接到中断控制器。
	
	当接收到来自内部外设和外部中断请求管脚的多个中断请求时,需要仲裁,仲裁过程取决于硬件优先级逻辑,结果被写入中断挂起寄存器,这有助于用户通知从各种中断源生成的中断。
	中断控制器在仲裁程序之后请求ARM920T核心的FIQ或IRQ中断。
  • imx6ull
armv7 cortex-a7 imx6ull

armv7 rf
	没提及
cortex-a7 trm
	Chapter 8 eneric Interrupt Controller
	集成的GIC负责对 大量中断源 进行 整理和仲裁。它提供:
		•屏蔽中断。
		•中断的优先顺序。
		•向目标处理器分配中断。
		•跟踪中断状态。
		•通过软件生成中断。
		•支持安全扩展。
		•支持虚拟化扩展。
	集成的GIC符合ARM通用中断控制器(GIC)体系结构规范的版本2.0。
imx6ull
	General Interrupt Controller (GIC) with 128 interrupts support
	Chapter 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 core
	
	arm7 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 Controller


NVIC支持多达240个中断,每个中断的优先级最高可达256级,可以动态更改。
处理器和NVIC可以进入非常低功耗的睡眠模式,让唤醒控制器(WIC)来识别和优先处理中断。
此外,处理器支持电平和脉冲中断。

本节包含以下小节:
•6.1.16-62页上的NVIC中断。
•6.1.26-62页的低功率模式。
•6.1.36-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 core
	cortex-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 Controller
		GIC-600 Generic Interrupt Controller
		GIC-500 Generic Interrupt Controller
		GIC-400 Generic Interrupt Controller
		PL390 - Generic Interrupt Controller
		PL19x - 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及架构微架构,中断控制器)