《微机原理与接口技术》课件第5章_第1页
《微机原理与接口技术》课件第5章_第2页
《微机原理与接口技术》课件第5章_第3页
《微机原理与接口技术》课件第5章_第4页
《微机原理与接口技术》课件第5章_第5页
已阅读5页,还剩294页未读, 继续免费阅读

下载本文档

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

文档简介

5.1接口技术

5.2中断系统

5.3DMA系统

5.4定时/计数器

5.5本章小结

习题与思考题5.1.1接口技术的功能

1.接口的功能

1) I/O设备选择功能

计算机系统中一般带有多种外设,而CPU在同一时间里只能与一台I/O设备交换信息,这就要借助于接口的地址译码来选定外设,只有被选定的I/O设备才能与CPU进行数据交换。接口电路的任务之一就是对I/O设备进行地址译码。5.1接口技术

2)对输入/输出数据进行缓冲、隔离和锁存

由于外设的速度慢,CPU和总线又十分繁忙,因此在输出环节中,一般都要安排锁存环节(如锁存器,称为数据的输出端口、输出寄存器),以便锁存CPU瞬间输出数据,同时也使较慢的外设有足够的时间进行处理,而CPU和总线可以处理其他工作。在输入接口中,一般要安排缓冲隔离环节(如三态门,称为数据的输入端口、输入三态缓冲器),只有当CPU选通时,才允许某个选定的输入设备的数据线与系统总线的数据线连通,将选定输入设备的数据送到系统总线上,其他输入设备此时与数据总线隔离,这样就不会造成总线的竞争。

3)对信号的形式和数据的格式进行变换

由于计算机直接处理的信号为TTL电平或CMOS电平,I/O设备大多是复杂的机电设备,其电气信号与CPU能处理的信号截然不同,因此在输入/输出时,必须将它们转变为适合对方的形式。例如,将电平信号变为电流信号,将弱电信号变为强电信号,将数字信号变为模拟信号,将并行数据格式变为串行数据格式等。

4)与CPU和I/O设备进行联络

I/O接口处在CPU和I/O设备的中间,在传送数据时经常要在两个方向进行联络,即需把I/O设备的状态传递给CPU,同时也需要把CPU产生的控制信号传递给I/O设备。换言之,通常I/O接口为了完成I/O设备的输入/输出,需设置数据端口以传递数据信息,还需设置状态端口以传递状态信息,设置控制端口以传递控制信息。

5)中断管理功能

当外设需要及时得到CPU服务,特别是一些随机需要与CPU交换信息的外设,就要求接口中设置中断控制器,为CPU处理有关中断事务(中断请求、中断优先级设置,提供中断向量等)。这样既增加了微机系统对外设随机事件的处理能力,又使CPU与外设并行工作,提高了CPU的利用率。

6)可编程功能

目前,外设和接口芯片几乎都是可编程的,这样,在不改变接口硬件电路的情况下,只要更改接口驱动程序就可以改变接口的工作方式,大大增加了接口的灵活性和可扩展性,使接口向智能化方向发展。

2. I/O寻址方式

在计算机中主要有两种输入/输出寻址方式:存储器对应的I/O寻址方式和端口I/O寻址方式。

1)存储器对应的I/O寻址方式

在这种寻址方式中,外部设备的I/O端口是存储器的某些存储单元,每一个外部设备占用一个或几个存储器地址,从而处理器(CPU)对外部设备输入/输出一个数据相当于做一次存储器读/写操作。这种I/O寻址方式由于外部设备占用内存单元地址(I/O与存储器共用内存分布空间),会使计算机的有效内存容量减少,不便于计算机的并行操作(存储器操作和I/O),在目前的计算机系统中已不再使用。

2)端口I/O寻址方式

在这种寻址方式中,处理器(CPU)有专门的I/O指令,在计算机系统中使用不同的端口地址来区分不同的外部设备,操作时以端口(PORT)作为寻址单元。接口中的不同信息(数据、状态和控制信息)均通过不同的端口地址来区分。一般来说,一个外部设备往往需要多个端口地址。这种端口I/O寻址方式是目前IBMPC系列计算机以及其他类型的微型计算机系统普遍采用的I/O寻址方式。

3. I/O地址译码方法

可以说,掌握了存储器的地址译码方法,就掌握了存储器芯片应用的精髓。存储器的地址译码方式可以分为两种,一种称为全地址译码,另一种称为部分地址译码。

1)全地址译码方式

所谓全地址译码,就是构成存储器时要使用全部地址总线(对于8088CPU,地址总线为20位)信号,即所有的高位地址信号用来作为译码器的输入,低位地址信号接存储芯片的地址输入线,从而使得存储器芯片上的每一个单元在整个内存空间中具有唯一的一个地址。

对6264芯片来讲,就是用低13位地址信号(A0~A12)决定每个单元的片内地址,即片内寻址;而用高7位地址信号(A19~A13)决定芯片在内存中的地址范围,即做片选地址译码,如图5.1所示。图5.16264的全地址译码连接图5.1所示是一片SRAM6264与8086/8088系统的连接图。它用地址总线的高7位地址信号(A19~A13)作为地址译码器的输入,地址总线的低13位地址信号A12~A0接到芯片的A12~A0端,故这是一个全地址译码方式的连接。可以看出,只要A19~A13为以下二进制位时,就可访问6264存储单元(具体哪一个存储单元由低13位(A12~A0)决定):

1011101

低13位(A12~A0)可为0000000000000~1111111111111之间的任何一个数,所以该片6264的地址范围为

10111010000000000000=BA000H

到85

10111011111111111111=BBFFFH

若将图5.1中的“与非”门改为“或”门,如图5.2所示,则6264的地址范围就变成44000H~45FFFH。由此可以看出,使用不同的译码电路,可将存储器芯片映射到内存空间中的任意一个范围中。图5.2或门译码

2)部分地址译码方式

顾名思义,部分地址译码就是仅把地址总线的一部分地址信号线与存储器连接,通常是用高位地址信号的一部分(而不是全部)为片选译码信号。图5.3所示就是一个部分地址译码的例子。

从图5.3可以看出,A19~A0为以下二进制位时,就可访问6264存储单元:

11111

低13位可取0000000000000~1111111111111,所以该片的地址范围为

11111

0000000000000~11111

1111111111111图5.3部分地址译码连接图从图5.3可以看出,A14、A13为任何值,只要其余地址线的信号在上面的范围内,都可访问该6264的某一存储单元。例如,当A14、A13分别为00、01、10、11时,该6264芯片的地址范围为

11111000000000000000=F8000H

到当A14A13=00

11111001111111111111=F9FFFH

FA000H~FBFFFH当A14A13=01

FC000H~FDFFFH当A14A13=10

