微型计算机技术第七章_第1页
微型计算机技术第七章_第2页
微型计算机技术第七章_第3页
微型计算机技术第七章_第4页
微型计算机技术第七章_第5页
已阅读5页,还剩393页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、7.1 中断控制器中断控制器8259A 一、引言 二、8259A的引脚、编程结构和工作过程 三、8259A的编程 1. 设置中断屏蔽字 2. 发中断结束命令EOI 四、8259A在IBM PC/XT系统中的应用五、 8259A在 Pentium机中的应用第第7章中断控制器、计数章中断控制器、计数/定时控制器及定时控制器及DMA控制器控制器7.1可编程中断控制器8259A7.3可编程DMA控制器8237A7.2可编程计数/定时控制器8253习题7.1 可编程中断控制器可编程中断控制器8259A中断系统是冯诺依曼结构计算机的一项重要技术,尤其为解决当前高速运算CPU与低速外部设备信息交换之间的矛盾

2、。8086系列有功能很强的中断系统,它可通过8259A可编程中断控制器来实现。 7.1.1 8259A芯片内部结构芯片内部结构 8259A可编程中断控制器包括以下8部分,芯片内部结构如图7.1所示。8259A芯片有28条引脚,双列直插式封装,各引脚的信号功能如图7.2所示。图图7.1图图7.21. 数据总线缓冲器这是一个双向8位3态缓冲器,由它构成8259A与CPU之间的数据接口,是8259A与CPU交换数据的必经之路。2. 读/写控制电路用来接收来自CPU的读/写控制命令和片选控制信息。由于一片8259A只占两个I/O端口地址,可用末位地址码A0来选端口,端口的其他高位地址作为片选信号CS输

3、入。当CPU执行OUT指令时,WR信号与A0配合,将CPU通过数据总线(D7D0)送来的控制字写入8259A中有关的控制寄存器。当CPU执行IN指令时,RD信号与A0配合,将8259A中内部寄存器内容通过数据总线(70)传送给CPU。3. 级联缓冲/比较器一片8259A只能接收八级中断从IR7IR0输入,当引入的中断超过8级时,可用多片8259A级联使用,构成主从关系,对于主8259A,级联信号CAS2CAS0是输出信号,对于从8259A,CAS2CAS0是输入信号。SP/EN是一个双功能信号,当8259A处于缓冲状态时,EN有效,表示允许8259A通过缓冲存储器输出;EN无效,表示CPU写8

4、259A。当8259A处于非缓冲状态时,SP用作表明主从关系,SP=1表示是主8259A,SP=0表示是从8259A。4. 中断请求寄存器IRR这是一个8位寄存器,用来存放由外部输入的中断请求信号IR7IR0。当某一个IRi端呈现高电平时,该寄存器的相应位置“1”,显然最多允许8个中断请求信号同时进入,这时,IRR寄存器将被置成全“1”。5. 中断服务寄存器ISR这是一个8位寄存器,用来记录正在处理中的中断请求。当任何一级中断被响应,CPU正在执行它的中断服务程序时,ISR寄存器中相应位置“1”,一直保持到该级中断处理过程结束为止。多重中断情况下,ISR寄存器中可有多位被同时置“1”。6. 中

5、断屏蔽寄存器IMR这是一个8位寄存器,用来存放对各级中断请求的屏蔽信息。当该寄存器中某一位置“1”时,表示禁止这一级中断请求进入系统,通过IMR寄存器可实现对各级中断的有选择的屏蔽。7. 优先权判别器PR用来识别各中断请求信号的优先级别。当多个中断请求信号同时产生时,由PR判定当前哪一个中断请求具有最高优先级,于是系统首先响应这一级中断,转去执行相应的中断服务程序。当出现多重中断时,由PR判定是否允许所出现的中断去打断正在处理的中断而被优先处理。一般处理原则是允许高级中断打断低级中断,而不允许低级中断打断高级中断,也不允许同级中断互相打断。8. 控制电路它是8259A内部的控制器。根据中断请求

6、寄存器IRR的置位情况和优先权判别器PR的判定结果,向8259A内部其他部件发出控制信号,并向CPU发出中断请求信号INT和接收来自CPU的中断响应信号INTA,控制8259A进入中断服务状态。实际上8259A芯片是在控制电路控制之下构成一个有机的整体。7.1.2 8259A芯片的工作方式芯片的工作方式8259A有两种中断触发方式:电平触发方式和边沿触发方式,可由软件来定义。当定义为电平触发方式时,从IR7IR0输入的有效信号应为高电平,而且必须保持有效到响应它的第一个INTA信号的前沿,否则这个IRi信号有可能被丢失;但是也不允许IRi信号太长,如果在中断服务寄存器ISR相应位复位后该IRi

7、信号还继续有效,则8259A就可能重新响应这一中断请求而出现重复中断现象。为避免这种情况产生,在ISR某一位被复位时应将相应的IRi信号置成无效。采用这种电平触发方式还有一个问题必须注意,即如果通过一个IRi端引入多个中断请求,它们由软件进行排队;那么当这个IRi端上一个中断请求的有效期间,另一个中断请求又产生时,将有可能丢失第2个中断请求信号,从这个意义上讲是不允许发生中断请求的电平信号持续时间太长,但也不能太短,这在使用中必须注意。当8259A被定义为边沿触发方式时,不会产生上述的丢失中断请求的现象,这时当IRi端上出现由低电平到高电平的正跳变时,表示中断请求信号有效,最好用负脉冲的后沿来

