os/timer.c
2024-05-25 19:20:33 +03:00

36 lines
609 B
C

#include <stdint.h>
#include "interrupts.h"
#include "io.h"
#include "timer.h"
volatile uint32_t timer_ticks = 0;
void delay(const uint32_t ticks)
{
uint32_t total_ticks = timer_ticks + ticks;
while (timer_ticks < total_ticks)
;
}
void timer_handler(Stack *registers)
{
++timer_ticks;
}
static void timer_phase(const uint32_t hz)
{
uint32_t divisor = PIT_FREQUENCY / hz;
outb(PIT_COMMAND, 0x36);
outb(PIT_CHANNEL_0, divisor & 0xFF);
outb(PIT_CHANNEL_0, divisor >> 8);
}
void timer_install(void)
{
irq_install_handler(0, timer_handler);
timer_phase(1000);
}