第7章中断控制器(改版)_第1页
第7章中断控制器(改版)_第2页
第7章中断控制器(改版)_第3页
第7章中断控制器(改版)_第4页
第7章中断控制器(改版)_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

第7章中断控制器2023/2/627.1中断基本概念

一、中断和中断源

2023/2/637.1中断基本概念中断

CPU接到请求,暂停正在执行的程序而转向请求的处理程序,处理结束后又回到被中止的程序继续执行,这一过程称中断;中断源的分类;

内部中断:由处理器内部产生的中断;外部中断:外部设备在中断申请引脚上产生的中断;可屏蔽中断与不可屏蔽中断

可屏蔽中断:能被处理器屏蔽掉而不被响应的中断(INTR)。不可屏蔽中断:不能被处理器屏蔽掉的中断(NMI)。

二、中断的处理过程

2023/2/647.1中断基本概念中断请求

在INTR上外设给出高电平,1)持续到被CPU响应;2)CPU响应后及时撤消。中断承认(中断响应的条件)

满足下列条件进入中断响应周期:

a,INTR有中断请求;

b,IF=1开中断;

c,无RESET、HOLD和NMI或更高级的中断;

d,一条指令执行结束。

中断响应2023/2/657.1中断基本概念(1)关中断:CPU硬件自动清IF(关中断,禁止其它中断)。(2)断点保护:CPU硬件自动将PSW、CS、IP依次压栈,以便中断结束能够返回断点。(3)中断源识别:

1)软件查询(软件做)2)中断向量表(硬件自动做)

软件查询方法:CPU收到INTR→读入D0~D7→测试哪一位→确

定中断源→对其中断服务。2023/2/667.1中断基本概念中断响应

(1)保护现场:断点保护未保护的&主程序用的&中断服务也用的寄存器→堆栈

(2)开中断(指令STI):采用软件查询方法的中断源识别。

(3)中断服务:对中断事件的处理。

(4)关中断(指令CTI)

(5)现场恢复:保护现场的逆过程,堆栈→寄存器

(6)开中断(指令STI):允许新的中断。

(7)中断返回(指令IRET):从堆栈中依次弹出IP、CS、PSW,返回原断点处,断点保护逆过程。2023/2/677.1中断基本概念多个中断源同时请求中断,先响应中断优先级高的中断优先级根据各中断源的重要性确定其响应的优先次序。中断优先级控制原则:(1)多个同时请求,先响应高优先级,再响应低优先级;

(2)当CPU执行某中断服务程序时,出现新的高优先级请求中断,则:暂停低→处理高,高服务结束→返回低,继续低服务。

三、中断优先级及中断嵌套

2023/2/687.28086/8088的中断系统

一、中断源

2023/2/697.28086/8088的中断系统二、中断优先级除法错、INTn、INTO 优先级最高NMI 次之INTR 较低单步 最低

三、中断源识别

中断类型码每一中断都有一个表示中断源编号的8位二进制数称中断类型码(号),从0~255,共256个。2023/2/6107.28086/8088的中断系统中断向量每一中断类型码对应一个中断向量,该中断向量指明了该类型码所对应的中断服务程序的入口地址中断向量表

8086/8088系统将内存前1024个单元作为中断向量表,存放256个中断向量,每一中断向量占4个单元,前二字节是中断服务程序入口地址的偏移地址,后二字节是段地址。中断向量表地址:4*中断类型码n。中断向量表的中断源识别方法(1)CPU收到中断请求→获取中断类型码→查中断向量表→得到该中断源的中断服务子程序入口地址→转向服务子程序进行中断服务2023/2/6117.28086/8088的中断系统

(2)查表方法:中断类型码n*4(左移2位)得到表地址→从表地址所指单元连续取4个字节数据得到IP、CS→该CS:IP即为该中断源的中断服务子程序入口地址2023/2/6127.28086/8088的中断系统【例7.2】设用户自定义中断的类型号为24H,已编好的中断服务子程序为ISUB,试完成中断向量表初始化。解:中断向量表存放首地址为24H×4,中断服务子程序段地址为SEGISUB,偏移地址为OFFSETISUB。所以中断向量表初始化程序段如下。

