锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【计算机原理与接口技术(UNIX)⑯】——中断系统 [ 2万5千字总结、8259A ]

时间:2023-04-15 22:37:00 sl连接电缆26针db直插连接器


? 通过对 【计算机与UNIX汇编原理 ① ~ ?】我们已经大致掌握了学习汇编程序设计的相关知识

接下来,我将其列名改为 计算机原理和接口技术(UNIX) 】,重点将放在 “计算机原理与接口技术” 上

在这里插入图片描述
写了两周,终于完成了施工… ?? ??


文章目录

  • 一、中断系统-基础知识点
    • 1.1 复习中断控制模式
    • 1.2 中断源及中断分类
    • 1.3 中断类型码、中断向量表和中断向量表
    • 1.4 中断响应和处理过程
  • 二、多级中断管理-基础知识点
    • 2.1 中断优先级和中断分级
    • 2.2 禁止中断、中断屏蔽和中断嵌套
    • 2.3 中断系统的基本功能
  • 三、80X86的中断指令
    • 3.1 开中断指令(STI) 与 关中断指令(CLI)
    • 3.2 软件中断指令 INT n
    • 3.3 中断返回指令 IRET
    • 3.4 溢出中断指令 INTO
  • 四、 中断控制器8259A ???
    • 4.1 8259A的功能
    • 4.2 8259A的结构 ??
      • 4.2.1 8259A 八个重要的基本部件
      • 4.2.2 8259A 的外部引脚
      • 4.2.3 8259A 的工作流程 —— CPU响应可以屏蔽硬件中断的过程
    • 4.3 8259A中断管理模式
      • 4.3.1 中断触发
      • 4.3.2 中断屏蔽
      • 4.3.3 优先管理模式中断
      • 4.3.4 嵌套中断
      • 4.3.5 处理方法中断结束
    • 4.4 8259A 的初始化(编程)
      • 4.4.1 命令字的初始化 ICW(四种)
      • 4.4.2 操作命令字 OCW(三种)
      • 4.4.3 8259A 编程步骤的初始化
  • 五、PC系列中断系统
    • 5.1 PC 系列机一般中断管理模式
    • 5.2 非屏蔽中断
    • 5.3 可屏蔽中断
  • 六、中断和应用于微型计算机系统的例子
    • 6.1 日时钟中断
      • 6.1.1 介绍和执行过程
      • 6.1.2 开发应用时的注意事项
      • 6.1.3 具体样例 ??【终于开始编程】
    • 6.2 键盘中断
      • 6.2.1 中断源和中断类型
      • 6.2.2 键盘中断处理过程
      • 6.2.3 键盘中断开发应用
    • 6.3 实时(时钟)中断【了解】
      • 6.3.1 中断源和中断类型
      • 6.3.2 系统实时钟中断处理流程:
      • 6.3.3 系统实时钟中断开发应用程序
    • 6.4 用户中断 ???
      • 6.4.1 中断源和中断类型
      • 6.4.2 系统用户中断处理流程
      • 6.4.3 用户中断开发应用
      • 6.4.4 用户中断开发应用程序的例子
  • 七、硬件中断与软件中断的区别
  • 八、总结(掌握要点)
  • 九、参考附录


interrupt ??

上一篇文章链接:计算机原理和接口技术(UNIX)?】——输入/输出系统查询,中断控制DMA 、8237A】.
下一篇文章链接:计算机原理和接口技术(UNIX)?】——微型计算机系统串行通信 [ 8250 具体样例 上机实验].


一、中断系统-基础知识点

● 中断技术是现代计算机系统中非常重要的功能。最初,中断技术引入计算机系统只是为了快速解决问题 CPU 数据传输与慢外设的矛盾。随着计算机技术的发展,它不断被赋予新的功能——>接下来,我们将学习计算机故障检测、多程序分时操作等。

● 这里的中断技术可以理解为上一节 中断控制模式 升级展开版 (上一篇文章)。


1.1 复习中断控制模式

中断:CPU 在执行过程中,由于某些外部或内部事件的作用, CPU 停止当前正在执行的程序,转移到事件服务中。事件服务结束后,可自动返回中断程序执行过程。

说明中断流程图
??① 中断的原程序称为主程序。
??② 中断处理程序称为中断服务子程序。
??③ 中止主程序的地方称为断点,也就是下一个指令所在内存的地址。

