第8章中断系统与中断控制器8259A_第1页
第8章中断系统与中断控制器8259A_第2页
第8章中断系统与中断控制器8259A_第3页
第8章中断系统与中断控制器8259A_第4页
第8章中断系统与中断控制器8259A_第5页
已阅读5页,还剩157页未读 继续免费阅读

下载本文档

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

文档简介

第8章中断系统与中断控制器8259A8.1中断概述8.2中断处理过程8.3多级中断管理8.4PC/XT(8088/8086CPU)的中断系统8.58259A可编程中断控制器习题与思考题

中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初,它只是作为CPU与外设之间交换数据的一种方式。后来被用于CPU外部及内部紧急事件的处理、机器故障的处理、实时控制等多个方面,并产生了用软件方法进入中断处理的概念(软中断)。如今中断系统已成为计算机系统的一个极其重要的组成部分。此外,中断还是基于时间片调度的多任务操作系统的重要技术支柱之一。8.1中断概述1.中断所谓中断是一个过程,即CPU在正常执行程序的过程中,遇到外部或内部的紧急事件需要处理,暂停当前程序的执行,转去为紧急事件服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。为事件服务的程序称为中断服务程序或中断处理程序。2.中断源中断源是指能发出中断申请的外设或引起中断的原因。目前,微机中的中断源一般有以下几种:8.1.1中断的概念及其功能(1)外设的服务请求。如键盘在用户敲了一个键后向CPU提出中断请求,请求CPU接收该按键的编码;(2)CPU内部事件。如除法错误、运算溢出、设置单步执行方式等;(3)硬件故障。如电源掉电、内存出错等;(4)软中断。软中断又称为软件中断,是用软件方法产生中断,即在程序中安排特定的指令INTN(N为中断类型号),当程序执行到该类指令时,进入到中断类型号所对应的中断服务程序。显然,软中断是人为安排的,而硬件中断源引起的中断是随机的。在PC系列机中,软中断是调用操作系统功能的一种方法。(5)软时钟。为了提供时间标志,早期的计算机在内存中开辟了几个单元,分别作年、月、日、时、分、秒计数,并设置了一个定时信号发生器,大约55ms输出一个脉冲,作为中断请求。3.中断技术的优点(1)并行操作和分时操作。并行操作指CPU和多个外设并行操作;分时操作指CPU可分时执行多个用户程序和多道作业。CPU与外部设备进行数据传输的过程如下:CPU启动外部设备工作后,执行自己的主程序,此时外部设备也开始工作。当外设需要数据传输时,发出中断请求,CPU停止当前的主程序,转去执行中断服务子程序,中断处理结束以后,CPU继续执行主程序,外部设备也继续工作。如此不断重复,直到数据传送完毕。在此操作过程中,对CPU来说是分时的,即在执行正常程序时,接收并处理外部设备的中断请求,CPU与外部设备同时运行,并行工作。(2)实现实时处理。在实时控制系统中,现场定时或随机地产生各种参数、信息,要求CPU立即响应。利用中断机制,计算机就能实时地进行处理,特别是对紧急事件的处理。(3)故障处理。计算机运行过程中,如果出现某些故障,如电源掉电、运算溢出等,计算机可以利用中断系统自行处理。(4)基本功能调用:在PC机中,通过软件中断可实现DOS功能调用和基本BIOS调用。4.中断系统的功能

中断系统是为实现中断而设置的各种硬件与软件,包括中断控制逻辑及相应管理中断的指令。一个中断系统应具有以下功能:(1)中断响应:当中断源有中断请求时,CPU能决定是否响应该请求;(2)断点保护和中断处理:在中断响应后,CPU能保护断点,并转去执行相应的中断服务程序;(3)中断优先权排队:当有两个或两个以上中断源同时申请中断时,应能给出处理的优先顺序,保证先执行优先级高的中断;

(4)中断嵌套:在中断处理过程中,发生新的中断请求,应能识别中断源的优先级别,在高级的中断源申请中断时,能暂停低级中断源的服务程序,而转去响应和处理优先级较高的中断请求,处理结束后再返回较低级的中断服务程序,这一过程称中断嵌套或多重中断。因此,为了在较低级的中断服务程序中能及时响应相对较高的中断请求,必须在进入中断服务程序后尽快地设置开中断指令STI。8.2.1CPU响应中断的条件

1.中断源如何向CPU表达中断请求中断源向CPU表达中断请求,一般是通过设置中断请求触发器来实现的,在需要CPU服务时,将中断请求触发器置位,其“1”端或“0”端输出的跳变作为中断请求信号。显然中断源可以随时提出中断请求。8.2中断处理过程2.中断请求何种情况下才可能得到CPU响应一个中断请求在同时具备下列3个条件时,才有可能得到CPU响应:(1)系统中无总线请求信号;(2)该中断源未被屏蔽;(3)该中断请求在当前所有中断请求中级别最高。3.CPU何时响应中断

CPU在同时满足下列两个条件时,响应中断:(1)IF=1(对非屏蔽中断,没有此项要求);(2)现行指令执行完。CPU在每一个指令周期的最后一个总线周期的最后一个时钟周期的开始,对中断请求信号INTR采样,若有中断请求,则下一步不进入取指令周期,而进入中断响应周期。4.中断响应的实际操作

中断响应是实现向中断服务程序的过渡。在中断响应周期,CPU要顺序完成以下操作:(1)发出中断响应信号(Interrupt

Acknowledge);(2)关中断,即将IF位清0。以保证在响应一个中断的期间(不是正在处理中断服务子程序期间)不再响应另一个中断;

(3)保护断点和标志寄存器(FR)。断点是响应中断位置的下一条指令的地址,对8086来说,保护断点就是保存CS和IP的内容(压入堆栈)。标志寄存器FR中存放着当前执行的指令的一些重要特征,也需要保存起来,以便中断返回时继续使用其中的内容,因此,在中断中把标志寄存器FR也称为程序状态字PSW(ProgramStatusWord)。(4)查找中断源,转向相应的中断服务程序的入口。前三个操作由硬件完成,而第四个操作可用硬件,也可用软件来完成。

中断处理过程,也叫中断过程。大致可分为:中断请求、中断判优、中断响应、中断处理和返回四个步骤。1.中断请求外部设备需中断服务时,经接口电路向CPU发出中断请求信号。如8086/8088系统中高电平有效的INTR信号,该信号应与8259A的INT相连。CPU在每条指令执行完后检测外设是否有请求。8.2.2中断的处理过程2.中断判优如果有两个或两个以上中断源同时发出中断请求,要根据中断优先权,找出最高级别的中断源,首先响应其中断请求,处理完后再响应较低一级的中断源。如果中断源发出中断请求时,CPU正在执行中断服务程序,则应允许优先权高的中断源中断低一级的中断服务程序,实现中断嵌套。3.中断响应根据中断请求的中断源的类型不同,中断响应分成以下两种情况:(1)对非屏蔽中断请求的响应:该请求信号与CPU的NMI引脚线相连接,如果CPU检测到该请求,CPU执行完当前指令后就自动执行相应的中断服务程序,CPU不需要发出中断响应信号。(2)对可屏蔽中断INTR请求的响应:要检查IF,如IF=1,CPU允许中断,就会在结束当前指令后响应该外设的中断请求。CPU响应可屏蔽中断时要自动完成下列几步操作:①

