/*初始化关系 */ #include "bootpack.h" #include void init_pic(void) /* PIC初始化 */ { io_out8(PIC0_IMR, 0xff ); /* 禁止所有中断 */ io_out8(PIC1_IMR, 0xff ); /* 禁止所有中断 */ io_out8(PIC0_ICW1, 0x11 ); /* 边缘触发模式(edge trigger mode) */ io_out8(PIC0_ICW2, 0x20 ); /* IRQ0-7由INT20-27接收 */ io_out8(PIC0_ICW3, 1 << 2); /* PIC1由IRQ2相连 */ io_out8(PIC0_ICW4, 0x01 ); /* 无缓冲区模式 */ io_out8(PIC1_ICW1, 0x11 ); /* 边缘触发模式(edge trigger mode) */ io_out8(PIC1_ICW2, 0x28 ); /* IRQ8-15由INT28-2f接收 */ io_out8(PIC1_ICW3, 2 ); /* PIC1由IRQ2连接 */ io_out8(PIC1_ICW4, 0x01 ); /* 无缓冲区模式 */ io_out8(PIC0_IMR, 0xfb ); /* 11111011 PIC1以外全部禁止 */ io_out8(PIC1_IMR, 0xff ); /* 11111111 禁止所有中断 */ return; } void inthandler27(int *esp) /* PIC0中断的不完整策略 */ /* 这个中断在Athlon64X2上通过芯片组提供的便利,只需执行一次 */ /* 这个中断只是接收,不执行任何操作 */ /* 为什么不处理? → 因为这个中断可能是电气噪声引发的、只是处理一些重要的情况。*/ { io_out8(PIC0_OCW2, 0x67); /* 通知PIC的IRQ-07(参考7-1) */ return; }