📅  最后修改于: 2023-12-03 14:59:06.513000             🧑  作者: Mango
8259是一种可编程中断控制器(Programmable Interrupt Controller,PIC),它可以管理最多8个中断源。在计算机体系结构中,中断是指CPU停止其当前正在执行的任务以响应传入的信号的过程。通常,中断是外部事件(如键盘输入)或由程序生成的内部事件(如除0错误)的结果,它会打断CPU的正常执行并转到特定的处理程序。
如上图所示,8259 PIC有2个级联串联的8259A组成,其中主8259A控制从8259A,并可以扩展到其他8259A芯片。每个芯片可以管理8个中断源。
8259 PIC的命令字是用于编程中断控制器的指令。在编写中断处理程序时,程序员需要通过设定相应的命令字来管理中断控制器以启用或禁用中断。
以下是8259 PIC命令字:
| 寄存器 | 位 7 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 位 0 | | -------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | | ICW1 | 0 | 0 | 0 | 1 | LTIM | ADI | SNGL | IC4 | | ICW2 | IV[7:0] | | ICW3 | S[7:0] | | ICW4 | 0 | 0 | 0 | 0 | UPM | AEOI | MSK | BUF | | OCW1 | 0 | 0 | 0 | 0 | 0 | 0 | L2 | L1 | | OCW2 | R | SL | EOI | M | X | E | S | R | | OCW3 | R | R | R | R | R | OCW3L |
ICW1是初始化控制字1,用于初始化中断控制器的工作模式,其中:
位3-4:线路编程时使用的中断类型(0代表中断,1代表硬件中断)。
位5:工作模式(并行或串行)的选择。0表示设备在并行模式下操作,1表示设备在串行模式下操作。
位6:在识别嵌套中断时使用;0表示设备不识别嵌套中断,1表示设备识别嵌套中断。
位7:设备是否将ICW4装载到设备。0表示不装载ICW4,1表示装载ICW4。
ICW2是初始化控制字2,用于确定IRQ0——7所代表的向量号。在中断期间,向量号是指定地址中的内存位置,该地址处的程序将于中断时自动执行。
ICW3是初始化控制字3,用于设置级联8259芯片。
ICW4是初始化控制字4,用于启用特定功能。其位含义如下:
位2:设备能否处理中断请求时发生错误的情况。
位3:是否使用缓冲模式。
位4:设备的中断请求触发模式。0表示固定优先级,1表示自然优先级。
位5:设备的EOI模式。0表示非自动EOI模式,1表示自动EOI模式。
OCW是操作控制字,用于控制中断请求、EOI 和查询中断優先順序。其中:
OCW1:用于将中断请求应用于8259的卡。这个字节用于中断控制器的初始化,不能用于EOI。
OCW2:用于控制中断请求、EOI 和查询中断优先级。当输出EOI时,OCW2将请求的NMI转换为IR7。
OCW3:用于提供对正在处理的中断的识别。
命令字是用于编程8259 PIC的指令。程序员可以通过设定相应的命令字来初始化中断控制器以启用或禁用中断。在编写中断处理程序时,需要思考中断的触发条件、优先级以及是否使用自动EOI等因素。