• 中断和异常


    中断和异常相似,都是暂停正在执行的程序去执行其他的,以后还要再转回来。这里要解决两个问题,一个是如何来设置响应的事件类型,另一个是响应某个事件来干什么。

    中断有两种,一种是内部中断,有int 调用。另一种是外部中断。

    外部中断分为可屏蔽中断和不可屏蔽中断。

    不可屏蔽中断要于IF(interrupt flag)无关,直接由cpu来接收。对应的向量号为2.

    可屏蔽中断由8259A可编程中断处理器接受然后转给cpu。可根据优先级选择响应某个中断,可设置打开关闭某个中断。

    8259A有两片,每片有8根中断信号线。两片是级联连接的。也就是一个连在另一个上,所以共有15个中断信号线。

    好,如何来响应事件类型,就好似解决将某个中断信号线和某个中断向量对应起来,通过设置8259A就可以。

    如何设置呢?下面是初始化的过程步骤不能颠倒。

    1.往端口20h(主片)或A0h(从片)写入ICW1.(011h)

    2.往端口21h(主片)或A1h(从片)写入ICW2.

    3.往端口21h(主片)或A1h(从片)写入ICW3.(端口21h:004h端口A1h:002h)

    4.往端口21h(主片)或A1h(从片)写入ICW4.(001h)

    可看到主片对应了20h和21h两个端口,从片对应了A0h和A1h两个端口。

    至于ICW(initralization command word)来做一些设置,我没这里只关注ICW2,它来设置对应关系。

    ICW2

     7 6 5 4 3 2 1 0

    低三位来表示是那个中断地址线,高5位来表示中断向量号。这样就对应了起来。如ICW2=020h,则表示0-7号中断地址线对应20h-27h中断向量(这边不是太理解)。

    另外还需注意ICW3,这里来选择是哪一个中断地址线链接下级,八位对应八个端口,哪个端口置1哪个端口链接下一级。

    接下来是OCW(operation contral word),三个。用来控制打开或关闭中断或通知中断结束。

    如何操作关闭中断呢?,屏蔽哪个中断只需往21h或A1h写入OCW1就可以了,对应位置1.

    通知中断结束呢?只需往21h或A1h写入OCW2就可以了。(设为21h就行)

    ??非常不明白,各种ICW,各种OCW怎么区分。

  • 相关阅读:
    javascript-事件代理
    控制DIV属性——实现盒子长、宽、背景等变化
    mac环境下VSCODE 全局搜索无效的问题
    VSCODE snippets的使用
    JS单线程与setTimeout执行原理(转载)
    ES6
    SQL聚合函数
    MySQL函数(转发)
    关于mysql中int(1)中int后面的数字(转发)
    关于xcode8.0 VVDocumenter无法使用的解决办法
  • 原文地址:https://www.cnblogs.com/Jinux/p/2440989.html
Copyright © 2020-2023  润新知