FE000H~FFFFFH当A14A13=11即该6264芯片共占据了四个8KB的内存空间,而6264芯片本身只有8KB的存储容量。为什么会出现这种情况呢?其原因就在于图中的高位地址译码并没有利用地址总线上的全部地址信号,而只利用了其中的一部分。按这种地址译码方式,芯片占用的这四个8KB的区域决不可再分配给其他芯片。否则,会造成总线竞争而使微机无法正常工作。另外,在对这个6264芯片进行存取时,可以使用以上四个地址范围的任意一个。部分地址译码使地址出现重叠区,而重叠的部分必须空着不准使用,这就破坏了地址空间的连续性,实际上就是减小了总的可用存储地址空间。部分地址译码方式的优点是其译码器的构成比较简单,成本较低。图5.3中就少用了两条译码输入线,但这点是以牺牲可用内存空间为代价换来的。可以想象,参加译码的高位地址越少,译码器就越简单,而同时所构成的存储器所占用的内存地址空间就越多。若只用一条高位地址线做选片信号,如在图5.3中,若只将Al9接在上,则这片6264芯片将占据00000H~7FFFFH共512KB的地址空间。这种只用一条高位地址线进行选片的连接方法称为线性选择,这种地址译码方法一般仅在系统中只使用1~2个存储芯片时考虑使用。

在实际中,采用全地址译码还是部分地址译码,应根据具体情况来定。如果地址资源很富裕,为使电路简单可考虑用部分地址译码方式;如果要充分利用地址空间,则应采用全地址译码方式。

4.接口的典型结构

1)内部结构

图5.4所示为I/O接口的典型结构,其内部一般由数据、状态、控制三类寄存器组成,用来保存和交换不同的信息。可通过数据、状态、控制三种端口的地址来访问其中的数据。这三种端口简称为数据口、状态口、控制口。对于数据口,在I/O设备输入时,保存I/O设备输入的数据;在I/O设备输出时,保存向I/O设备输出的数据。有些数据寄存器同时支持输入/输出,那是因为其内部具有输入和输出两套设备,但共用一个端口地址,随读/写控制的不同分别访问其中的输入或输出寄存器。I/O接口中的状态和控制寄存器分别用来保存状态和命令。通过数据总线,CPU从状态口中读取当前的状态,也可向控制口写入命令,以控制I/O设备的工作。图5.4I/O接口的典型结构

2)外部特性

接口电路的外部特性由其对外的引脚体现。接口引脚根据其连接的特性又分为面向CPU一侧的信号和面向外设一侧的信号。对于面向CPU一侧的信号,一般都引出了数据线、地址线和控制线。在众多的I/O电路中,其数据线、地址线及读/写控制线比较规整。面向外设的信号比较复杂,因为外设种类繁多,型号不一,所提供的信号五花八门,其功能定义、时序及有效电平等差异较大,要在清楚外设工作原理与工作特点的基础上才能真正理解某些信号的含义。

因为I/O接口是连接CPU系统和外设的桥梁,所以对其外部特性的掌握是实现I/O接口物理连接的基础,是接口技术的一个重点。5.1.2输入/输出传送方式

CPU与外设之间传输数据的控制方式通常有三种:程序方式、中断方式和DMA方式。

1.直接程序控制方式

程序方式就是由用户进程来直接控制内存或CPU和外围设备之间的数据传送。根据程序控制的方法不同,又可以分为无条件输入/输出方式和条件输入/输出方式

1)无条件输入/输出方式

该方式在传送前,CPU不需要了解端口的状态,直接进行数据传送,如图5.5所示。这就要求CPU与外设交换信息时,对于任意的输入/输出时刻,都能保证外设总是处于“准备好”状态。图5.5无条件输入/输出(a)无条件输入;(b)无条件输出假设,地址译码器的译码为200H,我们可用指令:

MOV DX,200H

IN AL,DX

把外设的数据输入到AL寄存器。

同样,我们可用指令:

MOV DX,200H

OUT DX,AL

把AL的值通过锁存器输出外设。

无条件输入/输出方式的优点是涉及的软、硬件都比较简单,其缺点是局限性较大。因为很难保证外设在每次信息传送时都处于“准备好”状态。

2)条件输入/输出方式

该方式又称查询方式,即通过程序查询相应设备的状态。传送前,CPU先查询端口状态,在端口就绪时进行数据传送。

一般外设均可以提供一些反映其状态的信号。对于输入设备来数,它能够提供“准备好”(READY)信号,READY = 1则表示输入数据已准备好。输出设备则提供“忙”(BUSY)信号,BUSY = 1表示当前时刻不能接收来自CPU的输出数据,只有当BUSY = 0时,才表示当前时刻可以接收来自CPU的输出数据。

图5.6所示为条件输出方式示意图。图5.6条件输出方式示意图条件输入/输出方式的优点是能够保证输入/输出数据的可靠性,其缺点是在这种方式下,CPU要不断查询外设的状态,当外设未准备好时,CPU只能循环等待,不能执行其他程序,这样就浪费了CPU的大量时间,降低了CPU的利用率。

2.中断方式

在查询方式中,CPU要不断地读取状态字以检测状态信息,因此传送速率慢,CPU利用率低。特别是在有多个外设的系统中,多个外设要求CPU为它服务是随机的,若采用查询方式工作,就不能保证系统实时地对外设的请求做出响应。为了提高CPU的效率,使系统有实时性能,于是产生了中断处理技术。采用中断方式传送信息时,在外设没有做好数据传送准备时,CPU可执行与传送数据无关的其他指令。当外设做好传送准备后,主动向CPU请求中断,若CPU响应这一请求,则暂停正在运行的程序,转入中断服务程序,完成数据传送,待服务完毕后,自动返回原来运行的程序。整个过程如图5.7所示。图5.7中断方式程序示意图

3. DMA方式

利用中断进行信息传送可以大大提高CPU的利用率,但是其传送过程必须由CPU进行监控。每次中断,CPU都必须进行断点及现场信息的保护和恢复操作,这些都是一些额外的,但又必须要做的操作,会占用一定的CPU时间。如果需要在内存的不同区域之间,或者在内存与外设端口之间进行数据块的高速传送,则用查询或中断方式就不能满足速度上的要求,这时应采用直接数据传送(DirectMemoryAccess,DMA),即DMA数据传送方式。

DMA数据传送是在内存的不同区域之间,或者在内存与外设端口之间直接进行的数据传送,它不经过CPU中转,是由硬件直接控制的一种数据传送方式,可以大大提高数据的传送速度。

有关DMA的详细论述请见5.3节。DMA方式的接口示意图如图5.8所示。图5.8DMA方式的接口示意图当CPU与外设用查询方式传送数据时,外设完全处于被动状态,只有被CPU查询到并且具备传送数据的条件时才有可能工作,因此在查询方式下,CPU将大量时间花在等待上,降低了工作效率,因此在计算机技术中引入了中断的概念。中断是现代计算机必须具备的重要功能,也是计算机发展史上的一个重要里程碑,它的出现给计算机结构与应用带来了新的突破。建立准确的中断概念和灵活掌握中断技术是学好本门课程的关键之一。5.2中断系统5.2.1中断的基本原理

1.中断的概念及分类

