《微机原理与接口技术》第6章——中断和8259A

虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!

目录

第1节——8088中断系统的概念

●进入中断服务程序的向导:8088中断向量表

●中断系统的功能

第2节——中断机制的硬件基础

●硬件方法(向量中断)

●向量中断——用硬件方法确定中断源及优先权

第3节——8259A性能和结构

●8259A内部结构

第4节——8259A中断响应过程

●8259A中断响应过程(单片)

●8259A中断响应过程(多片)

●8259A的端口和操作

第4节——8259A的工作方式

第5节——8259A的编程和应用

●初始化阶段

●操作控制阶段


第1节——8088中断系统的概念

中断的概念

♦CPU的机制或过程

♦CPU在正常运行程序时,由于内部/外部事件引起CPU   中断正在运行的程序,转去执行为该事件预先安排的服务程序,服务完毕后,再返回原来的程序继续执行。

♦(通俗理解)你在写作业,你妈叫你去倒垃圾(中断写作业),你倒完垃圾回来又继续写作业(返回原来的程序)。

●中断的操作和应用

♦同步操作/并行操作

♦实时处理

♦故障或异常处理

●中断源和其分类

♦中断源:引起中断的时间  或  发出中断的外设  (你妈叫你倒垃圾)

♦分类

①外部中断(你妈叫你倒垃圾)

    ▷可屏蔽中断(INTR引脚,一般是指interrupt的缩写,也就是中断)(你不听)

           ✔外设

           ✔受IF控制,N=8~255    (IF标志位)

    ▷不可屏蔽中断(NMI引脚)   (你妈超凶,你必须听)

           ✔电源,内存错误等

           ✔不受IF控制,N=2

②内部中断(你写着写着发现自己想要打一把游戏,然后你去了...)

     ▷CPU内部

     ▷软件中断(指令错误)

     ▷异常(指令执行时发生错误)

●内部中断(异常,Exception):8088内部执行程序错误

①DIV或IDIV指令  (符号整除法指令)

②INT指令             (向CPU发送中断的指令)

③INTO指令          (溢出中断指令)

