1 // Intel 8253/8254/82C54 Programmable Interval Timer (PIT).
2 // Only used on uniprocessors;
3 // SMP machines use the local APIC timer.
10 #define IO_TIMER1 0x040 // 8253 Timer #1
12 // Frequency of all three count-down timers;
13 // (TIMER_FREQ/freq) is the appropriate count
14 // to generate a frequency of freq Hz.
16 #define TIMER_FREQ 1193182
17 #define TIMER_DIV(x) ((TIMER_FREQ+(x)/2)/(x))
19 #define TIMER_MODE (IO_TIMER1 + 3) // timer mode port
20 #define TIMER_SEL0 0x00 // select counter 0
21 #define TIMER_RATEGEN 0x04 // mode 2, rate generator
22 #define TIMER_16BIT 0x30 // r/w counter 16 bits, LSB first
27 // Interrupt 100 times/sec.
28 outb(TIMER_MODE
, TIMER_SEL0
| TIMER_RATEGEN
| TIMER_16BIT
);
29 outb(IO_TIMER1
, TIMER_DIV(100) % 256);
30 outb(IO_TIMER1
, TIMER_DIV(100) / 256);