nckernel
0.1
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
src
pic.c
Go to the documentation of this file.
1
#include <
sys/types.h
>
2
#include <
sys/io.h
>
3
#include <
stdio.h
>
4
#include <
assert.h
>
5
#include <
stdarg.h
>
6
7
#include <
pic.h
>
8
9
#define CLOCK 1193180
10
12
enum
port_t
{
14
PIC_FIRST_COMMAND
= 0x20,
15
PIC_FIRST_INTERRUPT_MASK
= 0x21,
16
17
PIC_SECOND_COMMAND
= 0xA0,
18
PIC_SECOND_INTERRUPT_MASK
= 0xA1,
19
21
TIMER_COUNTER_DIVISOR
= 0x40,
22
TIMER_MODE_CONTROL
= 0x43,
23
25
CG_6845_INDEX
= 0x3D4,
26
CG_6845_DATA
= 0x3D5,
28
CG_6845_MODE_CONTROL
= 0x3D8,
30
CG_6845_COLOR_SELECT_PALETTE
= 0x3D9,
32
CG_6845_STATUS
= 0x3DA,
34
CG_6845_CLEAR_LIGHT_PEN_LATCH
= 0x3DB,
35
CG_6845_PRESET_LIGHT_PEN_LATCH
= 0x3DC,
37
CG_6845_CRT_CPU_PAGE
= 0x3DF,
38
};
39
40
void
pic_init
(
void
)
41
{
43
outb
(
PIC_FIRST_COMMAND
, 0x11);
45
outb
(
PIC_FIRST_INTERRUPT_MASK
, 0x20);
47
outb
(
PIC_FIRST_INTERRUPT_MASK
, 0x04);
49
outb
(
PIC_FIRST_INTERRUPT_MASK
, 0x01);
50
outb
(
PIC_FIRST_INTERRUPT_MASK
, 0xB8);
51
53
outb
(
PIC_SECOND_COMMAND
, 0x11);
55
outb
(
PIC_SECOND_INTERRUPT_MASK
, 0x28);
57
outb
(
PIC_SECOND_INTERRUPT_MASK
, 0x02);
59
outb
(
PIC_SECOND_INTERRUPT_MASK
, 0x01);
60
outb
(
PIC_SECOND_INTERRUPT_MASK
, 0xFF);
61
}
62
63
void
timer_init
(
unsigned
long
frequency)
64
{
65
unsigned
long
divisor =
CLOCK
/ frequency;
66
outb
(
TIMER_MODE_CONTROL
, 0x34);
67
outb
(
TIMER_COUNTER_DIVISOR
, divisor & 0xff);
68
outb
(
TIMER_COUNTER_DIVISOR
, (divisor >> 8) & 0xff);
69
}
70
71
/* End of a file */
Generated on Thu Nov 7 2013 02:45:25 for nckernel by
1.8.4