● 温暖(在上一篇文章中) 中断控制模式)详细执行流程

说明
??[1] ①和②都是初始化 “打开”。
??[2] 准备好输入设备数据后,进行③(输入选定的通信号并将数据写入接口)
??[3] 然后。输入接口会向 CPU 进行④(发出中断请求)
??[4] CPU 接到中断请求后,将进行⑤(回复中断响应,表示 CPU 准备好了)
??[5] 然后,CPU 就进行⑥(转而执行中断服务子程序)
??[6] 接,输入接口就会把接口里的数据收过来(即⑦)
  [7] 最后,完成一次数据输入操作后,执行⑧(最后返回到①)


1.2 中断源及中断分类

中断源:能够引发中断的事件,即发出中断请求的来源。(中断源可以是外部事件,也可以是 CPU 内部事件)

外部中断源举例
  ① I/O设备 —— 如键盘、
显示器、打印机
  ② 数据通道 —— 如磁带、磁盘
  ③ 时钟 —— 如8254 0#,由此引发的中断
  ④ 故障源 —— 如掉电、存贮器奇偶校验错

内部中断源举例
  ① 执行INT软件中断指令 —— 如执行指令INT 21H【 注意,这里的 21H 是一个数,后面还会出现另一个”21H“,留个神】
  ② CPU指令执行产生的异常 —— 如被0除、单步执行

根据中断源的不同,中断可被分为:外部中断和内部中断。

外部中断:由外部事件引发的中断,即由 CPU 以外的设备发出,并由 CPU 的中断请求信号引脚输入所引发的中断。(也被称为硬件中断)

● 80X86 CPU有2个引脚(INTRNMI)可以接收外部的中断请求信号。由输入到INTR引脚的中断请求信号引发的中断称为可屏蔽硬件中断。由输入到NMI引脚的中断请求信号引发的中断称为非屏蔽硬件中断( INTR、NMI 这个要记住,后面常提到这个)

内部中断:由 CPU 内部事件,即由 CPU 硬件故障或程序执行中的事件所引发的中断称为内部中断。内部中断可以进一步分为软件中断异常

软件中断:执行有定义的INT n;指令而引发的中断。软件中断可分为BIOS中断、DOS中断。DOS中断,又分为 DOS 专用中断、DOS保留中断,用户可调用的DOS中断以及保留给用户开发的中断。

异常:由于 CPU 本身故障、程序故障等引发的中断。 异常有进一步可分为故障(Fault)、陷阱(Trap)、中止(Abort)。这三个作了解即可。


1.3 中断类型码、中断向量表和中断向量表

中断类型码:为了区别这些不同的中断,微机系统给每一个中断分配的一个中断号n。其取值范围是0~255

● 微机系统可以处理256种中断。在这256个中断中,intel 在它各种微处理器中都保留了前32个(0~31)为系统所专用,后224个可由用户设定。

常用中断号所对应的中断如下
  ① 0型中断 —— 除法错中断
  ② 1型中断 —— 单步或陷阱中断
  ③ 2型中断 —— 非屏蔽硬件中断
  ④ 3型中断 —— 断点中断
  ⑤ 4型中断 —— 溢出中断
  ⑥ 5型中断 —— 屏幕打印
  ⑦ 08H~0FH型中断 —— 可屏蔽硬件中断(08H 这个多记记)
  ⑧ 10H~1FH型中断 —— BIOS中断(1CH 留点儿印象)
  ⑨ 20H~3FH型中断 —— DOS中断(20H、21CH 多记记)


中断向量:在实模式下,中断向量是中断服务子程序的入口地址。

中断向量的构成:每个中断号所对应的中断向量占4字节,它由2部分组成:服务程序所在代码段的段基址(前2个字节)、服务程序入口的偏移地址(后2个字节)。其存放规律如下


中断向量表:在实模式下,系统存储器地址空间中,最低的1KB空间,即00000H~003FFH单元依次存放着256个中断号所对应的中断向量(每个中断对应的中断向量占4字节),存放这个1024字节的中断向量的存储区域就是一张中断向量表如下图所示

举例:①求08H型中断向量存放在何处?②若已知系统 RAM 的 20H~23H 单元的内容依次为 22H、33H、44H、55H,则08H型中断服务子程序入口的物理地址为?