中断是指计算机的CPU在正常运行程序时,由于内部或外部某个紧急事件的发生,使CPU暂停正在运行的程序,而转去执行请求中断的那个外设或事件的中断服务(处理)程序,待处理完后再返回被中断的程序,继续执行的过程。例如,某个外设向CPU提出交换数据的中断请求,此时CPU的主程序执行到第N条指令,CPU接收到这个中断请求并给予响应,将断点即第N + 1条指令的内存地址保护入栈,后转入中断服务程序去执行。当完成中断服务程序后,再返回到主程序的断点继续执行。这样,便产生了保护现场和恢复现场的要求,即保护断点和CPU中一些寄存器的内容(在主程序中用到的可能在中断服务程序中仍被使用的寄存器),当数据交换完毕,即中断返回时,再恢复断点和寄存器的内容,以便继续执行主程序并且不会丢失中断前的数据。早期中断概念的引入是为了解决快速CPU与慢速外设间的速度匹配问题,以提高CPU的工作效率,因此中断源主要是由外部硬件产生的。随着计算机系统结构的不断改进以及应用技术的日益提高,中断的适用范围也随之扩大,不再限于外部硬件产生中断(称硬件中断或外中断),还可由CPU内部产生,即出现了所谓的内部中断。内部中断是为解决机器运行时所出现的某些随机事件及编程方便而出现的。把因内部意外条件而改变程序执行的流程,以报告出错情况和非正常状态的过程或者由程序预先安排,即由指令INTn调用中断服务程序产生的中断,称为内部中断或软件中断。80286以上CPU称内部中断为异常。如上所述,按产生中断来源的不同,可将中断分为外部中断和内部中断,如图5.9所示。

1)外部中断

外部中断是由CPU的外部中断请求引脚NMI和INTR引起的中断过程,可分为非屏蔽中断和可屏蔽中断两种。

(1)非屏蔽中断:若CPU的NMI引脚接收到一个有效高电平持续两个时钟周期以上的正跳变信号(上升沿)时,则可能会产生一次中断,由于这种中断的响应不受中断允许标志IF的控制,因此称为非屏蔽中断。图5.9中断源的种类

1)外部中断

外部中断是由CPU的外部中断请求引脚NMI和INTR引起的中断过程,可分为非屏蔽中断和可屏蔽中断两种。

(1)非屏蔽中断:若CPU的NMI引脚接收到一个有效高电平持续两个时钟周期以上的正跳变信号(上升沿)时,则可能会产生一次中断,由于这种中断的响应不受中断允许标志IF的控制,因此称为非屏蔽中断。非屏蔽中断主要用于处理系统的意外或故障,如电源断电、存储器读/写错误或受到严重的干扰。在IBMPC/XT中的非屏蔽中断源有三种:浮点运算协处理器8087的中断请求、系统板上RAM的奇偶校验错和扩展槽中的I/O通道错。以上三者中的任何一个都可以单独提出中断请求,但是否真正形成NMI信号,还要受NMI屏蔽寄存器的控制。当这个屏蔽寄存器的D7 = 1时才允许向CPU发送NMI请求,否则即使有中断请求,也不能发出NMI信号。NMI屏蔽寄存器的端口地址为A0H,可以用OUT指令对这一位写入1或0,达到允许或禁止NMI的效果。Intel公司在设计8086/8088芯片时,已将非屏蔽中断NMI的中断类型号预先定义为类型2。因此,当NMI请求被响应时,不要求外部向CPU提供中断类型号,CPU在总线上也不发送中断应答信号,而是CPU自动转入相应的中断服务程序。

(2)可屏蔽中断:可屏蔽中断是由用户定义的外部硬件中断。当外部中断源向8086/8088CPU的INTR引脚发送一个高电平中断请求信号时,该信号必须保持到当前指令的结束。这是因为CPU只在每条指令的最后一个时钟周期才对INTR引脚的状态进行采样,如果CPU采样到有可屏蔽中断请求产生,它是否响应还要取决于中断允许标志IF的状态。当中断允许标志IF = 0时,INTR的中断请求被屏蔽;当IF=1时,产生一次可屏蔽中断,并通过引脚向产生中断请求的中断源发送两个中断应答信号的负脉冲。在接收到第二个负脉冲时,外部中断源接口电路自动将中断类型号送至数据总线,而CPU将自动从数据总线上读取被响应中断源的中断类型号,由中断类型号就可找到中断服务程序的入口地址。在IBMPC/XT中,所有8个可屏蔽中断的中断源都先经过中断控制器8259A管理之后再向CPU发出INTR请求。而在IBMPC/AT中,使用两片8259A,用来管理15级外部中断。即IBMPC/AT在IBMPC/XT的基础上,增加了一个从片8259A,形成主从式结构。外部中断源主要包括:

(1)一般的I/O设备。如键盘、显示器、打印机等在完成自身的操作后,向CPU发出中断请求,要求CPU为其服务。

(2)数据通道。如磁盘、磁带等也可以向CPU发出中断请求,要求CPU为其传送数据。

(3)实时时钟。在控制系统中,常需要定时检测与控制,这时可采用外部时钟电路,并编程控制其定时间隔。当需要定时时,CPU发出命令,启动时钟电路开始计时,待定时时间到,时钟电路就发出中断请求。

(4)故障源。计算机内设有故障自动检测装置,如电源断电、存储器出错、外设故障以及越限报警等意外事件都能使CPU产生中断,进行相应的中断处理。

2)内部中断

8086/8088有相当丰富的内部中断功能。它们可以由CPU内部硬件产生,也可由软件的中断指令INTn引起,其中,n称为中断类型号。一部分已定义的中断类型号用于CPU的特殊功能处理。

内部中断源主要包括:

(1)由于CPU的错误产生异常。CPU在运行过程中所发生的各种错误都会引起中断,如除法运算出错、算术运算溢出、边界检测出错、协处理器出错以及无效代码故障等。

(2)程序执行INT软件中断指令。用户在调试外部中断服务程序时可以用INTn指令来调用并检查。另外,INTn中已有不少被微机系统的BIOS和DOS功能调用所定义,它们的操作大多涉及外设的I/O操作。

(3)为调试程序(DEBUG)设置的中断。在程序调试时,为了检查中间结果,或者为了寻找程序问题所在,往往要求在程序中设置断点或进行单步操作,这些就要由中断系统来实现。

2.中断系统及其功能和组成

发现中断源并能实现中断服务的手段,包括所需要的硬件和软件,称为中断系统。高效率的中断系统能以最少的响应时间和内部操作去处理所有外设的中断请求,使整个计算机系统的性能达到最佳状态。

1)中断系统所具有的功能

为了满足上述要求,中断系统应具有如下功能:

(1)多中断源请求,软件可禁止和允许每个中断源的中断请求。通常,在系统中会有多个中断源,如果在某段时间内,CPU不想为某个或某几个中断源服务,这就要求系统能够通过软件暂时屏蔽对应的中断源,而对其他中断源仍保持开放状态。当在另外的时间段,系统还可通过软件开放前面被屏蔽的中断源。8086/8088系统可处理256种不同类型的中断,每个中断对应一个中断类型号,所以256种中断对应的中断类型号为0~255,这256种不同类型的中断可以来自外部,即由硬件产生,也可以来自内部,即由软件(中断指令)产生,或者满足某些特定条件后引发CPU中断。

(2)中断优先级判别功能。

当系统中的多个中断源同时申请中断时,就必须要求用户事先根据各中断源的轻重缓急规定一个中断级别,即优先级。CPU可根据优先级找到中断级别最高的中断源,并响应它的中断请求。当中断处理完后,再响应级别较低的中断源。

(3)中断嵌套功能。

