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
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348866
  • Cortex
    +关注

    关注

    2

    文章

    194

    浏览量

    45758
  • NVIC
    +关注

    关注

    0

    文章

    35

    浏览量

    11521
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    M0516中断优先级怎么设置?

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

    为什么有些STM32中断没有优先级

    看到一个交流群在讨论关于关于STM32中断优先级的话题】,其中就有小伙伴提到:为什么有些STM32中断没有【子优先级】?
    的头像 发表于 10-17 15:50 411次阅读
    为什么有些STM32中断<b class='flag-5'>没有</b>子<b class='flag-5'>优先级</b>?

    STM32中断没有优先级

    比如,有时候你在使用STM32CubeMX配置时,你会发现只有Preemption Priority【抢占优先级】,而没有Sub Priority【次优先级
    的头像 发表于 10-17 15:50 429次阅读
    STM32中断<b class='flag-5'>没有</b>子<b class='flag-5'>优先级</b>?

    STM32中断优先级相关概念与使用笔记

    ARM cortex_m3 内核支持 256 个中断(16 个内核+240 外部)和可编程 256 中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(
    发表于 10-11 06:53

    Cortex-M的RTOS中断优先级配置方案

    你们知道配置数值的含义吗?这里就需要结合NVIC相关的内容来理解。 上面说了,在STM32中,使用了NVIC优先级的高4位,而我们配置时需要对高4位进行配置(低4位未使用)。
    发表于 09-25 09:18 354次阅读
    <b class='flag-5'>Cortex</b>-M的RTOS中断<b class='flag-5'>优先级</b>配置方案

    为什么使用CubeMx配置NVIC时不见子优先级选项

    时,不难发现一个问题,那就是怎么没有中断子优先级【或称响应优先级、副优先级等】的配置?!【当然,很多时候我们或许没有关注子
    的头像 发表于 09-09 15:32 754次阅读
    为什么使用CubeMx配置<b class='flag-5'>NVIC</b>时不见子<b class='flag-5'>优先级</b>选项

    STM32 MCU通过STM32CubeMx配置NVIC怎么没有中断子优先级选项

    时,不难发现一个问题,那就是怎么没有中断子优先级【或称响应优先级、副优先级等】的配置?!【当然,很多时候我们或许没有关注子
    发表于 09-09 09:25 807次阅读
    STM32 MCU通过STM32CubeMx配置<b class='flag-5'>NVIC</b>怎么<b class='flag-5'>没有</b>中断子<b class='flag-5'>优先级</b>选项

    求助,新唐M0516中断优先级的设置有没有示例?

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

    ARM Cortex-M0设计启动评估用户指南

    硬件原型设计。 Cortex-M0 DesignStart Eval包面向ARM新手或具有有限软IP系统设计经验的开发人员。 该套餐包括以下内容: ·DesignStart的ARM Cortex-M0
    发表于 08-18 07:58

    ARM Cortex-M0 DesignStart FPGA测试台用户指南

    。 您可以使用以下命令对FPGA进行编程: ·DesignStart的ARM Cortex-M0处理器以加密分区的形式提供。 ·ARM CMSDK外设,作为用户可修改的分区提供。 原型系统使硬件
    发表于 08-12 08:00

    PLIC管理的中断的优先级和RISC-V本身的机器定时器以及软中断的中断优先级问题

    请问PLIC管理的外设中断的优先级和RISC-V本身的机器定时器以及软中断谁的优先级会更高? 机器定时器中断和软中断不归PLIC管(PLIC管理其他外设的中断优先级),那么机器定时器中
    发表于 06-25 19:05

    请问M0系列的中断优先级在哪儿设置啊?

    M0系列的中断优先级在哪儿设置啊
    发表于 06-16 07:52

    m029lan中断优先级设置与实际对不上是什么原因?

    优先级0-3,共40最高,3最低。现在用函数:NVIC_SetPriority(UART0
    发表于 06-16 06:19