发两个中断响应信号,第一个通知外设准备类型码,第二个CPU取走类型码。②

把程序状态字(PSW)以及程序断点处的CS、IP内容入栈,以便中断处理完后能正确地返回主程序;同时清除IF与TF,以禁止其它可屏蔽中断请求;③

中断服务程序入口地址段地址送入CS,偏移地址送入IP。4.中断处理和返回

中断处理也叫中断服务,是由中断服务程序完成的。中断服务程序一般应由以下几部分按顺序组成:(1)保护现场:用压栈指令把中断服务程序中要用到的寄存器内容压入堆栈,以便返回原来的任务后,CPU能从原来的现场信息运行原程序;(2)开中断:以便执行中断服务时能响应高一级的中断请求,实现中断嵌套。用STI指令开放中断屏蔽状态,使IF=1;(3)中断服务程序:执行相应的中断服务处理程序;(4)恢复现场:用弹栈指令把保护现场时入栈寄存器内容恢复,注意应按先进后出的原则,恢复寄存器原来的内容值。出栈后,堆栈指针也应恢复到进入中断处理时的位置。(5)中断返回:8086CPU必须根据中断结束方式,发中断结束指令,并在最后用一条中断返回指令IRET。中断返回指令IRET的作用是将断点的内容重新送入CS和IP寄存器和标志寄存器,保证CPU从断点开始执行原来的程序。

在实际的应用当中,系统中一般有多个中断源。如果同一时间有多个中断源向CPU提出中断请求,CPU该如何处理,这就涉及到多级中断的管理问题,其关键是中断优先级的控制问题。中断优先级是指每个中断源在接受CPU服务时的优先等级,对中断优先级的控制要解决以下两个方面的问题,即中断优先级的排队问题和中断源的识别问题。8.3多级中断管理1.中断的优先级的排列中断优先级是中断系统把多个中断源产生的中断请求按轻重缓急程度,从高到低的顺序处理中断源的排列,这种高低级别的排列称之为中断优先级。在多级中断管理系统中,如果多个中断源同时发生请求,中断管理系统对其处理的一般原则是:(1)不同优先级中断同时发生时,按高低级别依次处理;(2)当CPU处理低优先级时又发生高优先级的中断,应暂停低级别的而去优先处理高级别的,处理完高级别的,再返回处理低级别的未完的服务,这种方式称之为中断嵌套;(3)CPU在处理一个中断服务程序过程中,如果出现比它优先级低或者同优先级的中断请求,则应当处理完当前的中断服务后,再响应新的中断请求;(4)中断优先级相同的设备同时请求中断,则按事先规定的次序处理。2.中断源的识别

对于多中断源共享一个中断请求引脚的情况,既要判断优先级的高低,也要将程序引导到相应的中断程序入口。识别中断源的主要方法由软件识别法和硬件识别法两种。(1)软件识别法。软件查询的方法是:当CPU响应中断后,利用软件查询有哪些外设申请中断,判断哪个中断源的级别更高,并首先为它进行中断服务。这种方法是用户通过编程用程序查询或移位的办法来识别中断源的。

例如,在某一系统中有8个中断源,系统一般将8个外设的中断请求触发器组合起来,作为一个端口,并赋以端口号,如图8.1所示。图8.1软件查询的接口电路

把8个外设的中断请求信号相“或”后,作为INTR信号,这样只要有一个外设有中断请求,就可向CPU发出INTR信号。当CPU响应中断后,把中断寄存器组成的这个端口的状态读入CPU,逐位检测并转到相应的服务程序的入口。假设该接口的请求状态端口地址为20H,则程序查询可采用两种方法,程序执行步骤如图8.2所示。图8.2查询方式程序查询流程

①屏蔽法IN AL, 20H ;读取中断请求触发器的状态字TEST AL, 80H ;检查“设备7”是否有请求JNZ PROG7 ;有则转至“设备7”的处理程序PROG7TEST AL, 40H ;检查“设备6”是否有请求JNZ PROG6 ;有则转至“设备6”的处理程序PROG6TEST AL, 20H ;检查“设备5”是否有请求JNZ PROG5 ;有则转至“设备5”的处理程序PROG5……②移位法XOR AL, AL;主要目的是让进位位CF=0;IN AL, 20H ;读取中断请求触发器的状态字RCL AL, l ;检查“设备7”是否有请求JC PROG7 ;有则转至“设备7”的处理程序PROG7RCL AL,1 ;检查“设备6”是否有请求JC PROG6 ;有则转至“设备6”的处理程序PROG6……软件查询法的优缺点:优点:利用软件完成中断优先权的检测,不需要硬件判优电路。另外,优先权由查询的次序来决定,首先查询的即为优先级最高的。缺点:不管外设是否有中断请求都需要按次序逐一询问,因而效率较低。特别是在中断源较多的情况下,转至中断服务程序的时间较长。(2)硬件识别法硬件识别法主要是通过硬件电路来实现中断源的优先权排队,在微机中通常采用的方法有3种,中断优先权编码电路、链式优先权排队电路和采用中断控制器。中断优先权编码电路是用硬件编码器和比较器组成的优先权排队电路,如图8.3所示。

图8.3中断优先权编码电路

在图中,当8个中断源中某一个有中断请求时,便在其中断请求线上产生“1”,并在“或”门的输出端形成一个中断请求信号,但它能否送至CPU的中断请求线INTR,还受到比较器的控制。

8条中断输入线的任一条,经过编码器可以产生三位二进制优先权编码A2A1A0,编码范围为000~111,其中111优先权最高,000优先权最低。而且,当有多个中断源同时产生中断请求时,编码器只输出优先权最高的编码。

优先权寄存器中存放的是CPU正在服务的中断编码,将其输出至比较器即B2B1B0。A2A1A0与B2B1B0在比较器中进行比较,如果A2A1A0级别较低或与B2B1B0相同,则比较器输出为“0”,与门1被封锁;如果A2A1A0级别较高,比较器输出为“1”,则与门1打开,中断请求就被送至CPU的INTR输入端。此时,CPU将中断正在进行的中断服务程序,转去响应更高级别的中断。如果CPU正在进行中断服务,则“优先权无效”信号为“0”;反之,则为“1”。因此,与门2保证当CPU没有进行中断服务时,只要有中断请求,则中断请求信号都能被送到CPU的INTR请求端。②链式优先权排队电路链式优先权排队电路也称为菊花链式优先权电路,是获得中断优先权排队的一个简单的硬件方法,能处理多中断源同时申请中断,也可以实现中断嵌套。其原理是在每个中断设备的接口电路中增加一个称为菊花链的逻辑电路,用于控制中断响应信号的传递,排在前面的设备优先权最高,其余依次降低。菊花链式优先权排队电路原理框图如图8.4所示。图8.4菊花链式优先权排队结构原理图

