跳转到主要内容

中断

stm32中断初识与实践(下)

demi /

这一部分我们将使用按键作为触发源,在产生中断时,实现控制LED灯的亮灭状态切换。

在具体应用前,我们还需先认识认识EXTI。

<strong>EXTI</strong>

全称为External interrupt/event controller,即外部中断/事件控制器。其管理了20个中断/事件线,每条线都有对应的一个边沿检测器,用于输入信号上升沿和下降沿的检测。如图6-1为stm32参考手册里的EXTI框图。
<center><img width="600" src="http://mcu.eetrend.com/files/2018-07/wen_zhang_/100012632-45092-111.jpg…; alt="stm32中断初识与实践(下)"></center><center>图6-1</center>

stm32中断初识与实践(上)

demi /

stm32中断的讲解我分为两部分,即两篇文章,上半部分做一个总结性的概览,有一个初步认识,下半部分会通过一个实例来讲解中断的应用。本文即为上半部分的总结性概览。
所谓“中断”,通俗地讲,就是CPU在遇到一个需要即时处理的情况时,暂时中止当前程序的执行,转而处理新情况。

在stm32参考手册中的中断和异常向量表里可查阅到,其内核的异常响应系统里有10个系统异常(含Reset和HardFault),60个外部中断。具体的定义可在库文件stm32f10x.h头文件的IRQn_Type枚举里查到。如图5-1。

<center><img width="600" src="http://mcu.eetrend.com/files/2018-07/wen_zhang_/100012614-45036-1.jpg&q…; alt="stm32中断初识与实践(上)"></center><center>图5-1</center>

RH850系列32位MCU三种中断功能,你知道么?

judy /

瑞萨电子RH850系列32位MCU符合ISO26262的要求,满足汽车安全等级ASILB -ASILD等级的控制芯片,在全球汽车电子市场上得到广泛应用,获得著名汽车厂商的认可。

本文向工程师简单介绍RH850系列MCU的中断部分,以帮助工程师更好的使用RH850系列MCU进行开发。

RH850的中断从功能上分为三种,FE级不可屏蔽中断,FE级可屏蔽中断,以及EI级可屏蔽中断。其中FE级代表芯片功能性的中断,以辅助工程师了解MCU内部出错的来源。EI级可屏蔽中断中断是我们定义的各个功能模块所产生的中断。

三者的优先级顺序为:FE级不可屏蔽中断 &gt; FE级可屏蔽中断 &gt; EI级可屏蔽中断。

FE级不可屏蔽中断:在芯片R7F7010323中表现为两个WDT中断,任何情况不可屏蔽。

FE级可屏蔽中断:包括位错误,RAM错误,以及低压检查等中断,可设置PSW.NP=1来屏蔽该种类型中断。

EI级可屏蔽中断:即是我们定义的功能性中断如CAN接收中断,定时器中断等。

stm32之中断配置

judy /

<strong>一、stm32的中断和异常</strong>

Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表。而stm32对这个表重新进行了编排,把编号从-3~6定义为系统异常,编号为负的内核异常不能设置优先级,从编号为7为外部中断,这些中断的优先级可自行进行设置。我们一般在starup_stm32f10x_hd.s中查找中断向量,而且在编写中断函数时也要在这个文件里查找中断服务函数的函数名。如下图所示:
<center><img width="600" src="http://mcu.eetrend.com/files/2018-05/wen_zhang_/100011473-40530-6.png&q…; alt="stm32之中断配置"></center>

PIC单片机中断程序的设计技巧总结

judy /

所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。

在设计引脚中断程序时,有三个需要特别注意的地方。

一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。

二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。

三是,一般都利用PIC单片机的引脚功能来检测按键,所以必须处理好按键消抖的问題。

在主程序里先设置有关的寄存器。

◇设置TRISB寄存器,使RB7~RB4相关的引脚处于输入状态;

◇如果需要弱上拉,通过OPTION_REG的第7位设置;

◇RBIF=O;

◇RBIE=1;

◇GIF=1。

