orion_old/kernel/kernel/timer.c

28 lines
501 B
C

#include <stdio.h>
//#include "asm_helper.h"
//#include "interrupts.c"
uint32_t tick = 0;
static void timer_callback(registers_t regs)
{
tick++;
printf("Tick: %s\n", tick);
serial_printf("Tick: %s\n", tick);
}
void init_timer(uint32_t frequency)
{
register_interrupt_handler(IRQ0, &timer_callback);
uint32_t divisor = 1193180 / frequency;
outb(0x43, 0x36);
uint8_t l = (uint8_t)(divisor & 0xFF);
uint8_t h = (uint8_t)( (divisor>>8) & 0xFF );
outb(0x40, l);
outb(0x40, h);
}