8、实现。采用这种边沿触发方式不会出现重复中断现象,但是也要求在响应某中断请求的第1个INTA信号有效前不要出现下一个中断请求,否则有可能丢失前面一个中断请求。图图7.3不管是采用什么方式引入的中断,在中断响应周不管是采用什么方式引入的中断,在中断响应周期内第期内第2个个INTA信号有效期间信号有效期间8259A应将当前被响应将当前被响应的中断类型码应的中断类型码n通过数据总线通过数据总线D7D0传送给传送给CPU。8259A中一字节中断类型码的形成如图中一字节中断类型码的形成如图7.3所示。所示。从图中可看出,由一片8259A引入的8级中断请求的类型码肯定是连续的。它们在中断入口地址表中的位置取

9、决于由软件定义的D7D3位的状态,并由对8259A进行初始化时写入的相应控制字来确定。例如,定义D7D3=10001时,则该8级中断的类型码将顺序为88H8FH。 8259A具有非常灵活的中断管理方式,可满足使用者的各种不同要求。而中断优先权管理是中断管理的核心问题。8259A可采用优先权级别固定分配和循环设置两种方式。各中断源的优先级确定后,一般处理原则只允许高级中断打断低级中断而被优先处理,禁止低级打断高级或同级中断相互打断。8259A中对中断优先权的管理,可概括为完全嵌套方式、自动循环方式和中断屏蔽方式。详细讲解如下:1. 完全嵌套方式完全嵌套方式是8259A被初始化后自动进入的基本工作

10、方式,在这种方式下,由各个IRi端引入的中断请求具有固定的中断级别。IR0具有最高优先级,IR7具有最低优先级,其他级顺序类推。采用完全嵌套方式时,ISR寄存器中某位置“1”,表示CPU当前正在处理这一级中断请求,8259A将允许比它级别高的中断请求进入,打断当前的中断服务程序而被优先处理,但禁止与它同级或比它级别低的其他中断请求进入。采用这种完全嵌套方式,中断嵌套的深度取决于整个中断系统所具有的中断级数,在一个具有8级中断的系统中,最大的中断嵌套深度为8,如图7.4所示。图图7.4在中断嵌套过程中,中断服务寄存器ISR的内容将不断变化,最后有可能使(ISR)FFH,表示当前有8级中断请求正在

11、被服务,首先结束的应是最高级的中断,待CPU由高级到低级将全部中断处理结束返回到主程序时,ISR寄存器将重新复位为全“0”。这种情况下要求堆栈的容量比较大。因为每响应一次中断至少要往堆栈压入6个字节的信息(两个字节标志寄存器内容和4个字节的断点地址),在各级中断处理过程中,还有可能要将其他资源压入堆栈保护。除此之外,在上述中断嵌套过程中,还要求CPU每响应一次中断进入中断服务程序后,应安排开中断指令(STI)将IF标志位置“1”,否则由8259A引入的高级中断将无法进入系统。当任何一级中断处理完毕,CPU应向8259A回送结束命令(EOI),以便8259A将ISR寄存器中相应位清“0”,标志一

12、级中断处理过程完全结束。8259A在完全嵌套方式下,可采用以下3种中断结束方式:(1) 普通EOI方式: 当任何一级中断服务程序结束时,只给8259A传送一个EOI结束命令,8259A收到这个EOI命令后,自动将ISR寄存器中级别最高的置“1”位清“0”。这种结束方式最简单,但是只有当前结束的中断总是尚未处理完的级别最高的中断时,才能使用这种结束方式。这就是说,如果在中断服务程序中曾经修改过中断级别,则决不能采用这种方式,否则会造成严重后果。(2) 特殊EOI方式: 在普通EOI方式的基础上,当中断服务程序结束给8259A发出EOI命令的同时,将当前结束的中断级别也传送给8259A,就被称作特

13、殊EOI方式。这种情况下,8259A将ISR寄存器中指定级别的相应位清“0”,显然这种结束方式可在任何情况下使用。(3) 自动EOI方式: 任何一级中断被响应后,ISR寄存器中相应位置“1”,CPU将进入中断响应总线周期,在第2个中断响应信号(INTA)结束时,自动将ISR寄存器中相应位清“0”,被称作自动EOI方式。采用这种结束方式,当中断服务程序结束时,CPU不用向8259A回送任何信息,这显然是一种最简单的结束方式。但是存在一个明显的缺点,任何一级中断在执行中断服务程序期间,在8259A中没有留下任何标志,如果在此过程中出现了新的中断请求,则只要当前IF=1,不管新出现的中断级别如何,都

14、将打断正在执行的中断服务程序而被优先执行,这就有可能出现低级中断打断高级中断或同级中断相互打断的不合理现象,通常将这种情况称作“重复嵌套”,重复嵌套的深度无法控制,很可能造成某些高级中断得不到及时处理的情况,这显然是不允许的,因此使用自动EOI方式一定要特别小心。对于一些以预定的速率发生的中断,在肯定不会产生重复嵌套的情况下,采用自动EOI方式是最理想的。2. 自动循环方式上述完全嵌套方式中,中断请求IR7IR0的优先级别是固定不变的,使得从IR0引入的中断总是具有最高的优先级,其他任何中断都有可能被它打断,却无法打断它。实际上很可能出现由IR0IR7引入的各级中断的重要性差别不大的情况,所以

