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

news2024/10/6 10:40:23

【微机原理及接口技术】中断控制器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.coloradmin.cn/o/1890694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chapter10 高级纹理——Shader入门精要学习笔记

Chapter10 高级纹理 一、立方体纹理1.基本概念①组成②采样 2.天空盒子 Sky Box3.环境映射三种方法①特殊布局的纹理创建②手动创建Cubemap——老方法③脚本生成 4.反射5.折射6.菲涅尔反射 二、渲染1.镜子效果2.玻璃效果3.渲染纹理 vs GrabPass 三、程序纹理1.简单程序纹理2.Un…

mov文件怎么转换成mp4格式?这四种转换方法超级好用!

mov文件怎么转换成mp4格式?在数字娱乐的世界中,你是否曾遇到过MOV格式的视频?也许,对于许多人来说,这并不是一个常见的格式,但这并非偶然,首先,我们来谈谈MOV的兼容性问题&#xff0…

读书笔记-《Spring技术内幕》(三)MVC与Web环境

前面我们学习了 Spring 最核心的 IoC 与 AOP 模块(读书笔记-《Spring技术内幕》(一)IoC容器的实现、读书笔记-《Spring技术内幕》(二)AOP的实现),接下来继续学习 MVC,其同样也是经典…

Linux动态库的制作

Linux操作系统支持的函数库分为: 静态库,libxxx.a,在编译时就将库编译进可执行程序中。 优点:程序的运行环境中不需要外部的函数库。 缺点:可执行程序大 动态库,又称共享库,libxxx.so&#…

Linux之进程控制(下)

目录 进程替换的概念 进程替换的函数 execl​编辑 execlp execle execv execvp execve 上期,我们学习了进程创建,进程终止和进程等待,今天我们要学习的是进程控制中相对重要的板块------进程替换。 进程替换的概念 在进程创建时&…

中国经济昆虫志(55卷)

中国经济昆虫志,共55卷,内容包括概述、形态特征、分类等。各级分类单元均编有检索表,每个种有特征描述、地理分布,有的还记载有生活习性和防治方法。为便于鉴定,绘制有特征图和彩色图。 包括鞘翅目天牛科、半翅目蝽科、…

C - Tile Distance 2

分析&#xff1a;每穿过一行就会加一 先纵向走&#xff0c;再横向走 统一用砖头的左半部分计算 #include<bits/stdc.h> using namespace std; typedef long long ll; int main(){ ll sx,sy,tx,ty;cin>>sx>>sy>>tx>>ty; if((sxsy)%2!0)…

使用CubeIDE调试项目现stm32 no source available for “main() at 0x800337c:

使用CubeIDE调试项目现stm32 no source available for "main() at 0x800337c&#xff1a; 问题描述 使用CubeIDE编译工程代码和下载都没有任何问题&#xff0c;点击Debug调试工程时&#xff0c;出现stm32 no source available for "main() at 0x800337c 原因分析&a…

【C++】#1

关键字&#xff1a; 基本框架、多个main执行、快捷键、cout规则 基本框架&#xff1a; #include <iostream> using namespace std;int main() {//具体内容return 0; } 多个main函数可执行&#xff1a; 常用快捷键&#xff1a; cout规则&#xff1a;

小米MIX Fold 4折叠屏手机背面渲染图曝光

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 7 月 3 日消息&#xff0c;消息源 Evan Blass 今天在 X 平台发布推文&#xff0c;分享了小米 MIX Fold 4 折叠屏手机的高清渲染图&#xff08;图片有加工成分在&#xff0c;最终零售版本可能会存在差异…

Cypress测试:7个快速解决问题的调试技巧!

以下为作者观点&#xff1a; 快速编写代码是一项宝贵的技能&#xff0c;但能够有效调试和解决错误和bug&#xff0c;更是一个软件开发人员具有熟练技能的标志。调试是开发过程中的一个关键环节&#xff0c;可以确保软件按预期运行并满足用户需求。 Cypress 调试简介 Cypress …

可充电纽扣电池ML2032充电电路设计

如图&#xff0c;可充电纽扣电池ML2032充电电路设计。 图中二极管是为了防止电流倒灌&#xff0c; 电阻分压出3.66v&#xff0c;再减掉二极管压降&#xff08;约0.4v)得3.26V&#xff0c;加在电池正负极充电。 随着电池电量的积累&#xff0c;充电电流逐步减小&#xff0c;极限…

Eslint与Prettier搭配使用

目录 前置准备 Eslint配置 Prettier配置 解决冲突 前置准备 首先需要安装对应的插件 然后配置settings.json 点开之后就会进入settings.json文件里&#xff0c;加上这两个配置 // 保存的时候自动格式化 "editor.formatOnSave": true, // 保存的时候使用prettier进…

ctfshow sql注入 web234--web241

web234 $sql "update ctfshow_user set pass {$password} where username {$username};";这里被过滤了&#xff0c;所以我们用\转义使得变为普通字符 $sql "update ctfshow_user set pass \ where username {$username};";那么这里的话 pass\ where…

一文包学会ElasticSearch的大部分应用场合

ElasticSearch 官网下载地址&#xff1a;Download Elasticsearch | Elastic 历史版本下载地址1&#xff1a;Index of elasticsearch-local/7.6.1 历史版本下载地址2&#xff1a;Past Releases of Elastic Stack Software | Elastic ElasticSearch的安装(windows) 安装前所…

深入了解激光粒度分析仪:检测物质粒度分布的利器

在科研、工业生产以及环境监测等多个领域中&#xff0c;精确测量物质粒度分布是确保产品质量、研究准确性和环境安全的重要步骤。 近年来&#xff0c;激光粒度分析仪以其独特的技术优势&#xff0c;在这些领域发挥着越来越重要的作用。 在这篇文章中&#xff0c;佰德将带您了…

人工智能--图像语义分割

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a;专业知识 ​ 文章目录 &#x1f349;引言 &#x1f349;介绍 &#x1f348;工作原理 &#x1f34d;数据准备 &#x1f34d;特征提取 &#x1f34d;像素分…

1.2 ROS2安装

1.2.1 安装ROS2 整体而言&#xff0c;ROS2的安装步骤不算复杂&#xff0c;大致步骤如下&#xff1a; 准备1&#xff1a;设置语言环境&#xff1b;准备2&#xff1a;启动Ubuntu universe存储库&#xff1b;设置软件源&#xff1b;安装ROS2&#xff1b;配置环境。 请注意&…

linux命令行操作

一、看二进制文件 od -t x1 1.txt | less 二、看信号 kill -l man 7 signal 三、查看当前进程的pid号 echo $$

统一开放平台实现方案(访微信SDK)

需求分析 在互联中&#xff0c;我们的服务是不对外开放的&#xff0c;但是有先场景下我们可以对外开放&#xff0c;但是必须是系统所允许的用户才可以&#xff0c;这样做一方面保证安全&#xff0c;另一方面可以提升平台的能力&#xff0c;比如调用微信的接口必须要进行微信开…