zoukankan      html  css  js  c++  java
  • <微机系统与接口技术>详解外部可屏蔽中断管理器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
    
  • 相关阅读:
    图片展示,带分页
    miniui动态合并datagrid列
    使用webcam和video插件/华为云播放插件,实现视频播放及拍照上传功能
    Java实现excel导出(内容循环多个)
    C# 图片与Base64互转
    C#中将字符串转成 Base64 编码 (加密--解密)
    ASP.NET导出Excel之二
    利用Aspose转PDF
    ASP.NET视频播放
    Oracle存储过程导入,判断已有数据更新,没有的数据导入,统计导入成功与失败数,返回一个表
  • 原文地址:https://www.cnblogs.com/dynmi/p/13581092.html
Copyright © 2011-2022 走看看