datasheet

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

2019-07-13来源: eefocus关键字:stm32f0  stm32  总中断  打开与关闭

问题: 对于基于ARM Cortex M0内核的STM32芯片各类应用开发时,有的时候需要进行总的中断的开、关处理。那就究竟有没有开、关总的中断的函数或者指令呢? 


回答: 随着Corte Mn各种内核的MCU的芯片越来越多和相关编译工具的升级换代,编译工具在有关内核指令操作的文档安排以及函数书写等方面可能发生了细微的变化。所以即使用过STM32 F1系列产品的工程师,在使用晚推出的STM32 F0芯片开发时,发现那些跟内核操作有关的指令或函数不知道哪里去找了。以STM32各系列的标准固件库为例,与内核相关的指令及函数都可以在...librariescmsis...后面目录的相关文件里找到。于不同系列的标准库中对应的子目录以及相关文件名会略微有差异。 


一般来讲我们是不需要做总的中断的关闭操作,或许个别情况真的需要。当然也不排除部分人出于之前使用MCU开发习惯或者好奇怎么用。 


对于开、关STM32芯片总的中断,是针对ARM CortexM内核的操作指令。在各类的ARM内核的编程手册上一定可以找到,但是STM32芯片相关手册上是找不到的。开、关总中断的汇编指令分别就是CPSIE i、CPSID 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  总中断  打开与关闭

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic467664.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32低功耗状态的引脚配置
下一篇:STM32开发笔记76: 初始化RTC后死机的原因

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32开发笔记49:STM32F4+DP83848以太网通信指南系列(三)

本章为系列指南的第三章,这一章将会在正式进入以太网的配置和使用之前,复习一下STM32的中断以及中断向量,因为我们以后要在中断中响应以太网收包。中断—嵌入式中的多线程从51单片机到ARM架构的32位微芯片,到树莓派、Ardunio等单板机,中断的概念对于这些芯片都非常重要。本人是纯软件工程师出身,科班学习时根本没有接触过嵌入式开发,学的都是C++,C#,JAVA,Go这些语言。在我看来嵌入式中的中断就相当于这些高级语言中的多线程,main()函数定义了一条主线程,然后各种配置出来的中断Handle就是游离在主线程之外的各种事件的回调函数,他们会在不同的事件下响应并触发,一旦触发中断,CPU的运算逻辑将会在主线程中打个断点,并立
发表于 2019-07-15

STM32开发笔记50:STM32F4+DP83848以太网通信指南系列(四)

,有如下描述:红框标记部分阐述了PHYAD0内部上拉了,其余4个AD位内部下拉了,因此悬空状态下这颗DP83848的默认ADDR就是0x01。PHY配置PHY的配置主要解决GPIO的配置和RMII的接口,这部分比较简单,因为GPIO很多都是专用的,基本都是定义死的,查看原理图或者STM32F4xx的数据手册,都能很容易确定用到哪些GPIO,每个GPIO用来干什么的,代码如下:#define     DP83848_PHY_ADDRESS     0x01    // DP83848 PHY芯片地址. void ETH_GPIO_Config
发表于 2019-07-15
STM32开发笔记50:STM32F4+DP83848以太网通信指南系列(四)

STM32开发笔记51:STM32F4+DP83848以太网通信指南系列(五)

本章为系列指南的第五章,讲述STM32F407上MAC层以及其DMA的配置。我们在第一章知识储备章节说到,STM32F407会在168MHz主频之外分配一定的时间释放总线数据用来处理DMA,这其中就包含MAC层的DMA,复习一下STM32F4的总线架构图,(图片来自RM0090ST中文STM32F4手册P50):我们看到,在上图红框标注的的S6阶段,就是MAC层的DMA总线,CPU会在核心逻辑之外,有专门的时间片轮转周期处理这一阶段的DMA,所有的数据读写都是DMA来控制,不需要我们在核心逻辑中编写。本章的要解决的任务只有一个:能编写一个自己构建的DP83848Init()函数,就像任何类似的UART
发表于 2019-07-15
STM32开发笔记51:STM32F4+DP83848以太网通信指南系列(五)

STM32开发笔记52:STM32F4+DP83848以太网通信指南系列(六)

本章为系列指南的第六章,这一章我们暂时离开Keil,离开STM32,离开C语言,这一章我们要去了解一些以太网相关的知识,特别是学习使用大名鼎鼎的调试以太网通信程序的利器:WireShark。帧结构我们从小就听说过计算机中全都是二进制的0和1,这个道理几乎连考不上三本的文科生都懂,但是很难有直观的感受,甚至连由16个bit,也就是16个二进制的0/1构成的十六进制0/F,再由两个十六进制的0/F形成的0x00/0xFF这种Byte(字节),都很难直观感受到,毕竟计算机世界太丰富了,各类色彩,图片,网站,视频,游戏充斥着我们的日常,所谓「乱花渐欲迷人眼,浅草才能没马蹄」,形形色色的计算机资源就是「乱花」,其背后单调的Byte才是「浅草
发表于 2019-07-15
STM32开发笔记52:STM32F4+DP83848以太网通信指南系列(六)

STM32开发笔记53:STM32F4+DP83848以太网通信指南系列(七)

本章为系列指南的第七章,讲述如何在之前的基础上,编写程序在STM32上发送一个网络包,并使用WireShark进行验证。先回顾一下之前的章节我们做好的准备工作,在《STM32F4+DP83848以太网通信指南第五章:MAC+DMA配置》结束时我们封装了一个DP83848的初始化函数,该函数完成了PHY的配置,MAC层的配置,DMA的配置,并且启用了以太网中断,函数命名为DP83848Init(),那么今天,我们要做的主要任务就是编写一个类似的DP83848Send(u8* data, u16 length)函数。可以在本章的一开始跟大家剧透一个好消息,有了《STM32F4+DP83848以太网通信指南第四章:PHY配置
发表于 2019-07-15
STM32开发笔记53:STM32F4+DP83848以太网通信指南系列(七)

STM32开发笔记54:STM32F4+DP83848以太网通信指南系列(八)

本章为系列指南的第八章,讲述如何使用STM32F407芯片配合DP83848进行以太网数据的收包流程,将监听到的网络包数据通过UART传给PC,同时辅以WireShark监听对比验证。关于UART,也就是串口通信的使用,这里不做赘述,我们这里预设两个函数分别为UART6Init()和UART6Send(),实现的功能是串口6的初始化和发送。以太网中断在《STM32F4+DP83848以太网通信指南第五章:MAC+DMA配置》中,我们已经添加了以太网中断,其思路就是想让每次以太网上有收到包都能触发中断,我们可以在中断中将DMA中的数据包取出来进行分析,然后复位,让芯片下一次继续响应中断。配置中断的代码非常简单,跟其他任何中断都一样
发表于 2019-07-15
STM32开发笔记54:STM32F4+DP83848以太网通信指南系列(八)

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved