中断和异常?傻傻分不清楚

电子说

1.2w人已加入

描述

在一段时间里,我都认为中断与异常没有很明显的区别,因为表现出来都是当前运行中的程序被打断,然后执行中断向量表中的函数,但是其实这两个还是有区别的。

中断和异常分别属于CPU的外因和内因。例如CAN接收中断、GPIO边沿触发中断都属于中断范畴;而算数溢出、访问地址越界、除0等导致的则属于异常。

GPIO

举一个例子来解释,当你在家玩游戏时,如果此时快递小哥敲门,你就需要暂停手头的游戏签收一下快递,这个时候的快递小哥就属于是中断,是属于外因打断了你玩游戏;当你继续玩游戏时,突然你肚子很痛要上厕所,则此时暂停玩游戏就属于是异常,是属于自身身体出问题的内因打断自己玩游戏。

中断的引入 ——为了支持CPU与设备之间的并行操作

◆当CPU启动外设进行输入/输出后,外设便可以独立工作,CPU转去处理其他与此次输入/输出不相关的事宜;当外设完成输入/输出后,通过向CPU发送中断报告此次输入/输出的结果,让CPU决定如何处理后续事宜。

异常的引入 ———表示CPU执行指令时本身出现了问题

◆如算术溢出、除零、取数时的奇偶错,访存地址时越界或执行了“陷入指令”等,这时硬件改变了CPU当前的运行流程,转到相应的错误处理程序或异常处理程序或执行系统调用

在Cortex-M内核中,有三个中断屏蔽寄存器,分别是PRIMASK、FAULTMASK、BASEEPRI。如下表所示,通过配置这三个寄存器,可实现对中断、异常的管理。

GPIO

为了控制中断与异常,Cortex-M内核专门设定了CPS指令,有如下四种用法:

CPSID I ;PRIMASK = 1 ;关中断

CPSIE I ;PRIMASK = 0 ;开中断

CPSID F ;FAULTMASK = 1 ;关异常

CPSIE F ;FAULTMASK = 0 ;开异常

I为Interrupt(中断)、F为Fault(异常)

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分