Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61576
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 40
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-12 08:37
个人简介

有事可以联系扣扣:577665300

文章分类

全部博文(11)

文章存档

2018年(1)

2017年(6)

2016年(4)

我的朋友

分类: LINUX

2016-05-31 15:47:30

原文地址:中断技术 作者:空灵静世


4.1 中断概述

1.中断定义

  简单来说,中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。

  更具体地,我们定义CPU中断为这样一个过程:在特定的事件(中断源,也称中断请求信号)触发下引起CPU暂停正在运行的程序(主程序),转而先去处理一段为特定事件而编写的处理程序(中断处理程序),等中断处理程序处理完成后,再回到主程序被打断的地方继续运行。

  中断技术的作用

  一方面,有了中断功能,PC系统就可以使CPU和外设同时工作,使系统可以及时地响应外部事件。这样就大大提高了CPU的利用率,也提高了输入、输出的速度。

  另一方面,有了中断功能,就可以使CPU及时处理各种软硬件故障。计算机在运行过程中,往往会出现事先预料不到的情况或出现一些故障,如电源掉电、存储出错,运算溢出等等。计算机可以利用中断系统自行处理,而不必停机或报告工作人员。

2.中断类型

  在PC机系统中,根据中断源的不同,中断常分为两大类:硬件中断和。

  硬件中断也称为外部中断,它又可以分为两种:和

  中断有优先级之分,指中断的响应级别。

  中断的优先级排列如下表所示。
中断类型 优先级
软件中断
非屏蔽中断NMI
可屏蔽中断INTR
  
    在PC应用中,我们经常可以看到和的缩写。IRQ是主板提供的硬件中断端口,一般有8或16个;INT则是操作系统提供的中断处理程序的入口标记,一般有256个。  

  我们给每种中断安排一个。系统的内部和外部中断总共可有256个,每个中断有一个自己的8位二进制数表示的类型码(0-FFH),例如:系统定时器的中断类型为08,键盘为09,内中断中的除法错误的中断类型为0,等等。

   每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各种中断类型的处理程序的地址表,存放在地址从0到3FFH内存区域。256个中断服务程 序的入口地址(段地址和偏移地址,也称为中断向量)按中断类型码从小到大顺序放在内存的最前面。中断类型码n与中断服务程序入口地址的存放地址关系 为:n×4。



4.2 中断响应

1.中断响应的条件

  除了非屏蔽中断外,其它中断都可以用软件来屏蔽或开放。系统只有具备如下的中断条件,CPU才可能对中断请求进行响应。

  1) 设置中断请求触发器

  每一个中断源,系统要求能发出中断请求信号,而且这个信号能保持着,直至CPU响应这个中断后,才可清除中断请求。故要求每一个中断源有一个中断请求触发器来保持中断请求。

  2) 设置中断屏蔽触发器

  在实际系统中,往往有多个中断源。为了增加控制的灵活性,在每一个外设的接口电路中增加了一个中断屏蔽触发器,只有当此触发器为"1"时,外设的中断请求才能被送出至CPU。可把8个外设的中断屏蔽触发器组成一个端口,用输出指令来控制它们的状态。

  3) 设置中断允许触发器

  在CPU内部有一个中断允许触发器。只有时,CPU才能响应中断;, 即使INTR线上有中断请求,CPU也不响应。而这个触发器的状态可由软件指令来改变。当CPU复位时,中断允许触发器为"0",所以必须要用软件指令来 开中断。当中断响应后,CPU就自动关中断,所以在中断服务程序中也必须要用软件指令来开中断。CPU在现行指令结束后即响应中断。其响应的流程如图所 示。

