微机原理与接口技术中的中断控制器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
    

    总结

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

    作者:冷白白

    物联沃分享整理
    物联沃-IOTWORD物联网 » 微机原理与接口技术中的中断控制器8259A详解

    发表回复