mirror of
https://github.com/Tom-on64/kern.git
synced 2026-11-03 18:22:22 +00:00
Moved all header files into include/ and removed their C counterparts -> code inside .h files Also added a kernel.ld linker file since we don't have many code files in src/ now, i removed src/kernel/ only real code change is that i moved memcopy() and memset() into string.h from system.h
38 lines
719 B
C
38 lines
719 B
C
#ifndef TIMER_H
|
|
#define TIMER_H
|
|
|
|
#include "stdint.h"
|
|
#include "idt.h"
|
|
#include "irq.h"
|
|
#include "system.h"
|
|
|
|
#define INPUT_CLK 1193180
|
|
|
|
uint32_t timerTicks = 0;
|
|
|
|
void timerHandler() {
|
|
timerTicks++;
|
|
}
|
|
|
|
void setupTimer() {
|
|
installIrqHandler(0, timerHandler);
|
|
}
|
|
|
|
// Source: https://en.wikibooks.org/wiki/X86_Assembly/Programmable_Interval_Timer
|
|
void timerPhase(uint32_t hz) {
|
|
uint16_t div = INPUT_CLK / hz;
|
|
|
|
outb(0x43, 0x36); // Tell PIT that we're setting channel 0
|
|
outb(0x40, div & 0xff); // Low byte
|
|
outb(0x40, div >> 8); // High byte
|
|
}
|
|
|
|
void sleep(uint32_t ticks) {
|
|
uint32_t eticks = ticks + timerTicks;
|
|
|
|
while (timerTicks != eticks); // Should avoid overflows unlike '<'
|
|
}
|
|
|
|
|
|
#endif
|