Modularize interrupt handlers, split up scheduler and PIT interrupt handlers
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
#include <stdint.h>
|
||||
#include "intr/pit.h"
|
||||
#include "io/io.h"
|
||||
#include "intr/intr.h"
|
||||
|
||||
#define PIT_COUNTER0 0x40
|
||||
#define PIT_CMD 0x43
|
||||
@ -25,15 +26,22 @@
|
||||
|
||||
volatile uint32_t PIT_TICKS;
|
||||
|
||||
void intr_pit_wait(uint32_t ms) {
|
||||
uint32_t now = PIT_TICKS;
|
||||
while (PIT_TICKS - now < ms);
|
||||
}
|
||||
|
||||
int intr_pit_intr(IntrStackFrame *frame) {
|
||||
PIT_TICKS++;
|
||||
return INTR_OK;
|
||||
}
|
||||
|
||||
void intr_pit_init(void) {
|
||||
intr_attchhandler(&intr_pit_intr, INTR_IRQBASE+0);
|
||||
|
||||
uint32_t hz = 1000;
|
||||
uint32_t div = PIT_FREQ / hz;
|
||||
io_out8(PIT_CMD, PIT_CMD_BINARY | PIT_CMD_MODE3 | PIT_CMD_RW_BOTH | PIT_CMD_COUNTER0);
|
||||
io_out8(PIT_COUNTER0, div & 0xFF);
|
||||
io_out8(PIT_COUNTER0, div >> 8);
|
||||
}
|
||||
|
||||
void intr_pit_wait(uint32_t ms) {
|
||||
uint32_t now = PIT_TICKS;
|
||||
while (PIT_TICKS - now < ms);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user