15、,希望它们的中断级别不是固定不变的,而是可以以某种策略改变它们的优先级别。自动循环方式是改变中断请求优先级别的策略之一,其基本思想是:每当任何一级中断被处理完,它的优先级别就被改变为最低级,而将最高优先级赋给原来比它低一级的中断请求。实现自动循环方式有下面3种不同的做法:(1) 普通EOI循环方式: 当任何一级中断被处理完后,CPU给8259A回送普通EOI命令,8259A接收到这一命令后将ISR寄存器中优先级最高的置“1”位清“0”,并赋给它最低优先级,而将最高优先级赋给原来比它低一级的中断请求,其他中断请求的优先级别以循环方式类推。例如,某系统中原来定义的是IR0为最高级,IR7为最低级,

16、当前正在处理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

17、的后沿自动将ISR寄存器中相应位清“0”,并立即改变各级中断的优先级别,改变方案与上述普通EOI循环方式相同。采用这种自动EOI循环方式与前述的自动EOI方式一样,有可能出现“重复嵌套”现象,使用中要特别小心,否则有可能造成严重后果。(3) 特殊EOI循环方式: 前述的普通EOI循环和自动EOI循环都是将最低优先权赋给刚刚处理完的中断请求。特殊EOI循环方式具有更大的灵活性,它可根据用户要求将最低优先级赋给指定的中断源。用户可在主程序或中断服务程序中利用置位优先权命令把最低优先级赋给某一中断源IRi,于是最高优先级便赋给IRi+1,其他各级按循环方式类推。例如,在某一时刻,8259A中的ISR

18、寄存器的第2位和第6位置“1”,表示当前CPU正在处理第2级和第6级中断。它们以嵌套方式引入系统,如果当前CPU正在执行优先级高的第2级中断服务程序,用户在该中断服务程序中安排了一条优先权置位指令,将最低级优先权赋给IR4,那么待这条指令执行完毕,各中断源的优先级便发生变化,IR4具有最低优先级,IR5则具有最高优先级,但这时第2级中断服务程序并没有结束,因此,ISR寄存器中仍保持第2位和第6位置“1”,只是它们的优先级别已经分别被改变为第5级和第1级。显然,使用了置位优先权指令后,正在处理的中断不一定在尚未处理完的中断中具有最高优先级。上例中,原来优先级高的第2级现在变成了第5级,而原来的第

19、6级现在上升为第1级。这种情况下当第2级中断服务程序结束时,不能使用普通EOI方式,而必须使用特殊EOI方式,就是说向8259A发送IR结束命令的同时,还应将IR2的当前级别(第5级)传送给8259A,8259A才能正确地将ISR寄存器中的第2位清“0”。3. 中断屏蔽方式对中断优先级的管理还可采用中断屏蔽方式,CPU在任何时候都可安排一条清除中断标志指令(CLI),将中断标志位清“0”,从此以后,CPU将禁止所有的由INTR端引入的可屏蔽中断请求。这是由CPU自己完成的中断屏蔽功能,它只能对所有的可屏蔽中断一起进行屏蔽,而无法有选择地对某一级或几级中断进行屏蔽。这种屏蔽操作可由8259A通过

20、中断屏蔽寄存器来实现,有两种实现方式:(1) 普通屏蔽方式: 将中断屏蔽寄存器IMR中的某一位或某几位置“1”,即可将相应级的中断请求屏蔽掉。这种屏蔽方式可在两种情况下使用。其一是当CPU在执行主程序时,要求禁止响应某级或某几级中断时,可在主程序中将IMR寄存器的相应位置“1”;其二是CPU在处理某级中断过程中,要求禁止级别比它高的某一级或某几级中断时,可在中断服务程序中将IMR寄存器的相应位置“1”,这样所实现的称作普通屏蔽方式。(2) 特殊屏蔽方式: 当CPU正在处理某级中断时,要求仅对本级中断进行屏蔽,而允许其他优先级比它高或低的中断进入系统,这被称作特殊屏蔽方式。对8259A进行初始化

21、时,可利用控制寄存器的SMM位的置位来使8259A进入这种特殊屏蔽方式。例如,若当前正在执行IR3的中断服务程序,希望进入特殊屏蔽方式时,只需在STI指令后,将IMR寄存器的第3位置“1”,并将控制寄存器的SMM位置“1”,标志8259A已进入特殊屏蔽方式。此后,除IR3之外,其他任何级的中断均可进入,待IR3的中断服务程序结束时,应将IMR寄存器的第3位复位,并将SMM位复位,标志退出特殊屏蔽方式,然后利用特殊EOI方式,由8259A将ISR寄存器的第3位清“0”。7.1.3 8259A芯片的级联使用芯片的级联使用一片8259A芯片只能管理8级中断,在多于8级中断的系统中,必须将多片8259

22、A级联使用。最简单的级联方式为两级,第1级只需一片8259A用作主片,第2级可接18片8259A用作从片,如图7.5所示。图图7.5两级级联情况下可管理的中断源最多为64级,如果还要增多中断源数量,可进一步扩展为多级级联。8259A级联使用时,主8259A上没有连接从8259A的IRi端,可直接与中断源相连。这种方式下,对8259A初始化时,应使用支持级联方式的控制字进行定义。在8259A级联系统中,某一片从8259A的IRi端接收到一个或多个中断请求信号时,经过判优可确定当前的最高级中断得到响应,并通过INT向主8259A发出请求;经主8259A再次判优确认是当前最高级中断时,向CPU发出中