①解:∵ 08H × 4 = 0000 1000B × 0100B = 0000 1000 00B = 20H (乘 4 相当于整体左移两位)
∴ 08H 型中断向量存于 20H~23H 单元中

②解:该物理地址 = 5544H × 16 + 3322H = 55440H + 3322H = 58762H

中断向量表的初始化
  ① 由 BIOS 设计的中断服务程序(如INT 16H, INT 10H…),它的中断向量在加电时由 BIOS 负责写入中断向量表。
  ② 由 DOS 设计的中断服务程序(如INT 21H),它的中断向量是在启动 DOS 时,由 DOS 负责写入中断向量表。
  ③ 用户程序开发的中断服务程序,由用户程序写入其中断向量。

样例:设n型中断服务程序的名字是SERVICE,如何将SERVICE的入口地址写入对应的中断向量表呢?方法如下:【方法二的在后面编程中常用到,对25、35这两个数要有感觉】

方法一: 用户自己编写程序填写中断向量
CLI		; I标志清零
PUSH	DS	; 压入段基址(保护)
MOV		AX, 0000H	
MOV		DS, AX	; 基地址是 0000H, 可自行设定
MOV		BX, 4*n	; 偏移地址是 4*n
MOV		AX, OFFSET SERVICE
MOV		[BX], AX	; 将服务程序入口偏移地址写入 4*n ~ 4*n+1 单元
MOV		AX, SEG SERVICE 
MOV		[BX+2], AX	; 将服务程序段基址写入 4*n+2 ~ 4*n+3 单元
POP 	DS	; 弹出段基址(恢复)
STI		

;-----------------------------------------------------

方法二: DOS设计 2 个子程序,专门用于中断向量的读出、写入

[ INT 21H 的35H子功能 ]
功能: 读出 n 型中断向量
入口: AL = 中断类型码
出口: ES:BX = n型中断向量

[ INT 21H 的25H子功能 ]   <----这道例题只会用到这个
功能: 写入 n 型中断向量
入口: DS = 中断服务程序所在代码段的段基址
	 DX = 中断服务程序入口的偏移地址
	 AL = 中断类型码
出口: 无 

采用方法二, 对应的程序段如下:
CLI
PUSH 	DS
PUSHA	; 用于“保护现场”
MOV		AX,SEG SERVICE
MOV		DS,AX
MOV		DX,OFFSET SERVICE	; 获取 中断服务程序入口的偏移地址 到 DX
MOV		AH,25H	; 写入 n 型中断向量, 这时需要用户进行键盘输入
MOV		AL,n	
INT 	21H		; 执行该 n 型中断
POPA	; 用于“恢复现场”
POP 	DS
STI


1.4 中断响应和处理的过程

● 微机系统中断中的各种类型中断的响应和处理过程不完全相同,主要区别在于中断类型码的获得方式不同,当 CPU 获得了中断类型码后的处理过程基本类似
  ① 对于非屏蔽硬件中断请求,CPU 内部会自动产生中断类型码。
  ② 对于可屏蔽硬件中断请求,当 CPU 处于开中断状态时,由外部中断控制器将相应的中断类型码送给 CPU。
  ③ 对于异常,中断类型码也是自动形成的。
  ④ 对于INT n指令,中断类型码即为指令中给定的n

CPU 获得了中断类型码n后,中断的处理过程如下
  ① F寄存器(状态寄存器) → 堆栈(目的:保存INT n之前的各个标志位状态)
  ② 使 F 中的 T 标志置 0 → 禁止单步操作,使 I 标志置0 → CPU处于关中断状态(目的:清除 I 标志和 T 标志,屏蔽新的可屏蔽硬件中断和单步中断)
  ③ 将主程序断口地址 → 堆栈(目的:保护主程序的断点。细节:先压入断口的段基址 CS,再压入断口的偏移量 IP)
  ④ CPU 从4n~4n+3单元取出n型服务程序入口地址 → CS:IP(目的:转入n型中断服务程序。细节:4n~4n+1单元的内容 → IP,后两个单元的内容 → CS)
  ⑤ CPU 根据新的 CS:IP 的值转向相应的n型中断服务子程序。
  ⑥ 当服务子程序执行完毕,执行中断返回指令。中断返回指令的功能是按顺序恢复断点处的 IP 值、CS 值和之前保护的相应中断前的标志寄存器内容 → 标志寄存器。
  ⑦ CPU 根据恢复后的 CS:IP 的值返回到断点,继续执行主程序。

