<微机系统与接口技术>详解外部可屏蔽中断管理器8259A

命令字

编程状态 初始化命令寄存器组

CPU使用IN/OUT指令对8259A芯片进行初始化编程。完成后即进入操作态。

  • ICW1 当D4=1并且A0=0时,表示是对ICW1进行设置。

  • ICW2 当A0=1时,表示对ICW2进行设置。ICW2用于设置芯片送出中断号的高5位。

  • ICW3 当ICW1的D1位为1,表示需要ICW3,才会对ICW3进行设置。

  • ICW4 若ICW1的D0位为1,表示需要ICW4,才会对ICW4进行设置。

操作状态 操作命令寄存器组

  • OCW1 用来设置中断屏蔽寄存器。

  • OCW2 用来管理中断优先级。

  • OCW3 用于设置或清除特殊屏蔽方式和读取寄存器状态。当D4D3=01且地址线A0=0时,表示对OCW3进行编程。

命令字总结

8259A工作逻辑

首先CPU使用IN/OUT指令对8259A芯片进行初始化编程,为其设定好工作方式,然后8259A进入操作模式可以处理外部中断,此时CPU可以通过IN/OUT指令实时对8259A的工作机制进行刷新。这也是CPU命令对8259A就是这样编程的。
具体到一条CPU命令如 OUT 21H, AL

工作周期
1.当有外部中断通过IR0~IR7输入时,根据IMR状态将其存入IRR寄存器。
2.然后8259A通过INT引脚对CPU提出外部中断请求,若CPU同意中断,则连续向INTR* 输出两个脉冲信号,若未应答则等待。
3.获取到第一个INTR* 信号后,置位最高优先级的ISR位,并将相应的IRR位复位。
4.在第二个INTR*脉冲信号时,8259A向数据总线输出8位中断向量号供CPU读取。至此一个工作周期完成。


8259A涉及到的编程

  • 例1、
    8259A的IRQ0的中断请求来自定时器8253,每隔55ms产生一次。DOS系统利用它实现日时钟计时功能。这里我们修改了原08H号中断服务程序的部分内容,使得每次中断都显示一串信息,即下面的NEW08H子程序。我们在主程序中首先用NEW08H子程序替换原08H号中断服务,并进行十次08H中断,然后再把08号中断恢复到原来的。
DATA SEGMENT
STR     DB '08H Interupt !',$
COUNTER DB 0
DATA ENDS
CODE SEGMENT
MOV AX, 3508H
INT 21H
PUSH ES
PUSH BX
CLI
PUSH DS
MOV DS, SEG NEW08H
MOV DX, OFFSET NEW08H
MOV AX, 2508H
INT 21H
POP DS
IN AL, 21H
PUSH AX
AND AL, FEH
OUT 21H, AL
MOV COUNTER 0
STI
START1: CMP COUNTER 10
JB START1
CLI
POP AX
OUT 21H, AL
POP DX
POP DS
MOV AX, 2508H
INT 21H
STI 
MOV AX, 4C00H
INT 21H
NEW08H PROC
STI
PUSH AX
PUSH BX
PUSH DS
MOV  DS, SEG DATA
INC COUNTER
MOV SI, OFFSET STR
CALL DPSTRI
MOV AL, 20H
OUT 20H, AL
POP DS
POP BX
POP AX
IRET
NEW08H ENDP
DPSTRI PROC
PUSH AX
PSUH BX
DPS1: LODSB
CMP AL, 0
JZ DPS2
MOV BX, 0
MOV AH,0EH
INT 10H
JMP DPS1
DPS2: POP BX
POP AX
RET
DPSTRI ENDP
CODE ENDS
posted @ 2020-08-31 11:39  dynmi  阅读(397)  评论(1编辑  收藏  举报