③可编程中断控制器可编程中断控制器是微机中解决中断优先权管理最常用的方法,主要采取优先权编码器、寄存器和比较器解决中断优先权和中断嵌套问题,在8.5中将详细讨论Intel公司的8259A可编程中断控制器的功能、结构、工作方式及编程。8.4.1PC/XT机中断类型PC/XT(8088/8086CPU)有一个简单而灵活的中断系统,采用向量型中断结构,可以管理256个不同类型的中断请求。CPU的中断源有两类:内部中断和外部中断。外部中断又分为非屏蔽中断NMI和可屏蔽中断INTR。其中断结构如图8.5所示。

8.4PC/XT(8088/8086CPU)的中断系统图8.58086/8088系统中断源分类1.内部中断内部中断是由CPU内部事件引起的中断。如单步中断标志TF为1时,执行任意一条指令,都可引起中断。内部中断包括溢出中断、除法错误中断、单步中断、断点中断和软件指令中断共5类。(1)除法错误中断除法出错中断是在执行除法指令时,若除数为0或商大于目的寄存器所能表达的范围,产生一个向量号为0的内部中断。0型中断没有相应的中断指令,不是由外部硬件电路引起的,也称“自陷”中断。(2)单步中断。单步中断是当单步中断标志TF为1时,在每条指令执行结束后,产生一个向量号为1的内部中断。在中断过程中,CPU自动把标志寄存器FR压入堆栈,然后把TF和IF清零,以正常方式工作,中断过程结束时,从堆栈中自动弹出标志寄存器FR的内容,TF恢复为1,又恢复单步中断工作方式。单步中断是为调试程序而设置的。如DEBUG中的跟踪命令,就是将TF置1。8086指令系统中没有直接对TF置1或清0的指令,可通过程序段来修改其内容。

(3)断点中断。断点中断是指令中断中的一个特殊的单字节INT3指令中断,执行一个INT3指令,产生一个向量号为3的内部中断。断点中断常用于设置断点,停止正常程序的执行,转去执行某种类型的特殊处理,用于调试程序。(4)溢出中断。溢出中断是在执行溢出中断指令INT4时,若溢出标志OF为1,产生一个向量号为4的内部中断。溢出中断为程序员提供一种处理算术运算出现溢出的方法,通常和带符号数的加、减法指令一起使用。(5)软件指令中断。指令中断是执行INTN时,产生一个向量号为N的内部中断。INTN主要用于系统定义或用户自定义的软件中断,如BIOS功能调用和DOS功能调用。内部中断向量号除软件指令中断由指令指定外,其余都是预定好的,因此都不需要传送中断向量号,也不需要中断响应周期。2.外部中断外部中断也叫硬件中断,是CPU外部中断请求信号引脚上输入有效的中断请求信号引起的,分为非屏蔽中断NMI和可屏蔽中断INTR两种。(1)非屏蔽中断NMI非屏蔽中断NMI是由NMI引脚上输入有效的中断请求信号引起的,其中断向量号为2。NMI用来通知CPU发生了致命性事件,如电源掉电、存储器读写错、总线奇偶位错等。NMI是不可用软件屏蔽的,不需要中断响应周期。在IBMPC系列机中,NMI用于处理存储器奇偶校验错、I/O通道奇偶校验错以及8087协处理器异常中断等。

