0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM中断原理以及中断嵌套

h1654155149.6853 来源:技术让梦想更伟大 作者:技术让梦想更伟大 2022-04-07 10:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理所当然的事对学生来说理解实属不易。


ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。

我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ。


先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着pc的指示去做事情,当CPSR中的I和F位为1时,IRQ和FIQ全部处于禁止状态。无论你在irq pin和fiq pin上面发什么样的中断信号,ARM不会理你,你根本不能打断它,因为它“耳聋”,"眼瞎"了。

当I位和F位为0时,irq pin上有中断信号过来时,就会打断arm的当前工作,并且切换到IRQ模式下,跳到相应的异常向量表(vector)位置去执行代码。这个过程是自动的,但是返回到被中断打断的地方就得您亲自动手。

当你跳到异常向量表,处于IRQ的模式的时候,此时如果irq pin上面又来中断信号,此时ARM是不会理你的,irq pin就像秘书,ARM核心就像老板,老板本来在做事,然后来了一个客户,秘书打断它,让客户进去。而此时再来一个客户,要么秘书不断去敲门问,要么客户走人。老板第一个客户没有会见完,不会理你。

但是有一种情况例外,当ARM处在IRQ模式,这个时候fiq pin来了一个中断信号,fiq pin是什么?快速中断,好比公安局的来查刑事案件,才不管老板是不是在会见客户,直接打断,进入到fiq模式,跳到相应的fiq的异常向量表处去执行代码。那如果当ARM处理FIQ模式,fiq pin又来中断信号,也就是又一批公安来了,那没戏,都是执法人员,你打不断我。如果此时irq pin来了呢?来了也不理,正在办案,还敢来妨碍公务。

所以得出一个结论:IRQ模式只能被FIQ模式打断,FIQ模式下谁也打不断。

在打不断的情况下,irq pin 或fiq pin随便你怎么发中断信号,都是白发。

所以除了fiq能打断irq以外,根本没有所谓中断嵌套的情况。

但是再怎么说irq pin 和fiq pin加起来也就2根引脚,这么多中断源,怎么办呢?不可能谁来了都直接敲门吧。

接下来该说谁来给irq pin或者 fiq pin发信号。从上文可以看到,可能是老板客户,也可能是公安。在ARM中,这个事情由中断控制器管理。

拿最简单的2410/2440的中断控制器举例,中断控制器加一个子中断控制器,还有一个外部中断控制器管理了50多个中断资源,说穿了有50多个脚。这些脚除了外部中断都是规定了功能的,比如WDT、LCD、DMA等,这个功能不能改,因为2410/2440内部硬件连线已经决定了。

当WDT和DMA中断都到来时,会被送到SRCPND寄存器中,两个中断都在里面,到底把哪一个送给ARM呢?这个时候先看INTMOD,也就是中断模式寄存器:哪个中断被设置成快速中断,哪个就被送上去;如果两个都被设置为快速中断呢?这不可能,因为同一时间只能有一个中断可以被设成快速中断。所以,如果有快速中断,这个时候直接给fiq pin发中断信号,打断ARM。

要是没有快速中断呢,这个时候就看INTMSK,看WDT和DMA有没有被屏蔽,如果DMA在INTMSK被屏蔽,只有WDT继续向上送,如果都没有屏蔽,那么他们两个同时进入优先级寄存器PRIORITY,在这里根据优先级设置,一定会分出一个高一个低的优先级出来,优先级高的那个被送到INTPND寄存器,所以INTPND随时随地有且只有一个中断在里面。只要INTPND里面有中断,irq pin就不会一直不断给ARM发中断信号,当第一次发的时候,中断了ARM,这个时候ARM进入相应的异常向量并处于IRQ模式。

此时,INTPND仍然不断的通过irq pin向ARM发中断信号,但是此时ARM已经处于IRQ模式,不会理睬你。当你中断处理完,要退出IRQ模式,这个时候要小心,如果退出IRQ模式之前不清除INTPND里面的中断位,刚退出IRQ模式,又会被中断,因为INTPND一直在发中断信号。所以在退出IRQ模式前一定要清除INTPND里面的中断位。

光清除INTPND里面的位还不行,因为SRCPND里面WDT和DMA的中断在,当你刚清除完INTPND,结果SRCPND里面又选了一个中断出来送到INTPND里面。所以正确的处理方法是退出IRQ模式之前,先清除SRCPND里相应的中断位,再清除INTPND里相应的位。请注意,SRCPND里面可能有多个位,所以清除你已处理过的中断就行,而INTPND里面只可能有一位,直接清掉即可。


再说说Linux的情况。Linux不用FIQ,只用到了IRQ。但是我们有时候一个中断需要处理很长时间,我们需要占用IRQ模式那么长的时间吗?不需要,linux在IRQ模式下只是简单的记录是什么中断,马上切换回SVC模式,换句话说,linux的中断处理都是在SVC模式下处理的。

那么中断号是怎么来的呢?它在ARM上固定死了,相应的中断号只有一个办法得到:查询irqs.h 。先用一个中断号注册一个中断处理程序,当中断发生的时候,Linux怎么知道是我这个中断号发生的中断呢?在处理中断的时候,先读取INTPND,根据需要再读取EINTPEND或SUBSRCPND计算出一个中断号,相应的处理算法在get_irq_nr_base这个宏中。irqs.h中的中断号就是根据这个算法把每个中断号算出来的。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9499

    浏览量

    388804
  • 控制器
    +关注

    关注

    114

    文章

    17648

    浏览量

    190291
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73157

原文标题:干货 | 通俗易懂讲解ARM中断原理以及中断嵌套

