IRQ #0 disables interrupts?
Posted: Tue Jun 03, 2003 5:14 pm
Currently, I need to add support for a sleep( ) function to supplement a floppy driver I have nearly complete. After programming the PIT, registering a handler with the IDT and unmasking IRQ #0, the timer ISR gets called exactly once. I noted that other interrupts (e.g, keyboard) stopped working also. I tried adding a STI instruction in the timer ISR, and that seems to resolve the problem.
However, I suspect this is probably not normal behavior for IRQ #0 to disable interrupts? If it isn't, what possibly could yield such behavior (i.e., where am I going wrong) ?
- nullify
P.S. My timer ISR resembles the following :
However, I suspect this is probably not normal behavior for IRQ #0 to disable interrupts? If it isn't, what possibly could yield such behavior (i.e., where am I going wrong) ?
- nullify
P.S. My timer ISR resembles the following :
Code: Select all
__asm__
(
".text\n"
".globl timer_wrap\n"
"timer_wrap:\n"
"pusha\n"
"call timer_isr\n"
"popa\n"
"iret\n"
);
void timer_isr(void)
{
kprintf("irq0 ");
outb(0x20, 0x20);
}