2.中断响应过程

  当满足了中断的条件后,CPU就会响应中断,转入中断程序处理。具体的工作过程如下所述。

  1) 关中断:CPU响应中断后,发出中断响应信号的同时,内部自动地实现关中断。

  2)保留断点:CPU响应中断后,把主程序执行的位置和有关数据信息保留到堆栈,以备中断处理完毕后,能返回主程序并正确执行。

  3)保护现场:为了使中断处理程序不影响主程序的运作,故要把断点处的有关寄存器的内容和标志位的状态全部推入堆栈保护起来,即在中断服务程序中把这些寄存器的内容推入堆栈。这样,当中断处理完成后返回主程序时,CPU能够恢复主程序的中断前状态,保证主程序的正确动作。

  4)给出中断入口,转入相应的中断服务程序:系统由中断源提供的中断向量形成,使CPU能够正确进入。

  5)恢复现场:把所保存的各个内部寄存器的内容和标志位的状态,从堆栈弹出,送回CPU中原来的位置。这个操作在系统中也是由服务程序来完成的。

  6)开中断与返回:在中断服务程序的最后,要开中断(以便CPU能响应新的中断请求)和安排一条中断返回指令,将堆栈内保存的主程序被中断的位置值弹出,运行被恢复到主程序。


                   4.3 总线中断

1.8位PC/XT总线中断

  PC/XT机提供8个不同的外部中断,定义为。列出了这些中断的默认用法。

IRQ通道号
功能
总线插槽
0
系统计时器
1
键盘控制器
2
可用 是(8位)
3
串行端口2(COM2:) 是(8位)
4
串行端口1(COM1:) 是(8位)
5
硬盘控制器 是(8位)
6
软盘控制器 是(8位)
7
并行端口 是(8位)

8位ISA总线缺省的中断设置

  提供的IRQ资源只有8个,而真正空闲的只有IRQ2,所以如果在此系统上要安装多个需要系统IRQ服务的设备是不行的,唯一的解决办法是去掉使用最少的适配板卡。



2.16位ISA/EISA总线中断

  PC/AT是基于286CPU推出的,它增加了总线所支持的外部中断的数量。中断的数量增加到16个,是通过使用两个8259中断控制器级联来实现的,即将第二个控制器(从控制器)产生的中断信号连接到第一个控制器(主控制器)未被使用的IRQ2中。这种设置实际上只有15个IRQ可被设定,IRQ2实际上不能获得。

  通过将第二个IRQ控制器产生的中断选定路径到第一个的IRQ2上,那么这些新中断被分配了一个介于IRQ1与IRQ3之间的嵌套优先级,因此IRQ15的优先级比IRQ3高。

  为防止板卡设置使用IRQ2的问题,AT系统设计者用IRQ9来填补IRQ2的位置,这意味着任何新系统中指定为使用IRQ2的插卡实际上在使用IRQ9。也有一些插卡标记这个选项为IRQ2/9,一般的只称之为IRQ2或IRQ9。

2.16位ISA/EISA总线中断

  下显示了16位/总线的典型中断设置。
IRQ通道号
功能
总线插槽
插卡类型
推荐用途
0 系统定时器 - -
1 键盘控制器 - -
2 第二个IRQ控制器级联 - -
8 实时钟 - -
9 可用(IRQ2或IRQ9) 8/16位 网卡
10 可用 16位 USB
11 可用 16位 SCSI适配器
12 鼠标/可用 16位 鼠标
13 数学协处理器 - -
14 主IDE 16位 硬盘
15 从IDE 16位 CD-ROM
3 串行端口2(COM2:) 8/16位 COM2:内置MODEM
4 串行端口1(COM1:) 8/16位 COM1:
5 声音/并口2(LPT2:) 8/16位 声卡
6 软盘控制器 8/16位 软盘控制器
7 并口1(LPT1:) 8/16位 LPT1:
  
    其 中,中断IRQ0、IRQ1、IRQ2、IRQ8和IRQ13不在总线连接器上,不能被适配卡使用。中断IRQ8、IRQ10、IRQ11、IRQ12、 IRQ13、IRQ14和IRQ15是由第二个中断控制器生成的,只能由使用16位扩展卡的板卡使用,因为这是它们线路定位的地方。IRQ9被重新连线到 8位连接器的IRQ2上,即由IRQ9代替IRQ2,所以它出现在8位插卡上,被当作IRQ2来处理。

3.PCI总线中断