④单步中断(陷阱标志位TF=1,每条指令执行完成引起中断,N=1

      ▷为用户提供发现调试解决程序执行异常的途径

           例如BIOS和DOS功能调用,DEBUG

 

◆DIV或IDIV指令

      ♦除数为0或商溢出  (比如2÷0是不实际的)

     ♦N=0

MOV  BL,0 

IDIV   BL       ;除数BL=0,产生除法错中断

MOV  AX,200H

MOV  BL,1

DIV   BL        ;商溢出,产生中断

注:16 位数的除法,要求商,必须是 8 位数以内,那么, 65535 / 2 = 32767...1,这个商,就超出了 8 位数,这就是溢出。

◆溢出中断

       ♦若溢出标志位OF=1,则INTO指令引起中断

       ♦N=4

MOV  AX,2000H

ADD  AX,7000H   ;2000H+7000H=9000H,溢出:OF=1

INTO              ;因为OF=1,产生溢出中断

◆软中断

INT  n指令产生一个中断

♦N=n

♦例子:n=21H,DOS系统功能调用

 

中断源的优先权(由高到低)

     ♦软件中断

             ①除法错中断

            ②指令中断

             ③溢出中断

     ♦非屏蔽中断

     ♦可屏蔽中断

     ♦单步中断

●进入中断服务程序的向导:8088中断向量表

●中断向量:中断源(N)的中断服务程序的入口地址CS:IP

 

 

 

 

 

 

 

♦段基址:CS,偏移地址:IP

♦每个向量占4字节。

●中断向量表

♦按相应的中断源编号N递增存放中断向量集合

♦一般存放在内存中的0地址

①含有256个中断源

②中断向量表存放位置

0h~3FFh

共1K个字节

③中断类型码(中断源编号)

▷内部中断:自动形成

    ♦被零除    0

    ♦单步中断  1

    ♦NMI      2

    ♦断点中断  3

    ♦溢出中断  4

    ♦INT       N

▷外部中断:来自中断控制器

④查找N号中断源的中断服务程序的入口地址(即中断向量)

▷先找到中断向量的存放地址

  ♦存放地址 = 4*N

▷读取(4*N)~(4*N+3)单元

  ♦读出中断向量并写入CS:IP寄存器

     跳转

●中断系统的功能

功能:发现和识别中断源,实现为中断源提供中断服务。

❶能产生和识别中断

♦外设能发出中断请求

♦接口能屏蔽指定的中断请求

♦CPU能识别中断源

♦CPU能决定是否响应中断(响应中断的条件)

      执行完现行指令

            最后1个总线周期最后1个状态(T4),检测INTR引脚

      开中断状态:STI指令

❷能完成中断响应(提供中断服务和返回)

♦关中断 — 保护断点 — 保护现场 — 中断服务 — 恢复现场 — 返回开中断

❸能支持优先权排队

❹能实现中断嵌套

 

中断嵌套的例子

♦外设2的优先级>外设1的优先级(你在写作业的时候,你爸叫你去切菜(外设1),你刚刚走过去,你妈(外设2)叫你去倒垃圾,你爸是个妻奴,所以你妈优先权比较高,你就先去倒垃圾,再回来切菜,最后返回自己房间写作业)

♦外设1进行中断服务的时候,被外设2的事件中断

第2节——中断机制的硬件基础

●外设:能发出且保持中断申请直到其相应为止

♦措施:每个中断源配置一个中断请求触发器(1bit)。

●接口:能屏蔽或开放某个外设的中断请求

中断请求触发器Q端不再直连INTR,而受到与门控制。

♦每个中断源配置一个中断屏蔽触发器。其Q端控制与门

♦增设一个控制端口,控制中断屏蔽触发器

●CPU:①能识别中断源②管理中断优先级

♦软件方法(查询中断)

♦硬件方法(向量中断)

●硬件方法(向量中断)

❶将8个外设中断请求触发器组合为中断源寄存器(端口地址P0)

❷将8个中断请求信号输入门,其输出连接INTR。

●掩码屏蔽法

IN    AL,[20H]

TEST  AL01H

JNE   PWF 

TEST  AL,02H

JNE   DISS

TEST  AL,04H

JNE   KEYBRD

;输入中断源寄存器的数据

;检查位0(电源故障)是否有中断请求

;有,则转至电源故障处理程序

;检查位1(磁盘)是否有中断请求

;有,转至磁盘服务程序

;检查位2(键盘)是否有中断请求

;有,转至键盘服务程序

注意:JNE指令:当ZF = 0跳转 。(位与的结果不为0,则ZF = 0,否则ZF=1)

●移位检测法

IN    AL,[20H]

RCL   AL1

JC    BIT7

RCL   AL1

JC    BIT6

……

RCL   AL1

JC    BIT0 

; 输入中断源寄存器的数据

;左移1位,带进位

;有进位跳转: 位7对应中断服务程序

;左移1位,带进位

;有进位跳转: 位6对应中断服务程序

 

;左移1位,带进位

;有进位跳转: 位0对应中断服务程序

向量中断——用硬件方法确定中断源及优先权

♦基本原理:每个外设预先指定一个中断类型码(N)。当CPU识别出外设有请求中断并予以响应时,中断控制逻辑把N送入CPU,CPU据此自动查询中断向量表获取其中预存的中断服务程序入口地址,并转入中断服务程序。

♦特点:

响应速度快

硬件复杂

典型芯片:8259A

第3节——8259A性能和结构

●8259A基本功能

 

 

 

♦接收8个中断请求(可扩展64级

♦能提供中断类型号N(中断矢量)

♦能屏蔽和开放外设的中断请求

♦支持多种方式的优先级管理

●8259A外部引脚

面向CPU的引脚:D7~D0,CS,A0,RD,WR,INT,INTA

♦面向外设的引脚:中断请求输入IR7~IR0(优先级:IR0最高)

♦同类芯片扩展:级联控制SP/EN,CAS2~CAS0。

●8259A内部结构

❶数据总线缓冲器

♦双向三态,与系统DB相连,传送控制字,状态,中断号等信息

❷读/写逻辑

♦控制片选CS地址线A0,以及WR/RD线。执行包括写入命令(初始化和控制)或读取8259相应端口(IRR,ISR,IMR)。

❸中断请求寄存器IRR

♦8位,寄存IR0~IR7是否有中断请求。

♦Di位表示IRi脚有无中断请求:1有;0无

❹中断服务寄存器ISR

♦记录IR0~IR7中断源是否被服务中…

♦Di位表示IRi是否正在进行中断服务:1是;0否

❺中断屏蔽寄存器IMR

♦8位,记录是否对IR0~IR7的中断申请进行屏蔽(禁止)

♦Di位表示IRi中断申请是否进行屏蔽: 1是;0否

❻中断控制逻辑

♦产生向CPU输出的中断请求信号INT

♦按收CPU送来的中断响应信号INTA

♦控制8259向DB上送出中断类型号N

❼级联缓冲器/比较器

♦SP/EN:从编程/缓冲器允许信号。

u采用缓冲方式时(输出 )

p   输出:控制数据总线缓冲器的使能;

u采用非缓冲方式(输入 )

p   区分主从片:主片=1,从片=0.

♦CAS2~0:级联信号线

u主片:输出

u从片:输入

❽优先权电路

♦选择IRR中优先权最高的IRi,并将其和ISR中的中断源比较,若IRi优先级更高,则向CPU产生中断申请INT

♦优先权 IR0﹥IR1……﹥IR7;禁止同级或低级中断,向高级中断开放

▷工作原理

♦首先,由8个“与”门逻辑选出参加中断优先级排队的中断请求级:由8位IRR与8位IMR分别送入“与”门输入端,只有当IRR位置“1”(有中断请求)且IMR位置“0”(开放中断请求)同时成立时,相应“与”门输出才为高电平, 并送到优先级编码器的输入端参加编码。

♦其次,优先级编码器对参加排队的中断优先级进行编码,并从中选出当前最高优先级的代代码(A2,A1,A0)。

♦最后,把ISR中当前正服务的优先级的代码(B2,B1,B0)与新来的中断请求的优先级代码(A2,A1,A0)一起送入比较器进行比较:当比较器输出有效且有中断请求时,与门将输出有效电平向CPU提出中断请求INT。

结论:当一个中断源被服务时,它会禁止同级低级中断请求的发生,但能向高一级的中断请求开放。

第4节——8259A中断响应过程

●8259A中断响应过程(单片)

❶当IR7-0有变高,中断请求寄存器IRR相应的位置1

❷若IMR相应位中断允许,则8259A通过INT向CPU送出中断请求

❸若CPU开中断,则用INTA响应2个负脉冲。

❹当8259A收INTA第1个负脉冲后,使最高优先权的ISR位置位,相应IRR位复位。优先权的顺序为: IR0﹥IR1……﹥IR7

❺当8259A收第2INTAA负脉冲,8259A向DB送出中断类型号N

❻CPU读取DB上的N,自动计算中断向量(CS:IP)的保存地址(N*4),在AB上出现N*4,读取其中的中断向量(CS:IP)恢复到CS:IP中,实现进入中断服务程序

●8259A中断响应过程(多片)

8259A可以级连,1个主片最多可以级连8个从片

♦级连时,主片CAS0~CAS2连至每个从片的CAS0~CAS2,输出被选中的从片ID

♦每个从片的中断请求信号INT,连至主片8259A某个中断请求输入端IRi;主片的INT线连至CPU的中断请求输入端INTR

♦主片在第1个响应周期内通过CAS2~0送出从片ID,相应的从片在第2个响应周期内则将中断类型码N发送到数据总线上。

 

❶当IR7-0有变高,中断请求寄存器IRR相应的位置1

❷若IMR相应位中断允许,则8259A通过INT向CPU送出中断请求

❸若CPU开中断,则用INTA响应2个负脉冲。

❹当8259A收INTA第1个负脉冲后

        ♦若不是主8259A的中断源产生了的中断,则主8259A通过CAS输出从片ID,通过验证的从8259A负责(下面第5步)响应CPU。

        ♦使最高优先权的ISR位置位,相应IRR位复位。优先权的顺序为: IR0﹥IR1……﹥IR7

❺当8259A收第2个INTA负脉冲,8259A向DB送出中断类型号N

❻CPU读取DB上的N,自动计算中断向量(CS:IP)的保存地址(N*4),在AB上出现N*4,读取其中的中断向量(CS:IP)恢复到CS:IP中,实现进入中断服务程序

 

●8259A的端口和操作

♦2个端口

  按端口地址区分命令(偶地址A0=0和奇地址A0=1)

  按顺序或特征位区分命令(同一端口地址)

第4节——8259A的工作方式

❶引入中断请求(中断触发)的方式

①边沿触发方式

♦以正跳沿请求中断,维持高电平不会继续产生中断。

②电平触发方式

♦以高电平申请中断,但响应中断后须及时清除高电平

③注意:查询方式

♦CPU用软件查询确定中断源。外设通过8259申请中断,

但不用INT向CPU申请中断

❷连接系统总线的方式

①非缓冲方式

      ♦数据总线直接接至CPU数据总线。

      ♦SP/EN用于表示主/从芯片(主片Vcc,从片接地)

②缓冲方式

      ♦数据总线通过缓冲器与CPU数据总线连接。

      ♦SP/EN用于启动数据总线缓冲器,不表示主/从关系。

❸级联方式

不级连——只用1片,如 PC/XT

级连——使用2~9片,如 PC/AT(2片)

❹屏蔽中断源的方式

①通常屏蔽方式

♦利用操作命令字OCW1,设置屏蔽寄存器IMR

例: OCW1 :1111 0011 开放IR3,IR2两个中断源。

②特殊屏蔽方式

♦在某些场合,当执行某一个高优先级的中断服务程序时,若要求允许另一个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式。它可通过OCW3的D6D5=11来设定

❺优先级排队的方式

① 全嵌套方式常用缺省方式

♦优先级按0~7顺序排队,且只允许级别高的中断源去中断级别低的中断服务程序。

② 自动轮换方式

♦中断服务结束后优先级降为最低(7),相邻的低优先级中断源自动升为最高,其余顺变。♦例:IR2中断服务结束后:每个中断源都有最高优先级的资格,故称“等优先级方式

③优先级指定轮换方式

④ 特殊循环方式

❻结束中断的方式

①自动中断结束方式

♦在第二个INTA响应信号中,8259自动执行中断结束EOI指令,复位ISR中已置位的位。

EOI:End Of Interrupt,中断结束指令

②非自动中断结束方式

♦在中断服务程序返回之前,必须发中断结束EOI命令才能使ISR中的当前服务位清除。

第5节——8259A的编程和应用

8259的变成分为两个阶段

●初始化阶段

         ♦在系统加电或复位后进行

         ♦设定工作方式、工作条件、中断类型码级联方式

         ♦初始化命令:ICW1~ICW4

                       ICW1:设置中断请求触发方式及芯片数目,使8259A复位

                       ICW2:设置中断类型号N(的起码):8位

                       ICW3:设置主从片的级联方式

                       ICW4:设置优先级嵌套方式,中断结束方式,缓冲方式,主从片

♦只要命令字D4位为“1”,地址位A0为“0”,就是 ICW1

♦例子:例:一片8259A,边沿触发方式;中断类型码为08H~0FH

           用全嵌套缓冲非自动结束中断方式;

           8259A的端口地址为20H和21H

MOV  AL ,13H 

OUT  20H ,AL

ICW1:边沿触发,单片,设置IC4

MOV  AL ,8 

OUT  21H ,AL

ICW2:中断类型码为08~0FH

MOV  AL ,0DH 

OUT  21H ,AL

ICW4:全嵌套、缓冲、非自动结束中断方式

操作控制阶段

         ♦对8259的状态、中断方式和工作过程的控制

         ♦操作命令:OCW1~PCW3

♦在初始后执行,可不按顺序进行

♦OCW1:中断屏蔽操作命令——设置中断源IRi的中断屏蔽/允许

例子:编程:屏蔽IR0,IR1,IR7三个中断源1000 0011

♦OCW2:优先级方式选择/结束操作命令

♦OCW3:中断查询操作

8529A在IBM-PC/XT中的应用

●例子:写出两片8259A的初始化程序

①初始化8259A

②初始化中断向量表

♦将用户自定义的中断服务程序入口地址放入向量表

♦例:将中断类型码N = 45 H的服务程序入口地址放入向量表

③编写中断服务程序

 ④使能CPU的IF

所有有疑问的人,可以推荐一个老师给你们:

搜索“慕课”,然后去主页搜索“苏曙光”,这个老师真的真的优秀!讲课从不拖泥带水,精简干练,而且条理清晰,层次分明,超级严谨的!(我不是夸张,你可以当做我是个脑残粉)他目前还没有开设“微机原理”这门课,但是他开了一门《操作原理系统》。你点进去就可以加入学习了,然后去讨论区里去问他!!!

  • 26
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值