《第9讲 中断.ppt》由会员分享,可在线阅读,更多相关《第9讲 中断.ppt(86页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第9讲 中断系统 苏 放北京邮电大学 电信工程学院1中断的基本概念什么是中断?中中断断服服务务程程序序发申请发申请中中断断服服务务程程序序发申请发申请外外设设CPU2中断的定义 CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。3为何要引入中断?提高数据传输率;避免了CPU不断检测外设状态的过程,提高了CPU的利用率。实现对特殊事件的实时响应。如多任务系统操作系统中:缺页中断设备中断各类异常实时钟,。等4中断源引起CPU
2、中断的事件中断源。外设外设请求输入输出数据,报告故障等请求输入输出数据,报告故障等事件事件掉电、硬件故障、软件错误、非法操作、掉电、硬件故障、软件错误、非法操作、定时时间到等定时时间到等中断源分为:外部中断、内部中断5中断源8086/8088的外部中断信号:INTR、NMIINTR可屏蔽中断请求,高电平有效,受可屏蔽中断请求,高电平有效,受IF标标志的控制。志的控制。NMI非屏蔽中断请求,上升沿有效,任何时非屏蔽中断请求,上升沿有效,任何时候候CPU都要响应此中断请求信号。都要响应此中断请求信号。6中断过程五个步骤:中断请求中断判优(有时还要进行中断源识别)中断响应中断服务中断返回71)中断请
3、求外设接口(中断源)发出中断请求信号,送到CPU的INTR或NMI引脚;中断请求信号:边沿请求,电平请求中断请求信号:边沿请求,电平请求例如,例如,NMI为边沿请求,为边沿请求,INTR为电平请求为电平请求中断请求信号应保持到中断被处理为止;CPU响应中断后,中断请求信号应及时撤销。在8086/8088系统中,外设的中断要经过8259A可编程中断控制器(PIC)的排队判优后向CPU发出:(I/O接口接口)PICCPU82.1)中断源识别计算机中的中断源有很多,CPU必须识别是哪一个设备产生中断。识别中断源有两个方法:软件查询。将中断信号从数据总线读入,用程序软件查询。将中断信号从数据总线读入,
4、用程序进行判别。进行判别。中断矢量法。由中断源提供中断类型号,中断矢量法。由中断源提供中断类型号,CPU根根据类型确定中断源。(据类型确定中断源。(8086/8088)92.2)中断判优多个中断源产生中断,CPU首先为谁服务?中断优先级排队问题。中断优先级控制要处理两种情况:对同时产生的中断:应首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理;对非同时产生的中断:低优先级别的中断处理程序允许被高优先级别的中断源所中断即允许中断嵌套。10中断判优中断优先级的控制方法硬件判优硬件判优链式判优、并行判优(中断向量法)链式判优、并行判优(中断向量法)软件判优软件判优顺序查询中断请求
5、,先查询的先服顺序查询中断请求,先查询的先服务(即先查询的优先级别高)务(即先查询的优先级别高)通常将中断判优与中断源识别合并在一起进行处理。x86系统中,这项任务由系统中,这项任务由PIC和和CPU共同完成。共同完成。11软件判优 INAL,PORT_R;PORT_R是锁存器地址是锁存器地址CLCRCRAL,1JCINTS01;转向故障处理转向故障处理A1:RCRAL,1JCINTS02;转向告警处理转向告警处理A2:INTS01:JMPA1INTS02:JMPA212硬件优先权排队电路 13INTAinCPUINTAINTR外设外设1 1外设外设2 2外设接口外设接口1 1菊花链菊花链逻辑
6、电路逻辑电路外设接口外设接口2 2外设外设3 3外设接口外设接口3 31 1菊花链菊花链逻辑电路逻辑电路菊花链菊花链逻辑电路逻辑电路IREQIREQIREQ中断确认中断确认硬件优先权排队硬件优先权排队-链式判优电路原理链式判优电路原理图图INTAinINTAin中断确认中断确认中断确认中断确认14菊花链逻辑电路菊花链逻辑电路INTAinIREQINTR&=1 1INTAoutDB三态门中断向量码E外设接口外设接口中断确认中断确认菊花链菊花链逻辑电路逻辑电路153)中断响应在每条指令的最后一个时钟周期,CPU检测INTR或NMI信号。若以下条件成立,则CPU响应中断:当前指令执行完。对INTR,
7、还应满足以下条件当前指令是STI和和IRET,则下条指令也要执行完。当前指令带有LOCK、REP等指令前缀时,则把它们看成一个整体,要求完整地执行完;对INTR,CPU应处于开中断状态,即IF=1;当前没有复位(RESET)和保持(HOLD)信号。若NMI和 INTR 同时发生,则首先响应NMI。163)中断响应(续)CPU中断响应时,要做下述三项工作:向中断源发出INTA中断响应信号;断点保护,包括CS、IP和PSW(FLAGS)。这主要是保证中断结束后能返回被中断的程序。获得中断服务程序首地址(入口)。如何得到中断处理程序的首地址?固定入口法中断向量法常用174)中断处理(中断服务)中断服
8、务子程序特点为”远”过程(类型为FAR)要用IRET指令返回中断服务子程序要做的工作保护现场(PUSH regs)开中断(STI)进行中断处理 恢复现场(POP regs)中断返回(IRET)185)中断返回执行中断返回指令IRETIRET指令将使CPU把堆栈内保存的断点信息弹出到IP、CS和FLAG中,保证被中断的程序从断点处能够继续往下执行。IPLIPHCSLCSHFLAGLFLAGHSPIPLIPHCSLCSHFLAGLFLAGHSPIPCSFLAG进入中断服务程序时中断返回后198086/8088的中断系统 与中断有关的控制线为:NMI、INTR、INTA8086系统的中断源(256个
9、)内部中断软件中断:即INT n指令,类型号n(0-255)。除法溢出:类型号0,商大于目的操作数所能表达的范围时产生。单步中断:类型号1,TF=1时产生(当前指令需执行完)断点中断:类型号3,这是一个软件中断,即INT 3指令。溢出中断:类型号4,这是一个软件中断,即INTO指令。外部中断非屏蔽中断NMI:类型号2,不可用软件屏蔽,CPU必须响应它。可屏蔽中断INTR:类型号由PIC提供。IF=1时CPU才能响应。中断优先权从高到低的顺序是:除法溢出中断中断优先权从高到低的顺序是:除法溢出中断INTnINTONMIINTR单步中断单步中断20NMIINTR中断逻辑中断逻辑软件中断指令软件中断
10、指令溢出中断溢出中断除法错除法错单步中断单步中断非屏蔽中断请求非屏蔽中断请求中断控中断控制器制器8259APIC8086/8088CPU8086/8088CPU内部逻辑内部逻辑断点中断断点中断8086/8088中断源类型中断源类型可可屏屏蔽蔽中中断断请请求求n4301221中断源的识别8086系统采用中断类型码来识别不同的中断源,每个中断源都有一个与它相对应的中断类型码。溢出、断点、除法溢出、单步、非屏蔽中断的类型码为固定值固定值软件中断的类型码由指令给出由指令给出可屏蔽中断的类型码由由PIC给出给出22中断源的识别CPU响应INTR中断时,会产生两个中断响应总线周期,要求PIC在第2个中断响
11、应总线周期把中断类型码放到数据总线上,供CPU读入。23中断向量和中断向量表中断向量和中断向量表n中断响应后,中断响应后,CPU通过中断类型号找到中断向量表,进而找通过中断类型号找到中断向量表,进而找到中断服务程序。到中断服务程序。n中断向量中断向量 存放各类中断的中断服务程序的入口地址(段和偏移)它提供一个指向中断处理子程序的起始地址。它提供一个指向中断处理子程序的起始地址。n中断向量表中断向量表:将所有的中断处理服务程序的入口地址都集中:将所有的中断处理服务程序的入口地址都集中在一起,构成一个中断地址的存放表,即中断向量表。在一起,构成一个中断地址的存放表,即中断向量表。位于内存的0000
12、0H003FFH,大小为1KB,共256个中断向量,每个中断向量占用4 Bytes,低字为段内偏移,高字为段基址。24根据中断类型号获得中断服务程序入口n方法:中断向量在中断向量在IVT中的存放地中的存放地址址4n25中断类型和中断向量表中断类型和中断向量表8086中断处理流程中断处理流程CPU在获得中断类型号后,先自动将在获得中断类型号后,先自动将FR入栈,并自动将入栈,并自动将IF和和TF清零。清零。自动将当前自动将当前CS和和IP内容入栈,根据中断类型号内容入栈,根据中断类型号n从中断向量表中取出中断从中断向量表中取出中断处理程序的段地址送入处理程序的段地址送入CS,偏移地址值送入,偏移
13、地址值送入IP,从而实现向中断处理程序转移。,从而实现向中断处理程序转移。在中断处理程序完成后,用中断返回指令在中断处理程序完成后,用中断返回指令IRET恢复断点,弹回恢复断点,弹回IP和和CS,并恢复并恢复FR的内容,实现向被中断程序的返回。的内容,实现向被中断程序的返回。26例例例:设某中断源的类型码为例:设某中断源的类型码为4AH,试画出求,试画出求中断服务处理程序的示意图。中断服务处理程序的示意图。解:解:中断向量表指针为中断向量表指针为4*n=4*4AH=128H,即:即:0000:0128H。通过中断向量表,中断服务程序的入口通过中断向量表,中断服务程序的入口地址为地址为0F000
14、H:1806H。27例例中断向量表中断向量表物理地址物理地址单单元内容元内容INT4AH地址地址单元内容单元内容IP=1806HCS=F000HF000:180600000H类类型型0中断中断处处理理程序程序入口地址入口地址MOVAL,300:124类类型型49H中中断断向向量量00001H0:1250:126向量向量地址:地址:4AH*4=128H0:12700004H类类型型1中断中断处处理理程序程序入口地址入口地址0:12806H0:12918H0:12A00H0:12BF0H00008H0:12C类类型型4BH中中断断向向量量0:12D0:12E0:12F中断中断处处理理服服务务程序程
15、序IRET003FFH类类型型FFH中断中断处处理理程序程序入口地址入口地址28初始化将中断服务程序的入口地址放入向量表(1)直接写入法。使用指令将中断服务程序入口地址的IP写入n4的RAM位置,中断服务程序入口的CS写入n4+2的位置。中断向量表的初始化29例例例例8-2 若中断类型号n=70H,中断服务程序的过程名是INTSUB。借助伪指令和传送指令,将中断服务程序入口地址写入中断向量表。VECDATASEGMENTAT0ORG70H*4LOCA_70DW 2DUP(?)VECDATAENDSININTSEGMENTMOVLOCA_70,OFFSETINTSUBMOVLOCA_70+2,S
16、EGINTSUB30中断向量表的初始化例:中断类型码为48H的中断处理子程序的名字为int 48h,编写程序段将该中断处理子程序的入口地址放入向量表。31中断向量表的初始化 CLI MOV AX,0 MOV DS,AX MOV SI,48H*4 MOV AX,OFFSET int48h MOV SI,AX MOV AX,SEG int48h MOV SI+2,AX STI32中断向量表的初始化(2)利用DOS功能调用写、读中断向量表。DOS功能调用25H用来写中断向量表。入口参数是:AL:中断类型号;DS:中断服务程序入口的段地址;DX:中断服务程序入口的偏移地址。DOS功能调用35H用来读中
17、断向量表入口、出口参数:AL:中断类型号;ES:读出的中断服务程序入口的段地址;BX:读出的中断服务程序入口的偏移地址。33例例例例8-4设中断类型号为70H,中断服务程序是INTSUB,用DOS功能调用25H将中断服务程序入口地址写入中断向量表。解:解:相关的程序段如下:PUSHDSMOV AX,SEG INTSUBMOV DS,AXLEA DX,INTSUBMOV AL,70HMOV AH,25HINT21HPOPDS 348086/8088 CPU的中断响应过程 内部中断响应过程 无INTA周期中断类型码固定或由指令给出响应过程主要步骤:PUSH FLAG IF=0 PUSH CS PU
18、SH IP 取中断向量送入IP和CS35中断响应过程(续)外部中断响应过程非屏蔽中断,与内部中断响应过程类似 可屏蔽中断 INTA(1),PIC进行优先级排队判优处理 INTA(2),PIC把中断类型码放到DB上,CPU读入 PUSH FLAG IF=0 PUSH CS PUSH IP 取中断向量送入IP和CS与内部中断一样与内部中断一样36NYNYNNNNNYY执行指令执行完否?取指令IF=1?内部中断?NMI?INTR?TF=1?类型码=0255类型码=2类型码=1中断响应,读回类型码FLAG入栈TEMPTFCF=TF=0CS、IP入栈计算向量表地址高字CS低字IP执行中断服务程序NMI?
19、TEMP=1?转入中断服务程序恢复CS和IP恢复FLAGS返回被中断的程序YYYYNIRET指令的操作8086/8088的的中断处理流程中断处理流程37可编程中断控制器8259AIntel8259A是一种可编程的中断控制器是一种可编程的中断控制器PIC(Programmable Interrupt Controller)可为可为CPU管理和处理管理和处理8个中断源电路的中断,并对它们进个中断源电路的中断,并对它们进行优先级管理。行优先级管理。可与其它可与其它8个个8259A芯片组成主从式中断系统,实现芯片组成主从式中断系统,实现64级级中断源控制。中断源控制。优先级方式在执行程序时可动态改变,
20、有多种中断管理优先级方式在执行程序时可动态改变,有多种中断管理方式。方式。每一中断源中断都可以屏蔽或允许,可通过编程选择。每一中断源中断都可以屏蔽或允许,可通过编程选择。能自动送出中断类型号,使能自动送出中断类型号,使CPU方便的找到中断服务程方便的找到中断服务程序的入口地址。序的入口地址。388259A8259A的结构功能的结构功能8259A的引脚的引脚双列直插式双列直插式28引脚封装引脚封装398259A内部功能结构内部功能结构40 8259A的内部结构8259A的内部结构 中断请求寄存器中断请求寄存器IRR保存从保存从IR0IR7来的中断请求信号,某位来的中断请求信号,某位=1表示对应的
21、表示对应的IRi有中有中断请求断请求 中断服务寄存器中断服务寄存器ISR 保存所有正在服务的中断源,某位保存所有正在服务的中断源,某位=1表示对应的表示对应的IRi中断正在被服中断正在被服务务 中断屏蔽寄存器中断屏蔽寄存器IMR存放中断屏蔽字,某位存放中断屏蔽字,某位=1表示对应的表示对应的IRi输入被屏蔽输入被屏蔽 中断优先权判别电路中断优先权判别电路 确定是否向确定是否向CPU发出中断请求,中断响应时确定发出中断请求,中断响应时确定ISR的哪位应置的哪位应置位及把相应中断的类型码放到数据总线上位及把相应中断的类型码放到数据总线上 418259A的工作过程8259A对中断请求的处理过程如下:
22、当某IRi有效时,IRR相应位置1若有效的IRi未被屏蔽,则向CPU发出中断请求检测到第1个INTA信号后,置ISRi=1,IRRi=0 检测到第2个INTA信号后,把ISRi=1中最高优先级的中断类型码放到DB上若工作在AEOI方式,在第2个INTA#结束时,使ISRi复位;否则由CPU发出EOI命令使ISRi复位428259A的工作方式8259A的工作方式有如下几类:中断优先方式与中断嵌套中断结束处理方式 屏蔽中断源的方式中断触发方式级联工作方式43中断优先方式与中断嵌套中断优先方式 两类优先级控制方式:固定优先级固定优先级和循环优先级循环优先级固定优先级方式所有中断请求IRi的中断优先级
23、固定不变优先级排列顺序可编程改变加电后8259A的默认方式,默认优先级顺序从高到低为IR0IR7IR7IR6IR5IR4IR3IR2IR1IR07654321032107654最低级最高级最高级最低级优先级优先级IR7IR6IR5IR4IR3IR2IR1IR0默认优先级默认优先级优先级可编程改变优先级可编程改变44中断优先方式与中断嵌套(续)循环优先级方式 中断源轮流处于最高优先级,即自动中断优先级循环初始优先级顺序可用编程改变某中断请求IRi被处理后,其优先级别自动降为最低,原来比它低一级的中断上升为最高级 IR7IR6IR5IR4IR3IR2IR1IR07654321021076543最低
24、级最高级最高级最低级ISR内容内容IR7IR6IR5IR4IR3IR2IR1IR0IR4的服务结束以前的服务结束以前0101000001000000IR4的服务结束以后的服务结束以后ISRi45中断优先方式与中断嵌套(续)中断嵌套方式在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。8259A有两种中断嵌套方式:普通全嵌套方式(默认方式)普通全嵌套方式(默认方式)一中断正被处理时,只有一中断正被处理时,只有更高优先级更高优先级的事件可以打的事件可以打断当前的中断处理过程而被服务。断当前的中断处理过程而被服务。特殊全嵌套方式特殊全嵌套方式 一中断正被处理时,允许一中断正被处理时,允许同级
25、或更高优先级同级或更高优先级的事件的事件可以打断当前的中断处理过程而被服务。可以打断当前的中断处理过程而被服务。注注:特殊全嵌套仅用于多个特殊全嵌套仅用于多个8259A级连时的主级连时的主8259A,而不能用于从属而不能用于从属8259A或单或单8259A系统。系统。46D.主主8259AIR0IR1IR2IR3IR4IR5IR6IR7一般嵌套方式:一般嵌套方式:从从片片的的INT被被主主片片封封锁锁,故故更更高高级级别别的的IR0-IR2中中断断也也无无法法得到响应得到响应特殊嵌套方式:特殊嵌套方式:因因主主片片不不封封锁锁从从片片的的INT,故故级级别别高高的的IR0-IR2中中断断可可以
26、以得得到到响响应应。(但但IR3-IR7仍仍被被本本从从片片封锁封锁)C.假定假定IR3发生中发生中断断,并获得服务并获得服务一一般般嵌嵌套套方方式式:IR4的的中中断断被被服服务务时时,这这些些中中断断将将被封锁。被封锁。B.特特殊殊嵌嵌套套方方式式:IR4的的中中断断被被服服务务 时时,只只 封封 锁锁IR5-IR7。A.INTE.从从8259AINTIR0IR1IR2IR3IR4IR5IR6IR7n一般全嵌套方式与特殊全嵌套方式的区别一般全嵌套方式与特殊全嵌套方式的区别 去去CPU47中断结束处理方式当某一IRi中断被服务时,ISR中的相应位ISRi=1。当服务结束后,则必须清零该ISR
27、i位。使ISRi=0是通过向8259A发出中断结束命令(EOI命令)实现的。三种EOI命令自动EOI(AEOI)(自动EOI方式)非指定EOI(NSEOI)(正常EOI方式)指定EOI(SEOI)(特殊EOI方式)48 AEOI:在第2个INTA#结束时,由8259A使ISRi自动复位;因不保留当前正在服务的中断的状态,故AEOI不能用于中断嵌套方式SEOI:由CPU发出一条SEOI命令,该EOI命令中指出了所要复位的ISR的位号。用于特殊屏蔽方式NSEOI:由CPU发出正常EOI命令,该EOI命令使ISRi=1的位中优先级最高的那一位复位。用于普通全嵌套方式49中断服务程序向从PIC发EOI
28、命令读从PIC的ISR全0?向主PIC发EOI命令YIRET恢复现场Nn特殊全嵌套方式特殊全嵌套方式下的下的EOI处理处理n只有当从只有当从PIC的的中断全部处理完中断全部处理完后,才能向主后,才能向主PIC发发EOI命令命令50屏蔽中断源的方式IMR屏蔽字决定了允许或禁止某位IRi所对应的中断:IMi=1 禁止,IMi=0 允许。特殊屏蔽方式:提供了允许较低优先级的中断能够得到响应的特殊手段。原理:假定当前正在处理IR6,先进入特殊屏蔽方式,然后设置IM6=1。这时,除IR6外的所有中断请求均能得到响应。特殊屏蔽方式中只能用SEOI命令结束中断。51中断触发方式边沿触发IRi出现上升沿表示有
29、中断请求 电平触发IRi出现高电平表示有中断请求在第1个INTA结束前,IRi必须保持高电平 52级联工作方式单片8259A可支持8个中断源;采用多片8259A级连,可最多支持64个中断源。n片8259A可支持7n+1个中断源;级连时只能有一片8259A为主片,其余的均为从属片;涉及到的8259A引脚包括:CAS0-CAS2SP#/EN#IRiINT53级连电路连接方法548259A的编程使用8259A的控制命令分为初始化命令字初始化命令字ICWICW1ICW4向向8259A写入写入ICW的过程称为的过程称为初始化编程初始化编程操作命令字操作命令字OCW OCW1OCW3向向8259A写入写入
30、OCW的过程称为的过程称为操作方式编程操作方式编程558259A内部寄存器的寻址方法CS#RD#WR#A0D4D3读写操作010000写写OCW2写写OCW3写写ICW1写写ICW2,ICW3,ICW4,OCW1(顺顺序写入序写入)00101x1xx00101xx读读出出IRR、ISR读读出出IMRn需要需要CS、A0、RD、WR和和D4、D3的配合的配合n内部寄存器的访问方法如下表:内部寄存器的访问方法如下表:568259A的初始化顺序 8259的初始化流程如图注意次序不可颠倒 写写ICW1写写ICW2级连?级连?写写ICW3需需ICW4?写写ICW4NNYY578259A的控制命令字初始化
31、8259A必须从ICW1开始写写ICW1意味着重新初始化意味着重新初始化8259A写入写入ICW1后,后,8259A的状态如下:的状态如下:清除清除ISR和和IMR(全全0);将中断优先级设成初始状态:将中断优先级设成初始状态:IR0最高,最高,IR7最低;最低;设定为一般屏蔽方式;设定为一般屏蔽方式;采用非自动中断结束方式;采用非自动中断结束方式;状态读出逻辑预置为读状态读出逻辑预置为读IRR。58ICW1初始化字LTIM:触发方式=1 高电平触发=0 上升沿触发SNGL:级连控制=1 单片=0 级连IC4:ICW4控制=1 要写ICW4=0 不写ICW4(默认ICW4为全0)A0 D7D6
32、 D5 D4 D3 D2 D1 D0 0 xxx1LTIMxSNGLIC459ICW2中断向量码T7T3:中断向量码的高5位T2T0:最低3位为中断源的序号IRn000111分别对应分别对应IR0IR7由由8259A根据中断源的序号自动填入根据中断源的序号自动填入 例如:例如:若若ICW2命令字为命令字为48H,则,则IR0的中断向量码为的中断向量码为48H,IR7的中断向量码为的中断向量码为4FH,等等。,等等。A0 D7D6 D5 D4 D3 D2 D1 D0 1T7T6T5T4T3xxx60ICW3级连控制字 主片的级联控制字 Si=1对应对应IRi线上连接了从片线上连接了从片 A0 D
33、7D6 D5 D4 D3 D2 D1 D0 1S7S6S5S4S3S2S1S0从片的级联控制字 ID2ID0标识码,说明本从片连接到主片的哪标识码,说明本从片连接到主片的哪个个IR引脚上。引脚上。000111分别对应分别对应IR0IR7。A0 D7D6 D5 D4 D3 D2 D1 D0 100000ID2ID1ID061ICW3级连控制字(续)ICW3必须与主从片的连接关系一致:例如,主片的IR4与从片的INT线连接,则主片的ICW3=10H,从片的ICW3=04H。中断响应时,主片通过级连线CAS2-CAS0送出被允许中断的从片标识码,各从片用自己的ICW3与CAS2-CAS0比较,二者一
34、致的从片才可发送中断向量码。62ICW4中断结束方式字 SFNM:特殊全嵌套1特殊全嵌套方式特殊全嵌套方式0一般全嵌套方式一般全嵌套方式AEOI:自动EOI1自动自动EOI方式方式0非自动非自动EOI方式方式A0 D7D6 D5 D4 D3 D2 D1 D0 1000SFNM BUF M/SAEOI 1BUF:缓冲方式 M/S:主/从缓冲选择BUFM/S11缓冲方式缓冲方式/主主PIC10缓冲方式缓冲方式/从从PIC0 x非缓冲方式非缓冲方式/正常正常638259A的操作命令字OCW OCW用于设置8259的工作状态在初始化后写入OCW的写入顺序可任意写入地址要求:OCW1必须写入奇地址端口必
35、须写入奇地址端口(A0=1)OCW2,OCW3必须写入偶地址端口必须写入偶地址端口(A0=0)64OCW1中断屏蔽字 Mi=1 中断请求线IRi被屏蔽(不允许中断)=0 允许该IRi中断 OCW1将写入IMR寄存器。A0=1时读OCW1可读出设置的IMR内容。A0 D7D6 D5 D4 D3 D2 D1 D0 1M7M6M5M4M3M2M1M065OCW2中断结束和优先级循环 L2L0:优先级编码R:优先级自动循环SL:指定优先级EOI:结束中断命令 R SL EOI 0 0 1 非指定EOI 命令(NSEOI),全嵌套方式 0 1 1 指定EOI 命令(SEOI),全嵌套方式,按L2-L0编
36、码复位ISR 1 0 1 NSEOI 命令,优先级自动循环 1 0 0 自动EOI,设置优先级自动循环 0 0 0 自动EOI,取消优先级自动循环(固定优先级)1 1 1 SEOI 命令,按L2-L0编码循环优先级(L2-L0设为最低优先级)1 1 0 按L2-L0编码循环优先级(L2-L0设为最低优先级)A0 D7D6 D5 D4 D3 D2 D1 D0 0RSLEOI 00L2L1L06601100110 -结束IR6的中断 11000110 IR6为最低级开始循环方式 A0 D7D6 D5 D4 D3 D2 D1 D0 0RSLEOI 00L2L1L067OCW3屏蔽方式和读出控制字 E
37、SMM:允许使能特殊屏蔽方式SMM:特殊屏蔽方式ESMM SMM1 1 特殊屏蔽方式置位1 0 特殊屏蔽方式复位0 x 非特殊屏蔽方式P(Polling):=1 查询方式 =0 非查询方式A0 D7D6 D5 D4 D3 D2 D1 D0 00 ESMMSMM 01PRRRISRR:读寄存器RIS:ISR/IRR选择RR RIS1 1 读ISR1 0 读IRR0 x 无效68特殊屏蔽例:特殊屏蔽例:。;IR4中断处理程序中断处理程序CLIMOVAL,68H;OCW3:01101000OUT0C0H,AL;设置特殊屏蔽方式;设置特殊屏蔽方式INAL,0C2HORAL,10H;屏蔽;屏蔽IR4OU
38、T0C2H,ALSTI。;IR7请求,响应,返回请求,响应,返回。CLI;为设命令字;为设命令字INAL,0C2H;读出屏蔽字;读出屏蔽字ANDAL,0EFH;清除;清除IMR4OUT0C2H,ALMOVAL,48H;OCW3:01001000OUT0C0H,AL;取消特殊屏蔽;取消特殊屏蔽STI。;继续;继续IR4中断服务中断服务MOVAL,20H;OCW2:00100000(EOI)OUT0C0,ALIRET69OCW3(续)查询方式允许8259A不工作于中断方式,而是以查询方式工作。CPU先写一个先写一个D2=1的的OCW3,再对同一地址读入,再对同一地址读入,即可得到如下状态字节:即可
39、得到如下状态字节:IxxxxR2R1R0I=1表示有中断请求,中断请求号为表示有中断请求,中断请求号为R2-R0此查询步骤可反复执行,以响应多个同时发生此查询步骤可反复执行,以响应多个同时发生的中断。的中断。读IRR/ISR:写入此命令后,随后再对同一地址读,即可得到IRR或ISR的内容。708259A编程举例按以下要求初始化8259A:接口地址为20H和21H;中断为上升沿触发;单片8259A;不写ICW4;与IR0-IR3对应的中断向量码为08H-0BH;IR4-IR7不使用。71根据要求,各初始化参数及工作参数如下:ICW1=00010010=12HICW2=08H 中断向量码 OCW1
40、=11110000=0F0H 中断屏蔽字 A0 D7D6 D5 D4 D3 D2 D1 D0 0 xxx1LTIMxSNGLIC4A0 D7D6 D5 D4 D3 D2 D1 D0 1T7T6T5T4T3xxxA0 D7D6 D5 D4 D3 D2 D1 D0 1M7M6M5M4M3M2M1M0ICW1ICW2OCW172 8259A编程举例(续)初始化程序如下:初始化程序如下:INIT8259A:MOVDX,20H;A0=0,写ICW1MOVAL,12H;上升沿触发,单片,不写ICW4OUTDX,ALMOVDX,21H;A0=1,写ICW2,OCW1MOVAL,08H;ICW2OUTDX,A
41、LMOVAL,0F0H;OCW1:屏蔽IR4-IR7OUTDX,AL73例例8-52片8259级联,从片的INT接主片的IR2。端口地址:主片20H、21H,从片A0H、A1H。主片和从片均采用边沿触发。主片采用特殊全嵌套方式,从片是一般全嵌套方式。采用非缓冲方式,主片接+5V,从片接地。主片的中断类型号为08H0FH,从片的中断类型号为70H77H。写出主8259A和从8259A的初始化程序段。74ICW1AEQU20H;主片端口地址;主片端口地址ICW2AEQUICW1A+1ICW3AEQUICW2AICW4AEQUICW2AICW1BEQU0A0H;从片端口地址;从片端口地址ICW2BE
42、QUICW1B+1ICW3BEQUICW2BICW4BEQUICW2B;-主片主片8259A-MOVAL,11H;ICW1,边沿触发,多片,需,边沿触发,多片,需ICW4OUTICW1A,ALMOVAL,08H;ICW2,中断类型码,中断类型码OUTICW2A,ALMOVAL,04H;ICW3,IR2接从片接从片OUTICW3A,ALMOVAL,11H;ICW4,非缓冲,特殊全嵌套,非自动结束,非缓冲,特殊全嵌套,非自动结束OUTICW4A,AL;-从片从片8259A-MOVAL,11H;ICW1,边沿触发,多片,需,边沿触发,多片,需ICW4OUTICW1B,ALMOVAL,70H;ICW2
43、,中断类型码,中断类型码OUTICW2B,ALMOVAL,02H;ICW3,INT接主片的接主片的IR2OUTICW3B,ALMOVAL,01H;ICW4,非缓冲,全嵌套,非自动结束,非缓冲,全嵌套,非自动结束OUTICW4B,AL75PC机中断程序设计1)主程序保存原中断向量设置自己的中断向量初始化堆栈指针设置8259A的中断屏蔽字(其他的已由操作系统设置)STI2)中断服务程序保存所用到的寄存器内容中断服务程序主体恢复进入时保存的寄存器内容发EOI命令(必要时可提前)STI(必要时可提前)IRET76中断程序举例PC机中主8259A的I/O地址为20H和21H,中断向量码为08H;中断请求
44、从IR6引入,故中断类型号为0EH;主程序如下:;保存原来的中断向量movah,35hmoval,0eh;中断类型码int21h;取原中断向量(在es:bx中)movsave_ip,bx;保存原来的中断向量movsave_cs,es77;设置自己的中断向量设置自己的中断向量pushdsmovdx,offsetmy_intmovax,segmy_intmovds,ax;DS:DX的内容为的内容为my_int的首地址的首地址movah,25hmoval,0ehint21h;设置自己的中断向量;设置自己的中断向量popds;初始化堆栈指针初始化堆栈指针movsp,my_stack_top;设置设置8
45、259A的中断屏蔽字的中断屏蔽字inal,21handal,10111111b;开放;开放IR6中断中断out21h,alsti78子程序如下:子程序如下:my_intprocfarpusha popamoval,20h;EOI命令,命令,00100000Bout20h,al;写;写OCW2stiiretmy_intendp79可编程中断控制器可编程中断控制器8259A的应用的应用例:例:如图所示为如图所示为8259A与系统总线的连接,图中与系统总线的连接,图中IR0IR7与与8个中断源相连接,单个中断源相连接,单片使用。地址总线的片使用。地址总线的A2和和A0没有用上,故为部分译码法,地址为
46、没有用上,故为部分译码法,地址为00C0H00C7H(有重区),仅取(有重区),仅取00C0H和和00C2H作编程用。作编程用。80可编程中断控制器可编程中断控制器8259A的应用的应用例:例:如图所示为如图所示为8259A与系统总线的连接,图中与系统总线的连接,图中IR0IR7与与8个中断源相连接,单个中断源相连接,单片使用。地址总线的片使用。地址总线的A2和和A0没有用上,故为部分译码法,地址为没有用上,故为部分译码法,地址为00C0H00C7H(有重区),仅取(有重区),仅取00C0H和和00C2H作编程用。作编程用。初始化程序如下:初始化程序如下:STAR:MOVDX,00C0H;A0
47、=0,8259A地址送地址送DXMOVAL,13H;ICW1为为13HOUTDX,ALMOVDX,00C2H;A0=1,8259A地址送地址送DXMOVAL,48H;ICW2为为48H,中断类型码,中断类型码OUTDX,ALMOVAL,03H;ICW4,非缓冲方式,自动,非缓冲方式,自动EOI,一般完全嵌套,一般完全嵌套OUTDX,ALMOVAL,0E0H;OCW1,屏蔽,屏蔽IR5,IR6,IR7OUTDX,AL81例例8-6改写除法溢出的中断服务程序,能够分别处理除法溢出的两种情况:当除数为0时,给出错误信息;如果不是除数等于0,计算出实际的商和余数,并通过子程序的出口参数来传递。82说明改写系统的软中断服务程序先将原来中断向量表中的中断向量读出并保存起来,再改写中断向量表,写入新的0号中断服务程序的入口地址。在整个程序运行结束前,再将保存的原来的中断向量重新写入中断向量表,恢复系统原有的状态。83说明返回地址问题。一般在中断子程序中,执行“IRET”指令后,就会返回断点,继续执行原来的程序。但是除法溢出调用中断服务程序时,压入堆栈的返回地址不是产生溢出的除法指令的下一条指令的地址,而是除法指令本身的地址。所以,在除法溢出中断服务程序中,还要调整断点的地址。除法指令的长度是2个字节。具体做法,就是从堆栈中弹出返回地址,加2以后,再重新压入堆栈。8485谢谢!谢谢!86