【微机原理及接口技术】中断控制器8259A

【微机原理及接口技术】中断控制器8259A


文章目录

  • 【微机原理及接口技术】中断控制器8259A
  • 前言
  • 一、介绍
  • 二、8259A的内部结构和引脚
  • 三、8259A的中断工作过程
  • 四、8259A的工作方式
  • 五、8259A的编程
  • 六、外部中断服务程序
  • 总结


前言

本篇文章将就8259芯片展开介绍,8259A的内部结构和引脚,8259A的中断工作过程,8259A的工作方式,8259A的编程以及外部中断服务程序。


一、介绍

Intel 8259A是可编程中断控制器
可用于管理Intel 8080/8085、8086/8088、80286/80386的可屏蔽中断

  • 8259A的主要功能
    具有8级优先权控制,通过级联可扩展至64级
    每一级均可通过编程实现屏蔽开放
    能向CPU提供相应的中断类型号
    可通过编程选择不同的工作方式

二、8259A的内部结构和引脚

在这里插入图片描述

  • 1. 中断控制
    中断请求寄存器IRR
    保存8条外设中断请求信号IR0~IR7的请求状态
    Di=1:IRi引脚有中断请求
    Di=0:IRi引脚无中断请求
    中断服务寄存器ISR
    保存正在被8259A服务着的中断状态
    Di=1:IRi中断正在服务中
    Di=0:IRi中断没有被服务
    中断屏蔽寄存器IMR
    保存对中断请求信号IRi的屏蔽状态
    Di=1:IRi中断被屏蔽(禁止)
    Di=0:IRi中断被开放(允许)
  • 2. 读写控制
    在这里插入图片描述
  • 3. 中断级连
    一个系统中,8259A可以级连,有一个主8259A,若干个(最多8个)从8259A
    级连时,主8259A的三条级连线CAS0~CAS2作为输出线,连至每个从8259A的CAS0~CAS2
    每个从8259A的中断请求信号INT,连至主8259A的一个中断请求输入端IRi
    主8259A的INT线连至CPU的中断请求输入端INTR
    CPU的中断响应输出端INTA连至主8259A和从8259A的INTA*端*
    SP*/EN在非缓冲方式下,规定该8259A是**主片(SP=1)还是从片(SP*=0)**
    在这里插入图片描述

三、8259A的中断工作过程

  • 中断响应周期
    第一个响应周期
    ——数据线浮空。通知发中断请求的设备,CPU准备响应中断,应该准备好中断类型号。
    第二个响应周期
    ——被响应的外设将一个字节的中断类型号送数据线,CPU读取类型号。

四、8259A的工作方式

在这里插入图片描述

  • 1. 设置优先权方式
    普通全嵌套方式
    8259A的中断优先权顺序固定不变,从高到低依次为IR0、IR1、IR2、……IR7
    中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线,对应ISR的Di位置位,直到中断结束(ISR的Di位复位)
    在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套
    特殊全嵌套方式
    ——允许响应同级中断请求
    优先权自动循环方式
    ——响应后,优先权最低;开始优先权IR0最高,IR7最低
    优先权特殊循环方式
    ——响应后,优先权最低;开始最低优先权由用户指定

  • 2. 结束中断处理方式
    什么是8259A的中断结束?
    8259A利用中断服务寄存器ISR判断:
    某位为1,表示正在进行中断服务;
    该位为0,就是该中断结束服务。
    自动中断结束方式
    普通中断结束方式
    配合普通全嵌套方式使用
    当CPU用输出指令往8259A发出普通中断结束EOI命令时,8259A就会把所有正在服务的中断中优先权最高的ISR位复位
    特殊中断结束方式
    ——需指定结束的引脚

  • 3. 屏蔽中断源方式
    普通屏蔽方式
    将IMR的Di位置1,则对应的中断IRi被屏蔽,该中断请求不能从8259A送到CPU
    如果IMR的Di位置0,则允许IRi中断产生
    特殊屏蔽方式
    ——执行较高级中断服务时,开放较低级的中断请求

  • 4. 中断触发方式
    边沿触发方式
    将中断请求输入端出现的上升沿作为中断请求信号的触发方式
    电平触发方式
    在这里插入图片描述

  • 5. 数据线连接方式
    缓冲方式
    8259A的数据线需加缓冲器予以驱动
    SP*/EN引脚作为输出端。
    作为**输出的EN
    使用时,作为数据总线缓冲器的使能信号**。
    非缓冲方式


