/* By Marcus Xing kernel/init_8259a.c 初始化8259A的函数 */ #include "type.h" #include "const.h" #include "console.h" #include "tty.h" #include "protect.h" #include "proc.h" #include "proto.h" #include "global.h" void Init_8259A() { /* 8259A 主片和从片,ICW1 */ Out_Byte(INT_MASTER_CTL,0x11); Out_Byte(INT_SLAVE_CTL,0x11); /* 8259A 主片和从片,ICW2 */ Out_Byte(INT_MASTER_CTLMSK,INT_VECTOR_IRQ0); Out_Byte(INT_SLAVE_CTLMSK,INT_VECTOR_IRQ8); /* 8259A 主片和从片,ICW3 */ Out_Byte(INT_MASTER_CTLMSK,4); Out_Byte(INT_SLAVE_CTLMSK,2); /* 8259A 主片和从片,ICW4 */ Out_Byte(INT_MASTER_CTLMSK,1); Out_Byte(INT_SLAVE_CTLMSK,1); /* 8259A 主片和从片,OCW1,起屏蔽外中断作用 */ Out_Byte(INT_MASTER_CTLMSK,0xff); Out_Byte(INT_SLAVE_CTLMSK,0xff); /* 初始化外中断函数表 */ /* 全部先初始化为没特点的处理函数 */ int i; for(i = 0;i < IRQ_NUM;i++) { IRQ_Handler_Table[i] = Hard_Int_Handler; } }