27 lines
590 B
C
27 lines
590 B
C
//
|
|
// Created by rick on 9/22/19.
|
|
//
|
|
|
|
#include "timer.h"
|
|
|
|
#include <drivers/ports.h>
|
|
#include <cpu/isr.h>
|
|
|
|
u32 tick = 0;
|
|
|
|
static void timer_callback(registers_t regs) {
|
|
tick++;
|
|
}
|
|
|
|
int init_timer(u32 freq) {
|
|
register_interrupt_handler(IRQ0, timer_callback);
|
|
|
|
u32 divisor = 1193180 / freq;
|
|
u8 low = (u8) (divisor & 0xFF);
|
|
u8 high = (u8) ((divisor >> 8) & 0xFF);
|
|
port_byte_out(PORT_PIT_COMMAND, PIT_MODE_BIN | PIT_MODE_SQUARE_WAVE | PIT_ACCESS_MODE_HL | PIT_CHANNEL_0);
|
|
port_byte_out(PORT_PIT_DATA_0, low);
|
|
port_byte_out(PORT_PIT_DATA_0, high);
|
|
return 0;
|
|
}
|