peredOS/drivers/timer.c

27 lines
924 B
C

#include "timer.h"
#include "../kernel/io.h"
#include "../kernel/thread.h"
#include "../kernel/logger.h"
// Глобальный счетчик тиков системы
uint32_t system_ticks = 0;
void timer_init(uint32_t frequency) {
log_info(LOG_NORMAL, "Initializing PIT Timer...");
// Вычисляем делитель частоты
uint32_t divisor = 1193182 / frequency;
// Шлем команду: Канал 0, Режим 3 (генератор меандра), доступ по очереди Младший/Старший байт
outb(0x43, 0x36);
// Раскалываем 16-битный делитель на два байта и шлем в порт данных Канала 0 (0x40)
outb(0x40, (uint8_t)(divisor & 0xFF));
outb(0x40, (uint8_t)((divisor >> 8) & 0xFF));
log_info(LOG_NORMAL, "Timer registered");
}
void timer_handler(void) {
system_ticks++;
}