分类: LINUX
2010-11-10 11:42:48
4.1 中断概述 1.中断定义 简单来说,中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。 更具体地,我们定义CPU中断为这样一个过程:在特定的事件(中断源,也称中断请求信号)触发下引起CPU暂停正在运行的程序(主程序),转而先去处理一段为特定事件而编写的处理程序(中断处理程序),等中断处理程序处理完成后,再回到主程序被打断的地方继续运行。 中断技术的作用 一方面,有了中断功能,PC系统就可以使CPU和外设同时工作,使系统可以及时地响应外部事件。这样就大大提高了CPU的利用率,也提高了输入、输出的速度。 另一方面,有了中断功能,就可以使CPU及时处理各种软硬件故障。计算机在运行过程中,往往会出现事先预料不到的情况或出现一些故障,如电源掉电、存储出错,运算溢出等等。计算机可以利用中断系统自行处理,而不必停机或报告工作人员。 2.中断类型 在PC机系统中,根据中断源的不同,中断常分为两大类:硬件中断和。 硬件中断也称为外部中断,它又可以分为两种:和。 中断有优先级之分,指中断的响应级别。 中断的优先级排列如下表所示。
在PC应用中,我们经常可以看到和的缩写。IRQ是主板提供的硬件中断端口,一般有8或16个;INT则是操作系统提供的中断处理程序的入口标记,一般有256个。 我们给每种中断安排一个。系统的内部和外部中断总共可有256个,每个中断有一个自己的8位二进制数表示的类型码(0-FFH),例如:系统定时器的中断类型为08,键盘为09,内中断中的除法错误的中断类型为0,等等。 每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各种中断类型的处理程序的地址表,存放在地址从0到3FFH内存区域。256个中断服务程 序的入口地址(段地址和偏移地址,也称为中断向量)按中断类型码从小到大顺序放在内存的最前面。中断类型码n与中断服务程序入口地址的存放地址关系 为:n×4。
2.中断响应过程 当满足了中断的条件后,CPU就会响应中断,转入中断程序处理。具体的工作过程如下所述。 1) 关中断:CPU响应中断后,发出中断响应信号的同时,内部自动地实现关中断。 2)保留断点:CPU响应中断后,把主程序执行的位置和有关数据信息保留到堆栈,以备中断处理完毕后,能返回主程序并正确执行。 3)保护现场:为了使中断处理程序不影响主程序的运作,故要把断点处的有关寄存器的内容和标志位的状态全部推入堆栈保护起来,即在中断服务程序中把这些寄存器的内容推入堆栈。这样,当中断处理完成后返回主程序时,CPU能够恢复主程序的中断前状态,保证主程序的正确动作。 4)给出中断入口,转入相应的中断服务程序:系统由中断源提供的中断向量形成,使CPU能够正确进入。 5)恢复现场:把所保存的各个内部寄存器的内容和标志位的状态,从堆栈弹出,送回CPU中原来的位置。这个操作在系统中也是由服务程序来完成的。 6)开中断与返回:在中断服务程序的最后,要开中断(以便CPU能响应新的中断请求)和安排一条中断返回指令,将堆栈内保存的主程序被中断的位置值弹出,运行被恢复到主程序。
4.3 总线中断 1.8位PC/XT总线中断 PC/XT机提供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位/总线的典型中断设置。
其 中,中断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引脚信号 双向三态数据线,它可直接与系统的数据总线相连。 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自动插入的。
8259A输送的中断向量
8259A初始化 在8259A开始正常工作之前,必须先设置初始化命令字。 8259A命令字的写入,以及8259A的状态的读出是由#RD和#WR信号、A0以及命令字中的某些特定位所规定的。表列出了8259A的读/写操作定义。
对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初始化 在中断响应周期中,主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",则相应的输入线中断被允许。
|
chinaunix网友2010-11-10 19:51:33
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com