peredOS/drivers/timer.c
msh356 fe18dc2f99 MULTIPLE: 3 изменения (реализован спикер, таймер больше не срет в логи, в ядре крутая бутанимация со спикером)
SPEAKER: реализован
TIMER: не срет в логи больше
KERNEL: крутая бутанимация со спикером
2026-07-02 20:59:56 +03:00

26 lines
894 B
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++;
}