8259A

news/2024/11/23 3:31:58/

§5.3 8259A可编程中断控制器

中断控制器是专门用来处理中断的控制芯片。它的功能是在有多个中断源的系统中,协助CPU实现对外部中断请求的管理,对它们进行优先权排队后选中当前优先权最高的中断请求向CPU发出中断请求信号;并且,当CPU响应中断请求进入中断服务子程序之后,如果有某个新的外部中断请求的优先权高于当前正在处理的最低优先权时,中断控制器还能让此中断通过而到达CPU的可屏蔽中断请求信号INTR端,从而实现中断嵌套。8259A可编程中断控制器用来管理输入到CPU的中断请求,实现优先权判决、提供中断向量、屏蔽中断输入等功能,它能直接管理8级中断。如果采用级联方式,则不用附加外部电路,就能管理64级中断输入。

 

§5.3.1 可编程中断控制器 8259A
PIC- Priority Interrupt Controller

  用于管理和控制80x86的外部中断请求,可对8个中断源实现优先级控制,提供中断类型码,并根据需要对中断源进行中断屏蔽。使用单片8259A可以管理8级中断,采用级联方式,可扩充到64级(用9片8259A)

      
                 图5.7 8259级联

 

一、 内部结构

       

1. 中断请求寄存器(interrupt request register,IRR)
  它保存从IR0~IR7来的中断请求信号。某一位为1表示相应引脚上有中断请求信号。该中断请求信号至少应保持到该请求被响应为止。中断响应后,该IR输入线上的请求信号应撤销。否则,在中断处理完结后,该IR线上的高电平可能会引起又一次中断服务。

2. 中断服务寄存器(interrupt service register,ISR)
  用于保存所有正在服务的中断源。它是8位的寄存器(IS0~IS7分别对应IR0~IR7)。在中断响应时,判优电路把发出中断请求的中断源中优先级最高的中断源所对应的位设置为1,以表示该中断请求正在处理中。
  ISR的某一位ISi置1可阻止与它同级,或更低优先级的请求被响应,但不阻止比它优先级高的中断请求被响应,即允许中断嵌套。所以,ISR中可能有不止一位被置1。
  当8259A收到“中断结束(end of Interrupt,E0I)”命令时,ISR相应位会被清除。对自动EOI操作(automatic EOI,AE0I),ISR寄存器中刚被置1的位在中断响应结束时自动复位。

3. 中断屏蔽寄存器(Interrupt mask register,IMR)
  用于存放中断屏蔽字,它的每一位分别与IR7~IR0,相对应。其中为1的位所对应的中断请求输入将被屏蔽,为0的位所对应的中断请求输入被允许。

4. 中断判优电路
  中断判优电路监测从IRR、ISR和IMR来的输入,并确定是否应向CPU发出中断请求。在中断响应时,它要确定ISR寄存器哪一位应置1,并将相应的中断类型码送给CPU。在EOI命令时,它要决定ISR寄存器哪一位应复位。

5. 7个CPU可访问的寄存器:分两组
  ▲ 初始化命令字ICW1 ICW2 ICW3 ICW4四个寄存器,系统初启时设定。
  ▲ 操作命令字对应存储在OCW1 OCW2 OCW3三个寄存器,系统运行时,由应用程序设定(实现对中断处理的动态管理和控制)。7个寄存器的寻址在8259A编程中介绍。

二、 引脚

  △ A0:地址线。在8088中,由CPU的A0接入8259的A0端;而在8086中,则由CPU的A1接人8259的A0端。IRQ0~IRQ7:8级中断请求输入。
  △ INT:中断请求信号(输出)。它用来向CPU发中断请求信号。
  △ :中断应答线(输入)。当接收CPU的应答信号后,8259A就把中断向量类型号送到数据线。
  △ :此引脚是双向信号线,分别表示两种工种方式:
  当8259A片采用缓冲方式时,则 端作为输出信号线
  当8259A片采用主从工作方式(即非缓冲方式)时,则 端作为输入信号线
  在缓冲工作方式中,当 有效时,作为输出信号允许缓冲器选通,使数据由8259A通过缓冲器读出至CPU。在主从工作方式中,作为输入信号,由该输入引脚的电平来区分“主”或“从”8259A,若输入高电平,则本片为“主”8259A,若输入低电平则为“从”8259A。

    