中断嵌套即级别高的中断可中断级别较低的中断。当CPU正在执行某个中断源中断服务程序时,若有级别更高的中断源向CPU申请中断,则CPU应能暂停正在执行的中断服务程序而响应级别高的中断,在处理完级别高的中断后,再继续执行被暂停的中断服务程序。

(4)中断实现。

当某一中断源向CPU申请中断后,CPU能决定是否给予响应,当响应中断后,能自动转向中断处理程序去执行,中断处理结束后能自动返回主程序继续执行。

(5)禁止中断和中断屏蔽。

在某种情况下,CPU可能不允许响应可屏蔽中断INTR,此时若中断源向CPU申请中断,CPU就不能终止当前正在运行的程序并转到中断服务程序,这种情况称之为禁止中断。一般在CPU内部有一个中断允许触发器,只有当该触发器的状态为运行状态时,CPU才能响应外部中断,否则CPU不能响应中断。中断允许触发器可以通过指令STI进行置位,或通过指令CLI进行复位。

在另一种情况下,比如当CPU正在进行中断处理时,CPU可能不需要响应几种特殊类型的中断,而其余的中断则可以响应,这就叫中断屏蔽。

中断屏蔽可以通过中断屏蔽触发器来实现。将中断源对应的中断屏蔽触发器置1时,该中断源的中断请求被屏蔽,否则该中断源的中断请求被允许。

2)中断系统的组成

为实现上述功能,完整的中断系统应包括以下三方面:

(1)微处理器应有处理中断请求的机制与相关硬件电路。即接收请求、响应请求、保护现场、转向中断服务程序以及中断处理完返回。

(2)外围应有一个与处理器匹配的中断控制器,能管理多个中断源,进行优先级裁决及中断源屏蔽等功能。

(3)根据处理器的结构编写中断处理程序,安排相关的系统初始化。

3.中断的基本过程

当外设准备好与CPU传送数据,或者有某些紧急情况需要处理时,外设向CPU发出中断请求,CPU接收到请求并在一定情况下,暂停执行原来的程序而转去中断处理,完成中断服务后再返回继续执行原来的程序,这就是一个中断过程。下面将中断过程分成5个阶段来讨论。

1)中断请求

凡是能引起中断的设备或事件都称为中断源。外部硬件中断源产生了中断请求信号或内部发生了某种异常,都通知CPU,这就是中断请求。

2)中断判优

由于中断是随机的,可能出现两个或两个以上的中断源同时请求中断服务,在这种情况下,就必须对申请中断的中断源进行优先级判别,这称为中断判优。CPU首先响应当前优先级最高的中断源的中断请求,处理完后再响应优先级次高的中断源的中断请求。

3)中断响应

CPU在没有接到中断请求信号时,一直执行原来的程序(称为主程序)。由于外设的中断申请随机发生,有中断申请后CPU能否立即服务要看中断的类型,若为非屏蔽中断申请,则CPU执行完现行指令后,做好保护现场工作即可去处理中断服务;若为可屏蔽中断申请,则CPU只有得到允许后才能去服务。把从CPU接收到中断请求到进入中断服务程序之前的这一段时间称为中断响应周期。这期间CPU还要自动将标志寄存器内容及断点地址入栈保护,并自动寻找被响应的中断源的中断服务程序入口地址。对可屏蔽中断,CPU通过连续发出两个中断应答信号INTA完成一个中断响应周期。

4)中断处理

一旦CPU响应中断,就可自动转入中断服务程序,中断处理要做以下五件事情:

(1)保护现场。CPU响应中断时自动将标志寄存器内容和断点地址入栈保护,但主程序中使用的寄存器的保护则由用户视使用情况而定。由于在中断服务程序中要用到某些寄存器,因而若不保护这些寄存器在中断前的内容,当中断服务程序的执行修改了寄存器的内容时,从中断服务程序返回主程序后,程序便不能正确执行。由用户对这些寄存器的内容进行保护的过程称为保护现场。保护现场的指令是PUSH。

(2)开中断。CPU接收并响应一个中断后会自动关闭中断,这样做的目的是防止在中断响应过程中被其他级别更高的中断打断,使得在获取中断类型号时出错。但在某些情况下,有比该中断更优先的情况要处理,此时,应停止对该中断的服务而转入优先级更高的中断处理,故需要再开中断,若不允许嵌套,也可不开中断。开中断的指令是STI。

(3)中断服务。中断服务是执行输入/输出或非常事件的处理,是中断处理的核心。

(4)关中断。由于在前面有开中断,因而在此处对应一个关中断过程,是为确保无干扰的恢复现场。关中断的指令是CLI。

(5)恢复现场。

为保护中断服务程序结束后正确返回原来被中止了的程序,应使原来使用的寄存器内容不变,将原来保护的内容再恢复出来。恢复现场的指令是POP。

5)中断返回

(1)开中断。此处的开中断对应CPU响应中断后自动关闭中断。在返回主程序前,也就是在返回中断服务程序的倒数第二条指令往往是开中断指令,以便中断返回后,其他的可屏蔽中断请求能再次得到响应。(2)返回。中断服务程序的最后一条指令无一例外的都使用中断返回指令IRET。该指令使原来在中断响应过程中的断点地址和标志寄存器中的内容,依次从堆栈中弹出,以便继续执行原来的程序。

由上述过程可知,当CPU处理一个中断时,不论该中断是外部可屏蔽中断请求INTR或非屏蔽中断请求NMI引发的,还是由INT指令或CPU内部错误引发的,其中断点及现场保护工作是一样的,并且都需要自动寻找中断服务程序入口地址,然后转去执行中断服务程序。因此,CPU在对不同类型中断进行处理时,机器状态没有区别。4.中断类型号和中断向量表

我们首先介绍几个概念。

中断类型号:为每个中断源指定的一个8位的编号,以识别不同的中断源,这8位的编号称为中断类型号。

中断向量:每一个中断服务程序的入口地址,称为中断向量。

中断向量表:把系统中所有的中断向量集中起来,根据中断类型号从小到大的顺序存放到存储器的某一个区域内,这个存放中断向量的存储区称为中断向量表。在实模式下,中断向量表位于内存的第一个1KB空间。以80X86为处理器的计算机系统均采用矢量中断,80X86处理器(CPU)能处理256级中断向量,类型号为00H~0FFH。一个中断向量占用4个字节,分别存放中断服务程序的IP和CS,因此,整个中断向量(0H~0FFH)共占用1024字节,用以存放各个中断向量的中断服务程序的入口地址(CS:IP)。中断向量表就是各个中断处理程序的地址表,如图5.10所示。

中断向量表用存储器0:0H~0:3FFH区域存放各个中断服务程序的入口地址,256级中断向量对应256种中断类型,每项占4字节,前两个字节存放中断处理程序的偏移地址IP,后两个字节存放中断处理程序的段地址CS。各中断处理程序的段地址和偏移地址在向量表中按中断类型顺序存放,所以某中断向量的处理程序的入口地址偏移可由中断类型号×4计算出来。采用中断向量表,可大大加快处理器(CPU)响应处理中断的速度。从另一方面说,采用中断向量表也为用户编写自己的中断向量服务程序去替换,加强原计算机的中断服务程序带来了方便。

