微型计算机系统接口.ppt
第6章 微型计算机系统接口,6.1 输入输出接口 6.2 I/O数据传输方式 6.3 可编程中断控制器 6.4 可编程计数器/定时器 6.5 可编程并行输入/输出接口 6.6 DMA控制器 6.7 系统控制逻辑,第六章 微型计算机系统接口,本章概述了微机系统接口的基本功能控制。具体介绍了I/O接口及数据传输方式、中断系统功能及中断处理过程、PC机的中断结构和中断矢量;分析了可编程中断控制器8259A的编程结构,归纳了8259A的工作方 式,讲述了8259A初始化命令字、操作命令字和编程应用,以及高级 可编程中断控制器APIC和串行中断控制;讲解了组成微机系统必不可少的可编程计数器/定时器 可编程并行输入/输出接口 可编程DMA控制器 介绍它们的组成结构和引脚、控制字和工作方式、编程操作和应用;最后将这些处理器外围的分散控制逻辑汇总到芯片组,介绍南桥芯片 组的发展与功能。,6.1 输入输出接口,6.1.1 输入输出接口概述1.I/O接口功能输入输出接口电路位于系统总线(或局部总线)与外设之间,用它来完成系统总线(或局部总线)与外设之间的数据传输,完成系统对外设的控制与响应。从硬件上讲,接口是介于部件与总线之间的电路,适配两者完成数据传输。(1)寻址功能对系统地址总线高位进行译码,将译码输出作为片选信号以访问相应的接口电路(芯片),再根据地址总线低位选择被访问接口电路中的具体端口。(2)数据锁存与缓冲 锁存解决外设与主机在速度上的差异,使它们同步工作;缓冲增强接口的驱动能力,使负载趋于平衡。(3)时序控制接口电路根据系统提供的不同时序信号(由基准的系统时钟派生)与主机协调工作。按照CPU的控制命令和外设的运行状态来组合这些时序信号,产生各种不同的相应操作控制信号。,1.I/O接口功能(续),(4)对外设的监测与控制 接收CPU送来的命令字或控制信号,对外设进行监测、控制和管理;向主机或CPU提供I/O传输的状态,供主机或CPU处理,使之与外设协调工作。(5)中断和DMA管理为使外设与CPU并行工作,或满足实时处理之需,常采用中断方式传送数据;对高速大批量数据传输常采用DMA(直接存储器存取)方式。接口电路应能受理外设的中断请求或DMA请求信号并向CPU申请,接收CPU相应的响应信号并处理与外设的数据传输。(6)信息变换外设的信息形态与数据格式复杂多样,要求接口电路能在主机与外设之间进行各种信息变换:数/模与模/数转换、并/串与串/并转换、电平转换、数据格式转换等。主机与外设通过接口传送信息,按所传送信息的内容和功能可分为数据、状态和控制三类,它们各自通过接口内不同的端口寄存器传送而相互区分开来。按主机与外设之间所传输信息的形态可将其分为三种类型:数字量、模拟量和开关量。,2.接口基本结构,接口电路可以很简单,简单得可以由几个甚至一个三态门构成;以VLSI芯片为主构成的接口电路,其复杂程度有的不亚于8位CPU。接口电路通常做在一块超大规模集成电路接口芯片上,根据需要也有用中小规模集成电路芯片构成的。不同规模和功能的接口电路,其结构虽各有不同,但一般是由寄存器和控制逻辑两大部分组成,每部分又包含几个基本模块,如下图所示。,2.接口基本结构(续),(1)端口寄存器这部分包括输入缓冲寄存器、输出缓冲寄存器、控制寄存器和状态寄存器,它们是接口电路的核心,每个寄存器表示一个I/O端口,对应一个I/O端口地址。数据缓冲寄存器 输入缓冲寄存器暂时存放输入设备送来的数据,供CPU读取;输出缓冲寄存器暂时存放CPU送出的数据,缓冲后送给输出设备。输入输出缓冲寄存器在高速CPU与低速外设之间起到协调、缓冲作用,实现数据传送的同步。数据缓冲寄存器通常具有三态功能。控制寄存器 控制寄存器用来存放CPU发来的控制命令和有关信息,以规定接口电路的功能和工作方式。VLSI接口芯片一般具有可编程特性,一个接口芯片具有多种不同的工作方式和功能,可通过编程来设定,使用上十分灵活方便。控制寄存器一般是只写寄存器,其内容只能由CPU写入,不能读出。状态寄存器 状态寄存器记录外设的当前状态和I/O操作状况。CPU用输入指令读取状态寄存器的内容,从而了解外设的当前状况和数据传输过程中发生的有关情况,据此作出相应判断,执行相应操作,使主机能安全可靠地通过接口完成数据传输。,2.接口基本结构(续),(1)控制逻辑电路为确保CPU通过接口正确地传输数据,接口中还必须包含如下的控制逻辑电路。数据总线缓冲器 接口芯片内部数据总线经数据总线缓冲器与系统总线相连接;如果芯片负载较重,可在片外再加一级总线缓冲与系统数据总线相连。地址译码 系统地址总线高位经片外的地址译码器译码来选择接口芯片,低位地址线在片内译码后选择接口芯片内部相应的端口寄存器,使CPU正确无误地与指定的外设完成相应的I/O操作。内部控制逻辑 接收来自系统的控制输入,产生接口电路内部的控制信号,实现系统控制总线与内部控制信号之间的转换。联络控制逻辑 接收CPU有关控制信号,生成给外设的准备好信号和相应的状态;接收外设的选通信号,产生相应状态标志和中断请求信号。上图是接口电路的通常组成,并非所有接口全部具备。一般而言,数据缓冲寄存器、端口地址译码器和输入输出控制逻辑是不可少的,其它部分视接口功能强弱和I/O操作的同步方式而定。,3.接口分类,计算机各部件与总线之间、各部件相互之间都要经过相应的接口电路连接,接口是组成计算机系统的关键之一。按接口在计算机系统中所起的作用,可分为三类:系统接口 这是和主机配套的必不可少的接口,它是微机的一部分,包括存储管理、总线仲裁、中断控制、DMA控制等。通用输入输出接口 提供给一般并行或串行外设的通用接口,如并行I/O接口、串行I/O接口等。专用I/O接口 与专用I/O设备配套的接口,如键盘控制、CRT控制、打印控制、磁盘控制等接口。按接口所连接部件的功能和形态可分为四种:用户交互接口 这类接口接收来自用户的信息或向用户发送信息(数据或命令),完成人机交互。如键盘/显示器接口、光笔/显示器接口、打印机接口、语音识别接口等,它们主要完成信息表示方法和数据传输速率的转换。内务操作接口 这是支撑以处理器为核心的基本系统正常运转、实施基本的控制功能、进行基本处理所必须的接口,包括总线驱动器、数据总线收发器、内存接口、时钟电路等。传感接口 感知外界被检测对象有关参数、状态及其变化的接口。这种接口能将被检测对象的物理参数模拟量转换成数字量送主机进行处理。控制接口 连接计算机和控制设备的接口,能将计算机输出的数字量控制信号进行功率放大或数/模转换,进而控制执行机构的动作。,4.I/O端口编址,存储器映象I/O编址这种编址方式,把I/O端口同存储器的存储单元一样看待,统一编址。在可寻址的存储空间中,划出一部分作为I/O端口空间地址,其余大部分用作内存单元,I/O端口和内存单元有不同的地址编号。在该方式中CPU对存储单元的读写和对I/O端口的输入输出操作都用访问存储器指令,而不用输入输出指令,即控制信号IO/-M(对PC/XT机对而言)都为低电平,而由地址总线上的码值(地址码)区分访问对象是存储单元还是I/O端口,控制信号或指明是读(输入)还是写(输出)。这种方式CPU对存储器和I/O端口的访问如下图(左)所示。这种编址方式可用丰富的存储器访问指令来直接操作I/O端口数据,方便、高效而灵活,缺点是占去了相当部分的内存空间。单片机通常采用这种编址方法。I/O端口独立编址I/O端口和内存单元各自独立编址,CPU访问I/O端口须用专门的输入输出指令。PC系列机的输入和输出指令中,直接寻址I/O端口时用一个字节的地址码,故可寻址28=256个端口;寄存器间接寻址I/O端口用DX表示地址码,有16位,可寻址216=65536个端口。但PC/XT机一般用低10位地址线来表示I/O端口,因此该系统中可安排的I/O端口最多为1024个(210)。,4.I/O端口编址(续),I/O端口独立编址(续)在该编址方式中地址总线上出现的地址码究竟表示存储单元地址还是I/O端口地址,以控制信号IO/-M来区分:低电平则表明地址码是存储单元地址,CPU对存储器进行读写;高电平则表明地址码是I/O端口地址,CPU执行输入输出操作。,采用这种编址方式,CPU必须以专用的I/O指令访问I/O端口,即CPU以IN类指令输入(读)数据,以OUT类指令输出(写)数据。这种编址方式CPU对存储器和I/O端口的访问如下图(右)所示。,I/O端口独立编址不占用内存地址空间,为x86微机所采用;但I/O指令种类少,对I/O端口中数据的处理往往要读入CPU内进行。,6.1.2 微机I/O端口地址配置,80386 CPU可寻址的I/O空间为64KB。两个连续的8位端口可作为一个16位端口,四个连续的8位端口可作为一个32位端口,因此80386的I/O地址空间最多可容纳64K个8位端口,或32K个16位端口,或16K个32位端口,能支持8位、16位及32位I/O设备操作。标识32位端口的口地址应能被4整除,16位端口地址应与偶地址对齐,这样用单个总线周期就能传送32位/16位数据。对I/O端口采用立即寻址,可寻址256/128/64个8/16/32位端口;采用DX寄存器间接寻址,可寻址65536/32768/16384个8/16/32位端口。PC/AT机只使用了16位地址线中的10位(A9A0)对外设接口电路进行编址,可寻址1024个I/O端口(000H3FFH)。当A9A800时对系统板上的接口芯片寻址,共256个端口(000H0FFH);当A9A800时对I/O通道上的插件电路寻址,共768个端口(100H3FFH)。GW-386的I/O系统与IBM PC/AT的I/O系统兼容,也使用了低10位地址线(A9A0)对外设端口进行编址,并且大部分I/O接口电路均由系统板上的82C206 I/O控制器芯片提供。下表是GW-386的I/O地址分配表。,6.1.2 微机I/O端口地址配置(续),6.1.2 微机I/O端口地址配置(续),Pentium系列微机的I/O地址配置都是对原先的PC机向上兼容的,系统逻辑能正确处理ISA、PCI、AGP等类型设备的I/O访问。现代微机的处理器提供对I/O空间的16位(A15A0)寻址,可寻址的端口数:65536个(字节端口)、32768个(16位半字端口)、16384个(32位字端口)、8192个(64位双字端口),由系统逻辑译码形成访问I/O空间的选通地址。下表列出了现代微机I/O端口的典型定义情况(不同类型的微机可能存在一些小的差异)。,注:B字节(Byte),b二进位(bit)*只能以双字(DWord)为单位进行访问*只能以字节(Byte)为单位进行访问,6.1.3 I/O端口的寻址与操作,1.I/O端口寻址(1)直接寻址I/O端口输入输出指令中,在操作码后面用一个字节的无符号数n来表示I/O端口地址。因此直接寻址的I/O端口数为256个字节端口,或128个半字端口,或64个字端口,或32个双字端口。在PC系列机中,可用AL一次输入/输出一个字节,也可用AX一次输入/输出一个半字,还可用EAX一次输入/输出一个字。IN AL,n;AL(n)字节端口内容 IN AX,n;AX(n)半字端口内容,n为偶数 IN EAX,n;EAX(n)字端口内容,n为4的倍数 OUT n,AL;(n)字节端口AL OUT n,AX;(n)半字端口AX,n为偶数 OUT n,EAX;(n)字端口EAX,n为4的倍数,1.I/O端口寻址(续),(1)DX间接寻址I/O端口在输入输出指令中,用DX的当前内容表示所寻找的I/O端口地址;DX有16位,DX间接寻址的I/O端口数大为增加(如前所述)。可分别用AL、AX或EAX一次输入/输出一个字节、一个半字或一个字。IN AL,DX;ALDx指向的字节端口内容IN AX,DX;AXDX指向的半字端口内容IN EAX,DX;EAXDX指向的字端口内容OUT DX,AL;DX指向的字节端口ALOUT DX,AX;DX指向的半字端口AXOUT DX,EAX;DX指向的字端口EAX,2.I/O端口的操作,对I/O端口的操作就是输入和输出。可以输入/输出一个字节、一个半字或一个字;80286及其以后的计算机还支持输入/输出字符串。与字符串操作指令一样 字符串输入指令输入的字节、半字、字或它们的串被送到由ES:EDI或ES:DI(286机)所指向的内存单元;字符串输入时,位于内存中的字符串地址必须事先由ES:EDI 或ES:DI指出,字符串输出指令输出的是由DS:ESI或DS:SI(286机)所指向的内存区域中的字节、半字、字或它们的串;字符串输出时必须事先由DS:ESI或 DS:SI指出字符串在内存中的地址。字符串输入/输出的I/O端口隐含地由DX寄存器指示,即I/O寻址为隐含的DX寄存器间接寻址方式。字符串输入/输出指令的格式如下:INSB;输入字节或字节串 INSW;输入半字或半字串 INSD;输入字或字串 INS des;输入到des指向的内存单元,ES:EDI或ES:DI必须事先指向des单元,;该单元的属性决定了输入的是字节、半字、字或相应串 OUTSB;输出字节或字节串 OUTSW;输出半字或半字串 OUTSD;输出字或字串 OUTS src;将src指向的内存单元内容输出,DS:ESI或DS:SI必须事先指向Src;单元,该单元的属性决定了输出的是字节、半字、字或相应的串上述指令加重复前缀REP可重复执行,连续完成整个串的输入或输出,串的长度事先由ECX或CX指定,EDI(或DI)、ESI(或SI)寄存器的变化方式(增量还是减量变化)由标志寄存器EFLAG的DI标志位规定。,6.2 I/O数据传输方式,6.2.1 无条件传输无条件传输方式又称同步传送方式。使用这种方式时外设总是处于准备好状态,CPU 无需查询其状态而只根据程序中的输入输出指令执行相应操作。无条件传送的接口电路(输入/输出)如下所示。,6.2.2 程序查询传输,查询传送即条件传送,CPU与接口之间有一个应答过程,所以又称异步传送。大多数外设数据传送、处理的速度较慢,跟不上CPU的高速运转,为使传送可靠,程序需要了解外设的动态情况后才决定是否进行数据传送。在数据传送之前,程序首先测试外设的状态,当状态符合规定的条件(比如输入设备的下一个输入数据准备好了,或输出接口已经将前一个输出的数据送往输出设备)就进行输入或输出操作,否则就踏步等待或转入其它程序段。因此,查询传送方式的接口电路中必须有表征外设工作状态的触发器或寄存器以供CPU查询。查询方式输入接口电路如下图(左)所示。当数据准备好时,输入设备发出选通信号脉冲,一方面送到锁存器时钟端(CP)将准备好的数据送入锁存器,另一方面送到Ready(准备好)触发器的时钟端(CP),将该触发器置为1(因为该D触发器的D端接高电平+5V),表示输入数据准备就绪。CPU输入数据时首先查询输入状态端口:数据准备就绪否?程序流程图如下图(右)所示,程序如下:,6.2.2 程序查询传输(续),RPLI:IN AL,PSTATUS;读入状态 TEST AL,01H;查状态 JZ RPLI;未准备好,踏步检查 IN AL,PDATAI;准备好输入数据,6.2.2 程序查询传输(续),查询方式输出接口电路如下所示。当输出设备完成当前数据的输出操作后就来取走CPU送至锁存器中的数据,同时发出一个响应信号,使状态触发器BUSY(忙触发器)异步置零(表示输出数据端口中数据已空)。CPU在输出数据前要先查询输出接口的状态,若输出端口数据已空则向该端口输出数据,否则(未空)表示输出设备还未将前一个输出的数据取走,CPU继续输入并测试状态位。程序如下:RPLO:IN AL,PSTATUS TEST AL,80H JNZ RPLO MOV AL,SI OUT PTADAO,AL,6.2.2 程序查询传输(续),6.2.3 中断传输,查询传送虽然简单可靠,但效率低下主机要花费大量时间查询外设状态,等待外设上一次的输入输出过程完成。即主机和外设在外设工作的绝大部分时间内只能串行工作,而外设I/O 操作速度比主机慢得多,使得CPU利用率和系统效率大大降低。主机在一个时间段内只能询问一台外设的状态,与其交换数据;因此各个外设在I/O操作完成后也只能串行等待CPU来询问,进一步降低了系统的效率。中断方式可以克服上述缺点在中断传送方式中各个外设和主机并行工作,进行各自的输入或输出操作。当某台外设完成了自身的输入或输出操作(即完成了下一个数据传送的准备)时,便向CPU申请中断,CPU收到中断请求信号后,可暂停正在运行的程序,转去执行为该外设服务的中断服务子程序,完成主机与外设间的数据交换,数据传送完毕仍返回原来被中断的主程序继续执行。外设的I/O操作速度较慢,中断传送方式恰恰在这段较慢的过程中让主机和各个外设并行工作;仅仅在外设I/O过程完成后要求与主机交换数据时才暂停CPU主程序运行,而CPU传送输入输出的数据到端口是很快的,因此中断方式基本实现了主机和外设的并行工作。中断方式的接口电路及其工作过程见后述。,6.2.4 DMA(直接存储器存取)方式,中断传送方式要中断主程序,每次都要保护断点、保护现场、进入中断服务子程序,中断服务完毕又要恢复现场、恢复断点、返回主程序,操作繁多步骤重复,对低速外设和数据量不大的I/O操作,这些缺点不明显,中断传送不失为一种行之有效的传送方式。但对成批高速数据传输效率就较低,这时常采用DMA(Direct Memory Access:直接存储器存取)方式。DMA用硬件在外设和内存之间开辟直接的数据传输通道,这是一种不需要CPU介入的高速数据传输方法,对这一数据传输过程进行控制的硬件称为DMAC(DMA控制器)。一般情况下CPU控制、管理着系统的数据总线、地址总线和控制总线,运行程序;而当进入DMA方式(内存和外设直接交换数据)时,CPU让出上述三类总线:CPU连接这些总线的三态门处于高阻状态,而由DMAC对总线进行控制和管理,直接沟通外设和内存交换数据。随着VLSI的发展,适应实际的需要,许多DMAC可以在同类或异类两个端口(源和目的)之间传送数据,即还可以在存储器和存储器、I/O设备和I/O设备之间传送数据。这已突破了DMA原本含义。,6.2.4 DMA(直接存储器存取)方式(续),CPU只要有总线请求输入引脚(HOLD)和总线响应输出引脚(HLDA)即可为系统设置DMA传输。80 x86 CPU的DMA方式接口电路如下图所示。,6.2.4 DMA(直接存储器存取)方式(续),直接存储器存取方式工作过程如下:当外设准备就绪后,通过I/O端口向DMAC发出“DMA请求”信号,要求 DMA传送;接着DMAC向CPU发出HOLD总线请求信号,请求接管总线;CPU收到HOLD信号,如果不在总线封锁状态,则在现行总线周期结束 后便给于响应,给出HLDA信号到DMAC,使CPU与三态的系统总线(数 据、地址和状态/控制线)浮空;DMAC收到HLDA后,立即接管总线,并向I/O端口回送“DMA响应”信号,通知外设进行DMA传送。进行DMA传送。DMA传送的内存地址、读写控制信号及传送的字节数 或字数由DMAC控制(通过对DMAC事先初始化编程来设置)。DMA传送结束。设定的字节数或字数传送完毕,或者外部给一个结束 传送的控制信号,DMAC撤消向CPU的总线请求信号HOLD,CPU也撤除 总线响应信号HLDA,重新控制系统总线继续运行原来的程序。,6.2.4 DMA(直接存储器存取)方式(续),DMA 数据传送有两种基本方式:字节方式 每次总线请求只传送一个字节数据,传送完一个字节后 释放总线,接着由CPU执行总线周期操作,两者交替运行,直到DMA传 送结束。字块方式 总线请求后连续传送一个数据块,待数据块全部传送完 毕才释放总线。DMA操作有三种执行方法。CPU停止访问内存 这是最常用最简单的方法。如前面所介绍的那样,DMAC的总线请求迫使CPU让出总线控制权(CPU在当前总线周期结束后 使数据、地址和三态控制引脚处于浮空状态),由DMAC控制总线进行 DMA传送,直到DMA传送结束,撤消DMA请求,CPU才恢复对总线的控制,继续执行被中止了的指令周期。在DMA传送期间CPU只执行不需要总线 传输的内部操作,这些操作执行完后动态停机。,6.2.4 DMA(直接存储器存取)方式(续),周期挪用(Cycle Stealing)外设有DMA请求并得到CPU响应,CPU让出一个周 期的总线控制权,由DMA控制器控制系统总线,挪用一个存取周期传送一个字 节或一个字;然后DMA控制器将总线控制权交回CPU,CPU继续进行自己的操作,等待下一个DMA请求的到来。重复上述过程,直至数据块传输完毕。这实际上 就是微机中常用的字节传送方式。若在同一时刻,发生CPU与DMA的访问内存冲突,则DMA访问优先,CPU等 待一个存取周期。当内存工作速度高出外设较多时采用周期挪用法可以提高内存利用率,对CPU的影响较小。若在DMA传输期间CPU无须访问内存,则该法对CPU执 行程序无影响。周期扩展 当需要进行DMA操作时,由DMAC发出请求信号给专门的时钟发生器 驱动器电路,使之提供给CPU的总线周期展宽,而提供给存储器和DMAC的不 变。这样CPU完成指令规定的操作后仍有几个相当于原有时钟周期的时间(给CPU的总线周期已展宽)留给存储器和DMAC进行DMA传送。MC6844就是可以使 用这种方法的DMAC。周期扩展方法使CPU处理速度减慢,而且扩展的宽度受到限制,一次只 能传送一个字节。DMA传送只需CPU和DMAC各有一对相应的请求响应联络线而无需附加外部逻辑电路,例如:8088 CPU的HOLD8237 DMAC的HRQ 8088 CPU的HLDA8237DMA 的HLDA,6.2.5 通道控制方式,通道是具有特殊功能的处理器,有自己的指令和程序专门负责数据输入输出的传输控制。采用通道方式,CPU只负责数据处理,而将传输控制权交给通道,通道和CPU分时使用内存,实现了CPU内部运算同外设数据输入输出操作之间的近乎完全的并行操作,进一步减少了数据I/O对整个系统运行效率的影响。采用通道方式的输入输出系统,一般使用主机通道设备控制器I/O设备四级连接方式,一台主机可连接多个通道,每个通道可连接若干台不同种类、具有不同传输速率的设备控制器和外设,每个设备控制器可连接一台或几台外设。通道方式增加了CPU与通道操作的并行能力,同时允许用户灵活增加外设数量和种类。通道是完成输入输出操作的主要部件,CPU启动通道后,通道自动从内存取出指令执行通道管理程序,实施对I/O系统的有效管理和控制,直到数据传输结束再向CPU通告(发中断请求)。通道的应用实例请参阅8.6.2小节。,6.2.5 通道控制方式(续),按各设备共享通道的情况,有字节多路通道、选择通道和数组多路通道。字节多路通道 这是一种简单的共享通道,每台设备轮流占用一个很短的时间片,不同设备在各自时间片内占用通道执行各自的数据传输操作。字节多路通道有多个子通道,每个子通道都有I/O请求标志/控制寄存器、字节缓冲寄存器、字节计数器、内存地址寄存器,所有子通道共享相同的控制部件。每个子通道服务于一个设备控制器,它们的有关程序和数据存放在内存中相应的固定区域,当需要与某个设备进行数据交换时,就从内存取出相应的指令和参数,送到共享的公共控制部分。字节多路通道分时服务于多台低速和中速外设。选择通道 选择通道每次只从所连接的设备中选择一台设备的连接程序、独占整个通道持续执行,直到数据传输结束才能再为下一台设备服务。选择通道成组传输数据,每次传输一组数据(即一个数据块),传输率很高,适用于快速设备。数组多路通道 数组多路通道有多个子通道,每个子通道像字节多路通道一样共享总通道,同时其中的数据又按选择通道方式成组传送。因此数组多路通道具有多路并行操作能力,而且又有很高的数据传输速率,把字节多路通道和选择通道的长处结合在一起,其控制电路相对复杂些。,6.2.6 I/O处理机方式,IOP(Input-Output Processor:输入输出处理机)是通道结构的进一步发展。IOP具有单独的存储器和运算部件,并可以访问系统内存。除数据传送,IOP还能处理传送中的差错和异常情况,能对传送的数据进行格式转换、对数据块进行校验。IOP与CPU借助在内存中共享信息实现彼此间的通讯。通常在系统加电或复位时对IOP进行初始化:在内存中为IOP建立一个“初始化控制块”,其中包括系统结构块指针、通道控制块和系统结构块。输入/输出操作时,IOP读取通道控制块中的通道命令,确定进行哪种操作,用控制块的参数指针找到存放执行通道程序时所需的参数(如任务块的地址等等),利用参数块在IOP和CPU之间建立起数据联系IOP执行任务块中的通道程序完成相应的输入输出操作。IOP的操作是和CPU并行进行的,整个系统效率很高。IOP既可以控制慢速外设,又可以控制快速外设。8089IOP就是一种高性能的单片通用I/O系统。当8086或8088按最大方式组成系统时,8089 IOP可作为输入输出处理机负责系统的全部I/O操作。8089内部有两个独立的I/O通道,其中每一个都兼有处理机功能和非常灵活的DMAC功能。8089 IOP约有50条处理输入输出的指令,它承担所有外设控制器的工作,执行程序控制的数据传输和DMA传送,并能从“软”I/O错误中恢复正常工作而无须CPU干预。8089 IOP单一+5V电源,采用40引脚双列直插式封装。,6.3 可编程中断控制器,6.3.1 中断概述1.中断与异常通常所谓中断,就是在程序运行过程中,由于某种紧急事件的出现而暂停当前程序的执行,将程序的流程转向紧急事件的中断服务程序,待中断处理结束后再返回原来的程序继续运行。处理器为中断程序的处理提供了两种机制:中断(Interrupts)和异常(Exceptions)。中断是由I/O设备触发引起的一个异步事件,异常是处理器正在执行一条指令时检测到一个或多个满足预先设置条件而产生的一个同步事件。处理器对中断和异常的响应本质上是一样的,即响应时处理器都暂停当前程序的执行,转向去执行(已经预先编写好的)用于处理中断或异常的一段程序的过程。引起计算机程序中断的事件,称为中断源,意即中断请求的来源。中断源通常有以下几种:外部设备,如打印机、键盘等;数据通道中断源,如磁盘、磁带等;实时时钟;故障源,如电源掉电、除法运算出错等;软件调用,如系统功能调用、设置断点运行程序等。,1.中断与异常(续),异常按照通报异常的方式和是否支持引起异常指令的再启动分为故障(Fault)、陷阱(Trap)和失败(Aborts)。故障 Fault是指出现异常条件的指令在执行前就被检测出来,并对它进行处理,然后返回再执行该条指令的异常。如在虚拟存储系统中当CPU访问的“页”不在物理内存中时就出现缺页“故障”,这时操作系统将从磁盘中读取这一“页”,再重新执行该指令。陷阱 Trap又称自陷,指发生异常的指令执行后被检测到,并马上进行处理(例如给出报警等),用户所定义的中断就是陷阱的例子。失败 Aborts又称死机,不能确定产生异常的指令所在的具体位置。常常用来通报一些严重错误。中断服务子程序执行完毕返回的是被中断的下一条指令,而异常故障处理程序的返回地址则指向引起该异常的指令。,2 中断系统功能,中断系统是计算机用中断方式实现所追求功能的软硬件总称。通常在处理器中配置中断机构、在外设接口电路中配置中断控制器,用软件设计各个中断源相应的服务程序。中断系统能实现如下的功能:分时操作 中断系统既可使CPU分时执行多个用户程序和多道作业(但给每个用户的感觉却是自己正在独占整个系统),还可使多个外 设和CPU并行工作,而每个外设在输入或输出操作完毕都能得到CPU 的及时服务,使之一直处于有效的工作状态,解决高速主机和低速 外设速度不匹配的矛盾,极大提高主机系统吞吐率。实时处理 在实时控制系统中,控制对象的许多服务要求是随机发 生的,而且要求立即响应,即时完成,如生产过程中的温度、压力 等参数越界、飞行参数的修正、订票系统的应答等等。故障处理 中断系统可及时对外设、CPU本身及其它部分的硬软件 故障进行处理而不致造成错误后果甚至严重损失。基本功能调用 在PC机中,通过软件中断可实现DOS功能调用和基本 BIOS调用。,3.中断处理过程,中断处理过程从中断请求开始,接着CPU响应中断并识别中断源,然后执行相应的中断服务子程序,中断服务结束恢复主程序现场后返回主程序的断点处继续执行。中断请求外部中断源在一次I/O操作完成或者校验出错时,经中断请求输入引脚(INTR或NMI)向CPU提出中断请求。内部中断则是程序运行状态符合特定条件而在CPU内部产生,与外部的中断请求信号无关。在中断接口电路中,可以很方便地通过编程对外部中断源加以屏蔽,禁止某些中断源在一定时间内向CPU申请中断。某些内部中断也可通过对状态/控制标志位的设置来控制其发生。CPU对中断的响应对不同类型的中断请求,CPU响应的条件也是不同的。对内部中断请求,CPU在当前指令执行到最后一个总线周期的最后一个T状态时予以响应,接着就转去执行中断服务子程序。NMI引脚的正跳沿将CPU内中断触发器置“1”,CPU也是在当前指令周期的最后一个T状态对之采样,若为1就进入中断响应总线周期。对经引脚INTR来的可屏蔽中断请求(高电平),CPU是否在当前指令结束时响应中断请求,还视CPU内部标志寄存器FL的中断允许标志位IF而定。当IF=1时则允许响应中断,当前指令结束后进入中断响应总线周期;若IF=0则对INTR引脚上的中断请求不予响应,当前指令执行完毕接着执行下一条指令。IF的状态可用指令来设置。当开始执行重要的程序段而不想被外界中断源中断时,可用指令CLI使IF为0。,3.中断处理过程(续),不管对任何类型的中断,只有在当前指令执行完毕后才能予以响应。当CPU进入中断响应总线周期后,IF立即变为0,直到执行开中断指令STI改变其状态之前,不再响应新的INTR中断请求。(3)识别中断源CPU响应中断后就要寻找中断源,以便为其服务。识别中断源是中断接口电路的重要任务之一。查询法以软件为主,即在CPU响应中断后执行中断源识别程序来查询中断源。中断接口电路对每个中断源设置一个状态标志供CPU查询。当被查询的外设其状态标志为1(发生中断请求)时,中断源识别程序便转到相应的中断服务子程序去执行。为减少平均查询时间,可对中断频度高的中断源优先查询,也可以每次中断响应后按序改变各中断源的查询顺序使各中断源的平均等待时间趋于相同。硬件排队电路(如菊花链电路等)由硬件自动对中断源进行识别、响应,高速可靠。矢量中断方式被广泛采用,中断接口电路对每个中断源设置中断标识码(即中断类型码),在CPU响应中断时,中断接口控制逻辑将申请中断的优先级最高的中断源的中断标识码送上数据总线,CPU读入并据此到内存中断矢量表内寻找到中断服务子程序入口地址。,3.中断处理过程(续),(4)保护现场和中断服务中断服务完毕要返回主程序,为此主程序的断点必须送入堆栈加以保护,而且主程序的现场信息(如标志寄存器的当前值、各有关寄存器甚至相关内存单元中的内容)也都要保存起来,因为中断服务子程序也可能使用这些有关单元而改变了它们在主程序断点处的值。标志寄存器的当前值在CPU从数据总线上获得中断类型码以后自动被推入堆栈,随后中断允许标志IF和单步标志TF被清零,在中断响应后暂时屏蔽外部INTR中断和单步中断;接着断点入栈保护。其它现场信息如有关寄存器甚至相关内存单元的内容一般在中断服务子程序开始后或主程序中断调用(仅限于中断调用!)前,用指令压入堆栈加以保护;对外部的硬件中断由于中断请求是随机发生的,必须在中断服务子程序开始后入栈保存,而无法在主程序中事先安排。在一般情况下,现场保护后可用STI指令使中断允许标志IF置位,让CPU开放中断,以便允许在中断服务过程中响应优先级更高的中断源中断请求,实现中断嵌套。中断服务具体内容是中断服务子程序的主体。外设和中断源的多样性决定了它们的要求和功能是各种各样的,每个中断源的服务子程序各不相同。,3.中断处理过程(续),(5)恢复现场和返回主程序中断服务子程序末尾是一系列堆栈弹出指令,以恢复主程序中断时的现场;最后是退出中断服务的中断返回指令IRET,该指令使堆栈中保存的断点和标志分别装入IP/EIP、CS和FL/EFL,返回主程序断点处继续往下运行。恢复标志寄存器内容是恢复现场的一部分。非屏蔽中断和内部中断不受IF位屏蔽,而这类中断被响应后也同样使IF为零。因此中断响应使IF和TF为0前必须先将标志寄存器入栈,以便在恢复现场时将IF、TF和其它标志位一起完整地加以恢复。,4.中断矢量、中断矢量表与中断描述符表,如何找到各个中断源相应的中断服务子程序呢?中断服务子程序的入口地址由段基址和偏移量组成,称为中断矢量。16位微机把各个中断源的中断矢量(由4个字节组成)集中在一起,连续存放在内存的03FFH的1024个存储单元内,形成中断矢量表。在中断矢量表中,每个服务程序入口地址(即中断矢量)有4个字节,占4个存储单元,前两个字节为中断服务子程序入口地址中的偏移量,后两个字节为入口地址中的段地址,都是低字节在前,高字节在后。1024个存储单元可存放256个中断矢量,每个中断矢量在表中位置的序号(0255)就是相应中断源的中断类型码,又叫中断号、中断标识码。因此,中断源的中断类型码乘以4就是该中断源的中断服务子程序入口地址在中断矢量表中的存放位置,如左图所示。,4.中断矢量、中断矢量表与中断描述符表(续),由图可知:中断类型码决定于中断矢量在中断矢量表中的位置。如图中示例:类型码为20H的中断源的中断矢量为7050:3010H。中断矢量表中的前5个是专用中断,其中除了非屏蔽中断外,其它几个中断都是软件中断。类型5到类型31(1FH)的27个中断是保留给系统使用的,用户一般不对这些中断自行定义。其余相当多的中断类型已有了固定用途,如21H类型中断是DOS系统功能调用、10H类型是ROM BIOS的屏幕I/O中断调用等等,它们都有相对固定的用途。矢量表中还有若干保留未用的,用户可按需要自行定义。32位微机通过中断描述符将中断号与其对应的中断服务子程序的入口联系起来,每个中断描述符有8个字节(64位),包含32位的偏移量、16位段选择子,以及描述符特权级、段存在标志、门大小标志等。将所有异常和中断描述符集中起来、连续存放在内存中,就构成中断描述符表IDT(Interrupt Description Table)。IDT中包含不超过256个中断描述符,大小不超过2048B;中断号是中断描述符在IDT中的位置序号,将中断号乘以8得到相应中断(或异常)源的中断描述符的索引值(在IDT中的偏移地址),中断描述符表寄存器IDTR(48位)有32位IDT基地址和16位IDT界限,CPU通过IDTR确定IDT基址,再加上中断号*8得到矢量号索引并检查是否越界,若超出IDT界限则产生一个常规保护异常。,注:指令UD2只在第六代微处理器中使用 386以后的微处理器不产生该异常 对界检查异常只在80486微处理器中使用 该异常从第五代微处理器开始引入,在第六代微处理器中得到加强,CPU根据中断号n,通过中断矢量表或中断描述符表可以方便、快捷地得到中断服务子程序入口地址。对16位微机,将n乘以4得到中断矢量的存储地址4n,然后将(4n+1)(4n)IP,(4n+3)(4n+2)CS,CS:IP就指向了中断服务子程序。对32位微机,中断服务子程序的调用如下图所示。,5.中断分类及中断响应过程,基本中断分类 PC系列机的中断系统以8259类的可编程中断控制器为基础,基本的PC机有一个简单灵活而强有力的中断系统,可以处理256种不同的中断。每一个中断源对应一个中断号(即中断类型码,也称中断识别码),256种中断对应的中断类型码为0255。256