ARM Cortex-A学习(1):GIC(通用中断控制器)详解

这篇具有很好参考价值的文章主要介绍了ARM Cortex-A学习(1):GIC(通用中断控制器)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


GIC(通用中断控制器, Generic Interrupt Controller)是一种用于处理中断的硬件组件,它的主要功能是协调和管理系统中的中断请求,确保它们被正确地传递给相应的处理器核心。

1 Cortex-A核中断

1.1 处理器模式

这里以Cortex-A9为例,先来看一下处理器的几种模式:

操作模式 描述
User 是应用程序运行的基本模式。这是一个非特权模式,对系统资源有限制的访问。
System 提供对系统资源的完全访问权限。只能从下面列出的某个异常模式转入。
Supervisor 在处理器执行监控SVC时进入,也会在复位或上电时进入。
Abort 试图访问非法内存位置时进入
Undefined 试图执行未实现的指令时进入
IRQ 响应中断请求
FIQ 响应快速中断请求

处理器首次上电或复位时,处于Supervisor模式。该模式是特权模式,允许使用所有处理器指令和操作。从Supervisor模式可以切换到User模式。User模式是唯一的非特权模式,某些类型的处理器操作和指令是被禁止的。在实际应用中,Supervisor模式通常在处理器执行操作系统等代码时使用,而正常的软件代码可能在User模式下运行,从而为系统地关键资源提供一定程度的保护。

处理器的操作模式由处理器状态寄存器CPSR指示和更改,如下图所示:

ARM Cortex-A学习(1):GIC(通用中断控制器)详解,ARM,arm开发

要修改CPSR的内容,处理器必须处于特权模式。如下图所示,为Cortex-A9处理器中的通用寄存器。

ARM Cortex-A学习(1):GIC(通用中断控制器)详解,ARM,arm开发

  • User模式中,有16个寄存器:R0R15,以及CPSR

  • 图中没有System模式,但这些寄存器在System模式中也可用

  • FIQ模式外的所有模式中,R0R12,以及R15都是通用的。而对于R13R14来说,不同的模式都有自己独有的R13R14

  • CPSR寄存器对所有模式都是通用的,但从一种模式切换到另一种模式时,CPSR的当前内容会被复制到新模式的保存处理器状态寄存器(SPSR)中

注意,本文不对FIQ模式进行深入讨论,它有独有的R8R12寄存器。

1.2 IRQ模式

Cortex-A9处理器在接收到来自GICIRQ信号时,会进入上面所说的IRQ模式。软件上配置中断的步骤如下:

  1. 禁用IRQ中断:将CPSR中的IRQ禁用位置为1。
  2. 配置GIC:与GIC连接的每个I/O外设的中断都由唯一的中断ID标识。
  3. 配置每个I/O外设:以便它们可以向GIC发送IRQ中断请求。
  4. 启用IRQ中断:将CPSR中的IRQ禁用位设置为0。

2 GIC的操作

GIC架构分为两个主要部分,称为CPU接口(CPU Interface)和分发器(Distributor)。CPU接口负责将Distributor接收到的IRQ请求发送到Cortex-A处理器(若有双核则可以发给两个)。而Distributor从I/O外设接收IRQ中断信号。

ARM Cortex-A学习(1):GIC(通用中断控制器)详解,ARM,arm开发

2.1 CPU Interface

CPU接口用于向Cortex-A核发送中断请求(IRQ)信号。如果有多核的话,每个核都有一个CPU接口。每个CPU接口中的相关寄存器如下所示:

