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

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

3天内不再提示

关于Cortex-M0的NVIC没有优先级分组功能,以及衍生内容

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-03-01 13:08 次阅读

今天遍地都是520的消息,华为也是热点。我们可以关注热点,自己的事还得继续做下去。

1写在前面

今天在一个交流群看到有人问,为什么NVIC没有优先级分组配置的选项,如下如:

这个问题,想必没有遇到过的人,还以为是STM32CubeMX的Bug。

其实,答案很简单:有的MCU是没有NVIC分组功能。

下面就针对这个NVIC分组功能展开来讲述。

2关于Cortex-M的NVIC

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

在每个Cortex-M内核中都有这么一个NVIC嵌套向量中断控制器,当MCU使用的内核不同,其中的NVIC也可能不同。

比如,Cortex-M0和Cortex-M3内核中NVIC功能就不同。

其中,中断优先级分组功能就不同。

Cortex-M0的NVIC没有优先级分组功能,Cortex-M3、 M4、M7有分组功能。

所以,你在使用STM32CubeMX配置时,M0内核的STM32是没有那个选项的。

Cortex-M0包含STM32F0、L0、G0等处理器

对底层感兴趣的朋友可以继续往下看。

3NVIC寄存器

NVIC寄存器,需查看对应的内核(Cortex-M)手册,在ARM官网能找到。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0432c/index.html

M3也有对应的中文翻译版,大家可以自己网上搜索。

内核中的寄存器和我们STM32参考手册中寄存器一样,不同的Bit位代表含义不同。

但是,对于NVIC来说,由于包含众多优先级相关配置,寄存器数量相对较多(NVIC寄存器族)。

拿M3来说,优先级分组的配置,位于NVIC的AIRCR应用程序中断及复位控制寄存器中:

这里推荐阅读之前我写过的一篇文章:STM32中断,及FreeRTOS中断优先级配置

4中断入口

前两天有人问题外部中断入口的问题:为什么外部中断8和9都使用同一个中断?

void EXTI9_5_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line8) != RESET) { /* 代码 */ EXTI_ClearITPendingBit(EXTI_Line8);} if(EXTI_GetITStatus(EXTI_Line9) != RESET) { /* 代码 */ EXTI_ClearITPendingBit(EXTI_Line9); }}

我想,这个问题应该不难。

好比一个main程序入口,进入之后需要处理很多事情,只是在里面需要区分事件。

很多外设中断,都会使用同一个中断入口,有一个原因:节约中断入口资源分配。

像USART发送和接收中断,TIM不同通道捕获中断等。

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

    关注

    2264

    文章

    10852

    浏览量

    354100
  • Cortex
    +关注

    关注

    2

    文章

    201

    浏览量

    46404
  • NVIC
    +关注

    关注

    0

    文章

    35

    浏览量

    11667
收藏 人收藏

    评论

    相关推荐

    使用CH32V103C8TC设置中断优先级分组时,编译报错的原因?

    使用CH32V103C8TC设置中断优先级分组时,设置为NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);编译报错 而使用
    发表于 09-27 06:03

    CH32V103 使用中断优先级分组0时报错

    使用CH32V103C8TC设置中断优先级分组时,设置为NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);而使用
    发表于 09-23 13:52

    freertos中断优先级在哪设置

    FreeRTOS是一个流行的实时操作系统,它广泛应用于嵌入式系统开发。在FreeRTOS中,中断优先级是一个重要的概念,因为它决定了中断处理的顺序和响应时间。 1. 理解中断优先级 在讨论如何设置
    的头像 发表于 09-02 14:17 456次阅读

    systick的中断优先级是否应该设置为最高优先级的嵌套中断?

    最近在学习ucosii有这样一个疑问,关于stm32的systick作为ucosii的基准时钟,systick的中断优先级是否应该设置为最高优先级的嵌套中断。理由是什么?各位大侠求指教!!!
    发表于 05-16 06:44

    请问stm32的cortex-m0怎么样?

    为什么都说STM32专业做M3 ,M4,M0要找芯唐和NXP,难道因为ST的CORTEX-M0芯片不稳定还是有其他问题?
    发表于 05-15 06:31

    stm32的中断优先级分组了之后还能改分组吗?

    如标题所示,stm32的中断优先级分组了之后还能改分组吗? 比如我要使用外部中断EXIT2,3,我在配置的时候配置了优先级分组2组,然后配
    发表于 05-13 08:40

    请问stm32f030R8的中断优先级分组如何设置?

    官方的库函数中没有中断优先级分组的函数 查阅了M0的手册也没有找到SCB->AIRCR寄存器详细的说明
    发表于 05-13 07:43

    求助,关于stm32F4中断优先级0无法抢占的问题求解

    使用F407遇到一个抢占优先级的问题: 现设置优先级分组 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORIT
    发表于 04-23 07:26

    不会RTOS,是因为你没搞懂NVIC

    管理的中断可进行中断嵌套,直译为高优先级可打断低优先级中断,然后高优先级执行完了再转回去执行低优先级中断。对于RTOS(实时操作系统)类型的OS有很大的好处,所以
    的头像 发表于 03-31 08:09 874次阅读
    不会RTOS,是因为你没搞懂<b class='flag-5'>NVIC</b>

    STM32F103的寄存器NVIC_IPRx抢占优先级和子优先级是怎么设置的?

    STM32F103的寄存器NVIC_IPRx有些不明白,抢占优先级和子优先级是怎么设置的? 如果,中断分组2,抢占优先级3,子
    发表于 03-27 07:48

    M0516中断优先级怎么设置?

    新唐M0516中断优先级的设置,有没有示例,没找到相关接口,谢谢!
    发表于 01-16 07:25

    华为和思科默认路由优先级

    优先级值不同,则优先级值最小的为最优路由(无论开销值是否相同,另一种理解就是对不同路由来源或路由协议之间的比较)。
    的头像 发表于 01-11 10:47 1017次阅读

    GD32如何配置中断优先级分组以及中断优先级

    使用GD32 MCU的过程中,大家可能会有以下疑问:中断优先级如何配置和使用?
    的头像 发表于 01-10 10:30 2841次阅读
    GD32如何配置中断<b class='flag-5'>优先级</b><b class='flag-5'>分组</b><b class='flag-5'>以及</b>中断<b class='flag-5'>优先级</b>

    python中运算符的优先级大小

    解。 Python中的运算符可以分为以下几类:算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符以及成员访问运算符。这些运算符有不同的优先级。下面我们将详细介绍每个运算符的优先级。 算术运算符的
    的头像 发表于 11-29 16:21 2918次阅读

    python运算符优先级顺序口诀

    将详细介绍Python运算符的优先级顺序以及如何正确使用它们。 首先,让我们从最高优先级的运算符开始,逐步向下解释。在Python中,最高优先级的运算符是括号,即"()"。无论你要执行
    的头像 发表于 11-22 14:34 2032次阅读