D0~D7双向数据线,
编程时控制字、命令字由此写入8259;
中断响应时,中断向量码由此送给CPU。

WR、RD 读写控制CS片选信号,
决定8259A在地址空间的基地址。
A0内部寄存器的选择信号,通常接地址总线的A0或A1。

主片与从片的CAS0~CAS2对应相连。
主片CAS0~CAS2为输出信号,
从片CAS0~CAS2为输入信号。


■缓冲方式
适用于在数据线上设有数据缓冲器的大型系统。尤其是具有级联8259A的系统。图示8259A经过8286双向缓冲器与数据总线相连。

         

  在级联缓冲方式下, 控制缓冲器中数据的传送方向。 =0,数据传向CPU, =1,反之。图示 接高,使初始化期间CPU发送的命令字进入8259A。

            

  CAS0~CAS2:级联控制信号。是8259A相互连接的专用总线。系统中最多可以把8级中断请求扩展为64级主从式中断请求,构成主—从式级联控制结构。
  对于“主”8259A,CAS0~CAS2为输出信号,对于“从”8259A,CAS0~CAS2为输入信号。
  主片与从片的CAS0~CAS2对应相连。从设备标志ID在编程时设定,保存在级联缓冲器中。当从片提出中断请求时,主片在第一个 脉冲结束时把优先级最高的从片的设备标志送到CAS0~CAS2上,与级联缓冲器中保存的从设备标志ID进行比较,被选中的从片在第二个 脉冲期间,把单字节的中断向量送上数据线。这个中断向量是在编程时预先设定的,保存在控制逻辑部件内。

 

<上一页 下一页>

 

 

 

 


 

 

三、 中断响应过程

当外设发出中断请求后,8259A的处理过程如下图:
  1. 中断请求输入引脚出现有效电平(电平触发、边沿触发)(IR0~IR7),则IRR的相应位置1;
  2. 8259A判断请求线中(未被屏蔽)最高优先级请求,通过INT引脚向CPU发中断请求信号;
  3. 若CPU响应该中断,在当前指令执行完后发作为响应;
  4. 8259A接到第一个脉冲,使最高优先权的ISR位置1(可阻止低级中断请求,但允许高级中断嵌套),使相应的IRR位复位;接到第二个脉冲时,8259A将中断类型码送到数据总线,CPU根据中断类型码从中断向量表中取出中断服务程序入口地址,并转去执行中断服务程序;
  5. 若8259A为自动中断结束方式(AEOI)在第二个 脉冲结束时,使中断源对应的ISR的相应位复位;对于非自动中断结束方式,由中断服务程序发EOI命令使ISR的相应位复位。

  

<上一页 下一页>

 

 

四、 工作方式

  对8259A的初始化编程即通过程序写方式控制字来确定工作方式;

  8259A的工作方式很多,进行8259A编程的前提是掌握好工作方式。8259A的初始化编程需要确定的工作方式包括:
  1. 中断优先方式
  2. 中断嵌套方式
  3. 中断结束处理方式
  4. 屏蔽中断源的方式
  5. 中断触发方式
  6. 级联工作方式

<上一页 下一页>

 
 

五、 初始化命令字和操作命令字

  8259A的编程分为初始化编程和操作方式编程两个步骤。控制命令分别为ICW初始化命令字和OCW操作命令字,保存在8259A的ICW和OCW寄存器中。
  8259A工作之前必须写入ICW使其准备就绪,OCW可以在8259A初始化以后的任何时刻写入。
  初始化编程包括两个部分:
  ※ 初始化命令字:ICW1、ICW2、ICW3、ICW4
    必须于工作之前写入初始化命令字使其处于准备就绪状态。
  ※ 操作命令字: OCW1、OCW2、OCW3
    规定8259A的操作方式,可在初始化之后的任何时刻写入。

