#include #include #include #include extern kernel_ctx_t ctx; void pit_init(void) { outb(PIT_MODE_CMD, PIT_CHAN0 | PIT_LOHIGH | PIT_MODE2); outb(PIT_CHAN0_DATA, (uint8_t)(DIVISOR & 0xff)); outb(PIT_CHAN0_DATA, (uint8_t)((DIVISOR & 0xff00) >> 8)); } extern void task_switch(task_t *task); int pit_handler(void) { ctx.ticks++; outb(PIT_CHAN0_DATA, (uint8_t)(DIVISOR & 0xff)); outb(PIT_CHAN0_DATA, (uint8_t)((DIVISOR & 0xff00) >> 8)); pic_send_eoi(0); if ((ctx.ticks % 3) == 0) return 1; else return 0; }