支持硬件中断,是被PCI设备用来发信号给总线要求被关注的。实 际上,所有单独设备或者单功能PCI芯片或插卡如果使用一个中断,则必须使用#INTA,这是PCI规范的一个规定。如果芯片或插卡上还有附加的设备,这 些设备可以使用#INTB到#INTD。由于很少有多功能PCI芯片或插卡,所以实际上一个给定PCI总线上所有的设备都共享#INTA。

为使PCI总线在PC中工作,PCI中断必须映射到ISA中断。由于ISA中断不能被共享,多数情况下每个使用PCI总线上的#INTA的PCI插卡必须 映射到不同的非共享ISA中断。例如,系统中有4个PCI插槽,安装了4个插卡,均使用PCI中断#INTA。这些插卡每个被映射到不同的可用的ISA中 断请求通道(IRQ),如IRQ9,IRQ10,IRQ11及IRQ5。

为每个设备在PCI和ISA总线上获得唯一的IRQ总会遇到问题,因为没有足够的空闲中断可供选择。两个ISA设备到相同的IRQ是不可能的,但在多数新系统中,有可能在多个PCI设备间共享IRQ。新的PC系统的以及操作系统,如WIN95(OSR2)/98/2000都支持PCI IRQ Steering功能。要使用该功能,那么系统和操作系统必须都支持IRQ Steering。

                         4.4中断冲突

  虽然现在Windows操作系统从Win9X开始已经支持功能,大大简化了用户的操作,但是如果不能识别要安装的新设备,那么自动分配中断时就会产生冲突。现在新的硬件产品层出不穷,各种产品又相互兼容,功能类似,这就导致了操作系统常常不能正确检测出新设备,中断冲突也就不可避免了。

  如果解决冲突呢?首先我们要知道系统中冲突的设备,做法是在控制面板中双击“系统”图标,查看设备管理器中的各种设备。要注意有“?”和“!”的设备,这些就是有问题的设备。

  

  要防止中断冲突,其实就是要知道什么设备容易产生中断冲突,下面列出一些容易冲突的设备。

  1. 声卡:一些早期的ISA型声卡,系统很有可能不认,就需要用户手动设置(一般选IRQ5);
  2. 内置调制解调器和鼠标:一般鼠标用COM1,内置调制解调器使用COM2的中断(一般为IRQ3),这时要注意此时COM2上不应有其它设备;
  3. 网卡和鼠标:此问题一般发生在鼠标在COM1口,使用中断IRQ3,这时要注意通常网卡的默认中断也是IRQ3,两者极有可能发成冲突;
  4、打印机和EPP扫描仪:在安装扫描仪驱动程序时应将打印机打开,因为两个设备中串联,所以为了防止以后扫描仪驱动程序设置有误,一定要将打印机打开再安装扫描仪驱动程序;
  5、操作系统和BIOS:如果计算机使用了“即插即用”操作系统(例如win98),应将BIOS中PNP OS Installed设置为Yes这样可让操作系统重新设置中断;
  6、P/2鼠标和BIOS:在使用PS/2鼠标时应将BIOS中PS/2 Mouse Function Control打开或设置为Auto,只有这样BIOS才能将IRQ12分配给PS/2鼠标用。

                        4.5 中断控制器8259A

8259A概述

   Intel 8259A是与8088/8086系列兼容的可编程的中断控制器。后来的微机系统也沿用这种中断机制及其功能,只是因为集成芯片技术的提高,不单独以 8259A芯片的形式出现,而是集成到一个叫做"南桥芯片"或"HUB芯片"的芯片里了。这里,我们还是以8259A芯片为例讲解中断控制器的工作原理。

  8259A是28个引脚的双列直插式芯片。

  8259A的主要功能有:

  1. 具有8级优先权控制,通过级连可扩展至64级优先权控制。

  2. 每一级中断都可以屏蔽或允许。

  3. 在中断响应周期,8259A可提供相应的中断向量,从而能迅速地转至中断服务程序。

  4. 8259A有几种工作方式,可以通过编程来进行选择。