80X86对各种中断的响应和处理过程是不相同的,其主要区别在于如何获取响应的中断类型码(向量)。对于硬件(外部)中断,CPU是在当前指令周期的最后一个T状态采用中断请求输入信号。如果有可屏蔽中断请求,且CPU处在开中断状态(IF标志为1),则CPU转入两个连续的中断响应周期,在第二个中断响应周期的T4状态前沿,读取数据线获取由外设输入的中断类型码。若是非屏蔽中断请求,则CPU不经过上述的两个中断响应周期,而在内部自动产生中断类型码2。

软件(内部)中断的响应过程与非屏蔽中断类似,中断类型码也是自动形成的。软件中断的类型码及中断名称如图5.10所示。图5.11描述了微处理器在实模式下执行中断操作时查询中断向量表的前后过程及流程。

(1)堆栈指针SP减2,标志寄存器Flags自动进栈保存,然后中断标志位I(bit9)与陷阱标志位T(bit8)清0,表示此后关闭了外部硬件中断。图5.108088中断向量表

(2)堆栈指针SP减2,代码段寄存器CS自动进栈保存;堆栈指针SP再减2,指令指针IP自动进栈保存。

(3)将向量号N乘以4即得表格中的中断向量首地址,在该单元与4×N+1中存放着IP值;在4×N+2与4×N+3中存放着CS值,将它们分别装入IP与CS即获得中断服务程序的入口地址。

(4) CPU从入口地址处开始执行中断服务程序。中断服务处理完毕后由IRET指令实施弹出堆栈的逆向操作,恢复Flags、CS与IP寄存器的原值,返回原主程序。以上是中断向量表查表的一般过程,Pentium系列实模式下的中断与8086的中断都遵循这一过程。两者的差别在于,8086处理器中向量表的位置是由硬件固定在处理器的最底端00000H处的,而Pentium系列的向量表位置则灵活了一些,可以改变。因为它们的CPU中增加了一个中断描述符表地址寄存器(IDTR),其中存放着中断描述符表的基地址与表格大小。处理器复位后自动进入实模式,IDTR中的基地址总是00000000H,而大小尺寸总为03FFH,这正好与8086的中断向量表相兼容。但是通过LIDT与SIDT两条装载指令,可以修改IDTR中的基地址值与大小值,以此改变中断向量表格的尺寸并可以将其搬移到实模式寻址空间的任意地段。图5.11实模式下的中断过程及流程5.2.2中断控制器8259A

8259A是Intel公司生产的专为8086/8088CPU配套的可编程中断控制器(ProgrammableInterruptController,PIC),又称为优先级控制器。它可以管理8级具有优先权的中断源,并且可以以级联的方式扩展到64级优先级;可以给每个中断源提供中断类型号及固定或可变的优先级;当中断被响应后,能及时清除中断标志,以供别的中断源申请中断;能够提供8259A与80X86的接口电路;能够屏蔽无关的中断源;能够以查询方式管理多于64种中断源等。正因为它功能强大,所以编程结构比较复杂。图5.128259A的外部引脚

1.8259A的引脚功能

8259A是28引脚的双列直插式封装芯片,如图5.12所示。其外部引脚信号的含义如下所述:

1)与CPU连接部分

(1) D7~D0:双向三态8位数据线,在系统中与数据总线相连,实现与CPU的数据交换。

(2) INT:中断请求信号线,输出,高电平有效。与CPU的INTR引脚相连,用于向CPU发送中断请求。

(3):中断响应信号,输入,低电平有效。与CPU的引脚相连,用于接收来自CPU的中断应答信号。8259A要求中断应答信号由两个负脉冲组成,第一个负脉冲作为中断响应信号,第二个负脉冲将中断类型号送上数据总线。

(4):读控制信号,输入,低电平有效。用来通知8259A将某个内部寄存器的内容送上数据总线。

(5):写控制信号,输入,低电平有效。用来通知8259A从数据总线上接收CPU发送的控制命令字。

(6):芯片选择信号线,输入,低电平有效。通过地址译码电路与地址总线相连。

(7) A0:端口选择信号线,输入,高电平有效。用来指出当前8259A的哪个端口被选中。当A0 = 0时,选中低端口地址(偶地址);当A0 = 1时,选中高端口地址(奇地址)。在8088系统中,数据总线是8位的,所以8259A的数据线可以直接连接在系统数据总线上。这时,系统地址总线的A0与8259A的端口选择信号线A0相连,当CPU访问8259A时,只要使系统地址总线的A0为0或1就能满足8259A对端口地址的编码要求。在IBMPC/XT系统上,由于使用的是8088CPU,所以8259A的端口地址为20H和21H。在8086系统中,数据总线是16位的,而8259A的数据线只有8根,通常8259A都是连接在数据总线的低8位上。为使所有的数据传输都是利用数据总线的低8位,必须将系统地址总线的A1与8259A的端口选择信号线A0相连,而使系统地址总线的A0位总是为0。这是因为,在8086系统中约定,偶存储体和偶地址端口总是和数据总线的低8位相联系的,而奇存储体和奇地址端口总是和数据总线的高8位相联系的,因此8086CPU与偶地址端口交换数据时和与偶存储体交换字节数据一样,总是通过低8位数据线进行传输。在这种情况下,从CPU的角度来说,是对两个相邻的偶地址端口寻址(A0=0、A1=1或A1=0);从8259A的角度来说,只有地址总线的A1和8259A的A0相连,因此仍然是一个低端口地址(偶地址)和一个高端口地址(奇地址)。

2)与外设连接的信号

IR7~IR0:8个外部中断请求信号,输入,高电平或上升沿有效。系统默认的优先级为IR0最高,IR7最低,依次类推。

3)用于多片级联的信号

(1) CAS0~CAS2:级联控制信号,双向。如果8259A为主片,则这三条引脚为输出线;如果8259A为从片,则为输入线,作为从片标识码进入从片。即主片和所有从片的这三条线互连。当某从片8259A提出中断请求时,主片8259A通过CAS0~CAS2送出相应的标识码给从片,使该从片知道刚送出的中断请求已被响应。

(2):级联/缓冲允许双功能信号,双向。当8259A工作在缓冲方式下时,主片该引脚输出,控制数据总线缓冲器启动,从片输入,接低电平;当8259A工作在非缓冲方式下时,该引脚输入,用于规定8259A是主片还是从片,主片接高电平,从片接低电平,在没有级联的系统中,该信号接高电平。

2.内部结构

8259A的内部结构如图5.13所示。它由中断请求寄存器、中断服务寄存器、中断屏蔽寄存器、中断优先级判别器、级联缓冲/比较器、读/写控制逻辑、控制电路、数据总线缓冲器组成。图5.138259A结构框图及引脚分布

1)中断请求寄存器(IRR)

中断请求寄存器是一个8位寄存器,用来存放由外部中断源输入的中断请求信号IR0~IR7,当某个输入端为高电平时,该寄存器的相应位被置1。允许8个中断请求信号同时进入,此时IRR相应位被置成全1。当某个中断请求被响应时,IRR中的相应位被自动复位,并且该中断输入线上的中断请求应及时撤消,否则在中断服务程序处理完后,该中断输入线上的高电平可能会引起又一次中断服务。

2)中断服务寄存器(ISR)

