2023-10-25 00:07:32 +03:00
|
|
|
|
/**
|
|
|
|
|
* pit.c
|
|
|
|
|
* Программируемый интервальный таймер
|
|
|
|
|
*
|
|
|
|
|
* Настройка программируемого интервального таймера и
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <arch.h>
|
2024-01-22 17:45:34 +03:00
|
|
|
|
#include <log.h>
|
2023-10-25 00:07:32 +03:00
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
#include <tool.h>
|
|
|
|
|
|
|
|
|
|
void pit_set_interval(int hz) {
|
|
|
|
|
int divisor = 1193180 / hz; // Вычисляем делитель
|
2023-12-14 11:24:48 +03:00
|
|
|
|
outb(0x43, 0x34); // Устанавливаем байт команды 0x34
|
2023-10-25 00:07:32 +03:00
|
|
|
|
outb(0x40, divisor & 0xFF); // Устанавливаем младший байт делителя
|
2023-12-12 21:11:06 +03:00
|
|
|
|
outb(0x40, divisor >> 8); // Устанавливаем старший байт делителя
|
2023-10-25 00:07:32 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void pit_init( ) {
|
2024-01-22 17:45:34 +03:00
|
|
|
|
LOG("PIT установлен\n");
|
2023-12-14 12:48:27 +03:00
|
|
|
|
pit_set_interval(1);
|
2023-10-25 00:07:32 +03:00
|
|
|
|
}
|