8259A结构

   一片8259A有8条外界中断请求线IR0~IR7,每一条请求线有一个相应的触发器来保存请求信号,从而形成了中断请求寄存器IRR(Interrupt Request Register)。正在服务的中断,由中断服务寄存器ISR(IN Service Register)保存。

  优先权电路对保存在IRR中的各个中断请求,经过判断确定最高的优先权,并在中断响应周期把它选通至中断服务寄存器。

  中断屏蔽寄存器IMR(Interrupt Mask Register)的每一位,可以对IRR中的相应的中断源进行屏蔽。但对于较高优先权的输入线实现屏蔽并不影响较低优先权的输入。

   数据总线缓冲器是8259A与系统数据总线的接口,它是8位的双向三态缓冲器。凡是CPU对8259A编程时的控制字,都是通过它写入8259A 的,8259A状态信息,也是通过它读入CPU的;在中断响应周期,8259A送至数据总线的CALL指令或中断向量也是通过它传送的。

  8259A还具有读/写控制逻辑。CPU能通过它实现对8259A的读出(状态信号)和写入(初始化编程)。级连缓冲器,实现8259A芯片之间的级连,使得中断源可由8级扩展至64级。控制逻辑部分,对芯片内部的工作进行控制,使它按编程的规定工作。


8259A引脚信号

  双向三态数据线,它可直接与系统的数据总线相连。

  8条外界中断请求输入线。

  读命令信号线,当其有效时,控制信息由8259A送至CPU。

  写命令信号线,当其有效时,控制信息由CPU写入至8259A。

  选片信号线,由地址高位控制。高位地址可以经过译码与CS相连(全译码方式),也可以某一位直接与CS相连(线选方式)。

  用以选择8259A内部的不同寄存器,通常直接连至地址总线的A0。

  级连信号线,当8259作为主片时,这三条为输出线;作为从片时,则此三条线为输入线。这三条线与#SP/EN线相配,实现8259A的级连。


8259A引脚信号

  8259A与Intel系列的标准系统总线的连接方法为:

  1. 8259A的A0与地址总线的A0相连;

  2. #RD与系统的控制信号线#I/OR相连;

  3. #WR线与#I/OW相连;

  4. 其它与系统的同名信号端相连。

  右图是连接示意图。



8259A中断顺序

  在第一个中断响应周期,8259A并不向CPU输送任何内容。

  在第二个中断响应周期,8259A将向CPU输送如所示的中断向量。其中的T7~T3是由用户在8259A的初始化编程中规定的,而低3位则是由8259A自动插入的。

中断寄存器编号
D7 D6 D5 D4 D3 D2 D1 D0
IR7
T7 T6 T5 T4 T3 1 1 1
IR6
T7 T6 T5 T4 T3 1 1 0
IR5
T7 T6 T5 T4 T3 1 0 1
IR4
T7 T6 T5 T4 T3 1 0 0
IR3
T7 T6 T5 T4 T3 0 1 1
IR2
T7 T6 T5 T4 T3 0 1 0
IR1
T7 T6 T5 T4 T3 0 0 1
IR0
T7 T6 T5 T4 T3 0 0 0

8259A输送的中断向量


8259A初始化

  在8259A开始正常工作之前,必须先设置初始化命令字。

  8259A命令字的写入,以及8259A的状态的读出是由#RD和#WR信号、A0以及命令字中的某些特定位所规定的。表列出了8259A的读/写操作定义。
A0
D4
D3
#RD
#WR
#CS
实现操作
操作类型
0
 
 
0
1
0
读操作
1
 
 
0
1
0
IMR-->数据总线
读操作
0
0
0
1
0
0
数据总线-->OCW2
写操作
0
0
1
1
0
0
数据总线-->OCW3
写操作
0
1
X
1
0
0
数据总线-->OCW1
写操作
1
X
X
1
0
0
写操作
X
X
X
1
1
0
数据总线-->三态
无操作
X
X
X
X
X
1
数据总线-->三态
无操作

  对8259A的初始化编程是向它输送2~4个字节的初始化命令字。ICW1和ICW2是必须送的,而ICW3和ICW4是由工作方式来选择的。

  若CPU用一条输出指令向8259A写入一个命令字,其D4 =1, 输出指令地址中A0=0,则被解释为初始化命令字1(ICW1)。