中断服务寄存器是一个8位寄存器,用来保存、记录所有正在处理中的中断请求。当任何一级中断被响应,CPU要去执行它的中断服务程序时,ISR相应位被置1;当中断嵌套时,ISR中可有多位被置1。当8259A收到“中断结束”命令时,ISR中的相应位会被清除。当8259A采用中断自动结束方式时,ISR中刚被置1的位在中断响应结束时被自动复位。

3)中断优先级判别器(PR)

PR对保存在IRR中的中断请求进行优先级识别,判别哪个中断请求具有最高优先级,并在接收到中断响应脉冲期间送出最高级别的中断请求到ISR中;当出现多重中断时,PR还可以判定是否允许所出现的中断申请去打断正在被处理的中断。

4)中断屏蔽寄存器(IMR)

中断屏蔽寄存器也是一个8位寄存器,用来存放对各级中断请求的屏蔽信息,实现对各级中断的有选择的屏蔽。当用软件编程使IMR中某位被清零时,就表示允许IRR中相应位的中断请求进入PR。当IMR中某位被置1时,此位的中断请求被屏蔽,表示禁止这一级中断请求进入系统。IMR中的各屏蔽位是独立的,屏蔽了优先级高的中断源并不影响其他较低优先级的中断请求被允许。

5)级联缓冲/比较器

这部分电路主要用于8259A的级联结构。级联时,8259A有主片和从片之分,主片8259A的级联缓冲/比较器可在CAS2~CAS0上输出代码,从片8259A的级联缓冲/比较器可通过这三条引脚接收主片发来的CAS2~CAS0代码并和ICW3(初始化命令字)中的标识码进行比较。此时,主8259A的端接高电平(非缓冲)或作为输出引脚(缓冲),从8259A的端接低电平,且从8259A的INT输出接到主片的中断输入端IR上,因而最多可接8个从片,管理64级中断。

6)控制电路

控制电路是8259A的内部控制器,当某个中断源向8259A送上中断请求信号时,中断请求寄存器的相应位就会被置1,此时控制电路将根据中断请求寄存器中的置位情况和中断屏蔽寄存器的设置情况,通过PR判定该中断源是否是当前最高优先级。如果是最高优先级,控制电路将向8259A内部及其他部件发出控制信号并且向CPU发出中断请求信号INT。当接收到中断应答信号后就可使ISR的相应位置1,并使IRR的相应位清零,同时将该中断源的中断类型号送上数据线。

7)读/写控制逻辑

一片8259A只占用两个I/O端口地址,用地址线A0来选择端口,端口地址的高位由片选信号端CS输入,由或控制数据线的传输方向,即写入控制命令和读出内部寄存器的内容。

8)数据总线缓冲器

数据总线缓冲器是双向8位的三态缓冲器,用于与系统数据总线进行接口,通常连接低8位数据线。8259A与CPU通过数据总线缓冲器进行交换的信息包括写入8259A的编程控制字、8259A状态信息的读出以及中断响应时8259A送出的中断类型号。

3. 8259A的工作方式

8259A具有非常灵活的中断管理方式,可满足使用者的各种不同要求,并且这些工作方式都可以通过编程来设置。由于8259A的工作方式比较多,因此在讲述编程之前,首先要了解8259A的各种工作方式。

1)中断优先级方式

8259A设置中断请求的优先级别有四种方式,即完全嵌套方式、自动循环方式、特殊循环方式和特殊全嵌套方式。

(1)完全嵌套方式。这是8259A的默认方式,也是最基本最常用的中断优先级方式。当初始化没有设置其他优先级的方式时,就自动进入完全嵌套方式。该方式下,8259A的中断请求输入端引入的中断源具有固定的优先级序列,实现完全嵌套,即优先级按IR0到IR7依次降低,其中IR0的优先级最高,IR7的优先级最低。从高到低的优先级的次序为IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。

(2)自动循环方式。在中断源的优先级队列会随时发生变化,从IR0到IR7引入的中断源轮流具有最高优先级。当某个中断源的中断请求得到CPU响应后,其中断请求输入端的优先级自动降为最低,原来比它低一级的中断请求输入端则自动升为最高优先级。在初始状态下,优先级队列规定为IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。

(3)特殊循环方式:循环原理与自动循环方式相同,即当某个外设的中断请求得到CPU响应后,其中断请求输入端的优先级自动降为最低,它的下一级中断请求输入端则自动升为最高优先级。它与自动循环方式的区别是:特殊循环方式下的初始优先级队列由编程决定,可任意指定一个初始最低优先级,以后再循环。

(4)特殊全嵌套方式。这种工作方式与完全嵌套方式基本相同,即具有固定的优先级序列,从高到低的优先级次序为IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。区别在于,特殊全嵌套方式下中断正被处理时,允许同级或更高优先级的事件打断当前的中断处理过程。此方式主要用于多片8259A级联时主片8259A的优先级设置。

2)固定优先级中断结束方式

如前所述,当8259A响应某一级中断而为其服务时,中断服务寄存器的相应位置1,当有更高级的中断申请进入时,ISR的相应位又要置1,因而ISR中可有多位同时置1。在中断服务程序结束时,ISR中的相应位应清零,以便再次接收同级别的中断。中断结束的管理就是用不同的方式使ISR中相应位清零,什么时刻使ISR中相应位清零,就产生了不同的中断结束方式,同时还可确定下面的优先排队。要注意的是,这里的中断结束是指8259A结束中断的处理,而不是CPU结束执行中断服务程序。在这里首先介绍在固定优先级方式中对中断结束的处理:

(1)普通结束方式(EOI)。8259A每得到一次EOI命令,就将ISR中已置1的位中优先级最高的位复位。在完全嵌套方式下,任何一级中断处理结束返回上一级程序前,CPU都将向8259A传送EOI结束命令字,8259A在收到EOI结束命令后,自动将ISR中级别最高的置1位清零。EOI结束命令字必须放在中断返回指令IRET之前,若没有EOI结束命令字,则ISR中对应位仍为1,即使中断服务程序已执行完,也将继续屏蔽同级或低级的中断请求;若EOI结束命令字放在中断服务程序中的其他位置,则会引起同级或低级中断在本次中断未处理完前进入,使其容易产生嵌套错误。

(2)特殊结束方式(SEOI)。该方式的特殊性在于,除了普通EOI方式的功能外,将明确指明本次复位的ISR位。由于中断优先级方式在程序中被多次修改,虽然当前的优先级方式为固定优先级,但已无法根据ISR的内容确定哪一级中断为最后响应和处理的,这时就要采用SEOI命令。CPU向8259A发出SEOI结束命令字,在命令字中将当前要清除的中断级别也传送给8259A,此时8259A将ISR中指定级别的对应位清零。

(3)自动结束方式(AEOI)。自动EOI方式是利用响应中断时最后一个响应脉冲的后沿执行一次普通EOI,而不需要CPU向8259A发送EOI命令字。在自动结束方式下,任何一级中断被响应后,ISR对应位置1,但在CPU进入中断响应周期发送第二个脉冲后,8259A自动将ISR中对应位清零,这种方式简单,但在进行中断服务时,ISR中没有标志,低级中断申请时,可打断高级中断,产生重复嵌套,嵌套深度也无法控制,容易产生错误。通常在只用一片8259A时,多个中断不会在嵌套下使用。在级联方式下,一般使用非自动结束方式,无论是用普通EOI结束方式还是用特殊EOI结束方式,当中断处理结束时,都要发两次中断结束命令,一次是对主片发送,另一次是对从片发送。

