Dinglei_hello · 2021年11月22日

中断的本质是外部给CPU的一个数字信号?

对又不对。

对:

中断的主要源头都是来自外部的,因而它主要想解决外部的触发问题,内部的问题是捎带着处理一下。

所谓"外部" 的中断信号,要看有多"外"。有在cpu外面,但是仍然是芯片里面的,比如uart,i2c,pwm,timer,看门狗等总线上挂接设备发的中断,我们暂且叫他们第一类中断。也有干脆在芯片外面的,如来自gpio的中断,我们管它叫第二类中断

第一类中断有些是数字设备,但也有一些模拟设备,比如adc等,有些电源芯片还有电源管理模块,也会发中断,所以这些中断信号原本是模拟信号,输入到数字域做个同步,将其变成数字信号。

第二类中断都是外部激励,当然是属于模拟信号或异步数字信号,进来芯片后同步到cpu时钟域,用于激励cpu。

"那要中断干啥用呢?" 用处可太大了。如果没有中断,cpu把各种设备开起来后,比如他把4个timer都开起来,然后他就要不停看这些timer有没有到时间,因为这些timer不会用中断方式主动告诉他"我已经到时间了",cpu就得自己不停看,软件上就是for循环。那cpu还有其他事情呢,没办法一直盯着这4个timer,所以稍有不慎,误了点,他开timer的意义就没有了。所以中断就是让cpu专心工作而设置的,有了中断,cpu可以快乐地工作,有哪个设备想请cpu处理它一下,它就起中断,相当于拍拍cpu的肩膀,说: "嘿,伙计,过来瞧一眼。" cpu去瞧一眼,然后做点处理,然后再接着做自己的事。这个瞧一眼的处理过程就叫"中断服务程序isr"

中断对cpu休眠,整个设备省电,有极大的意义。如果cpu觉得没事干了,他就睡了。当人们有事找它,比如点亮屏幕,或用手拍一拍,就会产生外部信号,以中断方式叫醒cpu,等cpu处理完了,就继续睡了。有的cpu可以让中断处理完成后直接睡,不需要发任何睡眠命令。

cpu睡分深睡浅睡,睡得越深,关闭的模块就越多,叫醒他就越难。到了极度深睡眠状态下,内部已经全关了,时钟也全关了,只剩下少数几个外部激励能把他叫醒。

不对:

有失偏颇。如果中断只是外部给CPU的一个信号的话,为什么它叫“中断”(interrupt)呢?为什么不叫“外部消息”、不叫“外部信息”呢?

中断的本质是CPU对这些信号做出何种反应。如果CPU收到信号后,“中断”了自己原本在做的事情,对这个信号进行处理,处理完再回到原本在做的事情,那这个信号就是“中断”。

至于他是内部信号还是外部信号、是数字信号还是模拟信号,都和“中断”的本质无关。试想,reset信号也是外部给CPU的数字信号,难道reset信号是中断?软件中断根本不是外部发来的信号,难道不是中断?

作者:皮特派
原文链接: https://mp.weixin.qq.com/s/kAHDdYXHxQQWmPwhZcec7w

微信公众号:
 title=

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏
1 阅读 829
推荐阅读
关注数
9218
内容数
858
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息