feat(pit): add pit initialization and handler
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
This commit is contained in:
parent
5064efa101
commit
f6cdc3005d
@ -46,8 +46,6 @@ static struct idt_entry_descriptor idt_entries_descriptors[IDT_NB_ENTRIES] = {
|
|||||||
|
|
||||||
void interrupt_handler(struct isr_param *isr_param)
|
void interrupt_handler(struct isr_param *isr_param)
|
||||||
{
|
{
|
||||||
printf("Oh no %d!\r\n", isr_param->int_vector);
|
|
||||||
|
|
||||||
switch (isr_param->int_vector)
|
switch (isr_param->int_vector)
|
||||||
{
|
{
|
||||||
case PIT_INT_VECTOR:
|
case PIT_INT_VECTOR:
|
||||||
@ -58,7 +56,7 @@ void interrupt_handler(struct isr_param *isr_param)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isr_param->int_vector > IDT_RESERVED_ENTRIES
|
if (isr_param->int_vector >= IDT_RESERVED_ENTRIES
|
||||||
&& isr_param->int_vector < IDT_RESERVED_ENTRIES + 16)
|
&& isr_param->int_vector < IDT_RESERVED_ENTRIES + 16)
|
||||||
acknowledge(isr_param->int_vector);
|
acknowledge(isr_param->int_vector);
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ void init_pic(void)
|
|||||||
send_icw4();
|
send_icw4();
|
||||||
mask_irqs();
|
mask_irqs();
|
||||||
init_keyboard();
|
init_keyboard();
|
||||||
|
init_pit();
|
||||||
asm volatile("sti");
|
asm volatile("sti");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,23 @@
|
|||||||
#include "pit.h"
|
#include "pit.h"
|
||||||
|
#include "io.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
|
||||||
|
static unsigned long ticks = 0;
|
||||||
|
|
||||||
void pit_handler(void)
|
void pit_handler(void)
|
||||||
{
|
{
|
||||||
|
++ticks;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long gettick(void)
|
unsigned long gettick(void)
|
||||||
{
|
{
|
||||||
|
return ticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
void init_pit(void)
|
||||||
|
{
|
||||||
|
outb(PIT_CONTROL_REG, PIT_MODE_2 | PIT_RW_LSB | PIT_RW_MSB);
|
||||||
|
|
||||||
|
outb(PIT_COUNTER_0, PIT_DIVIDER & 0xff);
|
||||||
|
outb(PIT_COUNTER_0, PIT_DIVIDER >> 8);
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,17 @@
|
|||||||
#define PIT_COUNTER_0 0x40
|
#define PIT_COUNTER_0 0x40
|
||||||
#define PIT_COUNTER_1 0x41
|
#define PIT_COUNTER_1 0x41
|
||||||
#define PIT_COUNTER_2 0x42
|
#define PIT_COUNTER_2 0x42
|
||||||
#define PIT_CONTROL_REGISTER 0x43
|
#define PIT_CONTROL_REG 0x43
|
||||||
|
|
||||||
|
#define PIT_MODE_2 (0x2 << 1)
|
||||||
|
|
||||||
|
#define PIT_RW_LSB (0x1 << 4)
|
||||||
|
#define PIT_RW_MSB (0x1 << 5)
|
||||||
|
|
||||||
|
#define PIT_DIVIDER 11931
|
||||||
|
|
||||||
void pit_handler(void);
|
void pit_handler(void);
|
||||||
unsigned long gettick(void);
|
unsigned long gettick(void);
|
||||||
|
void init_pit(void);
|
||||||
|
|
||||||
#endif /* !PIT_H */
|
#endif /* !PIT_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user