<上一页 下一页>

 

 

 
  
§5.3.2 8259A的编程

  8259A工作之前必须用写入控制命令的方法,设定其工作在我们所需要的状态。对应8259A的初始化命令字和操作命令字,其编程可分为初始化编程和操作方式编程两个方面。

  ※ 初始化编程:
    由CPU向8259A送2~4字节的初始化命令字ICW。这是在8259A工作之前必须写入的。
  
  ※ 操作方式编程:
    由CPU向8259A送3字节的操作命令字OCW,规定其操作方式。这些可在8259A初始化之后的任何时刻写入。

<上一页 下一页>

 
   
一、 内部寄存器的寻址方法

  8259A的工作特点:内部寄存器多,而寻址只有一根地址线A0。因此存在控制字寄存器的寻址问题。8259A的内部7个控制字寄存器寻址方法:

       

  CS和A0于D4、D3相配合
  即寄存器的寻址不仅靠CS和A0,而且还靠数据线D4 D3的配合,其寻址方法列于表5.1

       

  ICW1写入偶地址且具有特征位D4=1;
  ICW2、ICW3、ICW4写入奇地址,且有严格的初始化顺序。

  对于IRR、ISR、IMR值的读出有类似规定,并由操作控制字OCW3相配合(参见OCW3)。列于表5.2。

            

  从8259A内部寄存器的寻址可以看到,8259A存在同一地址对应多个寄存器的情况。因此写入同一地址的不同寄存器时,必须按照规定的先后顺序依次写入,否则,不能完成正确的操作。严格的初始化顺序见图5.13。

                
                     图5.13 8259初始化流程图

<上一页 下一页>




 

 
    
三、8259A的初始化编程

  这里以IBM PC/AT(80286)微机中的8259A为例说明其初始化编程方法。
  在286以上的PC机中,使用了两片8259A级联,共可管理15级中断。各级中断的用途列于表5.3。

         

  主片8259A的IRQ2(即IR2)中断请求端用于级联从片8259A,所以相当于主片的IRQ2又扩展了8个中断请求端IRQ8~IRQ15。
  主片8259A的端口地址为20H、21H,中断类型码为08H~0FH,从片8259A的端口地址为A0H、A1H,中断类型码为70H~77H。主片的8级中断已全被系统使用(其中IRQ2被从片占用),从片尚保留4级未用。其中IRQ0用于日历时钟中断(08H),IRQ1用于键盘中断(09H)。扩展的IRQ8用于实时时钟中断,IRQ13来自协处理器80287。除上述中断请求信号外,所有其他的中断请求信号都来自I/O通道的扩展板。

1.8259A初始化编程
程序段如下:
主片8259A的初始化
MOV AL,llH ;写入ICWl,设定边沿触发,级联方式
OUT 20H,AL
MP INTR1 ;延时,等待8259A操作结束,下同
MOV AL,08H ;写入ICW2,设定IRQ0的中断类型码为08H
OUT 21H,AL
MP INTR2
MOV AL,04H ;写入ICW3,设定主片IRQ2级联从片
OUT 21H,Al
MP INTR3
MOV AL,11H ;写入1CW4,设定特殊全嵌套方式,一般EOI方式
OUT 2lH,AL;从片8259A的初始化
MOV AL,11H ;写入ICWl,设定边沿触发,级联方式
OUT 0A0H,AL
MP INTR5
MOV AL,70H ;写入ICW2,设定从片IR。,即IRQx的中断类型码为70H
OUT 0A1H,AL
MP INTR6
MOV AL,02H ;写入ICW3,设定从片级联到主片的IRQ:
OUT 0A1H,AL
MP INTR7
MOV AL,0lH ;写入ICW4,设定普通全嵌套方式,一般EOI方式
OUT 0A1H,AL

