35 lines
598 B
C
35 lines
598 B
C
#include "pit.h"
|
|
#include "ports.h"
|
|
|
|
#define pitChannel0 0x40
|
|
#define pitCommand 0x43
|
|
#define pitBaseFrequency 1193182
|
|
|
|
static volatile uint64 tickCount;
|
|
static uint32 configuredFrequency;
|
|
|
|
void pitInit(uint32 frequency)
|
|
{
|
|
configuredFrequency = frequency;
|
|
uint32 divisor = pitBaseFrequency / frequency;
|
|
|
|
outb(pitCommand, 0x36);
|
|
outb(pitChannel0, (uint8)(divisor & 0xFF));
|
|
outb(pitChannel0, (uint8)((divisor >> 8) & 0xFF));
|
|
}
|
|
|
|
void pitTick(void)
|
|
{
|
|
tickCount++;
|
|
}
|
|
|
|
uint64 pitTicks(void)
|
|
{
|
|
return tickCount;
|
|
}
|
|
|
|
uint32 pitFrequency(void)
|
|
{
|
|
return configuredFrequency;
|
|
}
|