MCU中断初认识与总结
中断
中断的引入
MCU在按照顺序执行编译的代码(按照顺序次序执行)。对于外部的刺激,需要,MCU控制器需要对外部刺激,需要及时作出反应。
如果就是按照MCU顺序执行,有如下问题:
如果控制程序执行时间较长,不能及时响应外部刺激(前提是外部刺激持续足够时间)。
如果外部刺激持续时间较短,刺激马上消失,MCU内核会错过外部刺激,无动作。
因此需要引入一种机制,MCU内核可以暂停目前正在执行的程序,迅速响应外部动作。这种机制称为中断。
一边…一边
对于人类来说,我们一边做一件事,一边做另外一件事,好像是一种司空见惯的事情。
比如我在家里,一边写作业,一边等待某个人的到来。一般有如下方式:
一. 时不时的到门边,看看有没有人到来(查询方式)。
二. 一直在门口等待,一直等待到有人来,再去做作业(休眠-唤醒)。
三. 在门口等待一段时间,时间已过,马上回去自己做作业(poll方式)。
四. 一直在做作业,一直到有人来敲门,再去开门(异步通知)。
中断源类型及响应
对于上面的场景,有“敲门”这个中断,我才会去开门,迎接来宾。而对于其它“中断”,我就不一定去响应这个“开门”这个动作了。
中断动作响应过程:
对于外部声音:
敲门声
外部的鸟声
……………………
我的动作
对于外面的鸟声,充耳不闻。
敲门声处理:
暂停做作业,开门,迎接来宾。
……………………………
之后
继续做作业。
…………………
嵌入式中断类型
MCU执行过程中,也会被“异常”打断,这些异常主要有:
指令未定义
指令,数据访问出现问题
SWI(软件中断)
快中断
中断
在MCU中产生的中断主要情况有:
按键,定时器,ADC转换完成,串口接收与发送完成中断。
中断粗略流程:中断源产生中断->中断控制器->通知控制核心。
中断处理流程
第一步:初始化。(设置中断源,可以产生中断),(设置中断控制器),(设置CPU开关)。
第二步:执行正常程序
第三步:中断源产生中断。如按下按键,定时器中断-中断控制器-CPU中断
Cpu每执行一条指令,都会检查有无中断产生。
第四步:中断产生,开始处理
不同的中断,执行不同的处理函数(根据中断向量表去跳转, 后缀.s文件)。
(红色字体是硬件做的动作)
第六步:保存现场(R0~R15等各种寄存器)
处理中断,分辨中断源头,调用不同的处理函数。
恢复现场(恢复寄存器原来值,原先额寄存器值保存在栈中)
中断向量表
该内容出于编译文件的头部,一般是后缀.s的文件,具体内容如下:
图 1 中断向量表内容
这个是MCU有关的中断向量表内容,触发中断,调整到对应的向量表中执行。