对又不对。
对:
中断的主要源头都是来自外部的,因而它主要想解决外部的触发问题,内部的问题是捎带着处理一下。
所谓"外部" 的中断信号,要看有多"外"。有在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微信公众号:
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