(2)可屏蔽中断INTRCPU的INTR引脚通常由8259A的INT输出信号驱动,8259A又与需要请求中断的外设相连。在外设发出中断请求信号时,8259A根据优先权和屏蔽状态,决定是否发出INT信号。外设的中断请求信号必须在中断请求信号被接受前保持有效。而CPU对INTR信号是在每条指令的最后一个时钟周期采样的。接到有效的INTR信号后,CPU是否响应该中断请求,取决于中断允许标志位IF的状态。若IF=1,CPU开放中断,则响应,否则不响应。因此,要响应INTR的中断请求,CPU必须开放中断。8086设有对中断标志位IF置1或清0的指令,STI指令给IF置1,CPU开中断;CLI指令给IF清0,CPU关中断。除了CPU开、关中断之外,外设的中断请求是否被传送到CPU还受到中断控制器的控制,如8259A设有中断屏蔽寄存器,可对接于其上的每一个外设的中断请求屏蔽或开放,有选择地允许中断响应。中断屏蔽寄存器的内容可以由CPU通过命令写入。如果出现中断嵌套的情况,只有满足中断嵌套条件才能发出中断请求信号。8086的中断优先级由高到低依次为内部中断(单步中断除外)、非屏蔽中断NMI、可屏蔽中断INTR、单步中断。8.4.2PC/XT机的中断向量表1.中断向量表与中断向量表布局8086/8088CPU中断系统采用的是向量型中断管理方式,每个中断源都有一个为它服务的中断服务程序。8086/8088CPU最多能管理256个中断,统一编号为0~255,称为中断类型号或中断向量号,是识别中断源的唯一标识。每一个中断服务程序都有一个确定的入口地址(中断服务程序的段基址和偏移量),该地址称为中断向量。把系统中所有中断向量集中起来,按中断类型号从小到大的顺序存放到存储器的某一区域内,这个存放中断向量的存储区叫做中断向量表,亦即中断入口地址表。8086系统中,在内存的最低1KB(00000H-003FFH)地址范围建立了一个中断向量表,如表8-1所示。表8-18086CPU中断向量表存储器地址(中断向量地址)存储器内容(中断向量)对应中断类型号00000H中断服务程序入口偏移地址低8位000001H中断服务程序入口偏移地址高8位00002H中断服务程序入口段基址低8位00003H中断服务程序入口段基址高8位00004H中断服务程序入口偏移地址低8位100005H中断服务程序入口偏移地址高8位00006H中断服务程序入口段基址低8位00007H中断服务程序入口段基址高8位.........003F8H中断服务程序入口偏移地址低8位254003F9H中断服务程序入口偏移地址高8位003FAH中断服务程序入口段基址低8位003FBH中断服务程序入口段基址高8位003FCH中断服务程序入口偏移地址低8位255003FDH中断服务程序入口偏移地址高8位003FEH中断服务程序入口段基址低8位003FFH中断服务程序入口段基址高8位表8-18086CPU中断向量表每个中断向量占用4个存储单元,4个单元中的前2个单元存放的是中断服务程序所在段内的偏移量(IP的内容,16位地址);后2个单元存放的是中断服务程序所在段的段基地址(CS的内容,16位地址)。CPU响应中断时,由中断向量号算出中断向量地址,再从该地址中取出内容分别装入IP和CS,从而转去执行相应的中断服务程序。中断向量在表中的位置称为中断向量地址,中断向量地址与中断类型号的关系为:中断向量地址(首地址)=中断类型号×4在中断向量表中,类型号0~5已由系统定义,不允许用户做修改;类型号6~31是系统备用中断,是为软硬件开发保留的,一般也不允许改为它用;类型号32~255,供用户自由应用。从类型号6开始,其中断类型可以是双字节INTN指令中断,也可以是INTR的硬件中断。专为IBMPC机开发的基本输入输出系统BIOS中断调用占用10H~1AH共11个中断类型号,如INT10H为屏幕显示调用,INT13H为磁盘I/O调用,INT16H为键盘输入调用,INT1AH为时钟调用等,都是双字节指令中断,这些中断为用户提供直接与I/O设备交换信息又不必了解设备硬件接口的一系列子程序。DOS中断占用20H~3FH共32个中断类型号(其中A0~BBH和30H~3FH为DOS保留类型号),如DOS系统功能调用(INT21H)主要用于对磁盘文件的存储管理。在PC/XT机系统中,类型码与中断功能的对应关系如表8-2所示。类型码中断功能类型码中断功能00H除法错误17H打印机I/O调用01H单步18H常驻BASIC入口02H非屏蔽19H引导程序入口03H断点1AH时间调用04H溢出1BH键盘CTRL-BREAK控制05H屏幕打印1CH定时器报时06H保留1DH显示器参数表07H保留1EH软盘参数表08H定时器1FH字符点阵结构参数表09H键盘20H程序结束,返回DOS0AH保留21H系统功能调用0BH通讯口222H结束地址0CH通讯口123HCTRL-BREAK退出地址0DH硬盘24H标准错误出口地址0EH软盘25H绝对磁盘读0FH打印机26H绝对磁盘写10H显示器I/O调用27H程序结束、驻留内存11H装置检测调用28~3FH为DOS保留12H存储器容量检测40~5FH保留13H软盘/硬盘I/O调用60~67H为用户软中断保留14H通讯I/O调用68~7FH保留15H磁带I/O调用80~F0HBASIC使用16H键盘I/O调用F1~FFH保留表8-2PC/XT机中断向量的布局补充:中断向量的装填所谓的中断向量的装填,指的是将对应中断源(中断向量号)的中断服务程序地址(包括偏移地址和段基址,即中断向量)存放到对应的中断向量地址中。系统配置和使用的中断所对应的中断向量由系统软件负责装入。而用户的中断向量,用户就应自行装入。下面介绍两种中断向量的装填方法。中断服务程序的入口地址直接写入中断向量表步骤:a.由中断向量号计算中断向量地址,方法为中断向量地址(首地址)=中断类型号×4。b.将中断向量中的偏移地址装入中断向量地址起始的两个低字节中。c.将中断向量中的段基址装入中断向量地址起始的两个高字节中。下面举个例子。

例子:假设中断服务程序名为INTERHAND,中断向量号为60H

….

PUSHESMOVAX,0000HMOVES,AXMOVSI,60H*4MOVAX,OFFSETINTERHANDMOVES:[SI],AXMOVAX,SEGINTERHANDMOVES:[SI+2],AXPOPES………………(2)采用DOS功能调用INT21H的25号功能INT21H中的25号功能用于设置中断向量入口参数:AL=中断向量号

DS:DX=中断程序入口地址例:假设中断服务程序名为INTERP,中断向量号为60H,装填中断向量。

……………MOVDX,OFFSETINTERPPUSHDSMOVAH,25HPUSHDXINT21HMOVAL,60HPOPDXMOVDS,SEGINTERPPOPDS2.中断优先级的划分及执行特点PC/XT微机中各类中断优先级如图8.6所示。图8.6PC/XT机中断处理和执行流程

由中断执行的特点可以看出,优先级最高的是内部中断(单步中断除外),其次是外部非屏蔽中断和可屏蔽中断,优先级最低的是单步中断。图8.6给出PC/XT微型计算机系统的中断处理顺序。每一条指令执行结束后,CPU对各种中断源进行检测和识别。首先被检测和识别的中断是除法出错、软中断指令、溢出中断和断点中断指令。若有中断发生时,便将程序转入相应的中断处理程序,接下来依次检测和识别非屏蔽中断NMI、可屏蔽中断INTR及单步中断,若发生任何一类中断,则在当前指令执行完后,转入相应的中断处理程序。若查遍所有的中断源未发现有任何中断发生,表明在当前指令周期中没有发生任何类型的中断请求,因而顺序执行下一条指令。内部中断是由CPU执行时产生的事件,或执行软中断指令INT产生的中断调用,这类中断在CPU内部产生,不需要向CPU发中断请求也不需要CPU响应,一旦发生这类中断,CPU会自动获取中断类型号码,转到中断服务程序执行;非屏蔽中断需通过NMI引脚线发送中断请求信号,CPU只要检测到这个引脚线的请求信号,就会自动执行2号中断的服务处理程序,不需要发中断响应信号;如果有可屏蔽中断请求,CPU检测到这一类请求信号后,首先判断中断允许标志(IF)是否允许中断请求,在IF=1的前提下,向中断管理器(8259A)发出中断响应信号,目的是让中断管理器提供当前中断请求的类型号码,以便于到向量表中查得中断服务程序的入口地址。关于中断管理器(8259A)的功能,我们在下一节中详细介绍。8.58259A可编程中断控制器

8259A可编程中断控制器(ProgrammableInterruptController)是用于系统中断管理的专用芯片。Intel8259A是8088/8086微机系统的中断控制器件,它具有对外设中断源进行管理,并向CPU转达中断请求的能力。在IBMPC系列微机中,都使用了8259A,但从80386开始,8259A都集成在外围控制芯片中。8259A有强大的中断管理功能,主要体现在:(1)具有8级优先权控制,通过级联可扩展至64级优先权控制;(2)每一级中断都可以屏蔽或允许;(3)在中断响应周期,8259A可提供相应的中断类型号,从而能迅速转入中断服务程序;(4)8259A有几种中断管理模式,可以通过编程进行选择。此外,8259A不仅有各种不同的向量中断工作方式,也能实现查询中断方式。在查询中断方式下,优先权的设置与向量中断方式时一样。在CPU对8259A进行查询时,8259A把状态字送CPU,指出请求服务的最高优先权级别的中断源,CPU据此转移到相应的中断服务程序段。1.8259A的内部结构

8259A的内部结构框图如图8.7所示。8259A的内部结构,主要由以下8个部分组成。