响应状态变化后的中断服务程序。

◇检查RBIF是否为l,为l则是引脚变化引起的中断;

关于STM32空闲中断

judy /

在使用串口接受字符串时,可以使用空闲中断(IDLEIE置1,即可使能空闲中断),这样在接收完一个字符串,进入空闲状态时(IDLE置1)便会激发一个空闲中断。在中断处理函数,我们可以解析这个字符串。

需要注意的是,IDLE标志位需要软件清零,否则由于会不断进入中断,而使正常程序无法运行。当再次收到数据时(即RXNE再次置1),等到空闲便会重新进入中断。

在STM32F4中,IDLE标志位清零的过程是:先读SR,再读DR寄存器。

而在STM32L0中, idle标志清除的过程是:对ICR寄存器的IDLECF位写1

MM32如何使用比较器产生中断

judy /

<strong>一、比较器简介</strong>

在实际应用过程中有时候我们需要去判断两个变化的电压大小,在不同变化时需要做出不同的反应,这时候我们就可以用到比较器。MM32系列芯片内嵌两个通用比较器COMP1和COMP2, 比较器为通用的可编程电压比较器,支持两个独立的比较器。可独立使用(适合所有终端上的I/O),也可与定时器结合使用。它们可用于多种功能,包括:
• 由模拟信号触发低功耗模式唤醒事件
• 调节模拟信号
• 与 DAC 和定时器输出的 PWM 相结合,组成逐周期的电流控制回路

本文主要介绍一下如何通过比较器产生中断。

<strong>二、比较器功能描述</strong>

1、比较器输入输出介绍:

ARM中的异常和中断

judy /

ARM中有5种异常模式,有7种中断源。这7种中断源中有些中断是我们希望发生的,但有些中断是我们不希望发生的。

我们希望发生的中断:

软中断:属于svc模式,通过SWI指令便可以产生软中断,进入到svc模式。

irq中断:属于irq模式,当产生普通的外部中断时,处理器便进入到IRQ模式。

fiq中断:属于fiq模式,当产生高优先级外部中断时,处理器便进入到FIQ模式。

我们不希望发生的中断:

复位:属于svc模式,当系统上电时便会产生复位中断,系统进入到svc模式。复位中断不需要中断返回。

取指中止中断:属于abt模式,当预取指发生错误时,便产生取指中止中断,进入到abt模式。

数据中止中断:属于abt模式,当访问数据存储器时,便产生数据中止中断,进入到abt模式。

未定义指令中断:属于und模式,当执行到一条未定义指令时,便产生未定义指令中断,系统进入到und模式。

中断的优先级:

ARM中有6个优先级。各个中断的优先级顺序如下:(1 6 6s 5 2 4 3)

ARM单片机异常中断的集中情况总结

judy /

ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,本文就将对ARM异常中断的集中情况进行总结,并给出了一些解决方法。

在正式介绍之前,要为大家补充一些较为重要的基础知识。首先R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;而ADS中的pc,是为了调试看着方便而修改过的,它指向的是正在执行的指令,即“真正pc-8”!

<strong>SWI和未定义指令异常中断的返回</strong>

指令地址:

A PC-8当前指令为SWI或未定义指令,此时发生中断.PC的值还没有更新。

A+4 PC-4中断时处理器将PC-4保存到LR。;r!

A+8 PC

MM32 IAP中断向量表重定义

judy /

有客户需要用到MM32L073,需要通过IAP进行固件升级,在FLASH里面要烧录两份代码:一个Boot loader,一个用户应用程序。在开发应用程序时,使用中断函数不能相应中断。

在开发IAP的用户应用程序时,必须得重新映射中断向量表,中断向量表即某个中断服务程序的入口地址的集合。

在Cortex-M3内核的MCU上可以通过设置SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;该寄存器的值来实现中断向量表的重定义。但用户反馈在MM32L0xx系列以Cortex-M0为内核的单片机中却怎么也找不到这个设置中断向量表的寄存器,用户可以通过以下方法来实现中断向量表重定义。

实现方法基本思想: