Пример #1
0
void idt_init(void){
    
    init_interrupt_chip();
    idt_ptr.limit = sizeof(idt_entry_t) * INTERRUPT_MAX - 1;
    idt_ptr.base  = (uint32)&idt_entries;

    for(uint32 i = 0;i < 48;i++){
        idt_set_gate(i,(uint32)isr_irq_func[i],0x08,0x8E);
    }
    idt_set_gate(128,(uint32)isr128,0x08,0xEF);

    idt_flush((uint32)&idt_ptr);

}
Пример #2
0
// 初始化中断描述符表
void init_idt(void)
{
        init_interrupt_chip();

        idt_ptr.limit = sizeof(idt_entry_t) * INTERRUPT_MAX - 1;
        idt_ptr.base  = (uint32_t)&idt_entries;

        // 0~31:  用于 CPU 的中断处理
        // 32~47: Intel 保留
        for (uint32_t i = 0; i < 48; ++i) {
                idt_set_gate(i, (uint32_t)isr_irq_func[i], 0x08, 0x8E);
        }

        // 128 (0x80) 将来用于实现系统调用
        idt_set_gate(128, (uint32_t)isr128, 0x08, 0xEF);

        // 更新设置中断描述符表
        idt_flush((uint32_t)&idt_ptr);
}