您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 微机原理与接口技术-中断8259
第4章中断与定时4.1PC机中断系统•解决高速的CPU与慢速的外设之间的矛盾•提高CPU的工作效率及实时性能•提高外设的工作速度•引入中断技术在80X86微机系统中4.1概述•解决高速的CPU与慢速的外设之间的矛盾•提高CPU的工作效率及实时性能•提高外设的工作速度•引入中断技术在80X86微机系统中4.1.1中断的基本概念△中断——是指CPU执行程序过程中,由于某种事件发生,迫使CPU暂时中止正在执行的程序(主程序),转去执行该事件的处理程序(中断服务程序),待处理完毕后,又返回到原程序的断点处,继续往下执行的过程1.中断引起中断的原因或发出中断请求的来源常见的中断源•一般的输入输出设备,如键盘、显示器(CRT终端)、打印机等•数据通道,如磁带、磁盘等•实时时钟•故障信号•软件中断,如为调试程序而设置的中断源。2.中断源中断过程正常程序(断点)中断响应中断返回中断服务4.1.2中断响应与处理中断请求中断响应保护断点中断处理中断返回000中断优先级和中断嵌套1.中断优先级2.中断优先级的确定•软件查询法•硬件排队电路•软件查询法4.中断嵌套4.28086/8088中断系统1中断类型8086/8088系列微机有一个简单而灵活的中断系统,可以处理256个不同类型的中断源,每个中断源都有一个中断类型码供CPU识别。•外部中断:中断源来自CPU外部•内部中断:中断源来自CPU内部不可屏蔽中断请求中断逻辑INTn断点中断溢出中断除0单步中断控制器8259外部中断NMIINTRCPUIBMPC机中断系统执行了软中断指令或由CPU本身引起的中断1.软中断(内部中断)(1)除法错误(除0)(2)溢出——INTO(OF=1)(3)中断指令(软中断指令)——INTn(4)断点中断——(单字节中断)INT3,DEBUG用(5)单步(陷阱)中断——由TF=1引起内中断不需要外部硬件支持,不受IF控制8086/8088中中断的优先级次序:内部中断,外部中断(1)不可屏蔽中断NMI——由NMI来通知CPU发生了“灾难性”的事件,如电源掉电、存贮器读写出错、总线奇偶错等,该中断是不能用中断标志IF控制的。(2)可屏蔽中断INTR——由INTR来通知CPU发生了外部事件中断请求;该中断是可以用中断标志IF控制(=0屏蔽)的。2.硬中断(外部中断)外部硬件(主要是外设通过接口)产生在8086/8088微机系统中,中断源的优先权由高到低的顺序依次为:除零数、INTn、INTo、NMI、INTR、单步执行中断。3.中断优先权在8086/8088中,所有中断服务程序的入口地址(中断向量)集中放在内存的最低1K区域(00000H~003FFH),构成一个中断向量表4.2.2中断向量表1.中断向量表的组成及其定位每个中断占4个内存单元,共有256个中断00000H除法错误00004H单步中断00008H非屏蔽中断0000CH断点中断00010H溢出中断00014HINTn及可屏蔽中断003FCH0号中断1号中断2号中断3号中断4号中断255号中断中断向量表向量地址00000H00001H00002H00003H003FCH003FDH003FEH003FFHIPLIPHCSLCSH中断向量表00H中断向量FFH中断向量向量地址8086/8088的中断向量表由三个部分组成:•5个专用中断(0#~4#),用户不能对其修改•27个系统使用或保留中断(5#~31#),这是Intel公司保留的中断指针,用户不应使用•224个用户定义中断(32#~255#),为用户使用的中断指针,它可由用户指定每个中断向量占4个内存单元•前两个单元存放中断向量的偏移地址(IP)•后两个单元存放中断向量的段地址(CS)中断类型码与中断向量在中断向量中所在位置(中断向量地址)之间的对应关系为:中断向量地址=4×中断类型码例:0C号中断向量地址=4×0CH=30H30H(IPL)31H(IPH)32H(CSL)33H(CSH)4A号中断向量地址=4×4AH=128H128H(IPL)129H(IPH)12AH(CSL)12BH(CSH)4.3可编程中断控制器8259A①具有8级优先权控制,通过级连可扩展至64级优先权控制。②每一级中断都可以独立被屏蔽或允许。③在中断响应周期,8259A可提供中断类型码,从而快速地转入中断服务程序。④8259A有多种工作方式,均可通过程序来选择。4.3.18259A引脚4.3.28259A的工作方式1.中断优先级管理(1)全嵌套方式(最常用方式)固定优先级IR0(高)→IR7(低),高级中断可嵌套低级中断。(2)特殊全嵌套方式(用于多片级联主片的设置)固定优先级IR0(高)→IR7(低),高级中断可嵌套低级中断。(3)优先级自动循环方式当中断源被服务后优先级自动降为最低,如IR2被服务后,IR3的优先级最高,其次为IR4,IR5……(4)优先级特殊循环方式与优先级自动循环方式类似,只是一开始最低优先级由编程指定。2.中断结束方式(1)中断自动结束方式(AEOI)在第二个中断响应INTA到来时,将相应被置位的ISRi复位为0。常用于单片8259且多个打转无嵌套。(2)普通中断结束方式(普通EOI)在中断结束之前用OUT指令向8259发一个中断结束命令字。将相应ISRi复位。(3)特殊中断结束方式用于优先级自动循环方式和特殊循环方式。在中断结束之前用OUT指令向8259发一个特殊中断结束命令字,命令字中指明复位ISR的哪一位。(2)特殊屏蔽方式(用于多级嵌套中断)当优先级高的中断服务程序较长,而优先级低的申请又急需服务时,可用这种方式暂时屏蔽优先级高的中断,开放优先级低的中断。3.中断屏蔽方式(1)普通屏蔽方式需要屏蔽哪一位,通过OUT指令将相应被置位的IMRi置位为1。中断触发方式边沿触发方式:正跳变向8259A请求中断。电平触发方式:高电平向8259A请求中断,响应中断后要及时清除高电平。查询中断方式:外设向8259A请求中断,但8259A不向CPU发中断请求信号INT。而是将请求状态保存等待CPU来查询。与系统总线的连接方式非缓冲方式:小系统中,8259A数据线直接连系统数据总线,不需要总线缓冲器,此时SP/EN表示级联时主/从关系。主片:SP/EN接高电平;从片:SP/EN接低电平。缓冲方式:大系统中,数据总线都具有总线缓冲器,此时SP/EN表示数据传送方向,级联时主/从关系通过软件设定ICW4来决定。8259A内部结构框图4.3.38259A的编程结构8259A级联电路图4.3.48259A的编程初始化命令字(1)初始化命令ICW1(2)初始化命令ICW2时序:ICW1→ICW2→[ICW3]→[ICW4]。例:如果ICW2为08H,则IR3的中断类型号(中断向量)为08H+03H=0BH。(3)初始化命令ICW3主片:S7~S0为1表示对应的引脚接有从片从片:ID2~ID1是该从片接到主片的IR引脚的IR号(4)初始化命令ICW4D0:用于8位(0)/16位(1)微机;D1:非中断自动结束(0)/自动结束(1)方式;D2:缓冲方式(D3=1)时的主从片级联位置设置,从片(0)/主片(1);D3:非缓冲(0)/缓冲(1)方式;D4:全嵌套(0)/特殊全嵌套(1)方式。从片非自动结束时,主、从片均需发EOI命令。2操作命令字(1)操作命令OCW1正常屏蔽:特殊屏蔽:通过OCW3设置。(2)操作命令OCW2特征位:D4D3=00;功能:结束方式和优先权轮转管理;结束方式管理:D6D5=X0,自动结束,硬件自动清除ISR的相应位;D6D5=01,非自动结束[命令不指定清ISR的哪一位];D6D5=11,非自动结束[命令指定清ISR的哪一位]。优先权管理:D7=0,优先权固定;D7=1,优先权轮转。RSLEOI00L2L1L0功能00000000自动EOI、优先权固定00100000非自动EOI[不指定]优固01100L2L1L0非自动EOI[指定]优固10000000自动EOI、优自动轮转10100000非自动EOI[不指定]优自11100L2L1L0非自动EOI优指定轮转11000L2L1L0自动EOI、优指定轮转例:MOVAL,20HOUT20H,AL的含义?(3)操作命令OCW3PRRRIS功能应用010读取IRR内容MOVAL,0AHOUT20H,ALINAL,20H011读取ISR内容MOVAL,0BHOUT20H,ALINAL,20H00*不读1**读取查询字信息MOVAL,0CHOUT20H,ALINAL,20H特定屏蔽管理:ESMMSMM功能0*该操作对特殊屏蔽无效10取消特定屏蔽11设置特定屏蔽取消方法:用OCW3取消特定屏蔽,用OCW1取消被屏蔽的IR。查询字格式:I=0,无中断请求;I=1,有中断请求。W2~W0,正在申请中断的若干中断源中优先级最高的中断源的编码。PC/XT中断结构一片8259A,地址:20H,21HIRQ0:8253(0)08HIRQ1:键盘09HIRQ2:保留0AHIRQ3:异步通讯COM20BHIRQ4:异步通讯COM10CHIRQ5:硬盘0DHIRQ6:软盘0EHIRQ7:并行打印机0FH4.3.58259A的应用举例中断全嵌套方式流程例2.PC/XT中8259A片选地址为20H、21H(1)outportb(0x20,0x13);ICW1,边沿触发,一片8259A,设置ICW4outportb(0x21,0x08);ICW2,中断类型码outportb(0x21,0x0d);ICW4,非特殊全嵌套缓冲方式outportb(0x21,0);OCW1,中断允许(2)送中断向量入口地址若IR4中断向量类型号为12(0CH),中断入口地址为usart_int的段地址和偏移量存放在30H~33H中。voidinstall(voidinterrupt(*usart_int()),intinum){disable();setvect(inum,usart_int);enable();}(3)中断子程序结束在中断子程序结束前必须发EOIoutportb(0x20,0x20);(4)在进入中断处理程序后,执行开中断指令enable()
本文标题:微机原理与接口技术-中断8259
链接地址:https://www.777doc.com/doc-3162013 .html