MOV AX,00HMOV DS,AX ;向量表段地址置0000HMOV BX,24HSHL BXSHL BX ;向量表存放首址MOV AX,OFFSETISUB ;中断服务程序入口偏移MOV [BX],AX ;偏移地址存入向量表MOVAX,SEGISUB ;中断服务子程序MOV[BX+2],AX ;段地址存入向量表2023/2/6137.28086/8088的中断系统

四、中断响应过程不可屏蔽中断NMI

(1)上升沿提出中断请求。(2)不受IF=0的影响。(3)不要中断响应总线周期,自动进入中断类型2。(4)其它同INTR。内部中断(1)中断类型号或是指令码给出,或由硬件决定,都不要中断响应总线周期。(2)不受IF控制,但单步中断受TF控制。(3)其它同INTR,但要考虑优先级2023/2/6147.28086/8088的中断系统

五、中断与中断返回指令中断指令

INTO测试OF,若OF=1执行中断,否则不操作。

INTn执行中断类型号为n的中断,n=00H~FFH。

(1)断点保护:SP-2→SP,PSW→[SP+1]:[SP];清PSW的

IF与TF;SP-2→SP,CS→[SP+1]:[SP];SP-2→SP,IP→[SP+1]:[SP]。

(2)中断源识别与跳转:[n*4+1]:[n*4]→IP;[n*4+3]:[n*4+2]→CS;程序将自动跳转到CS:IP处执行该中断服务子程序中断返回指令:IRET

执行中断返回时,CPU自动做恢复断点:[SP+1]:[SP]→IP,SP+2→SP;[SP+1]:[SP]→CS,SP+2→SP;[SP+1]:[SP]→PSW,SP+2→SP2023/2/6157.3可编程中断控制器8259A

一、外部引线和内部结构

引脚:

D0~D7:双向数据线

/WR、/RD:写读控制信号,/CS片选

A0:地址线,选择内部寄存器

INT:中断请求输出

/INTA:中断响应输入线

IR0~IR7:是外接中断源输入线。

CAS0~CAS2:级联时用。

SP//EN:作输入是/SP,控制8259作主片或从片,1主0从。用作输出是/EN,控制三态门,大系统中用。2023/2/6167.3可编程中断控制器8259A

结构框图

中断请求寄存器IRR:存放IR0~IR7中断请求服务寄存器ISR:存放IR0~IR7中正在服务的源中断屏蔽寄存器IMR(interruptmask) 4个8位初始化命令字ICW3个8位操作命令字OCW2023/2/6177.3可编程中断控制器8259A

二、中断处理过程

(1)中断外设在IR0~IR7上产生n条中断请求→8259,8259将相应的IRR位置1;(2)IRR中断请求+设定的IMR屏蔽→优先级分析器,最高优先级的请求送到INT→CPU;(3)CPU收到INT响应:发送连续二个总线周期的/INTA;8259在第一个/INTA,该中断源对应的IRR位复位,ISR位置位,从而禁止较低优先级的中断。8259在第二个/INTA:送出8位的中断类型码→D0~D7。(4)8259中断结束自动结束方式:第二个/INTA结束时ISR复位相应位;非自动方式:收到EOI命令才复位,以开放低级中断申请(5)CPU读取中断类型码→查中断向量表→转服务子程序2023/2/6187.3可编程中断控制器8259A

三、中断优先级管理方式

优先级管理

(1)固定优先级(完全嵌套排序方式):IR0>IR1>…>IR7(2)自动循环优先级(等优先级方式):优先级循环,刚服务过的最低,下一个变为最高。如5级刚服务过,6级变为最高,7级次之。

(3)特殊循环优先级:优先级循环,通过命令字指定最低优先级。

屏蔽方式

(1)一般屏蔽方式:一个中断请求被响应→8259禁止所有同级、低级的请求

