精华内容
下载资源
问答
  • 在ARM架构的嵌入式系统中,有着不同的中断请求,而不同的中断请求有着不一样的优先级。 请求类型 复位 (Reset) 数据中止(Data Abort) 快速中断(FIQ) 中断(IRQ) 预取中止(Prefetch Abort) ...

    在ARM架构的嵌入式系统中,有着不同的中断请求,而不同的中断请求有着不一样的优先级。

    请求类型
    复位 (Reset)
    数据中止(Data Abort)
    快速中断(FIQ)
    中断(IRQ)
    预取中止(Prefetch Abort)
    未定义指令(Undefined Instruction)
    软中断(SWI)

    优先级依次从高到低。

    这是说一下为什么会有数据中止和预取中止,因为在RISC中是流水线的操作方式,也即是取指令和取数据是在不同的流水阶段完成的。而在取数据和取指令的过程中均有可能发生异常,所以也需要两个异常中断与之对应。

    展开全文
  • STM32支持多种中断,经常遇到中断优先级的问题,关于cortex-M3的中断优先级的描述。
  • 关于 STM32 中断优先级

    2012-04-25 09:33:42
    一:综述STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。二:优先级判断...

    一:综述

    STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级
    的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。

    二:优先级判断

    STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

    具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

    当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
    三:优先级分组
    既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位在NVIC应用中断与复位控制寄丛器(AIRCR)的中断优先级分组域中,可以有8种分配方式,如下:

    所有8位用于指定响应优先级
    最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
    最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
    最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
    最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
    最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
    最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
    最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

    这就是优先级分组的概念。


    Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位(AIRCR高四位),这4个寄存器位的分组方式如下:

    关于 STM32 中断优先级 - keendawn - keendawn的博客
     
    第0组:所有4位用于指定响应优先级
    第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
    第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
    第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
    第4组:所有4位用于指定抢占式优先级

    可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

    NVIC_PriorityGroup_0 => 选择第0组
    NVIC_PriorityGroup_1 => 选择第1组
    NVIC_PriorityGroup_2 => 选择第2组
    NVIC_PriorityGroup_3 => 选择第3组
    NVIC_PriorityGroup_4 => 选择第4组

    中断优先级分组是为了给抢占式优先级和响应优先级在中断优先级寄丛器的高四位分配各个优先级数字所占的位数在一个程序中只能设定一次

    四:中断源的优先级

    接下来就是指定中断源的优先级,中断源优先级是在中断优先级寄存器中设置的,只能设置及高四位,必须根据中断优先级分组中设置好的位数来在该寄存器中设置相应的数值。假如你选择中断优先级分组的第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级,那么抢占式优先级就有000-111共八种数据选择,也就是有八个中断嵌套,而响应优先级中有0和1两种,总共有8*2=16种优先级。

    中断源优先级具体的设置了该中断源的优先级别

    在一个程序中可以设定多个(最多16个)优先级,每个中断源只能设定的一个。

    每写一个关于中断优先级的程序必须包含下列两个函数:

     

    (1)void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)中断分组设置

    (2)void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)中断优先级设置

    展开全文
  • STM32中断设置以及中断优先级设置

    万次阅读 多人点赞 2018-09-13 15:26:45
    最近,在做一个智能锁的项目,由于,今天碰到了一个关于中断的问题,因此,又回来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工。问题是什么呢?项目中我用到了一个触摸键盘TTP229,结果在测试键盘时,不能够...

    最近,在做一个智能锁的项目,由于,今天碰到了一个关于中断的问题,因此,又回来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工。问题是什么呢?项目中我用到了一个触摸键盘TTP229,结果在测试键盘时,不能够输入密码?最终,调试出bug就是由于中断优先级的影响。

    本项目使用到的是STM32F030C8型号的MCU,我们可以从官方下载到的标准库文件中的启动汇编文件中,查看到本型号单片机的外部中断向量表。(如下图所示)

     

    首先,我们了解一下NVIC是什么,在core_cm0.h文件中的标准库中的NVIC结构体。

    其中,我们一般只用到ISER、ICER、IP这3个寄存器。ISER用于使能中断,ICER用来清除中断,IP用来设置中断优先级。

     

    其次,我们了解一下中断优先级,中断优先级寄存器NVIC_IPRx,本寄存器宽度为8位,原则上每个外部中断可配置的优先级为0~255,实际上精简了,只用到了它的高4位。这4位,又被分成了抢占优先级和响应优先级两组,然后,中断优先级有分为以下几种情况:

    1、抢占优先级不同,会涉及到中断嵌套,抢占优先级高的会优先抢占优先级低的,优先得到执行。(注意:优先级数字越小,优先级越高)

    2、抢占优先级相同,不涉及到中断嵌套,响应优先级不同,响应优先级高的先响应。(例如:两个中断同时响应,这里就会先执行响应优先级高的那个中断)(注意:优先级数字越小,优先级越高)

     

    3、抢占优先级和响应优先级都相同,则比较它们的硬件中断编号,中断编号越小,优先级越高。(硬件中断编号从中断向量表当中查看)

     

     

    中断优先级分组,因为中断优先级只使用了高4位,所以,中断优先级的分组分别有以下几种情况:

    优先级分组

    抢占优先级

    响应优先级

    描述

    NVIC_PriorityGroup_0

    0

    0到15的取值

    高4位全部是响应优先级,无抢占优先级

    NVIC_PriorityGroup_1

    0到1的取值

    0到7的取值

    抢占优先级为1位,响应优先级为3位

    NVIC_PriorityGroup_2

    0到3的取值

    0到3的取值

    抢占优先级为2位,

    响应优先级为2位

    NVIC_PriorityGroup_3

    0到7的取值

    0到1的取值

    抢占优先级为3位,响应优先级为1位

    NVIC_PriorityGroup_4

    0到15的取值

    0

    高4位全部是抢占优先级,无响应优先级

     

    最后,总结一下中断编程的三步曲:

    第一步:使能外设某个中断,具体由对应的中断使能位控制。

    (例如:我们使用到GPIO之前必须开启GPIO端口的时钟,用到EXTI必须开启AFIO时钟)

     

    第二步:初始化NVIC_InitTypeDef结构体,配置中断优先级分组,设置抢占优先级和响应优先级,使能中断请求。

    库函数:

    NVIC_IRQChannel()设置不同的中断源,在IRQn_Type IRQn结构体寻找自己对应的中断源。

    NVIC_IRQChannelPreemptionPriority()设置抢占优先级

    NVIC_IRQChannelCmd() 中断使能或者取消使能

     

    第三步:编写中断服务函数,在stm32f0xx_it.c文件中,都有一个根据中断向量表,实现的一个空的中断服务函数,需要我们自己重新编写。

    展开全文
  • STM32中断,及FreeRTOS中断优先级配置

    千次阅读 2018-12-20 18:19:57
    置顶/星标公众号,不错过每一条消息! 很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断优先级配置的内容。...
        

    置顶/星标公众,不错过每一条消息!

    640?wx_fmt=png

        很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断优先级配置的内容。

    1写在前面

    写本文之前,先写点相关的扩展内容。

    STM32属于ARM中Cortex-M系列处理器,比如:STM32F1数据Cortex-M3,STM32F7数据Cortex-M7。


    可以参看我之前分享文章:从Cortex-M到Cortex-A认识ARM处理器了解一下关于ARM处理器的种类。


    本文主要结合Cortex-M3下面STM32F1系列处理器为例来讲述中断控制相关内容。而Cortex-M其它系列,或者说STM32其它系列关于中断的内容类似。


    Cortex-M3只是STM32F1的一个内核。反过来说STM32F1是在Cortex-M3基础上增加了一些外设(如:USART、AD等)的芯片


    2

    STM32中断控制

    NVIC:Nested Vectored Interrupt Controller,即嵌套向量中断控制器。


    STM32中NVIC我们比较熟悉,编程的时候使用中断都会对NVIC进行配置。


    STM32F1中的NVIC是属于Cortex-M3中的一部分,而不是STM32增加的外设。


    NVIC向量中断控制器是Cortex‐M3不可分离的一部分,它与 CM3 内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。


    所以,NVIC相关的寄存器位于Cortex-M手册中讲述STM32的中断控制,还得从Cortex-M3的NVIC讲起,


    1.中断输入向量表

    Cortex-M3的NVIC支持1至240个中断输入,比如STM32中xxxIRQs,也就是中断向量表,具体的数值由芯片厂商在设计芯片时决定。


    比如STM32F1的中断和异常向量表:

    640?wx_fmt=png

    640?wx_fmt=png

    2.中断和异常区别

    很多初学的朋友不知道什么是中断?什么是异常?甚至有人直接把中断和异常笼统称为“中断”。


    中断和异常其实有差异,也有关联,我们常说的中断其实是包含了异常。异常可以理解为MCU,或者程序处于了某种异常状态。


    这么区分吧,看上面向量表,上部分有灰色背景的为异常,下部分白色的为中断


    异常属于Cortex‐M3内核的一部分,而中断属于MCU(STM32的一部分(由厂家决定)。


    所以:

    1.站在Cortex‐M3内核角度像STM32中USART这类中断,属于外部中断。

    2.站在STM32角度,EXTI外部引脚中断才属于中断。


    3.优先级

    对于Cortex-M3来说,每个外部中断都有一个对应的优先级寄存器。


    每个寄存器占用8位,但是允许最少只使用最高3位,在STM32F1中使用了高4位。(也就是我们可以分16个优先级)


    优先级可以被分为高低两个位段,分别是抢占优先级和亚(响应)优先级

    640?wx_fmt=png

    提示:

    1.STM32中断优先级数值越小,优先级越大


    2.优先级分组:Cortex-M3,M4具有分组功能,即存在抢占优先级和响应优先级,如下图:

    640?wx_fmt=png

    而有的内核就没有,如Cortex-M0就没有。

    3.参考资料

    可以参看《Cortex-M3权威指南》


    STM32的内核编程手册:

    http://www.st.com/stonline/products/literature/pm/15491.pdf


    3

    FreeRTOS中断优先级配置

    本节内容讲述一下FreeRTOS最大中断优先级配置问题,也就是FreeRTOSConfig.h配置文件中的:

    configMAX_SYSCALL_INTERRUPT_PRIORITY

    640?wx_fmt=png

    你们知道配置数值的含义吗?


    这里就需要结合NVIC相关的内容来理解。


    上面说了,在STM32中,使用了NVIC优先级的高4位,而我们配置时需要对高4位进行配置(低4位未使用)。

    640?wx_fmt=png

    看上图,明白了吗,上面这个数值就是95,但代表的优先级为5。

    这个配置数值的含义,大概意思是:你代码中使用的中断(比如USART1_IRQn)优先级需要大于5才可行


    如下面配置,优先级为2就不行(当然,有分组的还牵涉到分组问题)。

    640?wx_fmt=png

    关于FreeRTOS最大优先级配置的内容可以参考:

    https://www.freertos.org/RTOS-Cortex-M3-M4.html

    提示:

    FreeRTOS任务优先级是数值越大,优先级越高。需要和中断优先级区分开来。

    推荐阅读:

    1.从Cortex-M到Cortex-A认识ARM处理器

    2.STM32串口中断、DMA接收的几点注意地方

    4最后

    若觉得文章对你有帮助,随手点赞、分享,也是对我莫大的支持和鼓励。

    扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!

    640?wx_fmt=jpeg

    长按识别图中二维码关注

    展开全文
  • 最近在做一个agv的控制板开发时发现,中断优先级的不同设置方式会对接收的数据产生影响。思考了一阵后发现会不会是接收数据超时导致接收到的数据出现错误,所以就有了以下思考。由于我们用的串口比特率偏高,导致...
  • 关于AVR中断优先级

    2020-07-23 17:07:03
    将本讲简单介绍一下AVR中断优先级
  • 很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断优先级配置的内容。1写在前面写本文之前,先写点相关的扩展内容。...
  • STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。 STM32F103系列上面,又只有60个可屏蔽中断,在107系列才有68个。 《SMT32中文参考手册》中关于STM32F103系列的60个可屏蔽中断 ...
  • 最近又遇到了使用Systick来产生精确计时,然后又涉及到了Systick的中断优先级的问题。我们老板认为Systick属于内核外 设,中断优先级应该比普通外设高。然后我们说,在网上看到的是,Systick的中断优先级ST官方默认...
  • CM3/STM32的中断优先级设定

    千次阅读 2017-03-14 16:29:28
    在STM32的手册里没有提到关于设置中断优先级的情况,只列给出了中断向量表。根据该向量表可以创建一个中断编号的枚举数据,方便设置优先级及使能等的使用。 先说一下如何设置优先级。 优先级的设置在Cortex-...
  • 网上有许多关于FreeRTOS中断优先级的配置资料,但是在v10.0中个别配置项发生了变化,在这篇文章中详细的介绍了整个优先级管理配置方案。 ARM芯片的优先级为0~255,不同的芯片厂商所用的优先级不同,并不是全部使用,...
  • 关于中断源的中断优先级关系,可以归纳为下面两条基本原则: (1)低优先可被高优先级中断,高优先级不能被低优先级中断。 (2)任何一种中断(不管是高级还是低级)一旦得到响应,不会再被它同等级的中断源所中断 ...
  • 一、STM32 (Cortex-M3) 中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式...
  • 中断请求源发出中断请求时,如果中断请求得到允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断请求,处理完中断服务请求后,再回到原来被中止的程序处(断点),继续执行被中断的...
  • https://blog.csdn.net/To_be_a_fisher/article/details/84986790 https://www.cnblogs.com/jieruishu/p/4444701.html
  • 中断优先级

    2018-08-28 11:41:22
    关于中断优先级有三条原则: 1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求; 2、正在进行的中断过程不能被新的同级或低行优优先级的中断请求所中断; 3、正在进行的低行优优先级中断服务,能被高...
  • 有网友经实验验证,Systick虽然作为与CPU紧耦合的内核外设,但其中断优先级并不比普通外设要高,并不因为它是内核外设而特殊,它还是遵循中断优先级高低的规则来响应。 ... Systick优先级是最低的 ...
  • 优先级中断被高优先级中断打断,是怎样的过程?答:cortex-M3内核种咬尾中断,和晚到的中断 ,看权威指南里面有! 高优先级中断时出现低优先级中断事件,这个事件会被忽略掉吗?答 :不会,中断标志位会记下这个...
  • 以8051为例,中断系统含有5个中断源,分别是外部中断0请求(INT0),外部中断1请求(INT1),定时/计数器0溢出中断请求(T0),定时/计数器1溢出中断请求(T1)以及串行口中断请求(Tx/...
  • 1.机器校验中断:高速程序发生了设备故障,比如电源故障,主存出错等 ...4.外部中断:来自机器外部,包括定时器中断、外部信号中断中断中断等 5.IO中断:由IO控制器产生,用于发送信号通知操作完成 6.重启中断 ...
  • 关于stm32的优先级

    2020-08-09 19:01:48
    STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级 的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。
  • 中断嵌套和中断优先级 一般上我们是把红外接到外部中断,这时候如果你是用数码管显示对应的键码信息,数码管的扫描是在定时器中断中。这时候要特别注意如果红外的外部中断比数码管的定时器中断固有优先级高,这时候...
  • Systick模块初始化配置函数(Systick_config)中设定模块中断优先级的函数为: NVIC_SetPriority((SysTick_IRQn, (1   参数SysTick_IRQn为systick基址,这个没什么好说的   关键在参数...
  • 关于stm32优先级大小的理解

    千次阅读 2017-12-08 15:02:19
    一、 组别:0>1>2>3>4  组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>... ① 实验现象:中断B(C
  • 关于中断嵌套中的SysTick中断

    千次阅读 2016-05-12 11:06:45
    中断优先级组 STM32用4个比特位来指定中断源的优先级,并可分为5个优先级组(Cortex-M3中定义了8个比特位用于设置中断源的优先级,并且允许具有较少中断源时使用较少的寄存器位指定中断源的优先级)。 //stm3210x.h#...
  • 采用 2-deep的FIFO解决; 捕获数据采用队列insert的操作来存储,insert的对象为一个周期的捕获值,即三...捕获中断ISR由CAP1引发,且配置CAP1捕获下降沿,CAP2捕获上升沿; 2-deep的FIFO分别用[0]和[1]来索引; ---...
  • 唤醒关于Object类提供的wait、notify、notifyAll三个方法:wait():让当前线程处于等待(阻塞)状态,直到其他线程调用该同步监视器的notify(),notifyAll()方法来唤醒该线程,进入就绪状态。wait()会释放对当前线程...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 248
精华内容 99
关键字:

关于中断优先级