五、8259A的编程

  • 初始化编程
    8259A开始工作前,必须进行初始化编程
    给8259A写入初始化命令字ICW

  • 中断操作编程 在8259A工作期间
    可以写入操作命令字OCW将选定的操作传送给8259A,使之按新的要求工作
    还可以读取8259A的信息,以便了解他的工作状态

  • 1. 初始化命令字ICW
    初始化命令字ICW最多有4个
    8259A在开始工作前必须写入
    必须按照ICW1~ICW4顺序写入
    ICW1和ICW2是必须写的
    ICW3和ICW4由工作方式决定

ICW1
在这里插入图片描述

ICW2(设置中断向量号)
在这里插入图片描述

ICW3(级连命令字)
在这里插入图片描述

ICW4
在这里插入图片描述
8259A的初始化流程
在这里插入图片描述

例: 试按照如下要求对8259A设置初始化命令字:系统中仅用一片8259A,中断请求信号采用边沿触发方式;中断类型号为08H~0FH;用全嵌套、缓冲、非自动中断结束方式。8259A的端口地址为20H和21H
该片8259A的初始化程序段如下:
MOV AL, 00010011B ;设置ICW1,边沿触发,单片8259A,需ICW4
OUT 20H, AL
MOV AL, 00001000B ;设置ICW2,中断类型号的高5位为00001
OUT 21H, AL
MOV AL, 00001101B ;设置ICW4, 全嵌套,缓冲,非自动中断结束
OUT 21H, AL

  • 2. 操作命令字OCW
    8259A工作期间,可以随时接受操作命令字OCW
    OCW共有3个:OCW1~OCW3
    写入时没有顺序要求,需要哪个OCW就写入哪个OCW

OCW1(屏蔽操作命令字)
在这里插入图片描述
OCW2(中断方式命令字)
在这里插入图片描述
OCW3(状态操作命令字)
在这里插入图片描述
小结:8259A的七个寻址
在这里插入图片描述

  • 3. 读取状态字
    CPU可读出IRR、ISR、IMR和查询字
    读IRR、ISR和查询字
    A0为低电平,在读之前需先设定要读的寄存器。
    由OCW3中RR和RIS位设定读取IRR或ISR
    由OCW3中P位设定读取查询字
    读IMR
    A0为高电平时,直接读取

查询字反映了当前有无中断请求,以及中断请求中优先级最高的是哪一个

查询字
在这里插入图片描述

小结:8259A的四个读操作

读查询字(中断请求状态字):
先写入OCW3 (P=1)
用偶地址端口读(如:IN AL,20H)
读IRR
先写入OCW3(RR=1,RIS=0)
用偶地址端口读(如: IN AL,20H)
读ISR:
先写入OCW3(RR=1,RIS=1)
用偶地址端口读(如: IN AL,20H)
读IMR:
随时可用奇地址端口读(如: IN AL,21H)


六、外部中断服务程序

编写主程序,需注意:
修改中断向量
控制CPU的中断允许标志
设置8259A的中断屏蔽寄存器
编写外部可屏蔽中断服务程序,需注意:发送中断结束命令。

8259A的IR0中断请求来自定时器8253,IR0的中断向量号为08H
8259A的偶地址端口为20H,奇地址端口为21H
程序功能:每次中断要显示字符串“A 8259A Interrupt !”,中断10次结束
用内存单元在主程序与外部中断服务程序之间传递参数:中断次数
显示信息也安排在共同的数据段中

;数据段
intmsg	db ‘A 8259A Interrupt !’
		db 0dh,0ah,0
counter	db 0
;保存中断向量
		mov ax,3508h
		int 21h
		push bx	;保存偏移地址
		push es	;保存段基址
;设置中断向量
		cli
		push ds
		mov dx,offset new08h
		mov ax,seg new08h
		mov ds,ax
		mov ax,2508h
		int 21h
		pop ds