(2)特殊屏蔽方式:解除这种禁止,允许同级、低级的请求,即IRi被响应→ISR、IMR设置的位对应的IR禁止请求,其他所有级别的IR允许请求2023/2/6197.3可编程中断控制器8259A

中断结束方式

(1)非自动EOI:软件发EOI命令字结束普通EOI:清除ISR中已置位的优先级最高的位,适用于固定优先级、自动循环优先级;特殊EOI:清除命令字指定的ISR位,适用于所有优先级方式,特别是特殊循环优先级

(2)自动EOI:硬件自动EOICPU响应中断请求后,向8259发连续2个/INTA周期,在第二个

/INTA结束时8259自动执行普通EOI的工作(复位ISRi).

中断触发方式

(1)电平触发方式(2)边沿触发方式

2023/2/6207.3可编程中断控制器8259A四、初始化命令字ICW

初始化命令字ICW1

2023/2/6217.3可编程中断控制器8259A【例7.3】某8086系统中,使用单片8259A,中断请求信号为高电平触发,需要设置ICW4,8259A端口地址为20H、21H,写出初始化命令字ICW1以及设置ICW1的

命令。解:高电平触发、单片8259A以及需要设置ICW4,初始化命令字为00011011B=1BH。写ICW1的命令如下。

MOVAL,1BHOUT20H,AL ;写ICW1用偶地址2023/2/6>>微机原理<<227.3可编程中断控制器8259A

初始化命令字ICW2【例7.4】某PC机中有8个可屏蔽中断(IR0~IR7),其中IR0的中断类型号为18H,8259A端口地址为20H、21H,请问ICW2是怎样设置的?用指令设置ICW2。解:由于IR0的中断类型号是18H,所以ICW2的内容是00011000B=18H。写ICW2的命令如下。

MOVAL,18HOUT21H,AL ;写ICW2用奇地址2023/2/6237.3可编程中断控制器8259A

初始化命令字ICW32023/2/6247.3可编程中断控制器8259A

初始化命令字ICW4

2023/2/6257.3可编程中断控制器8259A

初始化命令字的设置过程2023/2/6267.3可编程中断控制器8259A【例7.5】IBMPC机的ROMBIOS关于8259A的初始化程序段如下。

INTA00 EQU 20H ;8259A偶地址INTA01 EQU 21H ;8259A奇地址MOVAL,13H ;单片8259A,边沿触发,需要ICW4OUTINTA00,ALMOVAL,08H ;中断类型号8HOUTINTA01,ALMOVAL,09H ;8086/8088,缓冲,从片8259A,非自动结束,正常全嵌套OUT INTA01,AL2023/2/6277.3可编程中断控制器8259A【例

7.6】某微机系统中有8259A,满足下列条件:①工作在8086系统,单片8259A,中断请求信号为电平触发。②中断类型码为40H~47H。③中断优先级采用普通全嵌套方式,中断结束采用自动EOI方式,系统中未使用数据缓冲器。系统分配给8259A的端口地址为20H和21H,试对该8259A进行初始化。解:初始化程序如下所示。

MOVAL,00011011B ;写ICW1OUT20H,ALMOVAL,01000000B ;写ICW2OUT21H,ALMOVAL,00000011B ;写ICW4OUT21H,AL2023/2/6287.3可编程中断控制器8259A五、操作命令字OCW

操作命令字OCW1

2023/2/6297.3可编程中断控制器8259A五、操作命令字OCW

【例

7.7】某微机系统中有8259A,如果要将IR1、IR6两个引脚上的中断请求屏蔽,请问应如何设置OCW1?并用命令写入OCW1。假设地址为20H、21H。解:由于IR1和IR6上的中断请求被屏蔽,所以OCW1的第0位和第6位应该置“1”。OCW1为01000010B。写入程序如下所示。MOVAL,01000010BOUT21H,AL2023/2/6307.3可编程中断控制器8259A

操作命令字OCW22023/2/6317.3可编程中断控制器8259A【例7.8】非自动EOI下用OCW2发布结束命令撤销ISR中断标志结束中断。假设地址为20H,21H。解:程序如下所示。