8259A初始化

  ICW1的各位的功能如所示。

   其D4必须为1。D0确定是否送ICW4,若根据选择ICW4的各位应为零,则可D0令位(即IC4)为0,即不送ICW4。D 1位SNGL,规定系统中单片8259A工作还是级连工作。D2位ADI,规定CALL地址的间隔,D2=1,则间隔为4,D2=0,则间隔为8。D3位 LTM,规定中断请求输入线的触发方式,D3=1为电平触发方式,此时边沿检测逻辑断开;D3=0则为边沿触发方式。

  D7 、D6、D5这三位当应用与MCS-80/85系统时,即为入口地址低8位中的编程位(A7、A6、A5位)。若选择间隔为4,则这三位全可编程;若选择间隔为8,则只有D7(A7 )、A6(D6)位可编程,此时位不起作用。

 

8259A初始化

  ICW2各位的功能如所示。

  当应用于8088/8086系统中时,ICW2的D7~ D3用以确定中断向量的T7~ T3,此时ICW2的D2~ D0位无用。


 8259A初始化 ,IWC3的每一位对应于一片从8259A;若是从8259A,则ICW3中只有低三位作为这个从8259A的标识符,高5位全为0。

  在中断响应周期中,主8259A通过级连线输送优先权最高的中断源所在的从8259A的标识符,每个从8259A拿这个标识符与自己编程时ICW3中所规定的标识符相比较,只有两者相符合的从8259A,能在下两个中断响应周期输送一个字节的中断向量。


8259A初始化

ICW4的功能如所示。

μPM=0,则规定8259A用于MCS-80/85系统中;μPM =1,则规定用于MCS-86系统中。

若AEOI=1,则为自动结束中断方式。

若BUF=1,选择为缓冲模式,则M/S=1确定为主8259A;若M/S=0,则为从8259A。若BUF=0,则M/S位不起作用。

D3位BUF,若BUF=1,则为缓冲模式,此时SP/EN变为输出线,同时由M/S确定是主还是从8259A。

D4位SFNM,若SFNM=1,则规定为全模式。


8259A的工作命令字

  在对8259A进行了之后,芯片已作好了接收中断请求的准备。在8259A的工作期间可由工作命令字规定其各种工作方式。8259A有三个。

  OCW1命令字格式如所示。

  命令字的每一位,可以对应的中断请求输入线进行屏蔽;OCW1的某一位为"1"则相应的输入线被屏蔽;若某一位为"0",则相应的输入线中断被允许。




4.5 中断控制器8259A

8259A的工作命令字

OCW2命令字格式如所示。

中说明了R、SL、EIO三位的功能,它们的不同组合决定了。在其中的三种工作方式中要用到OCW2的最低三位即L2、L1、L0,这三位二进制编码决定了8个中断源的某一个被SEOI信号复位,或规定某一个的优先权最低。D4、D3为00是写入OCW2的标志。

 8259A的工作命令字

  OCW3命令字格式如所示。

  它的最低两位决定下一个操作是否为读操作(RR=1),以及是中断请求寄存器IRR(若RIS=0),还是读中断服务寄存器ISR(若RIS=1)。

  D2位P,决定是查询命令(P=1),还是非查询命令(P=0)。

  D4、D3位为01写入OCW3的标志。

  D6、D5这两位决定是否工作与特殊屏蔽模式,当D6、D5为11时,则允许特殊屏蔽模式;而D6、D5为10时撤除特殊屏蔽模式返回正常的屏蔽模式。若D6位ESMM=0,则D5位SMM不起作用。


8259A的工作方式

  8259A有6种工作方式:

  

  

  

  

  

  



  1.查询方式

  当系统的中断源很多,超过了64个时,则8259A片子可工作在查询方式。此时,在8259A的编程中,使OCW3的D2位P置为1。程序中令CPU关中断,用查询对外设进行服务。

  在令OCW3的D2位P置为1后的下一个读命令,8259A看作为中断响应信号,使最高优先权的ISR的相应位置位。读命令从数据总线上读取一个字节,其内容为:

  其中I=1,则表示此片8259A有中断请求,I=0无中断,可查询别的片子。在I=1时,W2~W0即为最高优先权中断源的编码。