从上述过程可发现:当 CPU 获得中断类型码后,在中断向量的引导下,CPU 即可执行相应的中断服务子程序。中断向量引导作用示意图如下

说明:在上图中的 “①②③④” 分别对应 “中断的处理过程” 的相应步骤,对照着看更清晰。注意其中的 “NEXT”是一个程序名。

中断服务子程序的结构【后面敲的代码也是这个结构】

ISR	PROC
	保护现场 
	中断处理
	恢复现场
	中断返回
ISR	ENDP


二、多级中断管理——基础知识点

2.1 中断优先与中断分级

中断优先级:当有多个中断源在同一时刻提出请求时,CPU 对中断响应的次序。

● 中断响应的次序是用排队器硬件实现的,中断优先级如下图所示。可以根据需要,由程序控制改变实际的中断处理次序。

"80X86响应中断的优先级如下:"

中断类型       优先级
除法错中断      最高
软件中断INT n    ↓
断点中断         ↓
溢出中断INTO     ↓
NMI中断         ↓		 ; 硬件中断
INTR中断        ↓		 ; 硬件中断
单步中断        最低


2.2 禁止中断、中断屏蔽与中断嵌套

禁止中断:产生中断请求后,CPU 不能中断现行程序的执行。

中断屏蔽:使程序有选择地封部分中断,而允许其余部分仍可能够响应(即能够响应中断请求)。

中断嵌套:在执行中断服务程序时,仍可再响应中断申请。(类似与 C 语言的函数嵌套)


2.3 中断系统具备的基本功能

  ① 对于硬件中断,接口电路应具备 “屏蔽” 和 “开放” 的功能,这种功能由程序员通过软件去控制。

  ② 能实现中断判优(中断排队)。即当有多个中断源提出请求时,应能优先响应高级别的中断源。

  ③ 能够实现中断嵌套。

  ④ 响应中断后,能自动转入中断处理,处理完毕能自动返回断点。



三、80X86的中断指令

3.1 开中断指令(STI) 与 关中断指令(CLI)

STI功能 :使 F 寄存器中I标志置1,CPU 处于开中断状态。

CTI功能 :使 F 寄存器中I标志置0,CPU 处于关中断状态。


3.2 软件中断指令 INT n

格式INT n
说明n为中断类型码,是0~255之间有定义的无符号整数。
功能:无条件转向n型中断服务子程序。

INT n指令执行的详细过程:【即 CPU 响应软件中断的详细过程】
  ① F 寄存器 → 栈(保存INT n之前的 F 状态)
  ② 使 F 中的T标志置0 —— 禁止单步操作
  ③ 使 F 中的I标志置0 —— CPU 处于关中断状态
  ④ 断口地址 → 栈(先:断口基地址(CS) →栈,后:断口偏移地址(IP)→栈)
  ⑤ CPU 从4n~4n+3单元取出n型服务程序入口地址 → IP:CS,从而转入n型中断服务程序。


3.3 中断返回指令 IRET

● 这个(即IRET)就是 1.4 的那张图里面的紫色框里的东西。【IRET 这个指令,后面常用,这里加个记忆】

功能:依次从栈顶弹出6个元素 → IP、CS、F。
说明:如果栈顶是INT n的断口地址,则执行IRET后,才能返回断点,否则不能。

执行INT n指令和执行IRET指令的堆栈操作示意图

注意:存储地址是上低下高。若进程进行的是RET,要分远程和进程两种情况,远程的RET是:从栈顶弹出4个元素 → IP、CS 即可。进程的RET是:从栈顶弹出2个元素 → IP 即可。【注: RET 这个指令,在 6.4 用户中断的代码里面才有出现】


3.4 溢出中断指令 INTO

功能:先判断 F 寄存器中O标志位是否为1,如是则直接调用类型为4的中断子程序,用以处理溢出中断的情况(后续将会详细学到)。



四、 中断控制器8259A ⭐⭐⭐

● 由前面的学习可知,外部中断是由 CPU 以外的中断请求而引发的。而且 CPU 也只有一个引脚INTR用来接收外部的可屏蔽硬件中断请求。

● 为了管理多个外部发来的中断源,Inter 公司设计了专门的配套芯片8259A 中断控制器”(我们将对其进行学习)。


4.1 8259A的功能

