程序中存在两个中断,一个是定时器下溢中断,另一个是XINT1中断。XINT1中断的优先级高于定时器下溢中断。
疑问:当定时器下溢中断正在执行时,并且还没有执行完,这是如果XINT1中断突然到来,cpu会响应XINT1中断吗?还是等定时器下溢中断的程序执行完,然后再响应XINT1中断程序?
mangui zhang:
肯定是先响应优先级高的 优先级高的会打断优先级低的
挂起执行高优先级的后再执行低优先级的
程序中存在两个中断,一个是定时器下溢中断,另一个是XINT1中断。XINT1中断的优先级高于定时器下溢中断。
疑问:当定时器下溢中断正在执行时,并且还没有执行完,这是如果XINT1中断突然到来,cpu会响应XINT1中断吗?还是等定时器下溢中断的程序执行完,然后再响应XINT1中断程序?
jinlong li1:
回复 mangui zhang:
CPU接到了终端的请求,就得暂停正在执行的程序,转而去响应中断程序,但是此时,它必须得做一些准备工作,以便于执行完中断程序之后回过头来还能找到原来的地方和原来的状态。CPU会将相应的IER和IFR位进行清除,EALLOW也被清除,INTM被置位,就是不能响应其他中断了,CPU向其他中断发出了通知,正在忙,没空来处理你们的请求了,得等到处理完手上的中断之后才能再来处理你们的请求。然后,CPU会存储返回地址并自动保存相关的信息,例如将正在处理的数据放入堆栈等等,做好这些准备工作之后,CPU会从PIE块中取出对应的中断向量ISR,从而转去执行中断子程序。
这是手把手书上说的,我有点糊涂了。
程序中存在两个中断,一个是定时器下溢中断,另一个是XINT1中断。XINT1中断的优先级高于定时器下溢中断。
疑问:当定时器下溢中断正在执行时,并且还没有执行完,这是如果XINT1中断突然到来,cpu会响应XINT1中断吗?还是等定时器下溢中断的程序执行完,然后再响应XINT1中断程序?
Eric Ma:
芯片默认是需要执行完定时器中断,然后才会去响应XINT1中断,即使XINT1优先级更高。此时的高优先级主要用于当两个中断同时出现的情况,CPU会先去处理高优先级。
如果要打断定时器的中断处理,转而去执行XINT1,然后再回来处理定时器的中断,这种叫中断嵌套,需要做一些处理:
http://processors.wiki.ti.com/index.php/Interrupt_FAQ_for_C2000#Q:_Can_interrupts_be_nested.3F
Eric