理论教育 微机原理与接口技术复习指导:例题详解及中断优先级讨论

微机原理与接口技术复习指导:例题详解及中断优先级讨论

时间:2023-11-04 理论教育 版权反馈
【摘要】:例7.1 某I/O接口的中断向量号为70H,试述CPU响应中断后的操作过程,并图示这一过程。有IR2、IR5两个中断请求已被响应。表7.1 IR2与IR5处理后的中断优先级讨论8259A除了非指定EOI循环方式外,还有指定EOI循环方式、自动EOI循环方式。在IR2中断服务程序中安排了最低优先级给IR3,该指令执行后,中断优先级的顺序如表7.2所示。图7.2 8259A级联方式连接图例7.6 在编写程序时,为什么通常总要用STI指令来设置IF?

微机原理与接口技术复习指导:例题详解及中断优先级讨论

例7.1 某I/O接口中断向量号为70H,试述CPU响应中断后的操作过程,并图示这一过程。

CPU响应中断并在中断返回后继续执行原来的程序,应完成如下操作。

①CPU响应中断时,向该I/O接口发送两个中断响应周期,在第二个周期,I/O接口通过8259A把自己的中断向量号送到数据线D7~D0上,CPU读取中断向量号70H并将其存入内部暂存器。

②将FR压入堆栈,将TF值保存到暂存器TEMP。

③清除中断和单步标志,使IF=0,TF=0。

④保护断点,即把中断时断点处的地址压入堆栈。

⑤CPU计算向量地址70H×4=1C0H和70H×4+2=1C2H。

⑥从内存1C0H和1C2H处分别取中断服务程序入口地址偏移量(送入IP)、段地址(送入CS)(假如IP=2100H,CS=4050H)。

⑦转入中断服务程序,CPU执行中断服务程序。

⑧从中断返回,恢复FR和断点地址,继续执行中断前的程序。

上述中断操作过程如图7.1所示。

图7.1 中断操作过程示意图

例7.2 编制程序段设置中断服务程序的入口地址到中断类型号72H所对应的中断向量表中。

设中断服务程序的地址为INTAD,有关的程序段如下。

主程序:

讨论

实际上,在设置或检查中断向量时,往往避免直接使用中断向量的绝对地址,而是利用DOS功能调用设置和读取中断向量。还要注意,在设置自己的中断向量时,若DOS已用的话,应先保存原中断向量,再设置新的中断向量;在程序结束前要恢复原中断向量。这样才能保证系统的正常运行。设置中断向量和读取中断向量的调用号分别为25H和35H。下面就是利用DOS功能调用设置中断向量和取中断向量的程序段。

例7.3 编写一中断服务程序,要求主程序运行时,每十秒响铃一次,同时屏幕上显示信息“WELCOME TO BEIJING!”。

可以利用DOS调用1CH进行处理,因为在系统定时器(中断类型号为8)的中断处理程序中,时钟中断一次(约18.2次/秒)要调用一次INT 1CH,在ROM BIOS中,1CH的处理程序只有一条IRET指令,仅为用户提供一个中断类型号,这样可以利用系统定时器的中断间隔,将用户设计的程序来代替原有的INT 1CH程序,编写程序时,要做两部分工作:

①在主程序初始化部分先保存当前中断向量表内容,再置新的中断向量;

②在主程序结束部分恢复保存的1CH向量。

例7.4 某中断系统IR0为最高优先级,IR7为最低优先级。有IR2、IR5两个中断请求已被响应。设置系统为非指定EOI循环方式,要求给出IR2和IR5中断处理完后中断优先级的变化情况。

非指定EOI循环方式是这样的,在主程序或中断服务程序中设置操作命令字,当任何一级中断被处理完后,使CPU给8259A回送非指定EOI循环命令,8259A收到EOI命令后,将ISR寄存器中最高优先级的IRi置“1”位清零,并将其变为最低优先级,而它的下一级IRi+1将变为最高优先级,其他依次类推。

本题当IR2和IR5中断处理完后,中断优先级的变化如表7.1所示。

表7.1 IR2与IR5处理后的中断优先级

讨论

8259A除了非指定EOI循环方式外,还有指定EOI循环方式、自动EOI循环方式。指定EOI循环方式即指定最低级循环方式,最低级由编程设置OCW2指定,最高级也相应而定。例如,指定IR5为最低优先级,则IR6就为最高优先级,其他各级依次类推。这样在当前中断服务程序结束前,CPU给8259A回送指定EOI结束命令,8259A收到此命令后,指定最低优先级,并重新排列优先级级别。(www.daowen.com)

例如,某一时刻8259A中IR2、IR5有中断嵌套服务。在IR2中断服务程序中安排了最低优先级给IR3,该指令执行后,中断优先级的顺序如表7.2所示。

表7.2 中断优先级变化表