ARM Cortex-A学习(1):GIC(通用中断控制器)详解,ARM,arm开发

  • ICCICR(CPU Interface Control Register):用于使能/禁用从CPU接口到相应Cortex-A核的中断转发
  • ICCPMR(Interrupt Priority Mask Register ):设置由CPU接口发送到Cortex-A核的中断的优先级阈值,优先级低于这个值的中断将被屏蔽
  • ICCIAR(The Interrupt Acknowledge Register):包含引起中断的I/O外设的中断ID。当处理器从GIC接收到IRQ信号时,程序员可通过在中断处理程序中读取ICCIAR以确定哪个I/O外设引起了中断。
  • ICCEOIR(End of Interrupt Register):在完成IRQ中断处理后,处理器必须清除此中断的标志位。我们只要将对应的中断ID写入这个寄存器即可清除中断标志位。

2.2 Distributor

GIC中的分配器可以处理255个中断源。再来回看一下这个图:

ARM Cortex-A学习(1):GIC(通用中断控制器)详解,ARM,arm开发

  • SPIs(共享外设中断,shared peripheral interrupts):中断ID范围为32到255,最多连接到224个I/O外设的IRQ信号,这些中断源是两个CPU接口共享的。
  • PPIs(私有外设中断,private peripherals interrupts):中断ID范围为0到31。
    • SGI(软件生成中断,software generated interrupts):是一种特殊的私有中断,通过写入GIC特定寄存器来生成;0到15的中断ID用于SGI。这里不对SGI做详细讨论。

分配器的相关寄存器如下图所示:

ARM Cortex-A学习(1):GIC(通用中断控制器)详解,ARM,arm开发

  • ICDDCR(分配器控制寄存器,Distributor Control Register):用于使能/禁用分配器

  • ICDISERn(中断集使能寄存器,Interrupt Set Enable Registers):用于使能从分配器到CPU接口的每个中断的转发。由于中断不止32个,所以这里有多个ICDISER寄存器,每个寄存器包括32个中断ID

  • ICDISERn(中断清除使能寄存器,Interrupt Clear Enable Registers):用于禁用每个中断,写入1将禁用将相应中断转发到CPU接口

  • ICDIPRn(中断优先级寄存器,Interrupt Priority Registers):设置中断的优先级。每个中断ID的优先级字段占据1字节

  • ICDIPTRn(中断处理器目标寄存器,Interrupt Processor Targets Registers):指定每个中断应转发到哪个CPU接口。每个中断ID占1字节(有的版本最多有8个Cortex-A核),设置为1表示选择该CPU。

    • 假设系统中有两个内核(1和2),若将图中的CPUs,offset0设置为11,表示中断ID为0的中断将发送到内核1和内核2中。
  • ICDICFRn(中断配置寄存器,Interrupt Configuration Registers):用于指定每个中断在GIC中是应作为电平触发还是边沿触发。文章来源地址https://www.toymoban.com/news/detail-820381.html

    • 电平触发:中断信号在保持为高或低电平时触发,电平翻转时,如从1变为0,表示中断结束
    • 边沿触发:当中断信号产生一个上升或下降沿时触发
    • 每个中断ID有两位用来配置电平或边沿触发,其中LSB没用到,当MSB为1时表示边沿触发,0表示电平触发
    • 当I/O外设产生电平触发的IRQ信号时,如果中断尚未从分配器转发到CPU接口,则可以取消这个信号;然而,一旦在分配器中采样了边沿触发的IRQ信号,就不能取消这个信号。