1片 8259A 中断控制器可以管理8级外部中断(打个比方,把它比作进城收费ETC收费站,他可以同时开8个车道,但是能也分级别),并最后向 CPU 提出中断请求。通过级联,采用 “1 主 8 从” 的方式,可扩展管理64级中断。(1个在前,8个接在其后)

② 每一级中断都可以通过设置内部屏蔽字进行屏蔽或允许。(我们把 ”每一级“ 假想成 ”每一通道“ 可能好理解点)

③ 在中断响应周期,8259A 可以向 CPU 提供相应的中断向量。

④ 8259A 是很复杂的中断控制器,可以通过编程从中断触发方式、中断屏蔽方式、中断优先级管理方式、中断结束方式和总线连接5个方面对中断进行管理。


4.2 8259A的结构 ⭐⭐

8259A 的内部结构图


4.2.1 8259A 的八个重要的基本部件

中断请求寄存器(IRR):一个8位的寄存器。IRR 的 D0 ~ D7 位分别对应着 IR0 ~ IR7 引脚
功能:寄存引脚 IR0 ~ IR7 的中断请求信号。(IRR 的 Di 位置为1时,表明 IRi 引脚上有了中断请求信号 )


中断屏蔽寄存器(IMR):一个8位的寄存器。IMR 的 D0 ~ D7 位分别对应着 IR0 ~ IR7 引脚。
功能:寄存程序员写入的中断屏蔽字。(屏蔽字某位 = 1 时,即 IMRi 位 = 1 时,则与该位对应的中断请求信号(IRR 的 Di 位)就不能送到中断优先权电路)


优先权电路 (排队电路):一种控制电路。
功能:比较同时送达优先权电路的中断请求,哪一个级别最高。然后通过判优 “选中” 其中级别最高的中断源,然后通过控制电路,从INT端向 CPU 提中断请求。【注重对 INT 产生点记忆】

前三者之间的关系(即①②③之间的关系)

对上图的说明:“IRR 的 D0 ~ D7 位” 分别与 “IMR 的 D0 ~ D7 位的非” 相。(比如,当 IMR 的 D0 = 1 时,则 IRR 的 D0 被屏蔽)

举例

“样例一:”
MOV	 	AL, 11111100B 
OUT	 	屏蔽寄存器(IMR)的口地址, AL
;屏蔽 IRR7 ~ IRR2 的中断请求, 只开放 IRR1,IRR0 的中断请求

“样例二:”
IN		AL, 屏蔽寄存器(IMR)的口地址
AND		AL, 11110111B
OUT		屏蔽寄存器(IMR)的口地址, AL     
;开放 IRR3 的请求, 对其它位的请求保持原状态



中断控制电路:它是 8259A 内部的控制器。它有一组寄存初始化命令字(ICW1 ~ ICW4)的寄存器和一组寄存器操作命令字(0CW1 ~ 0CW3)的寄存器,以及相关的逻辑控制(
开关)。
功能一:寄存一组初始化命令字和操作命令字,通过译码产生内部控制信号。
功能二:当判优电路选中一个中断源时,向 CPU 提中断请求 (INT)
功能三:当通过 I N T A ‾ \overline{INTA} INTA 接收 CPU 送来的中断响应信号时,中断响应信号 I N T A ‾ \overline{INTA} INTA2个连续的负脉冲。



中断服务寄存器(ISR):一个8位的寄存器。ISR 的 D0 ~ D7 位与 IRR 的 D0 ~ D7 位一一对应。

