zoukankan      html  css  js  c++  java
  • 汇编学习笔记(25)

    基本结构
      8259 有8个中断 记为 IRQ0 - IRQ7, 优先级自高到底,IRQ0 > IRQ7
      由于一个8259不够用所以 一般在 主8259的 IRQ2上接一个 从8259
      从8259 也有IRQ0-IRQ7 但是由于是接在主8259上的所以记做IRQ8-IRQ15, 也有是接在IRQ2上的,所以优先级是 IRQ0,IRQ1,IRQ 8 - IRQ15,IRQ3 - IRQ7

      IRR
        这是一个8位的寄存器,当中断触发的时候 对应的位就会被置位,比如 IRQ0触发的话 IRR的0位就会被置位

      ISR
        这是一个8位的寄存器,当有中断正在被CPU处理的时候,对应为就会被置位,也就是说如果ISR不等于0,会屏蔽同级或者更低级的中断,高优先级的还是会响应的

      IMR
        这是一个8位的寄存器,这是一个中断屏蔽寄存器,如果IMR对应的位被置位,则对应的中段不会被提交到CPU上执行

      触发流程
        当IRQ引脚上有中断触发,则8259会将IRR对应的位置1,如果这个IRQ没有在IMR中被屏蔽,那么8259就会向CPU INTR引脚发出信号,CPU之后会询问 8259中断号,8259会在根据IRR中的值选择一个优先级高的中断报告给CPU,同时设置ISR对应的位并清理IRR对应的位,CPU处理完中断之后需要发送一个EOI指令给8259告诉8259中断处理完毕,8259就会清理ISR的信息。

      edge / level
        是触发中断的两种方式
          edge 是在电平转换的时候触发,优点是只触发一次,缺点是可能丢失,
          level 是保持在高电平的时候触发,优点是不会丢失,缺点是可能多次触发,要处理还多次触发的情况
      AEOI
        Auto EOI 模式,就是中断完成的时候不用手动发送EOI信号



    控制寄存器
      8259上有7个控制寄存器 初始化寄存器 ICW1-ICW4 , 操作寄存器OCW1-OCW3, 他们使用IO端口进行读写

      20h 主8259 ICW1 OCW2 OCW3
      21h 主8259 ICW2 ICW3 ICW4 OCW1

      A0h 从片 8259 ICW1 OCW2 OCW3
      A1h 从片 8259 ICW2 ICW3 ICW4 OCW1


      配置逻辑是这样的
        ICW1 的 第四位 必须是 1
        OCW2 的 第四位必须是 0 第三位必须是 0
        OCW3 的 第四位必须是 0 第三位必须是 1
      所以也就是说,在20/A0上是通过数据的 第三 第四 位的内容来区分是写入哪个寄存器的

      同时8259 要求ICW1 -ICW4必须是一次性顺序输入的不能打断的,所以当8259在 20/A0 收到 ICW1的数据后,他就默认了 接下来在 21/A1 收到的数据就是依次是 ICW2 ICW3 ICW4.
      这样对8259的配置就完成了。

      配置完成之后, 21/A1收到的数据就是OCW1, 20/A0 则仍然通过 三四两个转台位来判断是对应写到哪个寄存器

      ICW1
        0位: 指示是否需要使用ICW4 ,现在是必须置位1
        1位: 必须位0,表示连个8259 串联
        2位: 忽略,必须为0
        3位: 以前是edge和level模式的选择位,现在以忽略,必须为0
        4位: 必须为1
        其他位:必须为0
        所以ICW1的值是固定的 00010001B(11h)

      ICW2
        0-2 位必须为0
        3-7位,就是用来指定本8259的IRQ0对应在IDT中的中断号,依次累加的
        比如 3-7 的值是 80h 就表明本 8259 的IRQ0 的中断号是 80h, IRQ1 = 81h ,IRQ2 = 82h
        主从是分开的设置的。从片的IRQ0 从整体上来看就是IRQ8

      ICW3
        主片的值必须是 00000100, 表示从片接在 IRQ2上
        从片的值必须是00000010, 是从片的识别码 2h

      ICW4
        0位:必须位1 ,表示是intel体系
        1位: 表示开启AEOI模式,只能在主片上设置,从片必须位0
        2位: 必须位0
        3位: 必须为0
        4位:1 时表示使用 Special Full Nested Mode, 0时表示使用 Full Nested Mode, 从片必须位0
        其余位不洗位0


        Special Full Nested Mode 和 Full Nested Mode 的区别主要是在 从片的中断中断优先级上
        Full Nested Mode:
          对于主片来说,由于从片是接在主片的IRQ2上的,所以某个从片的的中断正在执行时,如果此时从片上有更高级点中断发生了,对于主片来说都是IRQ2的中断,所以此时会屏蔽到从片上的所有中断。简单来说正在从片上执行的 中断会屏蔽掉从片上所有中断,无论优先级。

        Special Full Nested Mode:
          所以正对以上情况就是,从片上正在执行的中断,还是会被从片上更高级的中断所中断,但是代价就是,当中断完成之后需要同时向从片和主片发送EOI清理指令。

      OCW1
        就是IMR寄存器

      OCW2
        0-2位: IRQ值
        3-4位: 必须为0
        5位:EOI, 置位表明则是一个EOI指令,否则就不是EOI指令
        6位:SPECIAL,指定 IRQ值,具体的IRQ值就是 0-2 位的内容,否则就是当前IRQ
        7位:ROTATE,将指定的IRQ设为最低优先级,优先级循序是个循环,如果将 5设为最低优先级那么优先级循序从高到低就变成 6 -15 > 0 - 5
        5 -7 位是组合使用的
        R S E 效果
        0 0 0 禁用AEOI模式下的自定义优先级顺序
        0 0 1 普通EOI指令,重置当前中断
        0 1 0 没意义
        0 1 1 重置 由 0-2位指定的IRQ
        1 0 0 开启AEOI模式下的自定义优先级顺序
        1 0 1 对当前IRQ发送EOI并,将当前IRQ设为最低优先级
        1 1 0 将0-2 指定的IRQ设置为最低优先级
        1 1 1 重置 0-2 指定的IRQ, 并将这个IRQ设置为最低优先级




      OCW3
        0-1位: 表示是下一个对OCW3的读操作是读IRR(10B) 还是ISR(11B)
        2位:表示下一个读操作是否被作为一次中断相应周期
        3位:必须位1
        4位:必须位0
        5位:SMM enable位
        6位:SMM 位
        7位:必须位0

        SMM 是special mask mode 的意思 5 6 两位同时设置为1才有效,作用就是告诉8259忽略 ISR寄存器的寄
    比如,当IRQ0的时间中断正在处理的时候 由于IRQ0是坐高优先级,所以此时所有的ISR 0位置1,这回屏蔽掉所有中断的相应,如果此时开启 SMM,那么8259就会忽略掉ISR
    如果这是键盘有中断,那么键盘中断就会被触发,也就是说在time中断处理过程中嵌套处理了键盘中断,此时 ISR就是 00000011B 同时有连个中断处理了,等键盘中断处理完成后会回到time中断的处理。

      ELCR1 / ELCR2
        前面提到ICW1的第三位本来是edge和level模式的选择位,现在被忽略了,取而代之的就是 ELCR1 /ELCR2寄存器,ELCR1对应主片 ELCR2对应从片,
        ELCR1 对应 IO端口4D0H
        ELCR2 对应 IO端口4D1H
        他们每一位设置了对应IRQ的edge和level, 0 表示edge模式, 1 表示level模式,其中 IRQ0,IRQ1,IRQ2,IRQ8,IRQ13 必须是0


    各IRQ对应的中断内容

    0 时钟中断
    1 键盘中断
    2 连接从片了
    3 serial port A
    4 serial port B
    5 parallel port
    6 floppy
    7 parallel port
    8 real time clock
    9 generic
    10 generic
    11 generic
    12 PS/2 鼠标
    13 internal
    14 SATA
    15 SATA

  • 相关阅读:
    UML建模之时序图(Sequence Diagram)
    UML统一建模语UML2和EnterpriseArchitect
    FTP服务器的搭建
    Ubuntu下Apache重启错误:Could not reliably determine解决
    JSP的优势 和劣势 与php的比较
    [置顶] Ajax 初步学习总结
    pv ticketlock解决虚拟环境下的spinlock问题
    Tomcat从零开始(十)Loader
    HDU 4740 The Donkey of Gui Zhou (模拟)
    关于cvScalar的那些事
  • 原文地址:https://www.cnblogs.com/alwaysking/p/14530023.html
Copyright © 2011-2022 走看看