文章出处:【微信号:电子工程世界,微信公众号:电子工程世界】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电能质量在线监测装置能识别电压中断事件吗?

    现代电能质量在线监测装置(无论 A 类还是 S 类精度)均能精准识别电压中断事件,且完全符合 GB/T 30137-2013《电能质量 电压暂降、短时中断和电压暂升》、IEC 61000-4-30
    的头像 发表于 11-27 16:27 720次阅读
    电能质量在线监测装置能识别电压<b class='flag-5'>中断</b>事件吗?

    NVIC中断使能与禁止使能

    ARM®Cortex-M0+ 处理器支持最多 32 个外部中断源,分别对应中断使能设置寄存器 NIVC_ISER 的 32 个使能位,和中断使能清除寄存器 NVIC_ICER 的 32
    发表于 11-13 07:14

    关于蜂鸟E203内核中断硬件实现中断嵌套的设计

    (ISR) 中断仲裁:多个中断源同时向处理器发出请求,仲裁选择优先处理哪个中断中断嵌套:已经在处理某个
    发表于 10-23 07:07

    【NCS随笔】如何进入system_off深度睡眠模式以及配置GPIO中断唤醒

    【NCS随笔】如何进入system_off深度睡眠模式以及配置GPIO中断唤醒 本文章主要是讲解NCS下面使用nRF54L15如何进入system_off模式,以及如何配置通过按键唤醒 一、如何进
    的头像 发表于 09-29 00:56 484次阅读
    【NCS随笔】如何进入system_off深度睡眠模式<b class='flag-5'>以及</b>配置GPIO<b class='flag-5'>中断</b>唤醒

    SysTick初始化函数和中断服务函数详解

    SysTick定时器的计数器是向下递减计数的,计数一次的时间TDEC=1/CLKICLK,当重装载寄存器中的值VALUELOAD减到0的时候,产生中断,可知中断一次的时间TINT=VALUELOAD*TDEC=VALUE LOAD/CLKICLK,其中CLKICLK=20
    的头像 发表于 09-23 09:57 517次阅读
    SysTick初始化函数和<b class='flag-5'>中断</b>服务函数详解

    瑞萨RA系列MCU的中断过程介绍

    中断来临的时候会最先经过IRQ寄存器,IRQ寄存器检测到中断的时候,会向中央处理嵌套向量中断控制器NVIC发送中断信号,当NVIC检测到
    的头像 发表于 09-23 09:45 990次阅读
    瑞萨RA系列MCU的<b class='flag-5'>中断</b>过程介绍

    瑞萨RA系列MCU的外部引脚中断详解

    上一章节我们已经详细介绍了NVIC、ICU、ELC、NMI并对RA系列MCU的中断管理系统有个全局的了解,我们这一章节的内容是如何控制外部中断,也是内核里的NVIC的实例应用,这也是RA系列MCU非常重要的一个外部中断资源。
    的头像 发表于 09-23 09:38 1228次阅读
    瑞萨RA系列MCU的外部引脚<b class='flag-5'>中断</b>详解

    第六章 外部中断

    本章介绍W55MH32的IO口作为外部中断输入的使用。先阐述了NVIC(嵌套向量中断控制器) 的结构、寄存器、优先级及相关函数,再说明EXTI(外部中断和事件控制器)的功能。框图及I
    的头像 发表于 05-26 16:27 1007次阅读
    第六章 外部<b class='flag-5'>中断</b>

    极海APM32F003触发NMI中断的解决方案

    问题:APM32F003F6P6 PC3配置成外部中断口,下拉触发之后没有进入EINTC_IRQHandler外部中断函数,反而一直触发NMI中断
    的头像 发表于 05-24 14:44 719次阅读
    极海APM32F003触发NMI<b class='flag-5'>中断</b>的解决方案

    AS32X601驱动系列教程 PLIC_中断应用详解

    平台中断控制器(Platform Level Interrupt Controller,PLIC)是国科安芯AS32系列MCU芯片的中断控制器,主要对中断源进行采样,优先级仲裁和分发。各外设
    的头像 发表于 05-23 17:10 531次阅读
    AS32X601驱动系列教程 PLIC_<b class='flag-5'>中断</b>应用详解

    单片机中断技术详解

    在现代电子设备中,单片机作为控制核心发挥着举足轻重的作用。而在其高效运作的背后,中断机制是推动单片机实现实时响应与高效执行的关键因素。本文将深入探讨单片机中的中断概念、中断系统的结构、中断
    的头像 发表于 02-02 15:57 1449次阅读

    串口中断是内部中断还是外部中断,串口中断是怎么触发的

    串口中断通常被视为外部中断。虽然串口控制器(如USART、UART等)可能集成在微控制器或处理器的内部,但从中断的角度来看,串口中断是由处理器外部的通信事件触发的。这些事件包括数据的接
    的头像 发表于 01-29 15:03 2636次阅读

    串口中断需要清除标志位吗,串口中断标志位会自动清除吗

    在电子通信领域,串口中断作为一种重要的通信机制,广泛应用于各种嵌入式系统和计算机设备中。串口中断标志位的管理,尤其是是否需要手动清除以及是否会自动清除,是理解和实现串口通信的关键环节。
    的头像 发表于 01-29 14:59 2950次阅读

    程序中断的100种写法

    在编程中,实现程序中断的方式取决于所使用的编程语言、硬件平台以及具体的应用需求。虽然没有100种独立的中断实现方式,但可以通过不同的方法和技术来实现中断。以下是一些常见的
    发表于 01-28 08:25

    利用Minitab应对供应链中断问题

    供应链中断是不可避免的,但积极的措施和数据驱动的战略可以减轻其影响。Minitab全面的数据分析和问题解决工具使组织能够分析、优化和调整其供应链,以应对不可预见的挑战,确保面对中断时的弹性和连续性。
    的头像 发表于 01-02 17:16 690次阅读