;初始化8259A
		MOV AL, 00010011B ;设置ICW1,边沿触发,单片8259A,需ICW4                          
		OUT 20H, AL
		MOV AL, 00001000B ;设置ICW2,中断类型号的高5位为00001
		OUT 21H, AL
		MOV AL, 00001101B ;设置ICW4, 全嵌套,缓冲,非自动中断结束
		OUT 21H, AL 
;设置中断寄存器
		in al,21h            ;读取IMR
		push ax             ;不破坏原屏蔽状态
		and al,0feh       ;允许IR0
		out 21h,al
		mov counter,0   ;设置中断次数初值
		sti		;开中断
;循环等待中断
start1:	cmp counter,10
		jb start1	;JB小于,中断10次退出
		;中断就在主程序循环当中
;主程序结束
		cli
		pop ax               ;恢复原屏蔽状态
		out 21h,al
		pop dx               ;恢复原08H号中断向量
		pop ds
		mov ax,2508h
		int 21h
		sti
		mov ah,4ch    ;返回操作系统
		int 21h
;进入中断服务程序
new08h	proc
		sti	;开中断
		push ax	;保护现场
		push bx
		push ds
		mov ax,seg counter
		mov ds,ax	;设置数据段DS
;中断处理
		inc counter
		mov si,offset intmsg	;显示信息
		call dpstri
		mov al,20h ;发送中断结束命令EOI
		out 20h,al
		pop ds	;恢复现场
		pop bx
		pop ax
		iret	;中断返回
new08h	endp
;显示字符串
dpstri	proc	;显示字符串子程序
		push ax
		push bx
dps1:	mov al, [si]
		cmp al,0
		jz dps2
		mov bx,0      ;显示字符
		mov ah,0eh
		int 10h  ;P381
        inc si
		jmp dps1
dps2:	pop bx
		pop ax
		ret
dpstri	endp

总结

到这里这篇文章的内容就结束了,谢谢大家的观看,如果有好的建议可以留言喔,谢谢大家啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【多媒体】富客户端应用程序GUI框架 JavaFX 2.0 简介

JavaFX 最初是由 Oracle 推出的一个用于开发富客户端应用程序的框架,它提供了丰富的用户界面控件、布局容器、3D图形绘制、媒体播放和动画等功能,旨在取代较旧的 Swing 框架。JavaFX 于 2007 年推出,2011 年 10 月发布了2.0 版本。JavaFX 2.0…

OpenLayers使用

初学ol,实现了高德地图不同图层的切换、交互性地图飞行以及加载本地JSON数据。 说一下不同图层切换的想法: 1.对于标准地图和卫星地图:二者最初便挂载到map上,两个图层是叠加显示的;当点击按钮时,其实是使…

VSCode里python代码不扩展/级联了的解决办法

如图 解决办法:重新下载新的扩展工具 步骤如下 1、在左边工具栏打开Extensions 2、搜索框输入python,选择别的扩展工具,点击Install - 3在扩展工具所在的目录下,新建一个文件,就可以用了

指定IP地址通过远程桌面访问WINDOWS10

1:登录Windows10系统,在控制面板找到系统和安全,打开Windows Defender防火墙。 2:点击感觉设置。 3:在入站规则中,找到远程桌面。查看自己的网络现在是公用,域,还是专用。选择对应的网络。 4&am…

Oracle EBS PO采购订单预审批状态处理

系统版本 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状: 采购订单状态:预审批 采购订单流程报错如下: po.plsql.PO_DOCUMENT_ACTION_AUTH.approve:90:archive_po not successful - po.plsql.PO_DOCUMENT_ACTION_PVT.do_action:110:unexpected error in acti…

js生成器,迭代器和可迭代对象详解

1.生成器函数和生成器 生成器函数是可以返回一个可迭代对象的特殊函数, 生成器是一个特殊的迭代器, 在js中可以使用function*来定义一个非连续执行的函数作为迭代算法, function* name() {yield value;yield value;yield value; }name: 函…

基于YOLOv5的人脸目标检测