到了这里,关于ARM Cortex-A学习(1):GIC(通用中断控制器)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第七章嵌套矢量中断控制器(Cortex-M7 Processor)

    目录   第七章嵌套矢量中断控制器  7.1关于NVIC 7.2NVIC功能描述 7.2.1低功耗模式 7.2.2电平与脉冲中断 7.3NVIC程序员模型  7.3.1中断控制器类型寄存器 本章描述了嵌套矢量中断控制器(NVIC)。它包含以下部分: 关于NVIC在7-2页。 NVIC功能描述见第7-3页。 NVIC程序员模型在第7-4页。 NVIC为

    2024年02月16日
    浏览(39)
  • ARM Cortex-A学习(3):MMU内存管理单元

    内存管理单元( MMU )负责虚拟地址到物理地址的转换。MMU通过翻译表将程序使用的虚拟地址映射到实际的物理内存位置,实现对内存的动态管理和隔离。这不仅允许更灵活的内存分配,还提高了系统的安全性和稳定性。了解MMU的工作原理对于开发底层代码、BootLoader和驱动程序

    2024年01月21日
    浏览(42)
  • ARM+Codesys标准通用型控制器

    整机工业级设计,通讯外设经过隔离保 护   电源宽 电 压设计(9~36V DC ) 丰 富 的通讯接口,满足多种场合控制和通讯需求   四 核工业级处理器,高性能,低功耗,高可靠性      机 身 无风扇设计,外壳小巧 搭载内核 1 00% 自主化大型实时操作系统 SylixOS,支持     POSI X  

    2024年02月09日
    浏览(51)
  • Arm的Cortex-A和Cortex-X内核架构对比

    Arm的Cortex-A和Cortex-X内核系列都是基于ARM架构设计的高性能处理器核心,但它们在设计目标、市场定位以及性能优化上有所不同: ### Cortex-A系列 - **设计目标**:Cortex-A系列是为广泛的移动计算设备和服务器平台设计的通用处理器内核,强调的是性能与功耗效率之间的平衡。其

    2024年02月22日
    浏览(40)
  • ARM开发(cortex-A7核,UART总线实验)

    ---.h头文件--- ---.c功能实现文件--- ---.c主函数测试文件--- 结果: 字符:  字符串: 

    2024年02月12日
    浏览(44)
  • 如何评估现代处理器的性能——以ARM Cortex-A53为例

    现代处理器内核的性能可以从以下几个方面进行评估: 时钟速度(Clock Speed):它是CPU内部时钟发生器的频率,以赫兹(Hz)为单位。时钟速度越高,每秒钟内执行的指令数就越多,因此性能也会更好。 指令级并行性(ILP):现代处理器采用了一些技术来提高指令级并行性,

    2024年02月03日
    浏览(71)
  • 【ARM Coresight 系列文章19.2 -- Cortex-A720 AMU 详细介绍】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】 A-Prolifile 构架中的 Performance Monitoring Unit(PMU)和Activity Monitoring Unit(AMU)都具有性能计数器。AMU和PMU可以计数的事件类似,那么AMU和PMU有什么不同呢? AMU和PMU的区别在于: AMU和PMU用作不同用途 AMU和PMU有不同的编程模式 PMU的用途是性

    2024年02月19日
    浏览(65)
  • OpenCV交叉编译—arm(imx6ull,Cortex-A7)

    opencv - 4.2.0(opencv4.5.4版本在交叉编译时会报错) Ubuntu - 20.04 64位 gcc version 4.9.4 (Linaro GCC 4.9-2017.01) arm板:imx6ull, Cortex - A7 内核挂载:nfs+SecureCRT 1、下载 2、选择路径 根据自己Ubuntu来下载,下载完以后复制到自己要安装的路径,也可以不移动。 完成以后使用命令解压: 3、解压

    2024年02月06日
    浏览(43)
  • NXP i.MX 8M Mini工业核心板硬件说明书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)

    创龙科技SOM-TLIMX8是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高端工业级核心板,ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M4实时处理单元主频高达400MHz。处理器采用14nm最新工艺,支持1080P60 H.264视频硬件编解码、1080P60 H.265视频硬

    2024年02月11日
    浏览(51)
  • NXP i.MX 8M Plus工业开发板硬件说明书( 四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

    本文主要介绍创龙科技TLIMX8MP-EVM评估板硬件接口资源以及设计注意事项等内容。 创龙科技TLIMX8MP-EVM是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 + 单核ARM Cortex-M7异构多核处理器设计的高性能工业评估板,由核心板和评估底板组成。ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM

    2024年02月11日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包