diff --git a/include/pit.h b/include/pit.h index 8d4cfb8..d1b2a00 100644 --- a/include/pit.h +++ b/include/pit.h @@ -3,6 +3,6 @@ #include "../include/utils.h" -void pit_init(); +void pit_init(int freq); #endif diff --git a/src/isr.c b/src/isr.c index a1afd60..f6d8e2e 100644 --- a/src/isr.c +++ b/src/isr.c @@ -71,7 +71,7 @@ void default_handler() __attribute__((interrupt)) void isr_timer(struct interrupt_frame *frame) { - pit_init(); + pit_init(100); pic_end_int(0x0); } diff --git a/src/kernel.c b/src/kernel.c index abd5506..deb71a6 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -22,7 +22,7 @@ void kmain() printf("KatauOS booting up\n"); isr_install(); pic_remap(0x20, 0x28); - pit_init(); + pit_init(100); apply_pic_masks(); diff --git a/src/pit.c b/src/pit.c index 592192a..a759a3c 100644 --- a/src/pit.c +++ b/src/pit.c @@ -26,12 +26,12 @@ Bit/s Usage #define PIT_COMMAND_PORT 0x43 #define PIT_DATA_PORT 0x40 -void pit_init() { - uint16_t frequency = 100; +void pit_init(int freq) { + int divisor = 1193180 / freq; uint8_t command = 0x36;//00110110 see above to get the idea wtf is this number outb(PIT_COMMAND_PORT, command); - outb(PIT_DATA_PORT, (uint8_t)(frequency & 0xFF)); - outb(PIT_DATA_PORT, (uint8_t)((frequency >> 8) & 0xFF)); + outb(PIT_DATA_PORT, divisor & 0xFF); + outb(PIT_DATA_PORT, divisor >> 8); }