本文是在之前的基于yolov5的人脸关键点检测项目上扩展来的。因为人脸目标检测的效果将直接影响到人脸关键点检测的效果,因此本文主要讲解利用yolov5训练人脸目标检测(关键点检测可以看我人脸关键点检测文章) 基于yolov5的人脸关键点检测:人脸关键点检测…

ROS学习笔记(18):建图与定位(2)

0.前言 上文提到现在的我们已经进入到了SLAM领域的学习,会涉及到大量专业知识,作为一个自学的大三(好吧也快大四了)萌新并不能保证每次文章的专业性和准确性,所以,本人推荐大家能自己去查阅一些相关书籍和…

TOB传输、承载网拓扑图

1、用户面:GNODEB>UPE>SPE>NPE>UPF>CMNET网 2、控制面:GNODEB>UPE>SPE>NPE>IP承载网>核心网

充分利用智慧校园人事系统,提升党政职务管理

智慧校园人事系统中的党政职务管理功能,是专为高校及教育机构设计的,旨在高效、精确地处理与党政职务相关的各类事务,包括职务任命、任期管理、职责分配、考核评估等,以信息化手段促进党务及行政工作的透明化、规范化。 该模块首先…

redis主从复制哨兵模式集群管理

主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡&…

像学Excel 一样学 Pandas系列-创建数据分析维度

嗨,小伙伴们。又到喜闻乐见的Python 数据分析王牌库 Pandas 的学习时间。按照数据分析处理过程,这次轮到了新增维度的部分了。 老样子,我们先来回忆一下,一个完整数据分析的过程,包含哪些部分内容。 其中&#xff0c…

好久不见!写了一个自动截图神器~【附源码】

文章目录 前言新增功能介绍截图功能快捷键设置 程序设计和使用介绍操作菜单栏选择点击坐标点选择图片选择截图区域快捷键设置 表格循环次数状态栏 使用案例源代码 前言 好久没更新文章了。上一次更新是在4月16日差不多,也只是写了一个错误集,没什么太多…

【Python机器学习】模型评估与改进——在模型选择中使用评估指标

我们通常希望,在使用GridSearchCV或cross_val_score进行模型选择时能够使用AUC等指标。scikit-learn提供了一种非常简单的实现方法,那就是scoring参数,它可以同时用于GridSearchCV和cross_val_score。你只需要提供一个字符串,用于…

基于Vue的MOBA类游戏攻略分享平台

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术、SpringBoot框架、B/S模式、Vue.js 工具:MyEclipse、MySQL 系统展示 首页 用…

大模型技术在辅助学习中的应用

大模型技术在辅助学习中的应用场景非常广泛,以下是一些典型示例。大模型技术在辅助学习中具有广阔的应用前景,可以为学生提供更加个性化、智能化和高效的学习体验。随着大模型技术的不断发展,我们可以期待在未来看到更多创新应用。北京木奇移…

免费最好用的证件照制作软件,一键换底+老照片修复+图片动漫化,吊打付费!

这款软件真的是阿星用过的,最好用的证件照制作软件,没有之一! 我是阿星,今天要给大家安利一款超实用的证件照工具,一键换底,自动排版,免费无广告,让你在家就能轻松搞定证件照&#…

强化学习的数学原理:最优贝尔曼公式

大纲 贝尔曼最优公式是贝尔曼公式的一个特殊情况,但其也非常重要。 本节课很重要的两个概念和一个工具: 工具不用多说,就是贝尔曼最优公式,概念则是 optimal state value(最优状态价值) 和 optimal polic…

Django开发实战(1)- 认识django

1.django 使用MTV模式,其实与MVC本质一样: model:业务对象和关系映射(ORM) template:客户端页面展示 view:业务逻辑,根据需求调用 2.开发相关 √ python √ html&…

鸿蒙数据防泄漏(DLP)【Data Loss Prevention Kit开发指导】

Data Loss Prevention Kit开发指导 DLP是系统提供的系统级的数据防泄漏解决方案,提供一种称为DLP的文件格式。后缀格式为“原始文件名(包含原始文件后缀).dlp”,例如: “test.docx.dlp”,文件由授权凭证和原始文件密文…