23、断请求信号INT,以后的过程与单级使用时类似。对CPU来说,8259A的单级使用和级联使用区别不大。8259A在级联使用方式下的中断响应总线周期时序图如图7.6所示。第1个INTA有效时,主8259A将级联地址从CAS2CAS0 3端输出给所有的从8259A芯片,到第2个INTA有效时,与主8259A发出的级联地址相符的从8259A将向CPU送出当前的中断类型码n,以后的操作过程与单级使用时相同。图图7.6当从8259A引入的中断处理过程结束时,CPU应能送出两个EOI结束命令,一个送给主8259A,用来将主8259A中的ISR寄存器的相应位清“0”;另一个送给从8259A,用来将从8259A

24、中的ISR寄存器相应位清“0”,才标志一次中断处理过程的结束。某系统中8086 CPU工作在最小模式,中断系统由一片主8259A、2片从8259A构成级联方式工作,其系统连接如图7.7所示。图图7.7整个系统最多可引入22级中断请求信号,1从8259A引入的8级中断通过主8259A的IR6端引入,2从8259A引入的8级中断通过主8259A的IR4端引入,主8259A上其他的6个IRi端可直接引入其他中断请求。如果初始化时将它们定义为完全嵌套方式,意味着2从8259A引入的中断请求优先级别高于1从8259A引入的中断请求,它们由主8259A完成判优功能后才能引入系统。假定在某一时刻,1从825

25、9A的IR7端接收到一个中断请求,经1从8259A判优后决定响应这一中断请求,将ISR寄存器中第7位置“1”,于是通过INT向主8259A的IR6端发出请求,经主8259A再次判优,决定响应这一请求时,才将主8259A中ISR寄存器的第6位置“1”,CPU将从中断入口地址表中得到相应的入口地址,转去执行中断服务程序。如果在执行该中断服务程序过程中,1从8259A的IR0端接收到一个新的中断请求。根据中断嵌套原则,在1从8259A中IR0优先级别高于IR7,应该允许新的中断请求进入,将ISR寄存器中第0位置“1”,并通过INT向主8259A的IR6端再次发出请求。但这时由于主8259A中ISR寄

26、存器的第6位早已置“1”,不允许这一级中断再进入,这便造成1从8259A不能按完全嵌套方式工作,这显然是不合理的。为此,需要采取特殊措施来解决这个问题。一种可取的方式被称作特殊完全嵌套方式,它只在级联方式下有效。当中断系统工作在级联方式,对主8259A初始化时,应将它定义为特殊完全嵌套方式。采用特殊完全嵌套方式的中断级联系统中,任一个从8259A接收到一个中断请求经判优确定为当前最高优先级应该响应这一中断请求时,立即通过INT端向主8259的相应IRi端提出请求。如果这时主8259A中ISR寄存器的相应位已经置“1”,说明当前在同一个从8259A中接收到了比原先更高级的中断请求,主8259A应

