COBE 0.1 ALPHA
|
00001 #include <io.h> 00002 #include <pic.h> 00003 #include <stdio.h> 00004 00006 00007 void pic_remap(unsigned int itr_num) { 00008 //----------Initialisierung des PIC---------- 00009 outb(PIC_MASTER_COMMAND, 0x11); 00010 outb(PIC_SLAVE_COMMAND, 0x11); 00011 00012 //----------Setze Die Addresse für IRQ0 und IRQ8, üblicherweise 32 bzw. 0x20, um an die Exceptions anzuschließen---------- 00013 outb(PIC_MASTER_DATA, itr_num); 00014 outb(PIC_SLAVE_DATA, itr_num+8); 00015 00016 //----------Setzt IRQ2 als Leitung zum 2. PIC, Standard bei Personal Computer---------- 00017 outb(PIC_MASTER_DATA, 0x04); 00018 outb(PIC_SLAVE_DATA, 0x02); 00019 00020 //----------Wir befinden uns im x86-Modus---------- 00021 outb(PIC_MASTER_DATA, 0x01); 00022 outb(PIC_SLAVE_DATA, 0x01); 00023 return; 00024 } 00025 00027 00028 void pic_mask_irqs(unsigned short mask) { 00029 //----------Die Bitmaske wird an das Interrupt-Mask-Register gesendet----------- 00030 outb(PIC_MASTER_IMR, (uint8_t) mask); 00031 outb(PIC_SLAVE_IMR, (uint8_t) mask>>8); 00032 return; 00033 } 00034 00036 00037 void pic_send_eoi(unsigned int irq_num) { 00038 //----------Sendet ein EOI an den jeweiligen PIC-Chip---------- 00039 outb(PIC_MASTER_COMMAND, EOI); 00040 if (irq_num > 7) outb(PIC_SLAVE_COMMAND, EOI); 00041 return; 00042 } 00043 00045 00046 void init_pic() { 00047 pic_remap(0x20); 00048 pic_mask_irqs(0x1); 00049 pic_send_eoi(0x02); 00050 return; 00051 }