8.5.18259A的内部结构与引脚信号图8.78259A的内部结构与引脚图(1)中断请求寄存器IRR(Interrupt

Request

Register)

IRR用于存放从外设来的中断请求信号IR0~IR7,是一个具有锁存功能的8位寄存器。如果某一个中断请求信号IRi有请求发生,IRR寄存器相应位置“1”。IRR具有上升沿触发和高电平触发两种触发方式,触发方式由初始化命令字ICW1来设置。无论采用哪种触发方式,中断请求信号(IR0~IR7)都必须保持到第一个中断响应周期信号有效,否则会丢失。(2)中断屏蔽寄存器IMR(Interrupt

Mask

Register)IMR用于存放对应中断请求信号的屏蔽状态,也是一个8位寄存器,对应位为1,表示屏蔽该中断请求,对应位为0,表示开放该中断请求。IMR可通过写操作命令字OCW1编程设置。

(3)中断服务寄存器ISR(InterruptService

Register)ISR用于存放所有正在被服务的中断源,也是一个8位寄存器,对应位为1,表示对应的中断源正在被处理。ISR中可能有多位为1,这表明当前出现了中断嵌套,其中优先权为最高的位是正在服务的中断源的对应位。ISR中的位是在8259A接到第一个中断响应周期的信号后,由优先权比较器(PR)根据IRR中各申请中断位的优先级别和IMR中屏蔽字的状态,进行自动置位的。ISR位的复位,在AEOI方式时是自动实现的(在第二个中断响应周期的信号到来后),其它工作方式,是通过中断结束命令EOI实现的(主要是通过对OCW2的写命令实现的)。(4)优先级比较器PR(PriorityRelatively)优先级比较器用于管理、识别各中断源的优先级别。各中断源的优先级别通过编程确定优先权方式来定义和修改。当有多个中断请求同时出现时,选出其中最高中断级的中断请求。当出现中断嵌套时,将新的中断请求与ISR中正在服务的中断源的优先权进行比较,若高于ISR中的中断级,则发出INT,终止当前的中断处理程序,转而处理该中断,并在中断响应时,把ISR中相应位置位。反之,不发INT信号。(5)控制逻辑

控制逻辑含一组初始化命令寄存器和一组操作命令寄存器,来设置8259A的预置工作方式(初始化命令字ICW)或给出具体操作命令(操作命令字OCW),来管理8259A的全部工作。(6)读/写控制电路读/写逻辑接收CPU的读/写命令,并把CPU写入的内容存入8259A内部相应的端口寄存器中,或把端口寄存器的内容送数据总线。(7)数据总线缓冲器

数据总线缓冲器用于8259A内部总线和CPU数据总线之间的连接,是一个三态8位双向缓冲器。8259A可通过此数据总线缓冲器直接与数据总线相连,也可通过外接数据总线缓冲器与数据总线相连。作为一个能与系统数据总线直接相连的芯片,都应设置数据总线缓冲器。在该芯片被选中时提供与系统数据总线的传送通道;在该芯片未被选中时,使芯片内部的数据线呈现高阻状态,这样不影响CPU与其它芯片的联系。(8)级连缓冲/比较器

级联是指使多片8259A连接起来,能管理更多级中断。在级联应用中,一片主8259A最多可接8个从片,扩展到64级中断。连接时,从片的INT信号与主片的IR0~IR7相连,并确定了在主片中的优先级。该功能部件在级联方式的主片——从片结构中用来存放和比较系统中各从片标识(ID)。2.8259A的引脚信号8259A引脚信号根据其功能,可分为四组。图8.88259A的引脚图(1)与CPU总线相连的信号任何设备应用到系统中,都需要与CPU相连接,CPU要通过地址总线、数据总线和读写控制总线对其进行访问,在后面章节中介绍的所有芯片,这一类信号都可以分成三组,其中:数据线都是通过数据总线与CPU的数据引脚连接。系统地址总线的高位通过译码电路产生芯片的片选信号,决定芯片的地址范围,地址线的低位直接连接到芯片上,决定芯片的端口数目,例如8259A只有一根地址线A0,它有两个端口。芯片的控制线除、外,因芯片的功能不同,也会有不同的控制线。对于8259A来说,与CPU总线相连的信号也分成如下3组:①数据总线

D7~D0:双向三态数据线,可与CPU数据总线直接相连或与外部数据总线缓冲器相连。②地址总线

:片选信号线,通常由CPU高位地址总线译码后连接。

A0:地址线,通常接CPU低位地址总线,如8088系统中接CPU地址总线A0。8086系统中接CPU地址总线A0=0是偶地址,A0=1是奇地址,该地址线与、信号配合,可读写8259A内部相应的寄存器。③控制总线、:读、写命令信号线,与CPU的读、写信号相连。INT:

中断请求信号输出端。用于向CPU发出中断请求信号。

:中断响应输入信号。用于接收CPU发出的中断响应信号。(2)与外部中断设备相连的信号IR7~IR0:与外设的中断请求信号相连,接收来自外界的中断请求。在固定优先级方式下IR0优先权最高,IR7优先权最低,按序排列。(3)级连信号CAS2~CAS0:级连信号线,用于级联方式下主片选择从片信号,当8259A作为主片时,这三条线是输出线;作为从片时,则为输入线,与配合,实现级连。:主从/缓冲允许双功能线。在缓冲工作方式中,用作输出信号,用于选通外接的总线驱动器。在非缓冲工作方式中,用作输入信号,表示该8259A是主片(=1)或从片(=0)。(4)其它Vcc:接+5V电源;GND:地线。3.8259A的工作过程

8259A的工作过程如下:(1)当有一条或若干条中断请求输入(IR7~IR0)有效时,则使中断请求寄存器IRR的相应位置位。(2)若CPU处于开中断状态,则在当前指令执行完之后,响应中断,并且从发应答信号(两个连续的负脉冲)。(3)第一个到来时,8259A做如下三件事情:①禁止中断请求寄存器IRR锁存新的中断请求,也就说对IR7~IR0发送来的中断请求信号不予理睬,直到第二个

负脉冲到达。②中断服务寄存器ISR对应为设置为1,以便于与下一个新中断请求的优先级比较。同时将IRR中的相应位清0,以便接受新的中断请求。③把当前响应中断的编号(000-111,对应IR0-IR7)送入中断类型号寄存器(ICW2)的低三位,用于组成8位的中断类型号。(4)第二个负脉冲到达时,8259A做如下事情:①将中断类型号寄存器ICW2中的8位中断类型号送上数据总线,供CPU读取。②如果命令寄存器(ICW4)中的中断自动结束位为”1”(中断自动结束方式,AEOI),则在第二个负脉冲结束时,将ISR寄存器的相应位清零。否则,应该在中断服务程序执行完毕,通过输出操作命令字EOI,使该位复位。8.5.28259A的工作方式