功能:记录 CPU 正为哪一个中断源服务。(例如:通过判优电路 IRR 中 D0 位的请求被选中时,8259A 会向 CPU 发出中断请求,并通过 I N T A ‾ \overline{INTA} INTA 收到第一个中断响应信号后,ISR 的 D0 位将置1,IRR 的 D0 位将置0【注重对 I N T A ‾ \overline{INTA} INTA 产生点记忆】
补充说明一:当 ISR 的 D0 位置1时,表明 CPU 正在准备(或正在)执行 IR0 的(中断)服务(子)程序;反之,如果 ISR 的 D0 位由10时,表明 IR0 的中断服务程序执行完了。
补充说明二:所以 ISR 的每一位都是响应中断源的中断服务标志位。



数据总线缓冲器:一个暂存数据的存储器。
功能一:完成与 CPU 数据线的配接
功能二:接收初始化命令字、操作命令字
功能三:当收到第二个中断响应脉冲时,通过它们向 CPU 送出被选中的中断源的中断类型码n。在这之后,CPU 会从 4n+0~4n+3 单元取出n型中断向量, 从而转入n型服务程序。



读写逻辑:一种控制读写的功能模块。
功能:接收片选信号 C S ‾ \overline{CS} CS、端口地址选择信号 A0 和读写控制信号 R D ‾ \overline{RD} RD W R ‾ \overline{WR} WR



级连/缓冲比较器
功能:一位 8259A 可以管理8级中断,二片 8259A “级联” 可管理15级中断,级连/缓冲比较器是为完成多片8259A级联设置的模块。
补充说明一:级联应用时,8259A 一片主片最多可接8片从片,扩展到64级中断。
补充说明二:级联连接时,从片的INT信号接主片的 IR0 ~ IR7 之一,并确定了在主片中的优先级,从片的 IR0 ~ IR7 接外设的中断请求信号,最终即可确定64个优先级。
补充说明三:以级联方式工作时,主 8259A 的 S P ‾ / E N ‾ \overline{SP}/\overline{EN} SP/EN 接高电平,从 8259A 的 S P ‾ / E N ‾ \overline{SP}/\overline{EN} SP/EN 接低电平。由初始化命令字 ICW4 来设置缓冲方式或非缓冲方式。


4.2.2 8259A 的外部引脚

● 8259A 是一个含有28个引脚的双列直插式芯片,其外部引脚图如下【先前让对 INT 、 I N T A ‾ \overline{INTA} INTA 多产生记忆,就是在这里体现,前面的是理论,下图就是物理实件,这两个端口引脚位置清晰可见】

8259A 的引脚信号可分为一下4

与 CPU 总线相连的(引脚)信号
  [1] D0 ~ D7:(双向三态)数据线。(与 CPU 数据总线直接相连,或与外部数据总线缓冲器相连)
  [2] W R ‾ \overline{WR} WR R D ‾ \overline{RD} RD:读写命令信号线,与 CPU 的读/写控制信号相连。
  [3] CS:片选信号线,通常接 CPU 的高位地址总线或地址译码器的输出。
  [4] INT:中断请求输出端。用于向 CPU 发出中断请求信号。
  [5] I N T A ‾ \overline{INTA} INTA:中断响应输入信号。用于接收 CPU 发来的中断响应。
  [6] A0:地址线。通常接 CPU 低位地址总线,A0 = 0 时是偶地址,A0 = 1 时是奇地址。该地址线与 W R ‾ \overline{WR} WR R D ‾ \overline{RD} RD信号配合,可读写 8259A 内部相应的寄存器,用于选择内部端口,对应图表如下:【注意对 偶地址、奇地址 产生点记忆】



与 CPU 总线相连的(引脚)信号
  IR0 ~ IR7:与外设的中断请求信号相连,通常 IR0 的优先权最高,IR7 的最低。


级联信号
  [1] CAS0 ~ CAS2:级联信号线。主片为输出,从片为输入,与 S P ‾ / E N ‾ \overline{SP}/\overline{EN} SP/EN 配合来实现级联。
  [2] S P ‾ / E N ‾ \overline{SP}/\overline{EN} SP/EN:主/从允许缓冲线。( 在缓冲工作方式中,用作输出信号,以控制总线缓冲器的接受( o v e r l i n e E N = 1 overline{EN}=1 overlineEN=1)和发送( o v e r l i n e E N = 0 overline{EN}=0 overlineEN=0)。当数据从 CPU 送往 8259A 时, S P ‾ / E N ‾ \overline{SP}/\overline{EN} SP/EN 输出为高电平;当反过来输送时为低电平。而在非缓冲工作方式中,它用作输入信号,表示该 8259A 是主片( S P ‾ = 1 \overline{SP}=1 SP=1)或从片( S P ‾ = 0 \overline{SP}=0 SP=0) )



级联信号
  [1] VCC:接+5V的电源。
  [2] GND:接地线。


4.2.3 8259A 的工作流程 —— CPU响应可屏蔽硬件中断的过程

● 8259A 的中断过程就是(微型)计算机系统响应可屏蔽硬件中断的过程。我们举一个栗子来解释其工作流程。【初始情况如下图】

工作流程说明
  ① 假设 IR0、IR6、IR7 上同时有3个中断请求信号。则 IRR 的 D0、D6、D7 都会由0变为1
  ② 因为 IMR 的 D0 = 0、D6 = 1、D7 = 0,则 IR0 和 IR7 上的中断请会被送到优先权电路,而 IR6 上的中断请求会被屏蔽。(在这之前,程序员事先已经将中断屏蔽字写入中断屏蔽寄存器 ——> 目的在于决定哪些中断请求能够送到优先权电路)
  ③ 假设 IR0 优先级高于 IR7,则排队结果选中 IR0 向 CPU 发出中断请求信号。(注:8259A 由INT引脚向 CPU 发出信号)
  ④ 假如当前 CPU 满足响应可屏蔽中断的条件,则可响应 IR0 中断,并向 8259A 发送两个连续的脉冲信号。(8259A 从引脚 I N T A ‾ \overline{INTA} INTA收到信号)
  ⑤ 8259A 收到第1个脉冲信号(中断响应信号)后,会使 ISR 的 D00变为1,同时 IRR 的 D01变为0(注:8259A 从引脚 I N T A ‾ \overline{INTA} INTA收到信号)
  ⑥ 8259A 收到第2个脉冲信号后(中断响应信号),会向 CPU 发送对应的中断类型码n
  ⑦ CPU 得到中断类型码n(假设这里为08H)后,会在中断向量表中找到对应中断向量,转而执行对应中断服务(子)程序,在服务程序中对通过 IR0 提出中断请求的外设服务。(在实模式下,CPU 会从4×n~4×n+3单元取出该中断源的中断向量 → IP、CS,从而引导 CPU 执行中断源对应的中断服务子程序)
  ⑧ 8259A 的 ISR 的 D0 会由1变为0,表示对来自 IR0 上的中断请求服务完毕。同时,CPU 在执行中断服务子程序的最后一条指令IRET时,将返回被中断的程序继续原来的任务。当然,在这个例子中,在对 IR0 上的中断请求服务完成后,假如 8259A 的 IR7 上的中断请求仍然维持有效,则可以开始以同样的过程处理 IR7 的中断请求。


4.3 8259A的中断管理方式

● 8259A 对中断的管理涉及多方面,每方面都有多种工作方式,如下图所示:

补充说明:用户可根据自己的需要,通过 8259A 初始化时写入初始化命令字和操作命令字来设置选择相应的工作方式。


4.3.1 中断触发方式

边沿触发:IRi 出现上升沿表示有中断请求。

电平触发:IRi 出现高电平表示有中断请求。


4.3.2 中断屏蔽方式

常规屏蔽方式:IMR 屏蔽字决定了允许或禁止某位 IRi 所对应的中断:IMR 的 Di = 1表示禁止, Di = 0 表示允许。

特殊屏蔽方式:提供了允许较低优先级的中断能够得到响应的特殊手段。

原理:假定当前正在处理 IR6,先进入特殊屏蔽方式,然后设置 IMR 的 D6 = 1。这时,除 IR6 外的所有中断请求均能得到响应。

注意:特殊屏蔽方式中只能用SEOI命令结束中断。


4.3.3 中断优先级管理方式

固定优先级方式:所有中断请求 IRi 的中断优先级固定不变,默认优先级顺序从高到低为 IR0 ~ IR7

循环优先级方式:中断源轮流处于最高优先级,即自动中断优先级循环。当某中断请求 IRi 被处理后,其优先级别自动降为最低,原来比它低一级的中断上升为最高级。


4.3.4 中断嵌套方式

中断嵌套方式的定义:在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。8259A 有如下两种中断嵌套方式。

普通全嵌套方式(默认方式):当某一中断正被处理时,只有更高优先级的事件可以打断当前的中断处理过程而被服务。

特殊全嵌套方式:当某一中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。


4.3.5 中断结束处理方式

中断结束处理方式定义:当某一 IRi 中断被服务时,ISR 中的相应位 Di = 1。当服务结束后,则必须清零该 Di 位。注:使 ISR 中的 Di = 0 是通过向 8259A 发出中断结束命令(EOI命令)实现的。

三种EOI命令
  ① 自动EOI(即自动EOI方式:AEOI) —— 在第2 I N T A ‾ \overline{INTA} 元器件数据手册
IC替代型号,打造电子元器件IC百科大全!

相关文章