peredOS/drivers/timer.c
msh356 d64856e1b1 MULTIPLE: 3 изменения
PIC: добавил ремаппер
IRQ: добавил таймер
KERNEL: работа со строками и памятью
2026-07-01 19:55:26 +03:00

31 lines
1.1 KiB
C

#include "timer.h"
#include "../kernel/io.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++;
log_info(LOG_DETAIL, "Timer: tick!");
// Каждые 100 тиков (1 раз в секунду) шлем инфу в логгер
if (system_ticks % 100 == 0) {
log_info(LOG_DETAIL, "Timer: one second passed");
}
}