2. 级联工作编程
  当来自某个从片的中断请求进入服务时,主片的优先权控制逻辑不封锁这个从片,从而使来自从片的更高优先级的中断请求能被主片所识别,并向CPU发出中断请求信号。
  因此,中断服务程序结束时必须用软件来检查被服务的中断是否是该从片中惟一的中断请求。先向从片发出一个EOI命令,清除已完成服务的ISR位。然后再读出ISR的内容,检查它是否为0。如果ISR的内容为0,则向主片发一个EOI命令,清除与从片相对应的ISR位;否则,就不向主片发EOI命令,继续进行从片的中断处理,直到ISR的内容为0,再向主片发出EOI命令。
程序段如下:
读ISR的内容
MOV AL,0BH ;写入OCW3,读ISR命令
OUT 0A0H,AL
NOP ;延时,等待8259A操作结束
IN AL,0A0H ;读出ISR
向从片发EOI命令
MOV AL,20H
OUT 0A0H,AL ;写从片EOI命令
向主片发EOI命令
MOV AL,20H
OUT 20H,AL ;写主片EOI命令

<上一页 下一页>


 

http://www.ppmy.cn/news/115742.html

相关文章

可编程接口芯片8255A

微机接口技术之可编程接口芯片 文章目录 微机接口技术之可编程接口芯片可编程并行输入&#xff0f;输出接口芯片8255A功能8255A的内部结构8255A的管脚分配8255A的工作方式及编程8255A的三种工作方式方式0方式1方式2 可编程并行输入&#xff0f;输出接口芯片8255A 功能 8255A是…

8259A详解

可编程中断控制器8259A 8259A的外部引线8259A的内部结构8259A的工作过程8259A的工作方式8259A的初始化编程 8259A的外部引线 采用28脚双列直插式封装。 D0~D7:双向数据线&#xff0c;与系统的数据总线相连。编程时控制字&#xff0c;命令字由此写入&#xff1b;中断响应时&…

8259A简介

文章目录 1中断简介1.1中断1.2禁止中断与中断屏蔽1.3中断嵌套1.4中断类型号和中断向量表 2,8259A简介2.1 8259A介绍2.2 8259A内部结构2.3 8259A引脚2.3.1 与CPU相连的引脚2.3.2 与外设相连的引脚 2.4 8259a可编程寄存器 1中断简介 1.1中断 定义&#xff1a;CPU暂停当前程序的…

关于 Intel 8253/8254

Intel 8253/8254是一个可编程定时/计数器&#xff08;PIT-Programmable Interval Timer)芯片&#xff0c;用于处理计算机中的精确时间延迟。该芯片提供了 3个独立的16位计数器通道。每个通道可工作在不同的工作方式下&#xff0c; 并且这些工作方式均可以使用软件来设置。 对于…

高通8155/8295 boot分析

目录 前言 通用boot流程 8155/8295 boot流程概述 前言 本文将基于高通8155/8295 QA hypervisor平台分析整个boot的启动流程。高通其他SOC芯片的启动流程大致相同&#xff0c;所以本文也具备一定的参考性。 阅读本文需要你有一定的嵌入式开发经验或者具备一定的操作系统原理…

​​​​Linux Shell 实现一键部署Ruby3

ruby Ruby&#xff0c;一种简单快捷的面向对象&#xff08;面向对象程序设计&#xff09;脚本语言&#xff0c;在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发&#xff0c;遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp …

Python版本区别,Python 3和Python 2区别详解

目录 Python 3.x print()函数代替了print语句 Python 3.x 默认使用 UTF-8 编码 Python 3.x 除法运算 / 运算符 运算符 // Python 3.x 异常 Python 3.x 八进制字面量表示 Python 3.x 不等于运算符 Python 3.x 输入差异 Python 3.x 数据类型 Python 版本分为两大流派&am…

idea常用快捷键

ctrl快捷键 ctrln 查找类 ctrlshiftn 查找文件 ctrlshiftaltn 查找类中的方法或变量 ctrlp 方法参数提示 ctrlaltl 格式化代码 ctrlspace 代码提示 ctrlshiftu 大小写转换 ctrld 复制行 ctrlx 删除行 ctrlg 定位行 ctrlaltt 把选中的代码放到{}中 ctrl/ 或 ctrlshift/ 注释&am…