3)循环优先级中断结束方式

在循环优先级方式中,与中断结束方式联合,有三种循环结束,结束时并确定下面的优先权排队。

(1)普通EOI循环方式。这种方式是指不但要通知8259A中断结束,而且应该清除ISR中对应位,还要8259A重新排列优先级别。在主程序或中断服务程序中设置为自动循环方式,当任何一级中断被处理完后,使CPU向8259A发送普通EOI循环命令,8259A收到中断结束循环命令后,将ISR中最高优先级的置1位清零,并赋给它最低优先级,将最高优先级赋给它的下一级,其他依次类推。

首先设置自动循环方式,优先级别由高到低排列为IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。由表5.1可知,在原始状态下,IR5的中断处理程序被IR2中断嵌套,当前正在执行IR2中断处理程序。表5.1普通EOI循环处理表当处理完IR2后,CPU向8259A发送普通EOI循环命令,由于IR2的优先级高于IR5,因此ISR中对应IR2的位被自动清零,同时优先级被置为最低,IR3的优先级为最高,依次类推。

当处理完IR5后,CPU向8259A发送普通EOI循环命令,ISR中对应IR5的位被自动清0,同时优先级被置为最低,IR6的优先级为最高,依次类推。

(2)特殊EOI循环方式。这种方式与普通EOI循环方式基本相同,区别在于通知8259A中断结束的命令中要指定将ISR中哪一位清除。当在程序中多次设置特殊循环方式时,8259A已无法判断当前正在被服务的一些中断中哪一个级别最高,因此当某个中断处理结束时,CPU在发送中断结束循环命令的同时还要将当前要清除的中断级别也传送给8259A,8259A收到此命令后,首先将ISR中被指定的置1位清零,然后将该位对应的输入端优先级别置为最低,并将其下一级优先级别置为最高,依次类推。首先设置自动循环方式,优先级别由高到低排列为IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7。由表5.2可知,在原始状态下,IR6的中断处理程序被IR2中断嵌套,当前正在执行IR2中断处理程序。表5.2特殊EOI循环处理表在IR2中断服务程序中设置了特殊循环方式,将最低优先级赋给IR3,同时IR4的优先级自动升为最高。

当处理完IR2后,如果CPU向8259A发送普通EOI循环命令,则由于当前IR6的优先级高于IR2,因此ISR中对应IR6的位就会被自动清零,这显然是错误的。因此,CPU应向8259A发送特殊EOI循环命令,即在命令中指定将IR2对应在ISR中的置1位清除,同时将IR2的中断优先级别置为最低,IR3的优先级别置为最高,依次类推。

(3)自动EOI循环方式。在自动EOI循环方式中,任何一级中断被响应后,中断响应总线周期中第二个信号的后沿自动将ISR相应位清零,并立即改变各级中断的优先级别,改变方式与普通EOI循环方式相同,但要防止重复嵌套产生。

4)中断源屏蔽方式

CPU由CLI指令禁止所有可屏蔽中断进入,中断控制器8259A通过对中断屏蔽寄存器的操作可以对中断请求单独屏蔽或允许。通常有两种屏蔽方式。

(1)普通屏蔽方式。这种方式将中断屏蔽寄存器IMR中某位或某几位置1,即可将对应位的中断请求屏蔽。这是通过对操作命令字OCW1写入来实现的。如对OCW1写入35H(00110101B),则相应屏蔽了从IR0、IR2、IR4、IR5引入的四个中断源。

(2)特殊屏蔽方式。这是在中断处理程序中使用的一种屏蔽中断源方式。在某些场合,希望一个中断服务程序能动态的改变系统的优先级结构。例如,在某个中断服务程序中要求其执行过程的某一部分禁止较低优先级中断请求,而在其他部分则允许这些请求。由于在中断服务程序执行中,不能用中断结束命令使其ISR相应位复位,而在普通屏蔽方式下也不能使ISR相应位复位,因此普通屏蔽方式不能达到这种特殊要求。此时可采用特殊屏蔽方式,它总是在中断服务程序中使用,能对本级中断进行屏蔽,且允许优先级比它高或低的中断进入。

5)中断请求引入方式

外部中断源接入8259A有两种信号形式,即边沿触发方式和电平触发方式。另外,当CPU的IF标志复位,禁止可屏蔽中断请求进入时,CPU还可通过查询方式获得中断请求

信号。

(1)边沿触发方式。这种方式利用IR输入信号,由低电平跳向高电平时触发。当IR产生上升沿后,应保持高电平直到中断被响应为止。

(2)电平触发方式。8259A依靠IR引脚上的有效高电平信号来触发,而与有效电平出现的方式和时间无关。当中断得到响应后,中断请求输入端必须及时撤销高电平,否则在CPU进入中断处理过程后,且在开中断的情况下,原中断请求的高电平会引起第二次中断的错误。

(3)中断查询方式。这种方式允许8259A不工作于中断方式,而是以查询方式工作。当在程序中设置CPU的中断允许标志IF=0时,表示禁止8259A对CPU的中断请求,CPU只能使用中断查询方式利用软件查询来确定中断源,实现对外设的中断服务。因此,中断查询方式既有中断的特点又有查询的特点。

6)连接系统总线的方式

8259A有两种连接系统总线的方式,一种是缓冲方式;另一种是非缓冲方式。

(1)缓冲方式。一般在多片8259A级联系统中,8259A通过数据总线缓冲器Intel8286与系统数据总线相连,而不是直接与系统数据总线相连,这就是缓冲方式。在此方式下,8259A使用引脚的EN使能功能作为输出端,输出低电平允许信号,用以锁存或开启数据总线缓冲器。

(2)非缓冲方式。当系统中只有一片8259A或少量几片8259A级联时,一般将它直接与系统数据总线相连,这就是非缓冲方式。

4. 8259A的控制字及应用

在使用8259A时,除按各引脚规定的信号接好电路外,还必须用程序选定其工作状态,如各中断请求信号的优先级分配、中断屏蔽、中断类型号、中断的触发方式等。每一种状态都由一个命令字或一个命令字的某些位来规定,8259A的命令字分为初始化命令字(InintiallizationCommandWord,ICW)和操作命令字(OperationCommandWord,OCW)两种,因此8259A的编程也分为初始化编程和操作编程两种。系统复位后,应进行初始化编程,严格按次序进行操作编程并只能写一次,以设定中断触发方式、缓冲方式、中断类型号基值、优先级方式的结束方式。初始化后,在任何位置都可操作编程,且没有严格顺序,并允许重置,以动态改变8259A的操作与控制。

1)初始化编程

初始化编程用以完成以下功能:

(1)设定中断请求信号触发方式,即边沿或电平触发方式。

(2)设定8259A工作方式,即缓冲与非缓冲方式。

(3)设定8259A中断类型号基值,对应IR0的类型号。

(4)设定优先级方式,即完全嵌套或特殊全嵌套方式。

