void main(){ idt_entry *idt; dps_utim64 *timer; /* Stack Allocate */ malloc(STACK_SIZE); /* IDT Config */ idt = idt_init(); idt_entry_setup(idt, IDT_NUM_DPS_UTIM64, &int36_utim64); idt_entry_enable(idt, IDT_NUM_DPS_UTIM64); /* IDT Set & Load */ idt_set(idt); idt_store(); /* UTIM64 Setup */ timer = dps_utim64_init(0); dps_utim64_disable(timer); timer->mc[0] = 0; timer->mc[1] = 0; timer->cc[0][0] = 4096; timer->cc[0][1] = 0; timer->cccfg[0] = UTIM64CFG_ENA | UTIM64CFG_IE | UTIM64CFG_MODE; dps_utim64_enable(timer); /* Wait for Flag */ while(flag == 0); return; }
void idt_init() { idt_ptr.base = (u32int) &idt; idt_ptr.limit = sizeof(idt_descr_t) * IDT_LEN - 1; idt_set(&idt_ptr); reroute_irqs(); }
void idt_install(){ idtable_ptr.limit = (sizeof (struct idt_entry) * 256) - 1; idtable_ptr.base = (unsigned int)&idtable; // Initialize memory memset(&idtable, 0, sizeof(struct idt_entry) * 256); //Add entries to table idt_set(); }
void init_idt() { idt_ptr.size = sizeof(idt_entry_t) * 256 - 1; idt_ptr.base = (u32int)&idt_entries; // Master PIC outb(0x20, 0x11); outb(0x21, 0x20); outb(0x21, 0x04); outb(0x21, 0x01); outb(0x21, 0x00); // Slave PIC outb(0xA0, 0x11); outb(0xA1, 0x28); outb(0xA1, 0x02); outb(0xA1, 0x01); outb(0xA1, 0x00); idt_set(0, (u32int)isr0, 0x08, 0x8E); idt_set(1, (u32int)isr1, 0x08, 0x8E); idt_set(2, (u32int)isr2, 0x08, 0x8E); idt_set(3, (u32int)isr3, 0x08, 0x8E); idt_set(4, (u32int)isr4, 0x08, 0x8E); idt_set(5, (u32int)isr5, 0x08, 0x8E); idt_set(6, (u32int)isr6, 0x08, 0x8E); idt_set(7, (u32int)isr7, 0x08, 0x8E); idt_set(8, (u32int)isr8, 0x08, 0x8E); idt_set(9, (u32int)isr9, 0x08, 0x8E); idt_set(10, (u32int)isr10, 0x08, 0x8E); idt_set(11, (u32int)isr11, 0x08, 0x8E); idt_set(12, (u32int)isr12, 0x08, 0x8E); idt_set(13, (u32int)isr13, 0x08, 0x8E); idt_set(14, (u32int)isr14, 0x08, 0x8E); idt_set(15, (u32int)isr15, 0x08, 0x8E); idt_set(16, (u32int)isr16, 0x08, 0x8E); idt_set(17, (u32int)isr17, 0x08, 0x8E); idt_set(18, (u32int)isr18, 0x08, 0x8E); idt_set(19, (u32int)isr19, 0x08, 0x8E); idt_set(20, (u32int)isr20, 0x08, 0x8E); idt_set(21, (u32int)isr21, 0x08, 0x8E); idt_set(22, (u32int)isr22, 0x08, 0x8E); idt_set(23, (u32int)isr23, 0x08, 0x8E); idt_set(24, (u32int)isr24, 0x08, 0x8E); idt_set(25, (u32int)isr25, 0x08, 0x8E); idt_set(26, (u32int)isr26, 0x08, 0x8E); idt_set(27, (u32int)isr27, 0x08, 0x8E); idt_set(28, (u32int)isr28, 0x08, 0x8E); idt_set(29, (u32int)isr29, 0x08, 0x8E); idt_set(30, (u32int)isr30, 0x08, 0x8E); idt_set(31, (u32int)isr31, 0x08, 0x8E); idt_set(32, (u32int)irq0, 0x08, 0x8E); idt_set(33, (u32int)irq1, 0x08, 0x8E); idt_set(34, (u32int)irq2, 0x08, 0x8E); idt_set(35, (u32int)irq3, 0x08, 0x8E); idt_set(36, (u32int)irq4, 0x08, 0x8E); idt_set(37, (u32int)irq5, 0x08, 0x8E); idt_set(38, (u32int)irq6, 0x08, 0x8E); idt_set(39, (u32int)irq7, 0x08, 0x8E); idt_set(40, (u32int)irq8, 0x08, 0x8E); idt_set(41, (u32int)irq9, 0x08, 0x8E); idt_set(42, (u32int)irq10, 0x08, 0x8E); idt_set(43, (u32int)irq11, 0x08, 0x8E); idt_set(44, (u32int)irq12, 0x08, 0x8E); idt_set(45, (u32int)irq13, 0x08, 0x8E); idt_set(46, (u32int)irq14, 0x08, 0x8E); idt_set(47, (u32int)irq15, 0x08, 0x8E); idt_set(128, (u32int)isr128, 0x08, 0xEE); idt_flush((u32int)&idt_ptr); }