1.中断服务程序的切换
从现行程序切换到中断服务程序,所要解决的关键问题是如何提供服务程序的入口地址,一般来说,有3种可行的方式。
一种是通过软件方式提供服务程序入口,即通常所说的非向量中断方式。CPU响应中断后转入查询程序执行,由查询程序查找中断源,并切换到相应的中断服务程序。
另一种方法是由硬件识别信号找到服务程序入口,即向量中断方式。比较典型的做法是查询中断向量表。CPU响应中断时由硬件直接指向中断向量表,从中断向量表取得相应中断服务程序的入口,转向中断服务程序。
最后一种方法是将前两种方式结合起来,适用于中断源较多的情况。例如当系统同时增加多个中断源时,为了减少硬件开销,可以让这几个中断源作为某一个向量中断源中的子中断源,共用一个入口地址。响应中断时,先采用向量中断方式从中断向量表获得该入口,转入向量中断源的服务程序。再采用非向量中断方式,在服务程序中查询具体的中断源,进而取得中断源所对应的中断服务程序入口,从而转入实质性的中断处理。这样将硬、软手段结合起来,能进一步增强中断系统的处理能力。
一般,嵌入式系统的中断操作多采取第二种利用中断向量的方式。
2.中断优先级判别方法
处理中断请求的判优通常可以通过软件方式或硬件方式来解决。
(1)软件查询方式
用查询方式判优很简单,只需在查询程序中根据查询顺序来确定优先级,在硬件上不作硬性规定。例如某个中断源的状态先被查询,若该中断源已提出了中断请求,那么它就首先被响应,其优先级最高;若该中断源未提请求,则依次查询下一个中断源。先查询哪一个,后查询哪一个,这完全是由程序来决定的。因此可以通过编程,根据需要灵活地改变查询顺序,以便动态调整各个中断源的优先级。
通过程序查询来确定优先顺序,还有一个好处是不需要额外增加硬件判优逻辑,但缺点响应的时间比较长,特别是当中断源较多时,需逐个依次查询。因此对于排在后面的中断源来说,要等待较长时间才能转入相应的中断服务程序。(www.xing528.com)
(2)硬件排队方式
在硬件排队判优逻辑中,各个中断源的优先级由连线固定下来。例如,各个中断源可以通过各自独立的中断请求线向CPU提出中断请求。在这种情况下,可以用每个来自中断源的请求信号封锁它后面的其他请求,组成判优逻辑。
可见在硬件排队线路中,优先顺序已经固定不能更改,但在实际应用中,为了使优先级别较低的请求能够获得响应的机会,往往需要对优先顺序作动态调整。可行的办法是利用屏蔽技术来实现,例如通过CPU送屏蔽字,将某些级别较高的请求屏蔽掉,而让级别较低的请求得到响应,这相当于改变了设备的优先级。
(3)中断控制器方式
目前,在大多数嵌入式处理器或MCU中都存在各种可编程的中断控制器,集中解决中断请求信号的接收、屏蔽、判优和传送等问题。这种中断控制器内包括多个控制寄存器,因而只要对这些寄存器相应位置1或置0,就可以实现中断的有效控制。
3.中断嵌套操作
为了正确实现多重中断嵌套,首先,需要设定嵌套的方式。一般是在中断处理过程中,当有更高优先级的中断请求时,才进行嵌套;而当同级或更低级请求提出时,CPU并不响应,也就无法嵌套。中断嵌套方式可以通过编程设置相应控制寄存器来实现。
其次,在中断服务程序中要先开放中断,才能保证在其后的执行过程中响应新的中断请求。当从所嵌套的服务程序返回原来的服务程序时,又要先关中断,以便恢复原来程序现场,然后再开中断,允许再次嵌套。
还有一点需要说明的是,在中断过程中,如果希望改变原来设定的嵌套顺序,可以在程序中使用有关命令重新设置嵌套方式,或者重写新的屏蔽字,或者在适当的时间发出中断结束命令。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。