(5)设定中断处理结束方式,即自动或非自动EOI方式。对8259A编程初始化命令,共预置4个命令字:ICW1、ICW2、ICW3、ICW4,但并不是任何情况下都要预置这4个命令字,用户可根据具体使用情况而定。由于ICW1必须写入低地址端口A0 = 0(偶端口),因而ICW2、ICW3、ICW4必须写入高地址端口A0 = 1(奇端口)。那么如何区分写入的到底是哪个寄存器呢?为此8259A在进行初始化时,利用写入的顺序来区分不同的寄存器,即必须严格地按图5.14所规定的初始化顺序依次写入。图5.14初始化流程◆初始化命令字ICW1

8位ICW1命令字的格式如图5.15所示,其中,D7、D6、D5、ADI仅对8080/8085等8位CPU有意义,在8086/8088及以上系列CPU中不使用,可为任意值。D4=1为ICW1的特征位(标志位),用来与写入同一地址的OCW2、OCW3区别。其他命令字的含义如图5.15所示。图5.15ICW1的格式

(1) IC1:指示初始化时是否需要ICW4,在80X86系统中,该位应设为1,即需要ICW4。

(2) SNGL:单片/级联方式设置,指示初始化时是否需要ICW3。该位为1时,表示系统中只有一片8259A,初始化时不需对ICW3写入;该位为0时,表示系统有多片8259A级联,初始化时需要对ICW3写入,以对级联状态进行设置。

(3) LTIM:中断输入信号的触发方式设置。◆中断类型号初始化命令字ICW2

8位ICW2命令字的格式如图5.16所示。D7~D3为决定中断类型号的高5位;D2~D0不需编程,通常为全0,表示中断请求输入端IR0的中断类型号,在中断响应时由中断源的序号000~111自动填入相应值。因此,用一个初始化命令字ICW2就可决定8个中断源的中断类型号。ICW2也可以称为中断类型号基值寄存器。图5.16ICW2的格式◆标识主/从片初始化命令字ICW3

8位ICW3命令字的格式如图5.17所示。它是8259A的级联命令字,用来设置级联方式,即当ICW1中的D1 = 0时,才要写入ICW3。对主片、从片分别写入ICW3,对主片写入是为确定哪个中断请求输入端接的是从片。由于一片8259A有8个中断请求输入端,因此最多可接8个从片。对从片写入是为确定该从片的中断请求输出端接主片的哪个输入端。

图5.17(a)表示若主片8259A某根IRi引脚上接有从片,则ICW3的相应位应写1,否则写0。

在图5.17(b)中,ID2~ID0表示从片标识码,其8种译码状态分别代表该从片是接在主片的哪个中断请求输入端上。图5.17ICW3的格式(a)主8259AICW3的格式;(b)从8259AICW3的格式◆方式控制初始化命令字ICW4

8位ICW4命令字的格式如图5.18所示。在ICW1中,若D0 = 1才写入ICW4,用来指定中断嵌套方式及缓冲方式,对80X86(包括8086/8088)系统必须预置ICW4。其中,UPM表示CPU类型;AEOI指示是否为自动结束方式;M/S为主从片选择,该位决定是主片还是从片;BUF指示8259A是否工作在缓冲方式,以决定引脚的功能;SFNM决定8259A在级联时是否工作于特殊全嵌套方式;D5、D6、D7位无意义,可任意设置,通常写入0。

ICW4各位的具体设置如图5.18所示。图5.18ICW4的格式

2)操作编程

8259A经初始化编程后,已进入初始化状态,可接收来自中断请求输入端IRi的中断申请,并自动进入操作命令状态,接收CPU写入8259A的操作命令。8259A的操作命令字有三个,即OCW1、OCW2、OCW3,分别写入两个端口中,OCW1必须写入高地址端口A0 = 1(奇端口),OCW2、OCW3必须写入低地址端口A0=0(偶端口)。OCW2和OCW3可根据各自的特征位来区别,因此对写入的顺序没有要求。在系统工作过程中,某些操作命令字可能需要重复多次地写入,并且既可在主程序中设置,也可在中断服务程序中设置。◆中断屏蔽命令字OCW1

OCW1用于向IMR写入屏蔽信息,初始时为全0(开放所有中断请求输入端),其格式如图5.19所示。

任何时刻,CPU通过输入指令对8259A高地址端口(A0 = 1)执行读操作,可以读入IMR的内容。

◆中断模式设置命令字OCW2

OCW2用于对8259A设置中断结束命令以及确定优先级循环的方式,其格式如图5.20所示。其中,D4 = 0、D3 = 0为OCW2的特征位(标志位),用来与写入同一地址的ICW1和OCW3区别。图5.19OCW1的格式

(1) R:表示中断优先级循环位。

(2) SL:表示选择指定的IRi级别位,即SL = 1时,L2、L1、L0有效,代表对应的译码结果IRi。

(3) EOI:中断结束命令位,在初始化命令字ICW4中定义为非自动中断结束方式,该位用来给8259A送中断结束命令。若ICW4中的AEOI = 1,则设置为自动结束方式,此时该位应为0。

◆特殊屏蔽和查询命令字OCW3

OCW3命令字格式如图5.21所示。OCW3命令字有三个功能,分别为设置或撤销特殊屏蔽方式、设置中断查询方式和设置读8259A内部寄存器方式。图5.20OCW2的格式图5.21OCW3的格式

(1) ESMM:允许或禁止SMM位起作用的控制位。ESMM为1时允许SMM位起作用;为0时禁止SMM位起作用。

(2) SMM:设置特殊屏蔽方式选择位。与ESMM位共同起作用,如图5.21所示。

(3) P:查询命令位。P = 1时,向8259A发送查询命令;P=0时,不处于查询方式。OCW3设置查询方式以后,CPU对同一个地址(A0=0)执行读操作,就得到该片8259A的一个中断查询状态字,如图5.22所示。图5.22中断查询字图中,I = 1表示该8259A芯片的IR0~IR7中发生了有效的中断请求;W2~W0表明了请求服务的最高优先权编码。I = 0则表示无请求。CPU可以反复对8259A查询,但每次查询前都应先送一次D2 = 1的OCW3。

(4) RR:读寄存器命令位。RR = 1时允许读IRR或ISR;RR = 0时禁止读这两个寄存器。

(5) RIS:读IRR或ISR选择位。与RR位共同起作用。

3) 8259A寄存器的读/写

如前所述,对于8259A内部的各个寄存器,除在编程时CPU可用输出指令对其逐一地写入外,在查询状态时还可用输入指令将其内容读出。为了寻址各寄存器,除了用地址信号A0进行端口选择外,还需要用这些命令字的某些位作为访问某个寄存器的特征位,或者按写入的先后顺序来进行区别。表5.3列出了对8259A各寄存器读/写时的信号关系。表5.38259A寄存器的读/写5.2.38086系统中8259A的应用

1.现行微机系统中的中断逻辑结构

现在的微机系统为了扩大中断处理能力,使用两片8259A组成主、从形式中断控制器,提供15级中断。虽然在当今的Pentium系列微型计算机中已经再也找不到这种8259A芯片,但是这样的电路依然存在,只是集成到超大规模的芯片组中了。我们可以认为,现行微机系统中断控制器的连接原理如图5.23所示。图5.23现行微机中断控制器连接示意图这里,主片的端口地址仍为20H、21H,从片的端

温馨提示

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

评论

0/150

提交评论