8259A的工作方式

  2.中断屏蔽

  8259A的8个中断请求线的每一条都可根据需要单独屏蔽,OCW1写入主屏蔽字寄存器,它的每一位可对应的请求线实现屏蔽。

   在某些应用场合,可能要求能在软件的控制下动态地改变系统的优先权结构。也就是若CPU正处在中断服务过程中,希望能屏蔽一些较低优先权的中断,而允许 一些优先权更低的中断源正处在中断服务的过程中,所有优先权较低的中断全给屏蔽了,达不到上述的要求。为此,8259A中有一种特殊屏蔽模式。若在 OCW3中的D6位ESMM=1,且D5位SMM=1,则使8259A工作在特殊屏蔽模式。此时,由OCW1写入的屏蔽字中为"1"的那些位的中断被屏 蔽,而为"0"的那些位的中断不管其优先权如何,在任何情况下都可申请中断。

  若OCW3中的ESMM=1而SMM=0,则恢复为正常的屏蔽方式。


8259A的工作方式

  3.缓冲模式

   当8259A在一个大的系统中使用,且8259A要求级连,则要求数据总线有总线驱动缓冲器,也就要求有一个缓冲器的允许信号。当编程规定使8259A 工作在缓冲模式,则8259A送出一个允许信号SP/EN,每当8259A的数据总线输出是允许的,SP/EN输出变为有效。

  在缓冲器模式,必须在初始化编程时规定此片8259A是主还是从。

  以上的工作方式是由ICW4决定的。



4.5 中断控制器8259A

8259A的工作方式

4.中断嵌套模式

在8259A中有两种中断嵌套模式:全嵌套模式和特殊全嵌套模式。

全嵌套模式:当工作在全嵌套模式时,在初始化编程以后,中断优先权是固定的,且。当CPU响应中断时,优先权最高的中断源在ISR中的相应位置位,而且把它的中断向量送至数据总线。在此中断源的中断服务程序完成之前,与它同级或优先权更低的中断源的请求被屏蔽,只有优先权比它高的中断源的中断请求才是允许的。

特殊全嵌套模式:若在一个大的系统中,8259A用在级连情况下,就需要采用特殊的全嵌套模式。在这种模式下与全嵌套模式的工作情况基本上是相同的,只有以下两点不同。

1) 当某一个从8259A有中断请求,CPU响应以后,这个从8259A的中断并没有被屏蔽,即这个从8259A中优先权高于正在处理的中断源的。

2) 当某个中断源要退出中断服务程序前,它是否是这个从8259A中唯一的中断源。

 

8259A的工作方式

在实际应用中,中断源的优先权的情况是比较复杂的,不一定有明显的等级,而且优先权还有可能改变。所以,不能总是规定IR0优先权最高,而IR7最低,而要根据情况来改变。在8259A中有两种改变优先权的办法。

1) 自动旋转

在某些应用情况下,若干个中断源有相等的优先权。因此,当某一个中断源服务完以后,它的优先权应该变成最低的。这样,某个中断源的请求必须等待,在最坏情况下,必须等待其它7个源都服务一次以后才能再服务。,如图所示。这种工作模式,可由OCW2来规定。

2) 特殊旋转方式

自动旋转方式适用于设备的优先权相等的情况下。可以用OCW2来设置最低优先权的中断源,则别的输入线的优先权也就相应固定了。例如设置IR5为最低优先权,则IR6的优先权就变为最高的了。


8259A的工作方式

  6. 中断结束命令

  当某一个中断源的服务完成时,必须给8259A一个中断结束命令,使这个中断源在ISR中的相应位复位。在不同的工作情况下,8259A可以有几种不同的给出中断结束命令的方法。

  1) 自动中断结束模式(AEOI)

  可以工作在这种模式。

  2) 非自动中断结束模式(EOI)

  在这种工作方式下,当中断服务程序执行完毕,从中断服务程序返回之前,必须输送。若工作在8259级连的情况下,必须送两个EOI命令,一个送给从8259A,另一个送给主8259A。

阅读(1645) | 评论(0) | 转发(0) |
0

上一篇:DMA技术

下一篇:浅谈函数指针

给主人留下些什么吧!~~