1. PIC ( Programmable Interrupt Controller )

PC의 모든 외부로부터의 하드웨어 인터럽트는 8259A라는 칩을 통해서 입력을 받습니다. PIC를 제어 하기 위해, OS에는 PIC을 초기화하고 연결, 인터럽트를 받아들이는 방법, 받아 들인 인터럽트를 CPU에 전달하는 방법이 정의되어 있어야 합니다.

 

   

PIC master –slave 구조로 구성되고, 마스터 PIC IRQ 8 (0 – 7) 슬래이브 PIC IRQ 8 (8 – 15) 핀에 연결된 하드 웨어 장치의 인터럽트를 받아, CPU에게 알리고, CPU 인터럽트의 정보를 PIC으로부터 받아 해당 인터럽트 루틴을 실행합니다.

 

마스터 PIC 동작은 다음과 같습니다.

연결된 장치 , 인터럽트가 발생하면,

(1) INT 핀에 신호를 실어 CPU INT 핀에 신호를

 - CPU Eflags IE 비트를 1 세트하고, 인터럽트를 받을수 있는 상황이면 /INTA 핀으로 신호를 보냄

(2) CPU로부터 /INTA핀으로 신호가 오면, 번째 IRQ 연결된 장치에서 인터럽트가 발생했는지 데이터 버스를 통에 CPU 전달

- CPU PIC 보내온 데이터를 참조하여, Protected Mode 실행 중이면 번호에 맞는 디스크립터를 찾아 인터럽트 핸들러를 실행

슬레이브 PIC 동작은 다음과 같습니다.

(1) 자신의 INT 핀에 신호를 실어 마스터 PIC IRQ 2 핀에 인터럽트 신호를 보냄

- 마스터 PIC 자신의 IRQ 핀에서 인터럽트가 발생하여, CPU에게 INT핀으로 신호 보냄

(2) CPU /INTA 신호를 주면 데이터버스에 숫자를 실어  번째 장치에서 인터럽트가 발생했는지 알려줌

 

마스터 PIC 슬레이브 PIC 사용하기 위해서는 초기화를 해주어야 하며, 동작 등을 프로그래밍 주어야 합니다.

 

PIC 제어 하기 위해 4개의 프로그램을 정의 하겠습니다.

ICW1, ICW2, ICW3, ICW4

 

PIC 사용하는 I/O port 다음과 같은 주소를 사용합니다.

 

Master PIC Command : 0x20

Master PIC Data : 0x21

Slave PIC Command : 0xA0

Slave PIC Data : 0xA1

 

PIC 초기화 – ICW1

7

6

5

4

3

2

1

0

0

0

0

1

L

T

I

M

0

S

N

G

L

I

C

4

 

LTIM – 엣지 트리거링(0), 레벨 트리거링(1)

SNGL – 마스터 슬레이브 구조(0), 마스터만 사용(1)

마스터 PIC 초기화 하기 위해서 다음과 같이 세트 줍니다.

7

6

5

4

3

2

1

0

0

0

0

1

0

0

0

1

16진수로 계산해 보면 0x11 입니다.

 

I/O 명령어인 out 이용하여, 마스터 PIC I/O 주소 0x20 프로그램 합니다.

 

mov al, 0x11

out 0x20, al

 

딜레이를 주기 위해 다음 명령어를 2  실행시킵니다.

jmp $+2

nop

nop

 

명령들은 헥사코드로 0x00eb입니다. 따라서 이렇게 표시합니다

 

dw 0x00eb, 0x00eb

 

슬레이어 PIC I/O주소 0xA0 마찬가지로 세트 하고, 마찬가지로 딜레이를 줍니다.

7

6

5

4

3

2

1

0

0

0

0

1

0

0

0

1

 

 

out 0xA0, al

dw 0x00eb 0x00eb

 

PIC IQR 시작점 설정(IRQ 리맵핑): ICW2                       

7

6

5

4

3

2

1

0

Off7

off6

Off5

Off4

Off3

0

0

0

 

PIC 인터럽트를 받았을 IRQ 번호에 얼마를 해서 CPU 알려줄지 정합니다. 0 – 2 비트가 0 것은 숫자를 8 단위로 기재해야 된다는 뜻입니다.

마스터 PIC 다음과 같이 세트합니다.

7

6

5

4

3

2

1

0

0

0

1

0

0

0

0

0

 

mov al, 0x20

out 0x21, al

dw 0x00eb, 0x00eb

 

슬레이브 PIC 다음과 같이 세트합니다. IRQ 8 부터 시작 함으로, 앞서 마스터 PIC 지정한 것에서 8 더해서 슬레이브 PIC 0x28 세트 합니다.

