首页 > 试题广场 >

中断是什么?请简述单片机中断处理的过程

[问答题]
中断是什么?请简述单片机中断处理的过程
        CPU在正常执行程序的过程中,由于内部/外部事件的触发或程序的预先安排引起CPU暂时中断当前正在运行的程序,而转去执行中断服务子程序,待中断服务子程序执行完毕后,CPU继续执行原来的程序,这一过程称为中断;
        中断处理的过程:
        第一步:保护现场,将当前位置的PC地址压栈;
        第二步:跳转到中断服务程序,执行中断服务程序;
        第三步:恢复现场,将栈顶的值回送给PC;
        第四步:跳转到被中断的位置开始执行下一个指令;
编辑于 2019-11-11 14:52:14 回复(0)

请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回。

请求中断:当某一中断源需要CPU为其进行中断服务时,就输出中断请求信号,使中断控制系统的中断请求触发器置位,向CPU请求中断。系统要求中断请求信号一直保持到CPU对其进行中断响应为止;

中断响应:CPU对系统内部中断源提出的中断请求必须响应,而且自动取得中断服务子程序的入口地址,执行中断服务子程序。对于外部中断,CPU在执行当前指令的最后一个时钟周期去查询INTR引脚,若查询到中断请求信号有效,同时在系统开中断(即IF=1)的情况下,CPU向发出中断请求的外设回送一个低电平有效的中断应答信号,作为对中断请求INTR的应答,系统自动进入中断响应周期;

保护现场:主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容(主要是当前IP(将要执行的下一条地址)和CS值(代码段地址))压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的;

中断服务:中断服务是执行中断的主体部分,不同的中断请求,有各自不同的中断服务内容,需要根据中断源所要完成的功能,事先编写相应的中断服务子程序存入内存,等待中断请求响应后调用执行;

恢复现场:当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容弹出,即恢复主程序断点处寄存器的原值。

中断返回:在中断服务子程序的最后要安排一条中断返回指令IRET(interrupt return),执行该指令,系统自动将堆栈内保存的IP(将要执行的下一条地址)和CS值(代码段地址)弹出,从而恢复主程序断点处的地址值,同时还自动恢复标志寄存器FR或EFR的内容,使CPU转到被中断的程序中继续执行。

发表于 2021-03-23 18:25:36 回复(0)
中断就是单片机在遇到某些触发条件时,暂时放下当前的工作,转而去执行对应的中断服务函数代码,当中断函数处理完毕后,回到刚才跳转的地方,继续执行当前任务。

一个外设(比如定时器、串口)要发生中断有三个条件,一是使能了外设,可类比为电路中的干路总开关;二是打开了中断使能位,可类比为支路的第一个开关(有多种事件可触发串口中断,可看成是多条支路);三是对应事件的中断标志位置1(一般是硬件自动置1),可类比为支路第二个开关,只有三个开关全部合上,才会进入中断服务函数。

当发生中断时,单片机会保存当前的数据和指令执行位置等信息到堆栈,称为现场保护。这个堆栈空间是硬件自动开辟的,数据的保存也是自动完成的,不需要在程序中再进行任何操作。保存完毕后,程序会查询中断向量表,向量表上保存的是各个中断的服务程序的起始地址,通过此地址可跳转到中断服务中执行中断服务体内的程序,当离开中断服务程序时,程序会从堆栈中弹出数据,返回到进入中断前的指令位置,继续执行当前程序。

中断的优先级一般指的是不同中断源之间的优先级别高低,比如程序中存在定时器中断和串口中断,那么这两个中断可能会同时触发,或者正在串口中断服务程序中执行时,定时器中断又被触发。当发生这些情况时,如果没有相应的处理机制,系统将会陷入混乱。由此引入的中断优先级的概念,即将每个中断源都设置一个优先级别,这样,遇到上述情况时,就可以根据优先级的高低来决定当前去处理那一部分的程序。如果优先级一样,或者在程序中没有设置中断优先级,那么系统会根据向量表中默认的优先级进行处理。

发表于 2020-07-23 22:00:28 回复(0)
中断是外设释放给CPU的信号,允许CPU对外设释放的信号进行响应。cpu首先保存现场,然后执行中断服务函数,待服务函数执行完成后,恢复现场,接着执行后台程序。这里的保存现场和恢复现场主要指的是cpu通用寄存器和特殊寄存器的保存和恢复,学术上叫压栈和出栈。
发表于 2019-07-16 19:17:28 回复(0)
中断:运行过程中,停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
过程: 1.CPU在执行每一条程序指令后都去检查是否有中断/异常信号;
            2.根据中断向量去IDT表里找到对应中断的段选择符;根据这个段选择符去GDT表找到段描述符;
            3.判断优先级,切换成要使用的栈地址;
            4.保护现场,将当前程序使用的地址压到新栈保存;
            5.响应中断,开始执行中断服务程序;
            6.恢复执行中断前的程序,中断完成后会有返回先前程序的指令,从栈里弹出先前保存的现场信息,重新开始执行。
发表于 2022-02-07 11:21:50 回复(0)