在自动EOI循环方式中,任何一级中断被响应后,中断响应周期的第二个的后沿自动将ISR中相应位清零,使该级变成最低级,并立即改变各级中断的优先级别,改变方式与非指定EOI循环方式相同。但在使用这种方式时要小心,防止中断重复嵌套(或过嵌套)产生。

例7.5 某一中断系统中有一主片和两个从片,从片分别接入主片的IR3和IR6。若IR0最高,在正常全嵌套方式下,试述该系统的中断优先级顺序,并画出该系统的主从连接图。

该系统的中断优先级顺序从高到低排列如下:

当某一从片的中断处理结束时,CPU应发出两个EOI命令,一个送给主片,另一个送给相应的从片,使8259A的主片和从片的ISR寄存器相应位清零,完成一次中断处理过程。

该系统的主从片的连接图如图7.2所示。

图7.2 8259A级联方式连接图

例7.6 在编写程序时,为什么通常总要用STI指令来设置IF?8259A的中断屏蔽寄存器IMR和8086 CPU的中断允许标志位有何差别?在中断过程中,它们怎样配合起来工作?

在PC系列微机中NMI被系统占用,在系统总线上的IRQi是可屏蔽中断请求的输入线(实际是8259A的IRi引脚)。PC上电时系统复位,FR=0000H,使IF=0,禁止中断。因为INTR被响应的必要条件是IF=1,所以编程时必须用STI指令开放中断。

8086 CPU中的IF是中断允许标志位,当IF=1时,CPU可以响应INTR的请求;当IF=0时,CPU不予响应。当8259A中的中断屏蔽寄存器IMR的某位为1时,与之对应的外设的中断请求被禁止。此时若外设有请求送至8259A的IR端,8259A并不向CPU的INTR引脚发送请求信号。实际上是8259A把外设中断请求屏蔽了。而当IMR的某位为0时,与之对应的外设请求才可能经8259A的INT向CPU发送,若此时IF=1,CPU才有可能响应该中断请求。这就是说,一个外设的请求要经过两道门槛才能被CPU响应。通过对IMR内容的写入可以有选择地允许或禁止某级中断。尤其是当8259A工作于特殊屏蔽方式时,使用IMR可以动态地改变系统的优先级结构,可以允许同级或低优先级的中断请求被响应。

例7.7 8259A有几种结束中断处理的方式?各应用在什么场合?在非自动结束中断方式中,如果没有在处理程序结束前发EOI命令,会出现什么问题?试写出XT机和AT机EOI命令输出的指令。

8259A有两种结束中断处理的方式。一种叫自动中断结束方式,在ICW4中的AEOI=1时设置为该方式,8259A在第二个中断响应周期的后沿就自动使正被响应的中断源的ISR复位。自动中断结束方式只有在不要求多级中断嵌套,且下一个中断请求肯定在本次中断服务结束后发生时方可使用。

另一种为非自动中断结束方式,在ICW4中的AEOI=0时设定此方式。该方式中又有两种EOI命令:一种是指定EOI(SEOI)命令,它使OCW2中位L2~L0所指定的IR对应位的ISR位清零;另一种是非指定EOI(NSEOI)命令,它使系统中当前优先级最高的正在服务的ISR位清零。PC系列微机采用的是非自动中断结束方式(NSEOI命令),在中断服务程序结束前必须用EOI命令,使ISR中最高优先级的位复位,以宣布本次中断处理结束。

在非自动中断结束方式中,如果没有在中断服务程序结束前发EOI命令,虽然执行了IRET指令,但由于8259A的ISR中的相应位仍保持为1,8259A仍认为中断服务未结束,判优电路仍按ISR中的原值进行判优裁决,如果系统是全嵌套方式或非特殊屏蔽方式,则将使比ISR中为1的位低级或同级的中断不能被响应。

·XT机上的EOI命令可用以下指令输出(放在中断服务程序的IRET指令之前):

·AT机上的EOI命令可用以下指令输出。

■对接在主8259A上的中断同XT机用的指令。

■对接在从8259A上的中断用以下指令(放在处理程序的IRET指令之前):

例7.8 试述8259A的初始化编程过程,并画出初始化流程图

在使用8259A之前,必须将系统中的每一片8259A进行初始化编程,以决定每片PIC的使用及工作方式。8259A的初始化要遵守固定次序,只进行一次,在运行过程中不允许更改。8259A初始化流程图如图7.3所示。

图7.3 8259A初始化流程图

对初始化编程说明如下。

①初始化命令字ICW1~ICW4口地址的设置规定:ICW1必须写入偶地址口,ICW2~ICW4必须写入奇地址口。

②ICW1~ICW4的写入次序固定不变,不可颠倒。

③对每片PIC均须写入ICW1和ICW2,是否写入ICW3和ICW4均由ICW1的相应位决定。只有在级联方式下,主、从片才须写入ICW3;仅当8086系统或须设置特殊全嵌套方式、缓冲方式、中断自动结束方式时,才写入ICW4

④在级联方式下,主、从片的ICW3各位含义不同。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