7

6

5

4

3

2

1

0

0

0

1

0

1

0

0

0

 

mov al, 0x28

out 0xA1, al

dw 0x00eb, 0x00eb

 

만약 IRQ0 연결된 하드웨어에서 인터럽트가 발생한다면, ICW2 명령어에서 0x20 설정했기 때문에 IRQ 번호는 0x20 됩니다.

슬레이브 PIC IRQ0 (전체적으로 보면 IRQ8) 연결된 하드웨어 에서 인터럽트가 발생한다면,  0x28 됩니다.

 

마스터 PIC 슬레이브 PIC 구분 – ICW3

IRQ2 번에 슬레이브 PIC 연결되어 있다는 것을 마스터 PIC에게 알려줍니다.

7

6

5

4

3

2

1

0

S7

S6

S5

S4

S3

S2

S2

S0

 

S0 – S7 IRQ 선에 해당됩니다. 0 들어가면, 하드웨어 장치에 연결이 되어 있다는 것을 나타내고, 1 연결하면 슬레이브 PIC 연결되어 있음을 의미합니다.

7

6

5

4

3

2

1

0

0

0

0

0

0

ID2

ID2

ID0

 

번째 IRQ 핀에 연결되어 있는지 마스터 PIC 해당 비트를 1

3~7비트는 0으로 하여, ID0 – ID2 3비트를 사용하여 슬레이브 PIC 마스터 PIC IRQ 핀에 연결되어 있는지 세트합니다.

 

마스터 PIC IRQ 2번에 슬레이브 PIC 연결합니다.

마스터 PIC 이렇게 세트 합니다.

7

6

5

4

3

2

1

0

0

0

0

0

0

1

0

0

 

슬레이브 PIC 다음과 같이 세트 합니다.

7

6

5

4

3

2

1

0

 

 

 

 

 

 

1

0

 

mov al, 0x04

out 0x21, al

dw 0x00eb, 0x00eb

mov al, 0x02

out 0xA1, al

dw 0x00eb, 0x00eb

 

추가 명령어 : ICW4

7

6

5

4

3

2

1

0

0

0

0

S

F

N

M

B

U

F

M

/

S

A

E

O

I

U

P

M

 

SFNM BUF, M/S 기능은 우리가 사용하는 PC에서 구현되어 있지 않기 때문에 항상 0으로 설정합니다.

AEOI – PIC Reset 자동으로 할지, 수동으로 할지 나타냄

리셋을 자동으로 수행하도록 한다면 CPU IRQ 번호를 알린 바로 리셋 하며, 수동으로 수행하도록 한다면 CPU에서 IRQ 번호를 받아들이고, 인터럽트 루틴을 처리 다음, PIC 명령을 주어 리셋해야 합니다.

uPM - MCS-80/85 모드(0) , 8086(1)

 

IRQ 자동으로 리셋하고, 8086 모드로 실행되게 합니다.

다음과 같이 마스터 PIC 설정합니다.

7

6

5

4

3

2

1

0

0

0

0

0

0

0

0

1

 

다음과 같이 슬레이브 PIC 설정합니다.

7

6

5

4

3

2

1

0

0

0

0

0

0

0

0

1

 

mov al, 0x01

out 0x21, al

dw 0x00eb, 0x00eb

out 0xA1, al

dw 0x00eb, 0x00eb

 

인터럽트 막기

 

Protected Mode 넘어가면서 IDT 설정, 하드웨어 인터럽트 작업을 하는 동안 모든 인터럽트를 불가능으로 전환합니다.

 

마스터 PIC IRQ핀에서 슬레이브 PIC 연결된 IRQ2 핀을 제외하고 인터럽트를 막고, 슬레이브 PIC 모든 인터럽트를 막습니다.

 

슬레이브 PIC 다음과 같이 설정합니다.

7

6

5

4

3

2

1

0

1

 

1

1

1

1

1

1

1

 

마스터 PIC 다음과 같이 설정합니다.

7

6

5

4

3

2

1

0

1

1

1

1

1

0

1

1

 

mov al, 0xFF

out 0xA1, al

dw 0x00eb, 0x00eb

mov al, 0xFB

out 0x21, al

 

 

'Operating Systems > OS 커널 제작' 카테고리의 다른 글

4. Interrupt 와 Exception (4) - 예외  (0) 2015.01.20
4. Interrupt 와 Exception (3) – 인터럽트 핸들러  (0) 2015.01.19
3. Protected Mode (3)  (0) 2015.01.17
3. Protected Mode (2)  (0) 2015.01.15
3. Protected Mode (1)  (0) 2015.01.14

+ Recent posts