8259A对中断的管理涉及多个方面,因此它有多种工作方式,如中断触发方式、优先级管理方式、中断屏蔽方式、中断结束方式、系统连接方式和查询方式等。由于8259A是一个可编程的芯片,所以这些方式都可以通过编程方法设置,用户可根据自己的需要选择相应的工作方式。1.中断触发方式

中断触发方式由初始化命令字ICW1的D3位来设置,其中D3=0为上升沿触发方式,D3=1为电平触发方式。(1)上升沿触发方式上升沿触发方式,是指中断请求输入端IRi出现由低电平到高电平的跳变时为有效的中断请求信号的中断触发方式。其优点是IRi端只在上升沿申请一次中断,故该端一直可以保持高电平而不会误判为多次中断申请。(2)电平触发方式电平触发方式,是指中断请求输入端IRi出现高电平,即为有效的中断请求信号的中断触发方式。使用该方式应注意,在CPU响应中断后(ISR相应位置位后),必须撤消IRi上的高电平,否则会发生第二次中断请求。2.优先级管理方式

8259A的中断方式下的优先级管理方式有4种:固定优先级方式、特殊完全嵌套方式、自动循环方式和特殊循环方式。8259A还可以在查询方式下工作,将查询方式加在一起,8259A的优先级管理方式共有5种。(1)固定优先级方式该方式也叫普通完全嵌套方式简称完全嵌套方式,是8259A最常用的方式。8259A初始化后未设置其它优先级方式,就按该方式工作,固定优先级方式是8259A的缺省工作方式。在固定优先级方式下,IR7~IR0优先级由低到高按序排列,允许高级的中断源中断低级的中断服务程序。(2)特殊全嵌套方式特殊全嵌套方式与固定优先级方式相比,不同点在于执行中断服务程序时不但要响应比本级高的中断源的中断申请,而且要响应同级别的中断源的中断申请。特殊全嵌套方式一般适用于8259A级连工作时的主片,主片采用特殊全嵌套方式,从片采用固定优先级方式可实现从片各级的中断嵌套。在特殊全嵌套方式中,对主片的中断结束操作,应检查是否是从片的唯一中断,否则,不能给主片发EOI命令,以便从片能实现嵌套工作,只有从片中断服务全部结束后,才能给主片发EOI命令。通过初始化命令字ICW4将8259A的工作方式由固定优先级设置为特殊全嵌套方式。(3)优先权自动循环方式优先权自动循环方式,在给定初始优先顺序IR7~IR0由低到高按序排列后,某一中断请求得到响应后,其优先权降到最低,比它低一级的中断源优先级最高,其余按序循环。如IR0得到服务,其优先权变成最低,IR1~IR7优先级由高到低按序排列。使用优先权循环方式,每个中断源有同等的机会得到CPU的服务。通过操作命令字OCW2将8259A的工作方式由固定优先级设置为自动循环方式。(4)指定最低优先级方式(特殊自动循环方式)指定最低优先级方式是通过编程指定初始最低优先级中断源,使初始优先级顺序按循环方式重新排列。如指定IR3优先级最低,则IR4优先级最高,初始优先级顺序为IR3、IR2、IR1、IR0、IR7、IR6、IR5、IR4由低到高排列。通过操作命令字OCW2将8259A的工作方式由固定优先级设置为指定最低优先级方式。3.中断屏蔽方式

8259A对中断请求信号有两种屏蔽方式:普通屏蔽方式和特殊屏蔽方式。(1)普通屏蔽方式按IMR给出的结果,屏蔽或开放该级中断,这样一种工作方式称普通屏蔽方式。普通屏蔽方式通过写屏蔽字OCW1来设置,OCW1的内容存放在IMR中,对应位为1,屏蔽该中断;对应位为0,开放该中断。(2)特殊屏蔽方式特殊屏蔽方式是指系统在执行一个中断时,不仅可以响应较高级的中断请求,而且可以响应较低级的中断请求的工作方式。采用特殊屏蔽方式时,在用屏蔽字OCW1对IMR中的某一位置1的同时,会使ISR对应位清0,这样只屏蔽了正在执行的中断请求,开放了其它未被屏蔽的中断,包括低优先级的中断。特殊屏蔽方式通过操作命令字OCW3来设置的,D6D5位设置为11B进入特殊屏蔽方式,要开放所有未被屏蔽的中断,需要接下来将屏蔽字OCW1设置为对本级中断源屏蔽。若要退出特殊屏蔽方式,则要通过在中断服务程序中将操作命令字OCW3的D6D5位设置为10B来实现。特殊中断屏蔽方式对ISR对应为的清零过程是可逆的,即当特殊屏蔽方式撤销之后,ISR中的对应为会恢复为1,而采用中断结束方式对ISR的清零是不可逆的。特殊中断屏蔽方式主要用于全嵌套方式下中断处理程序需要临时禁止相同优先级,而又要允许嵌套高优先级和低优先级中断请求的场合。因为,虽然在一个中断服务程序运行过程中,可以利用普通中断屏蔽方式,在“源头”阻止相同优先级请求的进入,但由于ISR中当前响应对应为1,所以无法开通对低优先级的响应。当然,也可以用中断结束方式将ISR中的当前响应清零,但就无法再将其还原为1,而恢复先前禁止低优先级的状态。因此,只有采用特殊屏蔽方式,才可以随意地在终端服务程序内允许或禁止对低优先级的嵌套。4.中断结束处理方式当中断服务结束时,必须给8259A的ISR相应位清0,表示该中断源的中断服务已结束,使ISR相应位清0的操作称中断结束处理。中断结束处理方式有两类:自动结束方式(AEOI)和非自动结束方式(EOI),而非自动结束方式(EOI)又分为一般中断结束方式和特殊中断结束方式。(1)自动结束方式(AEOI)该方式是最简单的一种中断结束处理方式,适应于没有中断嵌套的系统。当某级中断被CPU响应后,8259A在第二个中断响应周期的INTA信号结束后,自动将ISR中的对应位清0。该方式通过初始化命令字ICW4的D1位置1来设置。(2)一般的中断结束方式该方式通过在中断服务程序中设置EOI命令,使ISR中的优先级最高的那一位清0。一般的中断结束方式由普通EOI命令(对应固定优先级方式)和循环EOI命令(对应优先级自动循环方式)来实现。普通EOI命令和循环EOI命令是通过对操作命令字OCW2设置实现的。以下内容书上有误,请注意更正!!!(3)特殊的中断结束方式与一般的中断结束方式相比,其不同点在于发中断结束命令的同时,还需要在命令中指出结束中断的中断源是哪一级的,使ISR的相应位清0