MOVAL,20H ;20H是命令字,EOI=1OUT20H,AL ;A0=0,20H是OCW2地址2023/2/6327.3可编程中断控制器8259A【例7.9】如果8086系统中的8259A的优先级顺序为IR4、IR5、IR6、IR7、IR0、IR1、IR2、IR3,设8259A的偶地址为20H,试用程序实现之。解:要实现题目中的优先级,应先确定OCW2,然后写入偶地址。OCW2=11000011B。

程序如下所示。

MOVAL,11000011BOUT20H,AL2023/2/6337.3可编程中断控制器8259A

操作命令字OCW32023/2/6347.3可编程中断控制器8259A【例7.10】设8259A的IR3输入引脚上有中断请求,但此时8086CPU的IF=0,8086CPU如何才能知道8259A的IR3上有中断请求?设偶地址为20H。解:可用中断查询命令来解决这个问题,先发查询命令OCW3,然后读偶地址,就可以知道IR3是否有中断申请。OCW3应该取00001100B。程序如下所示。

MOVAL,00001100B ;P=1,查询命令OUT 20H,AL ;输出查询命令INAL,20H ;读8259A的查询字

读到的信息如下:

0*******

表示IR3上没有中断请求。1****011表示IR3上有中断请求。2023/2/6357.3可编程中断控制器8259A【例7.11】编写一段程序,将8086系统中8259A的IRR、ISR、IMR3个寄存器的内容读到后,写入存储器从0090H开始的数组中,设8259A的端口地址为20H和21H。MOVAL,00001010B ;指出读IRR,OCW3=00001010BOUT 20H,ALINAL,20H ;读IRR的内容MOV[0090H],AL ;将IRR的内容写入数组中MOVAL,0BHOUT 20H,AL ;指出读ISR,OCW3=00001011BINAL,20HMOV[0091H],AL ;将ISR的内容写入数组中INAL,21H ;直接从奇地址端口读取IMR的内容MOV[0092H],AL ;将IMR的内容写入数组中2023/2/6367.3可编程中断控制器8259A六8259寄存器的访问控制:8259的9个寄存器只占2个地址(只有A0地址线),如何区分?2023/2/6377.3可编程中断控制器8259A七中断系统的应用方法(1) 分配合适的中断级;(2) 设计中断请求逻辑:(3) 对8259A初始化(4) 编写中断服务子程序(5) 中断向量表初始化2023/2/6387.48259的应用一、8259与系统总线的连接8259A的偶地址:A1=0,地址为0FF00H、0FF01H、0FF04H、0FF05H中的任意一个。8259A的奇地址:A1=1,地址为0FF02H、0FF03H、0FF06H、0FF07H中的任意一个2023/2/6397.48259的应用二、初始化及操作控制SET59A: MOV DX,0FF00H ;A0=0 MOV AL,00010011B;ICW1:D3=LTIM=0 沿触发,D1=1单片,D0=1要ICW4 OUT DX,AL MOV DX,0FF02H ;A0=1 MOV AL,00011000B;ICW2:中断类型码

IR0~IR7类型码18H~1FH OUT DX,AL MOV AL,00000011B;ICW4:8086/8088,

自动EOI,非缓冲,正常全嵌套

OUT DX,AL2023/2/6407.48259的应用在某些情况下,如果不希望看到某些中断发生,我们可以通过操作命令字OCW1的设置来屏蔽那些中断。同时也可以检查对某些中断的屏蔽是否成功。程序如下。

MOVDX,0FF02HMOVAL,0 ;OCW1为00H,没有屏蔽中断OUTDX,ALINAL,DX ;读IMRORAL,AL ;检查是否屏蔽?JNZIMERR ;不为0出错MOVAL,0FFH ;OCW1为FFH,全部屏蔽OUTDX,ALINAL,DX ;读IMRADDAL,1 ;检查是否有屏蔽?JNZIMERR ;不为全1出错2023/2/6417.48259的应用8259A连接到CPU上,通过数据总线可以读取ISR、IRR的内容,命令如下。