27、允许它进入;只要它是当前主8259A中最高级的中断请求,就应通过INT向CPU发出新的中断请求,CPU将打断原来的中断服务程序而优先处理这一中断请求,转去执行相应的中断服务程序,以保证任一从8259A控制器能按完全嵌套方式正常操作。上述情况下,当1号从8259A从IR7端接收到中断请求时,中断请求寄存器IRR将被置成如下状态: 7 0IRR10000000(#1号从8259A)经判优线路确定为当前#1号从8259A中最高优先级时,将ISR寄存器置成如下状态:7 0 ISR10000000(#1号从8259A)然后将IRR寄存器复位为全“0”,并通过INT向主8259A的IR6端发出请求,将主8

28、259A中的IRR寄存器置成如下状态:7 0IRR01000000(主8259A)经主8259A判优确定为当前主8259A中最高优先级时,将ISR寄存器置成如下状态:7 0 ISR01000000(主8259A)然后将IRR寄存器复位为全“0”,并通过INT向CPU发出中断请求信号INTR。待CPU执行完当前指令访问到INTR有效时暂停执行下条指令进入中断响应总线周期,获得中断类型码后,可转去执行相应中断服务程序。在CPU执行上述中断服务程序过程中#1从8259A从IR0端接收到一个新的中断请求,IRR寄存器被置成如下状态:7 0 ISR00000001(#1号从8259A)经判优线路与正在服

29、务的中断请求IR7比较它具有更高的优先级,应允许它进入系统而被优先处理,于是将ISR寄存器置成如下状态:7 0 ISR10000001(#1号从8259A)然后将IRR寄存器复位为全“0”,并通过INT再次向主8259A的IR6端发出请求,由于采用特殊完全嵌套方式,主8259A将允许新的中断请求参加判优,当确定为当前最高优先级时,保持ISR寄存器的状态不变,如下所示: 7 0 ISR01000000(主8259A)并再次向CPU发出中断请求INT,CPU将暂停执行原来的中断服务程序而转去执行新的更高级的中断服务程序,实现在级联方式下的完全嵌套过程。7.1.4 8259A芯片的控制字及其工作方式

30、芯片的控制字及其工作方式可编程中断控制器8259A的初始化操作可明确地分成两个部分,首先要通过预置命令字(ICWi)对8259A进行初始化,然后8259A将自动进入操作模式。可在8259A操作过程中通过操作命令字(OCWi)来定义8259A的操作方式,而且在8259A的操作过程中允许重置操作命令字,以动态地改变8259A的操作与控制方式。每片8259A包含两个内部端口地址,一个偶地址端口(A0=0),一个奇地址端口(A01),其他高位地址码由用户定义,用来作为8259A的片选信号(CS)。1. 预置命令字8259A的预置命令字共4个(ICW1ICW4)。不是任何情况下都需要设置个预置命令字,可

31、根据8259A的使用情况来选取,它们的设置流程如图7.8所示。图图7.8从图7.9中可看出,ICW1和ICW2是必须的,ICW3是级联使用时才需要设置,ICW4是在8086/8088-8259A配置系统中需要设置。(1) ICW1具体格式如图7.9所示。图图7.9端口地址为偶地址(A0=0),D4表示当前写入8259A的是预置命令字ICW1。IC4位用来说明是否需要设置1CW4,对于8086/8088系统中使用的8259A,IC4位恒置1,需要设置ICW4来对8259A进行初始化。SNGL位用来说明中断系统中是一片8259A单独使用,还是多片8259A级联使用。单级使用时应将SNGL位置“1”

32、。ADI位对8086/8088系统无效。LTIM位用来定义中断请求信号的触发方式。LTIM=1时,表示IRi端上出现高电平为有效,LTIM=0时,表示IRi端出现由低电平向高电平的正跳变沿为有效。(2) ICW2具体格式如图7.10所示。图图7.10紧跟在ICW1之后,端口地址为奇地址(A0=1)表示当前写入8259A的是预置命令字ICW2,由它定义中断类型码的高5位。低3位取决于当前的中断请求是由IR7IR0中哪一个端输入。由此可确定当前中断请求的中断类型码。(3) ICW3只对级联方式有效,端口地址为奇地址。对于主8259A,使用格式如图7.11(a)所示,对于从8259A的使用格式如图7

33、.11(b)所示。图图7.11ID2ID0用来表明该从8259A是接在主8259A的哪个IR端上,例如某片从8259A的ID2ID1ID0=100,则表示该从8259A是接在主8259A的IR4端上。(4) ICW4对于8086/8088系统是必须设置的预置命令字,其具体格式如图7.12所示。图图7.12端口地址为奇地址(A0=1),PM位对于8086/8088系统配置来说恒置“1”,AEOI用来定义是否采用自动EOI方式,SFNM用来定义在级联方式下是否采用特殊完全嵌套方式,在单级使用方式下SFNM位无效。BUF位用来表明8259A是否采用缓冲方式,如果BUF位为1,表示采用缓冲方式,这时双

34、功能信号线 EN 有效。EN=0,表示允许缓冲存储器输出,EN=1,表示允许缓冲存储器输入。这种情况下由M/S位定义主从关系。M/S=1,表示该片是主8259A,M/S=0,表示该片是从8259A。如果BUF位为0,表示不采用缓冲方式,这时双功能信号线 SP有效,SP=0表示该片是从8259A,SP=1,表示是主8259A,这种情况下M/S位无效。当8086系统中8259A单级使用,其端口地址为80H和81H,可用下面的初始化程序段来写入预置命令字ICW1ICW4:MOVAL,13H定义ICW1OUT80H,AL;MOVAL,18H定义ICW2OUT81H,AL;MOVAL,01H定义ICW4

35、OUT81H,AL;所设定的预置命令字具体格式及含义如图7.13所示。由ICW2可确定该8259A引入的8级中断的中断类型码为18H1FH。2. 操作命令字8259A经ICWi预置后已进入初始化状态,可接收来自IRi端的中断请求。自动进入操作命令状态,准备接收CPU写入8259A的操作命令字OCWi。(1) OCW1用来实现中断屏蔽功能,其端口地址为奇地址(A01),OCW1内容被直接置入中断屏蔽寄存器IMR中,其格式如下:A0 7 01M7 M6 M5 M4 M3 M2 M1 M0Mi= 1:屏蔽由IRi引入的中断请求0:允许IRi端中断请求进入图图7.13(2) OCW2用来定义中断结束方

36、式,其端口地址为偶地址(A0=0),其格式如图7.14所示。图图7.14由R,SL,EOI 3位编码可定义多种不同的中断结束方式或发出置位优先权命令。当3位编码为“001”,则定义8259A采用普通EOI结束方式,一旦中断服务程序结束,将给8259A送出EOI结束命令,8259A将ISR寄存器中当前级别最高的置“1”位清“0”。当3位编码为“011”,则定义8259A采用特殊EOI结束方式,一旦中断处理结束,除给8259A送EOI结束命令外,还由L2 L1 L0字段给出当前结束的是哪一级中断,8259A应将ISR寄存器中指定级别的相应位清“0”。当3位编码为“101”,定义8259A采用普通E

37、OI循环方式。一旦中断结束,8259A一方面将ISR寄存器中当前级别最高的置“1”位清“0”;另一方面将最低优先级赋给刚结束的中断请求IRi,将最高优先级赋给中断请求IRi+1,其他中断请求的优先级别按循环方式顺序改变。当3位编码为“111”,则定义8259A采用特殊EOI循环方式。一旦中断结束,8259A将ISR寄存器中由L2 L1 L0字段给定级别的相应位清“0”;并将最低优先级赋给这一中断请求,最高优先级赋给原来比它低一级的中断请求,其他级按循环方式顺序改变。当3位编码为“100”和“000”,则定义8259A采用自动EOI循环方式(置位)和取消自动EOI循环方式(复位)。一旦被定义为自

38、动EOI循环方式,CPU将在中断响应总线周期中第2个中断响应信号INTA结束时,将ISR寄存器中的相应位置“0”;并将最低优先级赋给这一级,最高优先权赋给原来比它低一级的中断,其他中断请求的级别按循环方式分别赋给。当3位编码为“110”时,则表示向8259A发出置位优先权命令,将最低优先级赋给由L2 L1 L0字段所给定的中断请求IRi。其他中断源的级别按循环方式分别赋给。(3) OCW3端口地址仍为偶地址(A0=0),D4D3(=01)作为OCW3的标志位可与OCW2区别开,其格式如图7.15所示。图图7.15RR位用作读寄存器命令。RR=1,表示CPU要求读取8259A中某寄存器内容。RI

39、S位用来为读寄存器命令确定读取对象:RIS0时表示要求读IRR寄存器内容,RIS=1时表示要求读ISR寄存器内容。这就是说,如果将RR和RIS位置成“10”然后安排一条输入指令(IN),则将8259A中的IRR寄存器内容读到CPU的累加器中。而如果将RR和RIS位置成“11”,同样安排一条IN指令,则读到累加器中的将是8259A中ISR寄存器的内容。如果CPU需要读出当前IMR寄存器的内容,则不需要设置RR和RIS位的状态,只要端口地址设置成奇地址(A01),直接安排一条IN指令,便可将IMR寄存器内容读入累加器中,这种情况实际上与OCW3控制字无关,可在程序的任何位置安排IN指令来实现。P位

40、可称作查询位,将P位置“1”后,表示向8259A发出查询命令,查询当前是否有中断请求正在被处理,如果有,则给出当前处理的最高优先级是哪一级,可查询的中断状态字格式如图7.16所示。图图7.16当系统中8259A采用完全嵌套方式。已知当前ISR寄存器中第2位和第5位置“1”,即第2级和第5级中断正在处理过程中,当前正在执行的应该是第2级中断服务程序。如果在第2级中断服务程序中,将OCW3中P位置“1”后,安排如下一条输入指令:OCW3中的ESMM和SMM位是用来实现或取消特殊屏蔽方式,当ESMM和SMM位置成“11”时,表示定义8259A采用特殊屏蔽方式,这种情况下只屏蔽同级中断请求进入,而允许

41、高级中断打断低级中断,也允许低级中断打断高级中断。当ESMM和SMM位置成“10”时,表示取消这种特殊屏蔽方式。上述操作控制字OCW1OCW3可安排在预置命令字之后,用户可根据需要在程序的任何位置上设置它们,当需要读取ISR或IRR寄存器内容或需要查询当前8259A的中断状态时,都必须先定义OCW3,然后用IN指令读入。如果只需要读入IMR寄存器内容,则不需要定义OCW3。由此看来并不是任何时候都需要设置OCW3操作命令字。3. 8259A级联使用的初始化程序举例某系统中设置两片8259A实现中断控制,它们之间采用级联方式连接,一片从8259A的INT端与主8259A的IR3端相连,已知当前主

42、8259A的IR0和IR5端上分别引入两个中断请求,从8259A的IR2和IR3端上也分别引入两个中断请求,如图7.17所示。图图7.17已知主8259A引入的中断类型码分别为40H和45H,它们的中断服务程序在同一段中,其段基址为1000H,偏移地址分别为1050H和2060H,而由从8259A引入的中断请求IR2和IR3的中断类型码为32H和33H,它们的中断服务程序的段基址为2000H。偏移地址分别为5440H和3620H,那么首先应将4个中断入口写入中断入口地址表中,如图7.18所示。图图7.18若已知主8259A的端口地址为FFE8H和FFE9H,从8259A的端口地址为FFFAH和

43、FFFBH,应分别对主8259A和从8259A进行初始化操作。对主8259A的初始化程序段如下:MOVAL, 11HMOVDX, 0FFE8HOUTDX, AL;定义ICW1MOVAL, 40HMOVDX, 0FFE9HOUTDX, AL;定义ICW2MOVAL, 08HOUTDX, AL;定义ICW3MOVAL, 11HOUTDX, ALH;定义ICW4MOVAL, 0D6HOUTDX, AL;定义OCW1MOVAL, 20HMOVDX, 0FFE8HOUTDX, AL;定义OCW2经过这样初始化的主8259A中断控制器被定义为级联使用方式,中断请求信号IRi采用边沿触发方式;可引入的中断类

44、型码为40H47H;主8259A的IR3端上接有从8259A;采用特殊完全嵌套方式,非自动EOI结束方式,非缓冲方式,由SP=1确定为主8259A;屏蔽掉IR0,IR3和IR5以外的其他中断源;采用普通EOI结束方式。对从8259A的初始化程序段如下:MOVAL, 11HMOVDX, 0FFFAHOUTDX, AL;定义ICW1MOVAL, 30HMOVDX, 0FFFBHOUTDX, AL;定义ICW2MOVAL, 03OUTDX, AL;定义ICW3MOVAL, 11HOUTDX, AL;定义ICW4MOVAL, 0F3HOUTDX, AL;定义OCW1MOVDX, 0FFFAHMOVAL

45、, 20HOUTDX, AL;定义OCW2经过这样初始化的从8259A中断控制器被定义为级联使用方式,中断请求信号IRi采用边沿触发方式;可引入的中断类型码为30H37H;该从8259A接在主8259A的IR3端上;采用特殊完全嵌套方式,非自动EOI结束方式,非缓冲方式,由SP=0确定为从8259A;屏蔽掉IR2和IR3以外的其他中断源;采用普通EOI结束方式。不管是对主8259A还是从8259A,操作命令字OCW3可在操作过程中根据需要来设置。7.2 可编程计数可编程计数/定时控制器定时控制器82538253可编程计数/定时控制器具有3个独立的通道,最高计数速率为2.6MHz,分别称作计数器

46、0,计数器1及计数器2。 7.2.1 8253芯片内部结构芯片内部结构8253芯片由数据总线缓冲存储器、读/写控制电路、控制字寄存器及3个计数通道组成,其内部结构流程图如图7.19所示。8253芯片有24条引脚,封装在双列直插式陶瓷管壳内,其引脚信号如图7.20所示。图图7.19图图7.201. 数据总线缓冲存储器这是8253与CPU之间的数据接口,它由8位双向三态缓冲存储器构成,是CPU与8253之间交换信息的必经之路。2. 读/写控制电路接收CPU送入的读/写控制信号,并完成对芯片内部各功能部件的控制功能,因此,它实际上是8253芯片内部的控制器。可接收的控制信号如下:(1) A1A0端口

47、选择信号,由CPU输入。8253内部有3个独立的通道和一个控制字寄存器,它们构成8253芯片的4个端口,CPU可对3个通道进行读/写操作,对控制字寄存器进行写操作。这4个端口地址由最低2位地址码A10来选择。(2) CS片选信号,由CPU输入,低电平有效,通常由端口地址的高位地址译码形成。(3) RD、WR读/写控制命令,由CPU输入,低电平有效。RD有效时,CPU读取由A10所选定的通道内计数器的内容。WR有效时,CPU将计数值写入各个通道的计数器中,或者是将方式控制字写入控制字寄存器中。3. 通道0通道28253内部包含3个功能完全相同的通道,每个通道内部设有一个16位计数器,可进行二进制

48、或十进制(BCD码)计数。采用二进制计数时,最大计数值是FFFFH,采用BCD码计数时,最大计数值是9999。与此计数器相对应,每个通道内设有一个16位计数值锁存器,必要时可用来锁存计数值。当某通道用作计数器时,应将要求计数的次数预置到该通道的计数器中,被计数的事件应以脉冲方式从CLKi端输入,每输入一个计数脉冲,计数器内容减“1”,待计数值计到“0”,OUTi端将有输出,表示计数次数到。当某通道用作定时器时,由CLKi输入一定频率的时钟脉冲。根据要求定时的时间长短确定所需的计数值,并预置到计数器中,每输入一个时钟脉冲,计数器内容减“1”,待计数值计到“0”,OUTi将有输出,表示定时时间到。

49、允许从CLKi输入的时钟频率在12MHz范围内。因此,任一通道作计数器用或作定时器用,其内部操作完全相同,区别仅在于前者是由计数脉冲进行减“1”计数,而后者是 由时钟脉冲进行减“1”计数。作计数器时,要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。作定时器时,计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到:定时系数=要求定时的时间/时钟脉冲的周期除此之外,各通道还可用来产生各种脉冲序列。向各个通道输入的门控信号GATE的作用随各种不同工作方式而不相同。有关内容在“7.2.2 8253芯片的工作方式”部分详细说明。4. 控制字寄存器控制字寄存器用来存放由CPU写入82

50、53的方式选择控制字,由它来定义8253中各通道的工作方式,其使用格式如图7.21所示。图图7.21SC1,SC0位用来选择通道。RL1,RL0位用来定义对所选通道中的计数器的操作。RL1RL0=00时,将该通道中当前计数器的内容锁存到锁存器中,为CPU读取当前计数值作准备。RL1RL0=01时,表示只读/写计数器低字节,这是因为只使用计数器的低字节作计数用。RL1RL0=10时,表示只读/写计数器高字节,这是因为只使用计数器的高字节作计数用。RL1RL0=11时,表示先读/写计数器低字节,后读/写计数器高字节。BCD位用来定义是采用二进制计数还是十进制计数。M2M2M0位用来定义所选通道的6

51、种工作方式。7.2.2 8253芯片的工作方式芯片的工作方式8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。1. 工作方式 0工作方式0被称作计数结束中断方式,其定时波形如图7.22(a)所示。当任一通道被定义为工作方式0时,OUTi输出为低电平;若门控信号GATE为高电平,当CPU利用输出指令向该通道写入计数值WR有效时,OUTi仍保持低电平,然后计数器开始减“1”计数,直到计数值为“0”,此刻OUTi将输出由低电平向高电平跳变,可用它向CPU发出中断请求,OUTi端输出的高电平一直维持到下次再写入计数值为止。图图7.22在工作方式0情况下,门控信号GAT

52、E用来控制减“1”计数操作是否进行。当GATE=1时,允许减“1”计数;GATE=0时,禁止减“1”计数;计数值将保持GATE有效时的数值不变,待GATE重新有效后,减“1”计数继续进行。显然,利用工作方式0既可完成计数功能,也可完成定时功能。当用作计数器时,应将要求计数的次数预置到计数器中,将要求计数的事件以脉冲方式从CLKi端输入,由它对计数器进行减“1”计数,直到计数值为0,此刻OUTi输出正跳变,表示计数次数到。当用作定时器时,应把根据要求定时的时间和CLKi的周期计算出定时系数,预置到计数器中。从CLKi输入的应是一定频率的时钟脉冲,由它对计数器进行减“1”计数,定时时间从写入计数值

53、开始,到计数值计到“0”为止,这时OUTi输出正跳变,表示定时时间到。有一点需要说明,任一通道工作在方式0情况下,计数器初值一次有效,经过一次计数或定时后如果需要继续完成计数或定时功能,必须重新写入计数器的初值。2. 工作方式 1工作方式1被称作可编程单脉冲发生器,其定义波形如图7.22(b)。进入这种工作方式,CPU装入计数值n后OUTi输出高电平,不管此时GATE输入是高电平还是低电平,都不开始减“1”计数,必须等到GATE由低电平向高电平跳变形成一个上升沿后,计数过程才会开始。与此同时,OUTi输出由高电平向低电平跳变,形成输出单脉冲的前沿,待计数值计到“0”,OUTi输出由低电平向高电

54、平跳变,形成输出单脉冲的后沿,因此,由方式1所能输出单脉冲的宽度为CLKi周期的n倍。如果在减“1”计数过程中,GATE由高电平跳变为低电平,这并不影响计数过程,仍继续计数;但若重新遇到GATE的上升沿,则从初值开始重新计数,其效果会使输出的单脉冲加宽,如图7.22(b)中的第2个单脉冲。这种工作方式下,计数值也是一次有效,每输入一次计数值,只产生一个负极性单脉冲。3. 工作方式 2工作方式2被称作速率波发生器,其定时波形如图7.2(c)所示。进入这种工作方式,OUTi输出高电平,装入计数值n后如果GATE为高电平,则立即开始计数,OUTi保持为高电平不变;待计数值减到“1”和“0”之间,OU

55、Ti将输出宽度为一个CLKi周期的 负脉冲,计数值为“0”时,自动重新装入计数初值n,实现循环计数,OUTi将输出一定频率的负脉冲序列,其脉冲宽度固定为一个CLKi周期,重复周期为CLKi周期的n倍。如果在减“1”计数过程中,GATE变为无效(输入0电平),则暂停减“1”计数,待GATE恢复有效后,从初值n开始重新计数。这样会改变输出脉冲的速率。如果在操作过程中要求改变输出脉冲的速率,CPU可在任何时候,重新写入新的计数值,它不会影响正在进行的减“1”计数过程,而是从下一个计数操作周期开始按新的计数值改变输出脉冲的速率。4. 工作方式 3工作方式3被称作方波发生器,其定时波型如图7.23(a)

56、所示。图图7.23任一通道工作在方式3,只在计数值n为偶数,则可输出重复周期为n、占空比为1 1的方波。进入工作方式3,OUTi输出低电平,装入计数值n后,OUTi立即跳变为高电平。如果当前GATE为高电平,则立即开始减“1”计数,OUTi保持为高电平,若n为偶数,则当计数值减到n/2时,OUTi跳变为低电平,一直保持到计数值为“0”,系统才自动重新置入计数值n,实现循环计数。这时OUTi端输出的周期为nCLKi周期,占空比为1 1的方波序列;若n为奇数,则OUTi端输出周期为nCLKi周期,占空比为(n+1)/2)/(n-1)/2)的近似方波序列。如果在操作过程中,GATE变为无效,则暂停减

