##  中断

#### IDT

中断由一个代理来处理(Inter8259A芯片-PIC-可编程中断控制器)

屏蔽外设中断，进行优先级处理，向CPU提供中断向量号。

Inter处理器支持256个中断，8259只可以管理8个，所以需要多个8259组合级联。

级联的话，多片组合在一起，只有一个为主片，其他为从片，来自从片的中断传递给主片，主片传递给CPU，也就是说只有主片才会向CPU发送int中断信号。

7n+1

两片时，15个

从片要占用主片一个IRQ接口。

```
主8259A  IRQ0 时钟
         IRQ1 键盘
         IRQ2 <-------------- 从8259A  IRQ8 实时时钟
         IRQ3 串口2                    IRQ9 重定向的IRQ2
         IRQ4 串口1                    IRQ10 保留
         IRQ5 并口2                    IRQ11 保留
         IRQ6 软盘                     IRQ12 PS/2鼠标
         IRQ7 并口1                    IRQ13 FPU异常
                                       IRQ14 硬盘
                                       IRQ15 保留
```

INT 选出优先级最高的请求后，发送信号通知cpu
INTA 中断响应信号
IMR  中断屏蔽信号
IRR  中断请求信号
ISR  中断服务信号

                    IRR中断请求
处 INTR <-- INT      PR中断选择      IMR中断屏蔽
理
器 INTA --> INTA    ISR中断服务


IDT本质上就是中断处理程序地址数组，而中断向量号就是下标。
8259A初始化： 设置主片从片级联，指定起始中断向量号以及设置各种工作模式。

8259A内部有两组寄存器。一组是初始化命令寄存器，用于保存初始化命令字 ICW 4个 ICW1-4
另一组是操作命令寄存器组，用来保存操作命令字 OCW 3个 OCW1-3


### 初始化

  ICW

 -------------------------

  OCW --- >  OCW1 用来屏蔽连接在8259A上的外部设备中断信号。  由于外部信号都是可屏蔽的，所以还要受标志寄存器eflags中IF位控制，IF为0，可屏蔽中断全部屏蔽。   OCW1写入主片0x21 或者从片0xA1处

             OCW2 用来设置中断结束方式和优先级模式。 EOI
             OCW3 特殊屏蔽方式和查询方式

 ------------------------