。特殊的中断结束方式由特殊EOI命令(对应固定优先级方式)和特殊循环EOI命令(对应优先级自动循环方式)来实现。特殊EOI命令和特殊循环EOI命令是通过对操作命令字OCW2设置实现的。5.系统连接方式

8259A与系统总线的连接有2种方式:缓冲方式和非缓冲方式。(1)缓冲方式(SP/EN输出)每片8259A都通过总线驱动器与系统数据总线相连,适用于多片8259A级连的大型系统中。该方式通过初始化命令字ICW4的D3位置1来设置。8259A主片的端输出低电平信号,作为总线驱动器的启动信号,接总线驱动器的端。从片的端接地。

(2)非缓冲方式(SP/EN输入)每片8259A都直接和数据总线相连,适用于单片或片数不多的8259A组成的系统中。该方式通过初始化命令字ICW4的D3位清0来设置。在非缓冲方式时,单片8259A的端接高电平,级连8259A的主片的端接高电平,从片的端接低电平。6.程序查询方式8259A对中断优先级的管理方式不仅可以在中断方式下,由8259A判别出最高优先级向CPU发中断请求,也可以由CPU直接来查询某一中断源的请求信号,这种方式叫做查询方式。在查询工作方式下,8259A不发INT信号,CPU也不开放中断,CPU查询8259A的状态,当查到有中断请求时,就根据它提供的信息转入相应的中断服务程序。设置查询方式的方法是:CPU关中断(IF=0),写入OCW3查询方式字(OCW3的D2位为1),然后执行一条相同地址的输入指令,8259A便将一个查询字送到数据总线上。查询字中,D7=1表示有中断请求,D2D1D0表示8259A请求服务的最高优先级是哪一位。查询方式时,不需执行中断响应周期,不用设置中断向量表,响应速度快,占用空间少。8.5.38259A编程8259A的编程控制字有两种:初始化命令字(ICW)和操作命令字(OCW),可对它进行初始化及工作方式设定.系统复位后,初始化程序对8259A置入初始化命令字。初始化后可通过发出操作命令字来定义8259A的工作方式,实现对8259A的状态、中断方式和优先级管理的控制。初始化命令字只发一次,操作命令字允许重复,可以动态、灵活地改变对8259A的操作和控制。8259A的编程也可分为两部分,即初始化编程和工作方式编程。初始化命令字ICW1~ICW4用来对8259A进行初始化。在初始化命令字中有一些位是针对8080/8085

CPU的,因为这两种CPU早已不用了,所以,在下面命令字的说明中对这些位不再作进一步的解释,在写命令字时这些位取0。命令字是要写入相应的命令字寄存器中的。对8259A内部寄存器的操作需要通过端口进行。一片8259A占用两个端口地址,用端口选择引脚A0来选择。对于一般的微机系统,引脚A0接系统地址总线的最低地址位A0,这样,一片8259A占用的两个地址是连续的,一个为偶地址(A0=0),另一个为奇地址(A0=1)。在下面命令字格式图示中,左边都有一个上方标“A0”的方框,框内有的为0,有的为1,这分别表示该命令字应写入8259A的A0为0的端口和写入A0为1的端口,在一般的微机系统中,分别表示写入8259A的偶地址端口和写入奇地址端口。1.8259A初始化命令字下面对初始化命令字的格式和应用进行讨论。(1)初始化字ICW1ICW1主要用来设定中断请求的触发方式,是否级联,初始化过程中用不用ICW4等。它的格式和含义如图8.9所示。图8.9初始化命令字ICW1格式

A0=0表示ICW1的端口地址为偶地址。IC4:用于控制是否在初始化流程中写入ICW4,IC4=1要写ICW4,IC4=0不要写ICW4,8086/8088系统中ICW4须置1。SNGL:用于控制是否在初始化流程中写入ICW3,SNGL=1不要写ICW3,表示本系统中仅使用了一片8259A,SNGL=0要写ICW3,表示本系统中使用了多片8259A级连。ADI:对8086/8088系统不起作用,对8098单片机系统,用于控制每两个相邻中断处理程序入口地址之间的距离间隔值。LTIM:用于控制中断触发方式,LTIM=0选择上升沿触发方式,LTIM=1选择电平触发方式。D4位是特征位,在ICW1中须为1,用来区分操作命令字OCW2和OCW3。高3位对8086/8088系统不起作用,设定为0。(2)中断向量字ICW2中断向量字ICW2是8259A初始化流程中必须写入的第二个控制字,用于设置中断类型号的基值,即中断请求引脚IR0的中断类型号。在写入8259A的中断类型号码时,IR0到IR7的类型号码依次加1,因此在设定中只需要设置引脚IR0作为基值即可。基值需要是一个能够被8整除的正整数。其格式如图8.10所示。

A0=1表示ICW2的端口地址为奇地址。D7~D3:由用户根据需要用来设置中断向量号码的基值。D2~D0:通常其值为0。图8.10初始化命令字ICW2格式在级连系统中,主片和从片都必须设置ICW3,对于主片用来指明哪一个IRi请求引脚连接从片。对于从片来讲,用来指明INT引脚连接在主片的哪一个IRi请求引脚上。两者的格式和含义有所区别。主片ICW3的格式如图8.11(a)所示。(3)级连控制字ICW3图8.11初始化命令字ICW3格式

A0=1表示ICW3的端口地址为奇地址。S7~S0:表示对应的IRi端上有从片(对应Si位为1)或无从片(对应Si位为0),如IR5上挂接有从片,D5=1,若其它端无从片,则主片的ICW3=20H。从片ICW3的格式如图8.11(b)所示。A0=1表示ICW3的端口地址为奇地址。D7~D3:不用,常取0。D2~D0:为从片的识别码,编码规则为000B~111B。例如,若某从片的INT输出接到主片的IR5端,则该从片的ICW3=00000101B。(4)中断方式字ICW4

ICW4的功能较多,用来设置是否为特殊全嵌套方式,是否为缓冲方式,是否为自动中断结束中断方式,是否为8086/8088系统等,其格式和含义如图8.12所示。图8.12初始化命令字ICW4格式

A0=1表示ICW4的端口地址为奇地址。:系统选择,=1表示8086/8088模式,=0表示8080/8085模式。AEOI:结束方式选择,AEOI=1自动结束(AEOI),AEOI=0正常结束(EOI)。M/S:表示本片是主片还是从片,M/S=1表示为主片,M/S=0表示为从片。当工作在非缓冲方式时,该位无意义。BUF:缓冲方式选择,BUF=1为缓冲方式,BUF=0为非缓冲方式,当D3=0时,D2位无意义。SFNM:嵌套方式选择,SFNM=1为特殊全嵌套方式,SFNM=0为普通完全嵌套方式。D7~D5:不使用,为0即可。2.8259A操作命令字在8259A初始化完成后,8259A即可接受中断申请,其工作方式即是初始化时确定的工作方式,也可称为缺省方式,但如不使用缺省方式,可在初始化完成后,写入操作命令字OCW1~OCW3。该类命令字主要决定中断屏蔽、中断优先级顺序、中断结束方式等。

