lenochka/kernel/pit.c
2019-03-29 00:27:42 +02:00

36 lines
536 B
C

#include "pit.h"
#include "pic.h"
#include "idt.h"
static u64 s_counter = 0;
void timer_interrupt()
{
if(s_counter) s_counter--;
pic_send_eoi(0);
}
void sleep(u64 msecs)
{
__asm("cli");
if(msecs < 55) msecs = 55;
s_counter = msecs/55;
__asm("sti");
//pic_set_mask(0,1);
do {
__asm("hlt"); //Wait for IRQ
} while(s_counter);
//pic_set_mask(0,0);
}
void pit_init()
{
//Setup IRQ
idt_set_handler(32,timer_interrupt,IDT_TYPE_INTR);
pic_set_mask(0,1);
//Init PIT
outb(0x43,0x36);
outb(0x40,0x00);
outb(0x40,0x00);
}