MOVDX,0FF00H ;OCW3用偶地址MOVAL,00001011B;OCW3的P=0,设置读ISROUTDX,ALINAL,DX ;读出ISRMOVAL,00001010B;OCW3的P=0,设置读IRROUTDX,ALINAL,DX ;读出IRR

2023/2/6427.5小型案例实训案例1-----8259实现电子钟利用20ms一次的定时中断服务程序,建立时、分、秒电子钟(1)编写20ms中断服务程序每次中断(20ms)→n1=n1+1→n1<50→中断返回;

n1=50→second=second+1, n1=0→second<60→中断返回;second=60→minute=minute+1,second=0→minute<60→中断返回;

minute=60→hour=hour+1,minute=0→hour<24→中断返回;

hour=24→hour=02023/2/6437.5小型案例分析─电子钟中断服务子程序:CLOCK PROC FARPUSH DS PUSH AX ;现场保护

PUSH SI MOV AX,SEGTIMER ;中断服务

MOV DS,AX MOV SI,OFFSETTIMER MOV AL,[SI] INC AL ;n1+1 MOV [SI],AL 保存新n1 CMP AL,50 ;1秒到? JNZ TRNED MOV AL,0 ;1秒到则n1=0 MOV [SI],AL2023/2/6447.5小型案例分析─电子钟

MOV AL,[SI+1] ADD AL,1 ;second+1DAA MOV [SI+1],AL ;保存新second CMP AL,60H ;一分钟到?

JNZ TRNED MOV AL,0 MOV [SI+1],AL MOV AL,[SI+2] ADD AL,1 DAA MOV [SI+2],AL CMP AL,60H ;一小时到?

JNZ TRNED2023/2/6457.5小型案例分析─电子钟 MOV AL,0 MOV [SI+2],AL MOV AL,[SI+3]ADD AL,1 DAA MOV [SI+3],AL CMP AL,24H ;24小时到?

JNZ TRNED MOV AL,0 MOV [SI+3],ALTRNED: POP SI ;现场恢复

POP AXPOP DS STI ;开中断

IRET ;中断返回CLOCK ENDP2023/2/6467.5小型案例分析─电子钟(2)确定中断类型码,初始化8259IR0中断类型码为18H,初始化程序同前SET59A。

SET8259A:MOVDX,0FF00H ;偶地址MOVAL,00010011B ;ICW1,D3的LTIM=0边沿触发,D1=1 ;单片,D0=1要ICW4OUTDX,ALMOVDX,0FF01H ;奇地址MOVAL,00011000B ;ICW2:中断源IR0~IR7类型码18H~1FHOUTDX,ALMOVAL,00000011B ;ICW4:8086/8088,自动EOI,非缓冲,正常 ;全嵌套OUTDX,AL2023/2/6477.5小型案例分析─电子钟(3)初始化中断向量表:INITB:MOV AX,0MOV DS,AXMOV SI,18HSHL SI,1 ;中断类型码*4SHL SI,1MOV DX,OFFSETCLOCKMOV [SI],DXMOV DX,SEGCLOCKMOV [SI+2],DX

2023/2/6487.5小型案例分析─电子钟(4)完整的程序:DATA SEGMENTTIMER DB4DUP(0)DATA ENDSSTACKSEGMENTPARASTACK'STACK' DB100DUP(0)STACKENDSCODE SEGMENT ASSUMEDS:CODE,DS:DATA,SS:STACKSTART:MOVAX,0 ;主程序初始化中断向量表程序段 MOVDS,AX ;初始化中断向量表程序段 MOVSI,18H SHLSI,1 SHLSI,12023/2/6497.5小型案例分析─电子钟

MOVDX,OFFSETCLOCK MOV[SI],DX MOVDX,SEGCLOCK MOV[SI+2],DX MOVDX,0FF00H ;初始化8259A程序段 MOVAL,00010011B OUTDX,AL MOVDX,0FF0

温馨提示

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

评论

0/150

提交评论