57、“1”计数过程,直到GATE再次有效,重新从初值n开始减“1”计数。如果要求改变输出方波的速率,则CPU可在任何时候重新装入新的计数初值n,并从下一个计数操作周期开始改变输出方波的速率。5. 工作方式 4工作方式4被称作软件触发方式,其定时波形如图7.23(b)所示。进入工作方式4,OUTi输出高电平。装入计数值n后,如果GATE为高电平,则立即开始减“1”计数,直到计数值减到“0”为止,OUTi输出宽度为一个CLKi周期的负脉冲。由软件装入的计数值只一次有效,如果要继续操作,必须重新置入计数初值n。如果在操作过程中,GATE变为无效,则停止减“1”计数,到GATE再次有效时,重新从初值开始减

58、“1”计数。显然,利用这种工作方式可以完成定时功能,定时时间从装入计数值n开始,则OUTi输出负脉冲(表示定时时间到),其定时时间=nCLK周期。这种工作方式也可完成计数功能,它要求计数的事件以脉冲的方式从CLKi输入,将计数次数作为计数初值装入后,由CLKi端输入的计数脉冲进行减“1”计数,直到计数值为“0”,由OUTi端输出负脉冲(表示计数次数到)。当然也可利用OUTi向CPU发出中断请求。因此工作方式4与工作方式0很相似,只是方式0在OUTi端输出正阶跃信号、方式4在OUTi端输出负脉冲信号。6. 工作方式 5工作方式5被称为硬件触发方式,其定时波形如图7.23(c)所示。进入工作方式5