通过设置操作命令字可以完成上述功能。设置时,次序上没有严格的要求,但端口地址有严格的规定,OCW1必须写入奇地址端口,OCW2和OCW3必须写入偶地址端口。(1)操作命令字OCW1操作命令字OCW1用来进行屏蔽操作,直接将中断屏蔽寄存器IMR的相应位置位或复位。OCW1的格式、含义如图8.14所示。图8.14操作命令字OCW1格式

A0=1:表示OCW1的端口地址为奇地址。M7~M0:对应位为1屏蔽该位所对应的中断请求信号,为0开放该位对应的中断。(2)操作命令字OCW2操作命令字OCW2用来设置中断结束方式和优先级方式。OCW2的格式如图8.15所示。图8.15操作命令字OCW2格式

A0=0:表示OCW2的端口地址为偶地址。OCW2的特征位为D4D3=00。R(Rotate)。R=1表明中断的优先级管理是自动循环方式,R=0表明中断的优先级管理是固定优先级方式,IR0最高,IR7最低。SL(SpecificLevel)。SL=1表明本操作命令字的L2~L0用来指定一个中断级,SL=0表明本操作命令字中L2~L0无意义。EOI(EndOfInterrupt)。EOI=1表明操作命令字OCW2的作用是作为中断结束命令字,EOI=0则不执行中断结束操作。L2~L0:中断源编码,在EOI=1时表明操作命令字OCW2指明清除ISR的相应位,在SL=1表明操作命令字OCW2用来指定一个中断级。R、SL、EOI位是相互配合使用来完成某一功能的,它们实现的主要功能如表8-3所示。RSLEOIL2~L0是否有意义命令字名称意义和操作001无普通EOI命令用于结束”完全嵌套方式”的中断011有特殊EOI命令用于结束”完全嵌套方式”的中断,并指定结束的是哪一级中断101无普通循环EOI命令用于结束”自动循环方式”的中断100无自动循环置位用于设置优先级方式自动循环方式000无自动循环复位用于设置优先级方式为完全嵌套方式111有特殊循环EOI命令用于结束”特殊自动循环方式”的中断,并指定结束哪一级中断110有特殊循环置位用于设置特殊自动循环方式,并指定最低优先级010无无操作表8-3R、SL、EOI配合使用表需要指出,在一般的应用系统中是将8259A设置成固定优先级、非自动中断结束方式,所以,在表8-3中用得最多的组合还是第一种,连同其它的5位其地址为00100000B=20H。每当中断服务结束和返回之前都要给8259A发一个这样的OCW2(20H)来结束中断,将ISR中当前级别最高为1的位复位。

(3)操作命令字OCW3操作命令字OCW3用来设置中断屏蔽方式、置8259A为查询方式和规定要读出其内容的寄存器,其格式和含义如图8.16所示。图8.16操作命令字OCW3格式

A0=0:表示OCW3的端口地址为偶地址。OCW3的特征位为D4D3=01。ESMM:允许或禁止SMM位起作用的控制位。ESMM为1时允许SMM位起作用,为0时禁止SMM位起作用。SMM:设置特殊屏蔽方式选择位,与ESMM共同起作用。当ESMM=1,SMM=1时,特殊屏蔽方式置位;ESMM=1,SMM=0时,特殊屏蔽方式复位。P:查询命令位。P=1时,CPU向8259A发送查询命令;P=0时,不处于查询方式。OCW3作为查询方式的查询命令字。查询方式的具体操作是:先发送一个查询命令字(OCW3中P=1),随后的同一个地址的读操作指令读出状态字。其格式如图8.17所示。其中,I=0表示无中断请求,此时W2、W1、W0三个位无意义;I=1表示有中断请求,W2、W1、W0三个位指明所有中断请求中优先级最高级的识别码。

RR:读寄存器命令位。RR=1时允许读IRR或ISR,RR=0时禁止读这两个寄存器。RIS:读IRR或ISR选择位。其具体功能是。在RR=1,RIS=0时,下一条同一个地址读指令读出IRR寄存器的内容;在RR=1,RIS=1时,下一条同一个地址读指令读出ISR寄存器的内容。图8.178259A状态字格式

如果OCW3的D2D1位=11时(即P和RR同时为1),表示既发查询命令,又发读命令,执行输入指令时,首先读出的是查询字,然后读出的是ISR(或IRR)。3.8259A内部寄存器的读写

经过前面的学习可知,8259A内部共用10个可供程序访问的寄存器。分别是:ICW1~ICW4,OCW1~OCW3,IRR,ISR和查询状态字。其中,仅有IRR,ISR,OCW1和查询状态字是可读的。为了大家更好地使用8259A,相对其读写方式简要地加以总结。(1)读操作

8259A仅有IRR,ISR,IMR和查询状态字是可读的。IMR在A0=1端口,IRR、ISR和查询状态字都是A0=0的端口。若要对IMR进行读操作,直接对8259AA0=1的端口地址(奇地址)执行IN指令即可。

若要对IRR、ISR和查询字进行读操作,必须在写入相应的操作命令字OCW3后,在相同的口地址下紧跟着再执行一次读,才能读到正确的内容。(2)写操作

8259A进行写操作的寄存器有ICW1~ICW4,OCW1~OCW3。我们都知道,8259A的片内地址线只有A0,而用一根地址线完全实现7个寄存器的寻址是不可能的。因此,有前面的学习可知,8259A首先用A0区分出两组寄存器:

当A0=0时,选中的一组寄存器在通过命令字中的特征位(D4和D3)来区分具体是哪一个寄存器。当A0=1时,选中的一组寄存器则采用了固定的写入顺序来区分ICW2~ICW4,即ICW2~ICW4都是固定顺序紧跟在ICW1后写入8259A的。具体地说:

如果写入ICW1后的下一个命令字是针对A0=1的端口地址写入的,8259A就认定其为ICW2.如果在ICW1中已设定8259A为级联方式,则在写入ICW2后的下一个针对A0=1的端口写入的命令字8259A就认定为ICW3。如果在ICW1中设定了D0=1(即IC4=1),那么在写入IC2或IC3后的下一个针对A0=1的端口写入的命令字8259A就认定为ICW4。

除了初始化阶段紧跟在ICW1后面针对A0=1的端口写操作之外,其他的针对A0=1的端口写入的命令字,8259A就会认为是OCW1.4.8259A的初始化编程中断系统进入正常运行之前,系统中的每一片8259A都必须进行初始化。初始化就是根据系统的实际需要确定上述各初始化命令字的具体数值并按固定的先后次序写入8

温馨提示

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

评论

0/150

提交评论