搜索
首页 电脑/网络 程序设计 其他编程语言

中断控制器8259a的基本功能是什么?

中断控制器8259a的基本功能是什么?它有哪些命令字

全部回答

2018-03-23

142 0

    8259A芯片是一个中断管理芯片,中断的来源除了来自于硬件自身的NMI中断和来自于软件的INT n指令造成的软件中断之外,还有来自于外部硬件设备的中断,这些中断是可屏蔽的。
  这些中断也都通过PIC(Programmable Interrupt Controller)进行控制,并传递给CPU。   一个8259A芯片的可以接最多8个中断源,但由于可以将2个或多个8259A芯片级连(cascade),并且最多可以级连到9个,所以最多可以接64个中断源。
  如今绝大多数的PC都拥有两个8259A,这样 最多可以接收15个中断源。 通过8259A可以对单个中断源进行屏蔽。   在一个8259A芯片有如下几个内部寄存器 Interrupt Mask Register (IMR)。
   Interrupt Request Register (IRR)。 In Service Register (ISR)。 IMR被用作过滤被屏蔽的中断,IRR被用作暂时放置未被进一步处理的Interrupt,当一个Interrupt正在被CPU处理时,此中断被放置在ISR中。
     除了这几个寄存器之外,8259A还有一个单元叫做Priority Resolver,当多个中断同时发生时,Priority Resolver根据它们的优先级,将高优先级者优先传递给CPU。
   8259A工作原理 当一个中断请求从IR0到IR7中的某根线到达IMR时,IMR首先判断此IR是否被屏蔽,如果被屏蔽,则此中断请求被丢弃;否则,则将其放入IRR中。   在此中断请求不能进行下一步处理之前,它一直被放在IRR中。
  一旦发现处理中断的时机已到,Priority Resolver将从所有被放置于IRR中的中断中挑选出一个优先级最高的中断,将其传递给CPU去处理。IR号越低的中断优先级别越高,比如IR0的优先级别是最高的。
     8259A通过发送一个INTR(Interrupt Request)信号给CPU,通知CPU有一个中断到达。CPU收到这个信号后,会暂停执行下一条指令,然后发送一个INTA(Interrupt Acknowledge)信号给8259A。
  8259A收到这个信号之后,马上将ISR中对应此中断请求的Bit设置,同时IRR中相应的bit会被reset。  比如,如果当前的中断请求是IR3的话,那么ISR中的bit-3就会被设置,IRR中IR3对应的bit就会被reset。
  这表示此中断请求正在被CPU处理,而不是正在等待CPU处理。 随后,CPU会再次发送一个INTA信号给8259A,要求它告诉CPU此中断请求的中断向量是什么,这是一个从0到255的一个数。  8259A根据被设置的起始向量号(起始向量号通过中断控制字ICW2被初始化)加上中断请求号计算出中断向量号,并将其放置在Data Bus上。
  比如被初始化的起始向量号为8,当前的中断请求为IR3,则计算出的中断向量为8+3=11。 CPU从Data Bus上得到这个中断向量之后,就去IDT中找到相应的中断服务程序ISR,并调用它。  如果8259A的End of Interrupt (EOI)通知被设定位人工模式,那么当ISR处理完该处理的事情之后,应该发送一个EOI给8259A。
   8259A得到EOI通知之后,ISR寄存器中对应于此中断请求的Bit会被Reset。 如果8259A的End of Interrupt (EOI)通知被设定位自动模式,那么在第2个INTA信号收到后,8259A ISR寄存器中对应于此中断请求的Bit就会被Reset。
     在此期间,如果又有新的中断请求到达,并被放置于IRR中,如果这些新的中断请求中有比在ISR寄存中放置的所有中断优先级别还高的话,那么这些高优先级别的中断请求将会被马上按照上述过程进行处理;否则,这些中断将会被放在IRR中,直到ISR中高优先级别的中断被处理结束,也就是说知道ISR寄存器中高优先级别的bit被Reset为止。
     2IRQ2/IRQ9 Redirection 兼容性 为什么要将IRQ2重定向到IRQ9上?这仍然是由于兼容性问题造成的。 早期的IBM PC/XT只有一个8259A,这样就只能处理8种IRQ。
  但很快就发现这根本不能满足需求。所以到了IBM PC/AT,又以级连的方式增加了一个8259A,这样就可以多处理7种IRQ。  原来的8259A被称作Master PIC,新增的被称作Slave PIC。
  但由于CPU只有1根中断线,Slave PIC不得不级连在Master PIC上,占用了IRQ2,那么在IBM PC/XT上使用IRQ2的设备将无法再使用它;但新的系统又必须和原有系统保持兼容,怎么办? 新增特性 由于新增加的Slave PIC在原有系统中不存在,所以,设计者从Slave PIC的IRQ中挑出IRQ9,要求软件设计者将原来的IRQ2重定向到IRQ9上,也就是说IRQ9的中断服务程序需要去掉用IRQ2的中断服务程序。
    这样,将原来接在IRQ2上的设备现在接在IRQ9上,在软件上只需要增加IRQ9的中断服务程序,由它调用IRQ2的中断服务程序,就可以和原有系统保持兼容。而在当时,增加的IRQ9中断服务程序是由PC开发商开发的BIOS提供的,不需要用户进行另外设置。
  所以就从根本上保证了兼容。   3Programming the 8259As 每一个8259A芯片都有两个I/O ports,程序员可以通过它们对8259A进行编程。 Master 8259A的端口地址是0x20,0x21;Slave 8259A的端口地址是0xA0,0xA1。
   8259As的口令 程序员可以向8259A写两种命令字: Initialization Command Word (ICW);这种命令字被用作对8259A芯片的初始化。   Operation Command Word (OCW):这种命令被用来向8259A发布命令,以对其进行控制。
  OCW可以在8259A被初始化之后的任何时候被使用。 Master 8259A 下表的内容是Master 8259A的I/O端口地址,以及通过它们所能操作的寄存器。   Address Read/Write Function 0x20 Write Initialization Command Word 1 (ICW1) Write Operation Command Word 2 (OCW2) Write Operation Command Word 3 (OCW3) Read Interrupt Request Register (IRR) Read In-Service Register (ISR) 0x21 Write Initialization Command Word 2 (ICW2) Write Initialization Command Word 3 (ICW3) Write Initialization Command Word 4 (ICW4) Read/Write Interrupt Mask Register (IMR) Addresses/Registers for Master 8259A Slave 8259A 下表的内容是Slave 8259A的I/O端口地址,以及通过它们所能操作的寄存器。
     Address Read/Write Function 0xA0 Write Initialization Command Word 1 (ICW1) Write Operation Command Word 2 (OCW2) Write Operation Command Word 3 (OCW3) Read Interrupt Request Register (IRR) Read In-Service Register (ISR) 0xA1 Write Initialization Command Word 2 (ICW2) Write Initialization Command Word 3 (ICW3) Write Initialization Command Word 4 (ICW4) Read/Write Interrupt Mask Register (IMR) Addresses/Registers for Slave 8259A 由于8259A芯片不仅能够用于IBM PC/X86,也可以被用作MCS-80/85,对于这两者,在操作模式上有一些不一样,对于某些寄存器的设置也有所不同。
    我们后面仅仅讨论X86模式相关的内容。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
其他编程语言
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
程序设计
其他编程语言
数据库
C/C++
VB
JAVA相关
C#/.NET
VC++
汇编语言
其他编程语言
其他编程语言
举报
举报原因(必选):
取消确定举报