微型计算机原理及应用(第三版)电子教案第9章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第9章中断控制器、计数/定时控制器及DMA控制器9.1可编程中断控制器8259A9.2可编程计数/定时控制器82539.3可编程DMA控制器8237A习题9.1可编程中断控制器8259A中断系统是冯·诺依曼结构计算机的一项重要技术,尤其为解决当前高速运算CPU与低速外部设备信息交换之间的矛盾。8086系列有功能很强的中断系统,它可通过8259A可编程中断控制器来实现。9.1.18259A芯片内部结构•8259A可编程中断控制器包括以下8部分,芯片内部结构如图9.1所示。8259A芯片有28条引脚,双列直插式封装,各引脚的信号功能如图9.2所示。图9.1图9.21.数据总线缓冲器这是一个双向8位3态缓冲器,由它构成8259A与CPU之间的数据接口,是8259A与CPU交换数据的必经之路。2.读/写控制电路用来接收来自CPU的读/写控制命令和片选控制信息。由于一片8259A只占两个I/O端口地址,可用末位地址码A0来选端口,端口的其他高位地址作为片选信号CS输入。当CPU执行OUT指令时,WR信号与A0配合,将CPU通过数据总线(D7~D0)送来的控制字写入8259A中有关的控制寄存器。当CPU执行IN指令时,RD信号与A0配合,将8259A中内部寄存器内容通过数据总线(D7~D0)传送给CPU。3.级联缓冲/比较器一片8259A只能接收八级中断从IR7~IR0输入,当引入的中断超过8级时,可用多片8259A级联使用,构成主从关系,对于主8259A,级联信号CAS2~CAS0是输出信号,对于从8259A,CAS2~CAS0是输入信号。SP/EN是一个双功能信号,当8259A处于缓冲状态时,EN有效,表示允许8259A通过缓冲存储器输出;EN无效,表示CPU写8259A。当8259A处于非缓冲状态时,SP用作表明主从关系,SP=1表示是主8259A,SP=0表示是从8259A。4.中断请求寄存器IRR这是一个8位寄存器,用来存放由外部输入的中断请求信号IR7~IR0。当某一个IRi端呈现高电平时,该寄存器的相应位置“1”,显然最多允许8个中断请求信号同时进入,这时,IRR寄存器将被置成全“1”。5.中断服务寄存器ISR这是一个8位寄存器,用来记录正在处理中的中断请求。当任何一级中断被响应,CPU正在执行它的中断服务程序时,ISR寄存器中相应位置“1”,一直保持到该级中断处理过程结束为止。多重中断情况下,ISR寄存器中可有多位被同时置“1”。6.中断屏蔽寄存器IMR这是一个8位寄存器,用来存放对各级中断请求的屏蔽信息。当该寄存器中某一位置“1”时,表示禁止这一级中断请求进入系统,通过IMR寄存器可实现对各级中断的有选择的屏蔽。7.优先权判别器PR用来识别各中断请求信号的优先级别。当多个中断请求信号同时产生时,由PR判定当前哪一个中断请求具有最高优先级,于是系统首先响应这一级中断,转去执行相应的中断服务程序。当出现多重中断时,由PR判定是否允许所出现的中断去打断正在处理的中断而被优先处理。一般处理原则是允许高级中断打断低级中断,而不允许低级中断打断高级中断,也不允许同级中断互相打断。8.控制电路它是8259A内部的控制器。根据中断请求寄存器IRR的置位情况和优先权判别器PR的判定结果,向8259A内部其他部件发出控制信号,并向CPU发出中断请求信号INT和接收来自CPU的中断响应信号INTA,控制8259A进入中断服务状态。实际上8259A芯片是在控制电路控制之下构成一个有机的整体。9.1.28259A芯片的工作方式8259A有两种中断触发方式:电平触发方式和边沿触发方式,可由软件来定义。当定义为电平触发方式时,从IR7~IR0输入的有效信号应为高电平,而且必须保持有效到响应它的第一个INTA信号的前沿,否则这个IRi信号有可能被丢失;但是也不允许IRi信号太长,如果在中断服务寄存器ISR相应位复位后该IRi信号还继续有效,则8259A就可能重新响应这一中断请求而出现重复中断现象。为避免这种情况产生,在ISR某一位被复位时应将相应的IRi信号置成无效。采用这种电平触发方式还有一个问题必须注意,即如果通过一个IRi端引入多个中断请求,它们由软件进行排队;那么当这个IRi端上一个中断请求的有效期间,另一个中断请求又产生时,将有可能丢失第2个中断请求信号,从这个意义上讲是不允许发生中断请求的电平信号持续时间太长,但也不能太短,这在使用中必须注意。当8259A被定义为边沿触发方式时,不会产生上述的丢失中断请求的现象,这时当IRi端上出现由低电平到高电平的正跳变时,表示中断请求信号有效,最好用负脉冲的后沿来实现。采用这种边沿触发方式不会出现重复中断现象,但是也要求在响应某中断请求的第1个INTA信号有效前不要出现下一个中断请求,否则有可能丢失前面一个中断请求。图9.3•不管是采用什么方式引入的中断,在中断响应周期内第2个INTA信号有效期间8259A应将当前被响应的中断类型码n通过数据总线D7~D0传送给CPU。8259A中一字节中断类型码的形成如图9.3所示。从图中可看出,由一片8259A引入的8级中断请求的类型码肯定是连续的。它们在中断入口地址表中的位置取决于由软件定义的D7~D3位的状态,并由对8259A进行初始化时写入的相应控制字来确定。例如,定义D7~D3=10001时,则该8级中断的类型码将顺序为88H~8FH。8259A具有非常灵活的中断管理方式,可满足使用者的各种不同要求。而中断优先权管理是中断管理的核心问题。8259A可采用优先权级别固定分配和循环设置两种方式。各中断源的优先级确定后,一般处理原则只允许高级中断打断低级中断而被优先处理,禁止低级打断高级或同级中断相互打断。8259A中对中断优先权的管理,可概括为完全嵌套方式、自动循环方式和中断屏蔽方式。详细讲解如下:1.完全嵌套方式完全嵌套方式是8259A被初始化后自动进入的基本工作方式,在这种方式下,由各个IRi端引入的中断请求具有固定的中断级别。IR0具有最高优先级,IR7具有最低优先级,其他级顺序类推。采用完全嵌套方式时,ISR寄存器中某位置“1”,表示CPU当前正在处理这一级中断请求,8259A将允许比它级别高的中断请求进入,打断当前的中断服务程序而被优先处理,但禁止与它同级或比它级别低的其他中断请求进入。采用这种完全嵌套方式,中断嵌套的深度取决于整个中断系统所具有的中断级数,在一个具有8级中断的系统中,最大的中断嵌套深度为8,如图9.4所示。图9.4在中断嵌套过程中,中断服务寄存器ISR的内容将不断变化,最后有可能使(ISR)=FFH,表示当前有8级中断请求正在被服务,首先结束的应是最高级的中断,待CPU由高级到低级将全部中断处理结束返回到主程序时,ISR寄存器将重新复位为全“0”。这种情况下要求堆栈的容量比较大。因为每响应一次中断至少要往堆栈压入6个字节的信息(两个字节标志寄存器内容和4个字节的断点地址),在各级中断处理过程中,还有可能要将其他资源压入堆栈保护。除此之外,在上述中断嵌套过程中,还要求CPU每响应一次中断进入中断服务程序后,应安排开中断指令(STI)将IF标志位置“1”,否则由8259A引入的高级中断将无法进入系统。当任何一级中断处理完毕,CPU应向8259A回送结束命令(EOI),以便8259A将ISR寄存器中相应位清“0”,标志一级中断处理过程完全结束。8259A在完全嵌套方式下,可采用以下3种中断结束方式:(1)普通EOI方式:当任何一级中断服务程序结束时,只给8259A传送一个EOI结束命令,8259A收到这个EOI命令后,自动将ISR寄存器中级别最高的置“1”位清“0”。这种结束方式最简单,但是只有当前结束的中断总是尚未处理完的级别最高的中断时,才能使用这种结束方式。这就是说,如果在中断服务程序中曾经修改过中断级别,则决不能采用这种方式,否则会造成严重后果。(2)特殊EOI方式:在普通EOI方式的基础上,当中断服务程序结束给8259A发出EOI命令的同时,将当前结束的中断级别也传送给8259A,就被称作特殊EOI方式。这种情况下,8259A将ISR寄存器中指定级别的相应位清“0”,显然这种结束方式可在任何情况下使用。(3)自动EOI方式:任何一级中断被响应后,ISR寄存器中相应位置“1”,CPU将进入中断响应总线周期,在第2个中断响应信号(INTA)结束时,自动将ISR寄存器中相应位清“0”,被称作自动EOI方式。采用这种结束方式,当中断服务程序结束时,CPU不用向8259A回送任何信息,这显然是一种最简单的结束方式。但是存在一个明显的缺点,任何一级中断在执行中断服务程序期间,在8259A中没有留下任何标志,如果在此过程中出现了新的中断请求,则只要当前IF=1,不管新出现的中断级别如何,都将打断正在执行的中断服务程序而被优先执行,这就有可能出现低级中断打断高级中断或同级中断相互打断的不合理现象,通常将这种情况称作“重复嵌套”,重复嵌套的深度无法控制,很可能造成某些高级中断得不到及时处理的情况,这显然是不允许的,因此使用自动EOI方式一定要特别小心。对于一些以预定的速率发生的中断,在肯定不会产生重复嵌套的情况下,采用自动EOI方式是最理想的。2.自动循环方式上述完全嵌套方式中,中断请求IR7~IR0的优先级别是固定不变的,使得从IR0引入的中断总是具有最高的优先级,其他任何中断都有可能被它打断,却无法打断它。实际上很可能出现由IR0~IR7引入的各级中断的重要性差别不大的情况,所以,希望它们的中断级别不是固定不变的,而是可以以某种策略改变它们的优先级别。自动循环方式是改变中断请求优先级别的策略之一,其基本思想是:每当任何一级中断被处理完,它的优先级别就被改变为最低级,而将最高优先级赋给原来比它低一级的中断请求。实现自动循环方式有下面3种不同的做法:(1)普通EOI循环方式:当任何一级中断被处理完后,CPU给8259A回送普通EOI命令,8259A接收到这一命令后将ISR寄存器中优先级最高的置“1”位清“0”,并赋给它最低优先级,而将最高优先级赋给原来比它低一级的中断请求,其他中断请求的优先级别以循环方式类推。例如,某系统中原来定义的是IR0为最高级,IR7为最低级,当前正在处理IR2和IR6引入的中断请求,因此,ISR寄存器中第2位和第6位置“1”,待第2级中断处理完,CPU向8259A回送普通EOI命令,8259A将ISR寄存器中级别高的第2位清“0”,并将其优先级由原定义的第2级改变为最低级(第7级),而将最高级(第0级)赋给原来的第3级(ISR3),其他级的优先权按循环方式依次改变为新的级别。待原来的6级中断处理完后,同样在普通EOI命令控制下,将ISR中的第6位清“0”,并将其优先级由第3级改变为最低级,而将最高级赋给由ISR7所对应的中断请求。(2)自动EOI循环方式:任何一级中断响应后,在中断响应总线周期中,由第2个中断响应信号INTA的后沿自动将ISR寄存器中相应位清“0”,并立即改变各级中断的优先级别,改变方案与上述普通EOI循环方式相同。采用这种自动EOI循环方式与前述的自动EOI方式一样,有可能出现“重复嵌套”现象,使用中要特别小心,否则有可能造成严重后果。(3)特殊EOI循环方式:前述的普通EOI循环和自动EOI循环都是将最低优先权赋给刚刚处理完的中断请求。特殊EOI循环方式具有更大的灵活性,它可根据用户要求将最低优先级赋给指定的中断源。用户可在主程序或中断服务程序中利用置位优先权命令把最低优先级赋给某一中断源IRi,于是最高优先级便赋给IRi+1,其他各级按循环方式类推。例如,在某一时刻,8259A中的ISR寄存器的第2位和第6位置“1”,表示当前CPU正在处理第2级和第6级中断。它们以嵌套方式引入系统,如果当前CPU正在执行优先级高的第2级中断服务程序,用户在该中断服务程序中安排了一条优先权置位指令,将最低级优先权赋给IR4,那么待这条指令执行完毕,各中断源的优先级便发生变化,IR4具有最低优先级,IR

1 / 137
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功