SPEAKER: реализован TIMER: не срет в логи больше KERNEL: крутая бутанимация со спикером
26 lines
894 B
C
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++;
|
|
}
|