59、,OUTi输出高电平,硬件触发信号由GATE端引入。因此,开始时GATE应输入为0,装入计数初值n后,减“1”计数并不工作,一定要等到硬件触发信号由GATE端引入一个正阶跃信号,减“1”计数才会开始,待计数值计到“0”,OUTi将输出负脉冲,其宽度固定为一个CLKi周期,表示定时时间到或计数次数到。这种工作方式下,当计数值计到“0”后,系统将自动重新装入计数值n,但并不开始计数,一定要等到由GATE端引入的正跳沿,才会开始进行减“1”计数,因此这是一种完全由GATE端引入的触发信 号控制下的计数或定时功能。如果由CLKi输入的是一定频率的时钟脉冲,那么可完成定时功能,定时时间从GATE上升沿开

60、始,到OUTi端输出负脉冲结束。如果从CLKi端输入的是要求计数的事件,则可完成计数功能,计数过程从GATE上升沿开始,到OUTi输出负脉冲结束。GATE可由外部电路或控制现场产生,故硬件触发方式由此而得名。如果需要改变计数初值,CPU可在任何时候用输出指令装入新的计数初值m,它将不影响正在进行的操作过程,而是到下一个计数操作周期才会按新的计数值进行操作。从上述各工作方式可看出,GATE作为各通道的门控信号,对于各种不同的工作方式,它所起的作用各不相同。在8253的应用中,必须正确使用GATE信号,才能保证各通道的正常操作。7.2.3 8253计数计数/定时控制器应用举例定时控制器应用举例定时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论