问题: 对于基于ARM Cortex M0内核的STM32芯片各类应用开发时,有的时候需要进行总的中断的开、关处理。那就究竟有没有开、关总的中断的函数或者指令呢?
回答: 随着Corte Mn各种内核的MCU的芯片越来越多和相关编译工具的升级换代,编译工具在有关内核指令操作的文档安排以及函数书写等方面可能发生了细微的变化。所以即使用过STM32 F1系列产品的工程师,在使用晚推出的STM32 F0芯片开发时,发现那些跟内核操作有关的指令或函数不知道哪里去找了。以STM32各系列的标准固件库为例,与内核相关的指令及函数都可以在...\libraries\cmsis\...后面目录的相关文件里找到。于不同系列的标准库中对应的子目录以及相关文件名会略微有差异。
一般来讲我们是不需要做总的中断的关闭操作,或许个别情况真的需要。当然也不排除部分人出于之前使用MCU开发习惯或者好奇怎么用。
对于开、关STM32芯片总的中断,是针对ARM CortexM内核的操作指令。在各类的ARM内核的编程手册上一定可以找到,但是STM32芯片相关手册上是找不到的。开、关总中断的汇编指令分别就是CPSIE iCPSID i,对于各个ARM Cortex系列MCU芯片来说,都是一样的。

CPSID i; // Disable all interrupts except NMI(includes a non-maskable interrupt).set PRIMASK
CPSIE i; // Enable interrupts.clear PRIMASK

CPS(Change Processor State)改变的是PRIMASK(Interrupt mask register)寄存器值。CPSID通过PRIMASK置1中断disable,CPSID通过PRIMASK清0操作中断enable。

内在函数 操作码 PRIMASK FAULTMASK
__enable_irq CPSIE i 0
__disable_irq CPSIE i 1
__enable_fiq CPSIE i 0
__disable_fiq CPSIE i 1

目前各编译工具都把与内核相关ARM指令根据指令功能将其中某一条或几条汇编指令封装为C函数,函数名相对更为直观、好记,方便用户需要时拿来使用。比方在ARM MDK环境下,上面两个开关总中断的指令封装成如下2个内嵌函数。
关闭总中断的指令函数:

__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
{
__ASM volatile ("cpsid i" : : : "memory");
}

打开总中断的指令函数:

__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
{
__ASM volatile ("cpsie i" : : : "memory");
}

需要关闭总中断时,用户代码里直接放置__disable_irq()
需要开启总的中断时,用户代码里直接放置__enable_irq()

【stm32f0】stm32 总中断的打开与关闭相关推荐

  1. STM32外部中断的关闭和打开

    注:库函数没有现成的函数打开和关闭外部中断 在某些时候我们希望暂时的关闭某条外部中断,以免造成误触发,此时可以使用下面的操作: 关闭: EXTI->IMR &= ~(EXTI_Linex ...

  2. STM32开启和关闭总中断的方法

    __set_PRIMASK(1); //关总中断__set_PRIMASK(0); //开总中断

  3. STM32中断优先级和开关总中断(很老很经典)

    一.中断优先级: STM32(Cortex-M3)中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念--抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个 ...

  4. STM32/M3/M0关于开关总中断的问题

    NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQs). 具体的数值由芯片厂商在设计芯片时决定.此外, NVIC 还支持一个"永垂不朽"的不可屏蔽中断(NM ...

  5. STM32 Uart中断接收

    小明正在玩游戏,小明的妈妈喊小明吃饭,这时,小明放下游戏,先去吃饭,吃完饭后,继续玩游戏. 这就是中断!"正在玩游戏"是执行程序,"小明的妈妈"是中断源,&qu ...

  6. STM32——理解中断与中断配置

    前言:本文将从"这是什么?" "为什么需要它?" "如何配置操作它"三个角度展开讨论分析 目录 中断简介 抢占优先级和子优先级 中断分组 配 ...

  7. STM32外部中断与(NVIC)中断优先级管理

    文章目录 1.中断介绍 1.中断的概念 2.中断的产生 3.中断处理的流程 2.STM32内嵌向量中断控制器NVIC 1.NVIC控制器的寄存器 2.STM32中断配置 3.STM32外部中断EXIT ...

  8. 基于STM32外部中断系统的秒表的设计

    1.项目简介 硬件平台:基于某STM32F103开发板. 软件平台:KEIL5 MDK V5.38,基于LCD屏幕库函数例程库为模板,添加了外部中断,定时器中断相关代码,稍加修改而成. 功能简介:有三 ...

  9. STM32的中断和异常

    STM32的中断和异常 我们把能够打断当前代码执行流程的事件分为异常(expection)和中断(interrupt),把他们用一个表管理起来就是中断向量表.中断向量顾名思义就是一个地址,当发生中断的 ...

最新文章

  1. 2012年度最新免费web开发设计资源荟萃
  2. sqlite使用模糊查询数据库数据的三种方式
  3. [EmguCV|C#]使用CvInvoke自己繪製色彩直方圖-直方圖(Hitsogram)系列(4)
  4. LeetCode 1680. 连接连续二进制数字(位运算)
  5. Linux 6.8 源码安装MySQL8.0
  6. asp.net oracle 分页,asp.net教程之利用ASP实现Oracle数据记录的分页显示
  7. redis php高级使用_项目中应用Redis+Php的场景
  8. Ubuntu Kvm USB重定向问题解决
  9. Linux下ALSA驱动分析
  10. Postgresql的基本操作
  11. opencv Python 图片颜色识别
  12. 英文间隔符占位html,HTML空格占位
  13. Debian添加开机启动项
  14. 微信官方支付接口配置教程
  15. 自定义水晶报表的外观
  16. ​K歌中的歌唱评价与嗓音分析
  17. 暴雪战网怎么修改服务器,战网更改地区的图文教程
  18. 遍历Python字典
  19. 祝大家新年快乐,鼠年平安健康、阖家幸福如意!
  20. linux 压缩保持属性不变,linux文件压缩

热门文章

  1. linux下文件重命名
  2. 武汉科技大学计算机生命与科学周海,湖北双胞胎周海周洋:为了母亲,一个放弃清华,一人放弃中科院...
  3. Linux学习笔记 Day0
  4. NR/5G - Measurement, GAP, SFTD
  5. 用JavaScript判断一个数是否是素数
  6. 本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止.
  7. docker搭建redis集群
  8. 网站反爬虫策略VS反反爬虫策略
  9. log4cpp源码阅读:Appender组件学习
  10. 一年经验的java程序员薪资有多少?java收入分级