135
CPU CPU의의기초 기초 이론 이론 일반적인 CPU의 기본 구성 [email protected] http://blog.naver.com/dolicom

4.CPU의 기초 이론pds17.egloos.com/pds/200908/31/64/4.CPU_Basic.pdf · 2009-08-31 · 초기CPU 레지스터의구조(8비트) z초기CPU의레지스터 {A(Accumulator) : 데이터처리의기본레지스터

Embed Size (px)

Citation preview

CPUCPU의의 기초기초 이론이론

일반적인 CPU의 기본 구성

[email protected]://blog.naver.com/dolicom

CPU의 기본 이론CPU의 기본 이론

CPU CPU 구조구조

CPU의 기본적 구성 요소CPU의 기본적 구성 요소

일반적인 CPU의 구성 요소레지스터레지스터

ALU & flag

명령 패치 및 명령 실행 모듈

CPU가 실행되기 위한 가장 기초적 요소CPU가 실행되기 위한 가장 기초적 요소메모리

ROM/FLASHROM/FLASH

RAM (SRAM,DRAM)

초기 CPU 레지스터의 구조(8비트)초기 CPU 레지스터의 구조(8비트)

초기 CPU의 레지스터초기 CPU의 레지스터A (Accumulator ) : 데이터 처리의 기본 레지스터

B : A와 연동하는 보조 레지스터B : A와 연동하는 보조 레지스터

ALU는 명령의 종류에 따라 1,2개의 요소가 필요 한데 A,B가기본 요소이다.

2개 필요 : ADD ; A+B > A2개 필요 : ADD ; A+B -> A

1개 필요 : RR A ; 오른쪽 로테이션

일반적 레지스터가 여러 개 추가 일반 레지스터일반적 레지스터가 여러 개 추가-일반 레지스터.8086,Z80 : B, C, D, E, H, L

2개의 레지스터가 결합하여 동작하기도 한다2개의 레지스터가 결합하여 동작하기도 한다.

BC, DE, HL -> 16비트 조작 명령도 있음

진화한 구조 레지스터진화한 구조 레지스터

일반 레지스터의 차이가 없다.Accumulator가 처리하는 것을 모든 일반 레지Accumulator가 처리하는 것을 든 일반 레지스터가 실행

각 레지스터간의 특별한 의미가 없이 동등각 레지스터간의 특별한 의미가 없이 동등

R0, R1, R2, … Rn

ALU와 선택적으로 연결되어 계산ALU와 선택적으로 연결되어 계산ADD R2,R3 ; R2+R3 -> R2

ARM, 68000

8비트 CPU의 특수 레지스터 종류8비트 CPU의 특수 레지스터 종류

I d 레지스터Index 레지스터주로 메모리 주소를 나타내어 데이터를 읽거나 쓸 때주소값으로 사용주 값 사용

6800 : IX, 8051 : DPTR8086,Z80 : 일반레지스터 HL을 메모리 인텍스로 사용

PC (P C t ) IP( 86)PC (Program Counter), IP(x86)현재 기계어 명령이 실행되는 있는 메모리의 위치를 나타낸다.PC값은 자동으로 처리되기 때문에 임의적으로 값을바꾸는 명령은 없다.

SP (Stack Pointer)SP (Stack Pointer)메모리를 사용한 특수 stack 처리를 위한 메모리의 위치를 지정하는 포인터 값을 갖는다.

Reset 후 초기 PC 값Reset 후 초기 PC 값

소 기계어 어셈블러주소 기계어 어셈블러ORG 0000H

0000 74 00 MOV A,01H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A

74

25

01

0000

0001

0002

PC=0000

,0006 02 00 57 JMP MAIN 0009 02 . . . . . .

25

02

0002

0003

A

Bdata bus

. . .

FLAG

. . .

ALU

패치(Fetch )을 할 때 PC 사용패치(Fetch )을 할 때 PC 사용

처음 00번지 기계어를 읽는주소 기계어 어셈블러ORG 0000H

0000 74 01 MOV A,01H0030 25 02 ADD A,02H0033 F5 A0 MOV 0A0 A

•처음 00번지 기계어를 읽는다. •명령어 74는 다음 데이터를A레지스터로 옮기라는 명령

01

740000

0001

0002

PC=0000

0033 F5 A0 MOV 0A0,A

74

명령어 버퍼

명령어 해석

A레지 터 옮기라는 명령으로 규정 -> 해석25

02

0002

0003

A

Bdata bus

. . .

FLAG

. . .

ALUALU

Fetch후 자동으로 PC 값 1 증가Fetch후 자동으로 PC 값 1 증가

주소 기계어 어셈블러주소 기계어 어셈블러ORG 0000H

0000 74 00 MOV A,01H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0,A

74

01

0000

0001PC=0001

74

명령어 버퍼

명령어 해석

25

02

•다음 1 번지의 데이터 00을 읽어 A레지스터에 넣는다. •명령 한 개가 종료 됨

0002

0003

Bdata bus

•명령 한 개가 종료 됨.

A 01

. . .

FLAG

. . .

ALUALU

자동으로 PC 1증가하여 다음 명령처리자동으로 PC 1증가하여 다음 명령처리

주소 기계어 어셈블러주소 기계어 어셈블러0000 74 00 MOV A,01H0002 25 02 ADD A,02H0004 F5 A0 MOV 0A0H,A

명령어 버퍼

•처음 02번지 기계어를 읽는다. •명령어 25는 다음 데이터를 A01

740000

0001

25

명령어 버퍼

명령어 해석

레지스터와 더하라는 명령으로규정 -> 해석• A+02H -> A 준비

02

250002

0003

PC=0002

A = 01

Bdata bus

. . .

FLAG

. . .

ALUALU

명령어 실행-Machine Cycle명령어 실행 Machine Cycle

한 명령이 실행되기 까지의 전체 시간한 명령이 실행되기 까지의 전체 시간Fetch -기계어 명령 읽기

Decode - 기계어 기능 해석

Execute - 실행

Store - 메모리에 저장

MOV A,02HADD A,02H

8051-MOVX-외부 데이터 억세스8051 MOVX 외부 데이터 억세스

MC1 Fetch-명령어 읽기

MOV A,01H

MC1 Fetch 명령어 읽기

MOV A 01H = 7474 01MOV A,01H = 7474 01메모리로 부터 명령어 74을 읽는 과정이다.

8051 코어

74 0000

제어신호 ROM

16

CPU출력

ROM출력

8051 코어

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0000data bus

명령어 버퍼읽기제어신호

16

8

0000

74

02

B

A . . .. . .

읽기제어신호

CS, OE

EPROM Read Timing. . .

FLAG

ALU

MC2 Decode – 명령어 해석

MOV A,01H

MC2 Decode 명령어 해석

MOV A,01H = 7474 01MOV A,01H 7474 01읽어들인 명령어 74을 해석 한다.

제어신호

74 0000

Decode ROM

16

Decode:74가 MOV 명령 해석

제어신호

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0001data bus

명령어 버퍼 74읽기제어신호

16

8

02

B

A . . .. . .

읽기제어신호

. . .

FLAG

ALU

MC3 Execute –명령어 실행

MOV A,01H

MC3 Execute 명령어 실행

MOV A 01H = 74 0101MOV A,01H = 74 0101다음 데이터을 읽어 A에 넣기 실행

74 0000

제어신호 ROM

16

CPU출력

ROM출력

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0001data bus

읽기제어신호

16

8

0001

01

02

B

A 01 . . .. . .

읽기제어신호

CS, OE

EPROM Read Timing. . .

FLAG

ALU

MC1 Fetch-명령어 읽기

ADD A,02H

MC1 Fetch 명령어 읽기

ADD A 02H = 2525 02ADD A,02H = 2525 02메모리로 부터 명령어 25을 읽는 과정이다.

74 0000

제어신호 ROM

16

CPU출력

ROM출력

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0002data bus

명령어 버퍼읽기제어신호

16

8

0002

25

02

B

A = 01 . . .. . .

읽기제어신호

CS, OE

EPROM Read Timing. . .

FLAG

ALU

MC2 Decode – 명령어 해석

ADD A,02H

MC2 Decode 명령어 해석

ADD A,02H = 2525 02ADD A,02H 2525 02읽어들인 명령어 25을 해석 한다.

74 0000

Decode ROM

16

Decode:25가 ADD 명령 해석

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0003data bus

명령어 버퍼 25읽기제어신호

16

8

02

B

A . . .. . .

읽기제어신호

. . .

FLAG

ALU

MC3 Execute –데이터 실행

ADD A,02H

MC3 Execute 데이터 실행

ADD A 02H = 25 0202ADD A,02H = 25 0202다음 데이터을 02를 읽는다.

74 0000

제어신호 ROM

16

CPU출력

ROM출력

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0003data bus

읽기제어신호

16

8

0003

02Oper and 버퍼02

02

B

A 01 . . .. . .

읽기제어신호

CS, OE

EPROM Read Timing. . .

FLAG

ALU

MC4 Execute –더하기 실행

ADD A,02H

MC4 Execute 더하기 실행

ADD A,02H = 25 02ADD A,02H 25 02ALU을 이용하여 A+operand 실행

제어 : ADD

74 0000

Decode ROM

16

제어 : ADD

Address bus

25

02

01

74 0000

0001

0002

0003

PC=0004data bus

Operand 02읽기제어신호

16

8

02

B

. . .. . .

읽기제어신호

A = 01 -> 03

. . .

FLAGFLAG

01 02

ALUALUALU: ADD 선택

02

03

Z=0,C=0, N=0, Z=0,C=0, N=0, V=0, P=0V=0, P=0

MC1 Fetch-명령어 읽기

MOV 0A0H,A

MC1 Fetch 명령어 읽기

MOV 0A0H A = F5F5 A0MOV 0A0H,A = F5F5 A0메모리로 부터 명령어 F5을 읽는다.

ROM

25

01

74 0000

0001

0002

제어신호

ROM

16

CPU출력

ROM출력

Address bus 25

02 0003PC=0004

data bus

명령어 버퍼읽기제어신호

16

8

0004

F5F5F5

A0

0004

0005

B

A=03 . . . . . .

읽기제어신호

CS, OE

EPROM Read Timing

A0 0005

. . .

FLAG

ALU

MC2 Decode – 명령어 해석

MOV 0A0H,A

MC2 Decode 명령어 해석

MOV 0A0H,A = FF55 A0MOV 0A0H,A FF55 A0읽어들인 명령어 74을 해석 한다.

ROM

Decode

16

Decode:F5가 MOV 명령 해석

25

01

74 0000

0001

0002

ROM

Address busPC=0005data bus

명령어 버퍼 F5읽기제어신호

16

8

25

02 0003

F5

A0

0004

0005

B

A=03

읽기제어신호

. . . . . .

A0 0005

. . .

FLAG

ALU

MC3 Execute –명령어 실행

MOV 0A0H,A

MC3 Execute 명령어 실행

MOV 0A0H A = F5 AA00MOV 0A0H,A = F5 AA00저장할 주소값 읽기 CPU출력

ROM출력ROM

제어신호

16 25

01

74 0000

0001

0002

ROM

Address busPC=0005data bus

읽기제어신호

16

8

0005

A0

25

02 0003

F5

A0

0004

0005

Oper and A0

B

A = 03

읽기제어신호

CS, OE

EPROM Read Timing

. . . . . .

A0 0005

. . .

FLAG

ALU

MC4 Store –데이터 저장

MOV 0A0H,A

MC4 Store 데이터 저장

MOV 0A0H A = F5 A0MOV 0A0H,A = F5 A0읽힌 주소값(A0)을 이용 RAM 쓰기

CPU출력

8051의 RAM은내부에 있는 것이므로 8비트 주

제어신호

8/16

CPU출력CPU 출력

A0 25

01

749E

9F

A0

내부RAM

00

30

이므로 8비트 주소값을 갖는다.그러나 통상 8비트 CPU는 주소

Address busPC=0006data bus

읽기제어신호

8/16

8

A0

03

25

02

A0

A1

F5

A0A2Oper and A0

02

FF

54

03 는 16비트이다.

B

A = 03

읽기제어신호

CS, WE . . . . . .

A0A3

. . .

54

RAM Write Timing. . .

FLAG

ALU

MC3 Store –데이터 저장

MOVX @DPTR, A 현재 DPTR=5011

MC3 Store 데이터 저장

MOV @DPTR AMOV @DPTR,A 읽힌 주소값(A0)을 이용 RAM 쓰기

CPU출력CPU 출력

제어신호

165011 25

01

74500F

5010

5011

외부RAM

00

30

Address busPC=0006data bus

읽기제어신호

16

8

5011

03

25

02

5011

5012

F5

A05013DPTR = 5011

02

FF

54

03

B

A = 03

읽기제어신호

CS, WE . . . . . .

A05014

. . .

54

RAM Write Timing. . .

FLAG

ALU

PC 값이 자동으로 진행하지 않는 경우PC 값이 자동으로 진행하지 않는 경우

PC는 CPU가 실행하면서 현재 실행 시점에서자동으로 증가하면 다음 명령을 실행

필요에 따라 다음 명령이 아닌 곳으로 실행을옮길 필요가 있는데 이것은 기계어 명령에 따라이루어 진다.

Jump 명령

CALL / RET 명령

8비트 CPU의 PC 는 16비트 레지스터 이므로8비트 CPU의 PC 는 16비트 레지스터 이므로최대 64K 바이트 내에서 기계어 코드가 실행된다.된다.

CPU의 기본 이론CPU의 기본 이론

플래그플래그 (FLAG)(FLAG)플래그플래그 (FLAG)(FLAG)

플래그(FLAG)의 개념과 종류플래그(FLAG)의 개념과 종류

ALU 산술연산, 논리연산, 쉬프트 등의 결과로발생되는 상태를 나타내고 CPU에 저장하여, 이 상태를 사용하는 명령에 의해 명령 고려 시참조된다.

수학적 2진법 계산에서 주로 언급되는 이론

수학적 계산을 할 때, 디지털 회로에서 정해진수학적 계산을 할 때, 디지털 회로에서 정해진비트로 설정하고 계산한다.

CPU 마다 취급되는 종류는 약간씩 다르나 기CPU 마다 취급되는 종류는 약간씩 다르나 기본적인 것은 모두 가지고 있다.

플래그의 종류플래그의 종류

C (C ) 어떤 연산결과 맨 앞의 비트 계산 결과 발생되C (Carry) : 어떤 연산결과 맨 앞의 비트 계산 결과 발생되는 자리 올림 값.

더하기 할 때는 carry더하기 할 때는 carry

빼기 할 때는 borrow

Z (Zero) : 계산 결과가 모두 0일 때Carry비트는 제외

V (Overflow) : 계산 결과 레지스터가 취급할 수 값의 범위를 넘었을 때 발생를 넘었을 때 발생

S (Sign) : 맨 앞의 비트(MSB)가 1일 때 음수를 나타낸다.

P (Parity) : 계산 결과 값에서 1의 개수가 홀수 개 인지 짝P (Parity) : 계산 결과 값에서 1의 개수가 홀수 개 인지 짝수개 인지를 나타낸다.

AC(Auxiliary Carry) : 8비트 CPU에서 3번째 비트를 연산한 결과의 Carry/Borrow 값

8비트 계산의 C와 AC8비트 계산의 C와 AC

char inum;inum = -3;inum += 2;

0000 0011 : 31111 1100 : 3의 1의 보수1111 1101 : 3의 2의 보수 = 1의 보수 + 1 => -3

0 1111 1101 : (-3) 0 0000 0010 20 0000 0010 : + 2----------- ADD0 1111 1111 : (-3) + 2 => -1

0

맨 앞의 비트에서 더할 때 carry가 발생하지 않아C = 0 (clear) 되고 AC=0C = 0 (clear) 되고 AC=0

Carry 예 2Carry 예 2

char inum;inum = -3;i 2inum += -2;

0 1111 1101 : -30 1111 1101 : 30 1111 1110 : -2---------- + ADD1

1 1111 1011 : (-3) + (-2) => -5

맨 앞의 비트에서 더할 때 가 발생하여맨 앞의 비트에서 더할 때 carry가 발생하여C=1 (set) 되고 AC=1

로테이션 명령에서 carry와 함께로테이션 명령에서 carry와 함께

RRC A : RRC (Rotate Right with Carry)

0 → 1111 1101 → C C=1A레지스터

RLC A : RLC (Rotate Left with Carry)RLC A : RLC (Rotate Left with Carry)

A레지스터

C ← 1111 1101 ← 0 C=0

Zero 예(8비트)Zero 예(8비트)

h i ;char inum;

inum = -3;

inum -= 3;

0 1111 1101 : -3

0 0000 0011 : 3

----------- SUBSUB

0 0000 0000 : (-3) - 3 => 0

연산결과 0이 나와 Z=1(set), C=0(clear)

S (Sign) N(Negative)S (Sign), N(Negative)

h i ;char inum;

inum = -3; MOV A,#0FDH

inum += 2; ADD A,#02

0 1111 1101 : -3

0 0000 0010 : 20 0000 0010 : 2

----------- ADD

0 1111 1111 : ( 3) +2 > 10 1111 1111 : (-3) +2 => -1

연산결과 -1이고

S=1(set), Z=0(clear), C=0(clear)

V (Overflow)V (Overflow)

127 1 80H 01H > 127 V 1 C 0 S 0-127 -1 = 80H – 01H => 127 : V=1, C=0, S=0

0 1000 0000 : 80H 128char icn;icn = -127;0 1000 0000 : 80H = -128

0 0000 0001 : 01H = 1

---------- : SUBB

icn = -127;icn -= 1;

CLR C---------- : SUBB

0 0111 1111 : -128 - 1 = +127

CLR CMOV A,#80HSUBB A,#01

-128 - 1 = -129와 같이 결과가 나와야 하지만

8비트의 제한 때문에 127이 나와 한계를 넘는8비 의 제한 때문에 1 7이 나와 한계를 넘는

경우를 overflow 라고 한다.

V=1(set)로 됨

V (Overflow)V (Overflow)

126 3 127 V 1 C 0 S 1126 +3 = -127 : V=1, C=0, S=1

0 0111 1110 : 126

char icn;icn = 126;icn += 3;

0 0111 1110 : 126

0 0000 0011 : 3

---------- : ADD

CLR CMOV A,#126SUBB A #03---------- : ADD

0 1000 0001 : 126 + 3 = -127

SUBB A,#03

126 + 3 = 129와 같이 결과가 나와야 하지만

8비트의 제한 때문에 -127이 나와 127보다 큰 수가8비 의 제한 때문에 1 7이 나와 1 7 다 큰 수가

될 수 없고 한계를 넘는 경우를 overflow 라고 한다.

V=1(set)로 됨

P (Even Parity )P (Even Parity )

char inum;char inum;inum = -3; MOV A,#0FDHinum += 2; ADD A,#02

0 1111 1101 : -30 0000 0010 : 2----------- ADD 0 1111 1111 : (-3) +2 => -1

연산결과 값은 -1이고, 1의 개수가 8개로 짝수이다. 이 때 P=1로 set 됨.

P=1(set), S=1(set), Z=0(clear), C=0(clear)

CPU의 기본 이론CPU의 기본 이론

스택스택 (Stack)(Stack)스택스택 (Stack)(Stack)

스택 이란스택 이란

스택(Stack)의 개념스택(Stack)의 개념

스택은 데이터를 저장하거나 꺼내 사용할때, 저장하는 방식을 말한다.때, 저장하 방식 다

마지막에 넣은 데이터를 우선 꺼내지는구조이다구조이다.

데이터 넣기 데이터 꺼내기

PUSH POP

스택 구조를 지원하기 SP레지스터 사용스택 구조를 지원하기 SP레지스터 사용

메모리에 데이터를 넣고 빼기 위해 주소값을 저정하기 위한 포인메모리에 데이터를 넣고 빼기 위해 주소값을 저정하기 위한 포인터가 필요한데 이것이 SP 레지스터 이다.SP는 특정 명령이 실행되며 자동으로 증가하거나 감소 한다.

POPPUSH POP

SP

레지스터

메모리

레지스터

메모리

8비트 CPU의 스택의 억세스 순서8비트 CPU의 스택의 억세스 순서

스택에 넣을 때는 PUSH 명령을 사용 한다스택에 넣을 때는 PUSH 명령을 사용 한다.

MOV A,#10PUSH A

PUSH

MOV SP,#00FFH PUSH A 실행 과정

PUSH

00FC

주소

00FC

주소

00FC

주소

00FE

00FD

00FC

SP 00FE

00FD

00FC

SP00FE 00FE

00FDSP

00FF

메모리

00FF 00FF 00FF

SP

10 00FF10

1 SP가 가리키는 2 SP가 1이 자동감소

XX

1. SP가 가리키는주소에 10을 넣는다.

2. SP가 1이 자동감소

스택의 억세스 순서 step2스택의 억세스 순서 step2

기계어 데이터를 꺼내려면 POP 명령을 사용기계어 데이터를 꺼내려면 POP 명령을 사용

POP A 실행 과정

읽기

POP APOP A 실행 과정

10

A

00FC

주소

00FC

주소

SP

00FE

00FD

00FC

SP00FE

00FF

00FE

00FDSP

1000FF 00FF10

00FF10

2. SP가 가리키는1. SP가 1이 자동증가 3. 읽혀진 값을

00FF

. SP가 가리키는주소에서 값을 읽는다 A에 저장

8051 스택의 억세스 순서8051 스택의 억세스 순서

기계어 데이터를 넣으려면 PUSH 명령을 사용기계어 데이터를 넣으려면 PUSH 명령을 사용

MOV SP #5FHMOV A,#10PUSH A

PUSH A 실행 과정

주소

MOV SP,#5FH

SP

PUSH APUSH A 실행 과정

주소주소

5F 5F

60

주소SP

60

SP

60

SP5F

6010

5F

60

주소

62

6162

61

62

61

A

내부메모리

2. SP가 가리키는1. SP가 1이 자동증가

10

A

2. SP가 가리키는주소에 A=10을 넣는다.

8051스택의 억세스 순서 step28051스택의 억세스 순서 step2

기계어 데이터를 꺼내려면 POP 명령을 사용기계어 데이터를 꺼내려면 POP 명령을 사용

POP A 실행 과정

읽기

POP APOP A 실행 과정

주소

60 60

SP 5F

10

주소

60 60

SP 5F

10

주소

5F

SP

5F

60

62

61

6010 60

62

61

6010

62

61

6010

10

A 레지스터

2. SP을 1 감소 한다.

62

1. SP에서 읽어A에 저장 한다.

CPU의 기본 이론CPU의 기본 이론

CPUCPU 레지스터레지스터 예예CPU CPU 레지스터레지스터 예예

8051의 레지스터8051의 레지스터

AALU와

8비트

B

R0

R1

DPH DPLDPTR

스택

와연동 16비트

R1

R3

R2

PCPC 16비트

SP스택

포인터 8비트 – 내부 RAM 만 사용

R4

R5

PCPC 16비트범용

8비트

R7

R6 CY AC F0 RS1 OVRS0 P--FLAGPSW

8086 레지스터8086 레지스터

A : AccumulatorA : AccumulatorGeneral registers:

B,C, BC (data pointer) D E DE (d t i t )D,E, DE (data pointer) H,L, HL (reference memory address)

PC (Program counter,16비트)SP (St k i t 16비트) t kSP (Stack pointer,16비트)-stack

2씩 증가/감소.

FLAGS SiS : SignZ : Zero AC : Auxiliary carry - carry 3비트의 결과->4비트에 영향P : Parity even parity (1의 숫자가 짝수개 일때 1)P : Parity – even parity (1의 숫자가 짝수개 일때, 1) C : Carry – 더하기(carry), 빼기/비교(borrow)

Z-80 레지스터Z 80 레지스터

Z-80 플래그Z 80 플래그

Carry

ZeroZero

Minus

Parity/overflow

Half carryHalf-carry

Z-80 칩의 구조Z 80 칩의 구조

ARMARM

ARM의 상태 레지스터ARM의 상태 레지스터

CPU의 기본 이론CPU의 기본 이론

메모리메모리메모리메모리

• EPROM (8비트의 시스템에서 주로 사용)• SRAM (8비트의 시스템에서 주로 사용)SRAM (8비트의 시스템에서 주로 사용)• DRAM (ARM등 임베디드 시스템에서 주로 사용)

고 용량의 메모리에 필요

메모리의 엑세스메모리의 엑세스

CPU가 프로그램을 읽어 실행하기 위해필요

변수의 값을 설정 하기 위해MOV/MOVX등의 값 설정MOV/MOVX등의 값 설정

스택을 사용할 경우PUSH/POP 명령에 의한 스택 사용

CALL/RET에 의한 복귀 주소 처리CALL/RET에 의한 복귀 주소 처리

인터럽트/RETI 에 의한 복귀 주소 처리

CPU는 억세스 하기 위한 신호CPU는 억세스 하기 위한 신호

현재 메모리의 억세스 인가를 나타내는 신호와현재 메모리의 억세스 인가를 나타내는 신호와억세스 방향(read/write)

Z80 : MREQ RD WRZ80 : MREQ, RD, WRMREQ=0이고 RD=0,WR=1인 동안 메모리 읽기

MREQ=0이고 WR=0 RD=1인 동안 메모리 쓰기MREQ 0이고 WR 0,RD 1인 동안 메모리 쓰기

프로그램과 데이터/변수영역의 구분이 없다.

8051 : RD, WR, PSEN, ALE프로그램 메모리와 데이터/변수 영역 구분 있음

RD=0이고 WR=1,PSEN=1 : 데이터 메모리 읽기

RD=1이고 WR=0 PSEN=1 : 데이터 메모리 쓰기RD=1이고 WR=0,PSEN=1 : 데이터 메모리 쓰기

RD=0이고 WR=1,PSEN=0 : 프로그램 메모리 읽기

RD=1이고 WR=0,PSEN=0 : 프로그램 메모리 쓰기

CPU와 메모리CPU와 메모리

CPU의 신호에 따라 R d/W it 한다CPU의 신호에 따라 Read/Write 한다.

RAM

ROMAddress Bus A[n:0]

Data Bus D[7:0]

CPU

Data Bus D[7:0]

CPU

DecoderRD/WR

CS OE

CS RD WR

•메모리 제어 신호 발생

PSENCS RD WR

메모리 제어 신호 발생•ARM등의 임베디드 칩은CPU내에 포함

메모리의 구조 – 신호메모리의 구조 신호

메모리는 여러 개의 데이터 저장이 필요하므로메모리는 여러 개의 데이터 저장이 필요하므로각 데이터의 위치를 결정하기 위한 주소 값이필요- Address Bus필요 Address Bus한 번에 읽거나 쓰기 때, 여러 비트의 데이터 처리를 위해 데이터 신호가 필요 – Data Bus ( )(1,8,16,32비트)읽거나 쓸 때 정확한 시점을 결정하기 위한 신호 ( CS Chip Selector)호 ( CS – Chip Selector)RAM의 경우 읽거나 쓰기를 결정하기 위한 신호 (RD / WR )호 (RD / WR )ROM의 경우 읽을 때, 데이터의 출력을 결정하기 위한 신호 (OE)기 위한 신호 (OE)

EPROMEPROM

EPROM

읽는 것은 가능하나 쓰기는 별도의 장치 사용

전원이 공급되지 않아도 데이터 유지전원이 공급되지 않아도 데이터 유지

별도의 자외선에 의해 지움

메모리의 구조 –ROM 신호메모리의 구조 ROM 신호

A[ 0] Add B 신호의 라인수는 칩의A[n:0] – Address Bus : 신호의 라인수는 칩의용량과 관계가 있다.

D[7 0] D t B 한번에 8비트 단위로 읽D[7:0] – Data Bus : 한번에 8비트 단위로 읽는다.

CS (CE) 읽거나 쓰는 시점을 결정한다CS (CE) : 읽거나 쓰는 시점을 결정한다. Active 에서만 데이터를 읽거나 쓴다.

OE(O t t E bl ) 읽을 때 데이터를 출력OE(Output Enable) : 읽을 때 데이터를 출력한다. 이것이 deactive되면 데이터 버스는 끊어진다(하이 임피던스)진다(하이 임피던스).

CS, OE의 신호는 0일 때 active 된다.

EPROM – 27C256EPROM 27C256

256x1 024bit=32 768byte256x1,024bit 32,768byte=> 32Kbyte

ROM 타이밍 – READ 데이터 읽기ROM 타이밍 READ 데이터 읽기

EPROM 쓰기 – 롬라이터에 의해EPROM 쓰기 롬라이터에 의해

EPROM 지우기 – 자외선 등에 의해EPROM 지우기 자외선 등에 의해

SRAMSRAM

SRAM

읽거나 쓰기가 가능

전원이 공급되면 데이터 유지전원이 공급되면 데이터 유지

전원이 공급되지 않으면 데이터 사라짐

메모리의 구조 – SRAM 신호메모리의 구조 SRAM 신호

A[15:0] Add B : 신호의 라인수는 칩A[15:0] – Address Bus : 신호의 라인수는 칩의 용량과 관계가 있다.D[7:0] Data Bus : 한번에 8비트 단위로 읽D[7:0] – Data Bus : 한번에 8비트 단위로 읽는다.CS : 읽거나 쓰는 시점을 결정한다 Active 에CS 읽거나 쓰는 시점을 결정한다. Active 에서만 데이터를 읽거나 쓴다.WE : CS가 active 시점에서 쓰기를 한다.OE(Output Enable) : 읽을 때 데이터를 출력한다. 이것이 deactive되면 데이터 버스는 끊어진다(하이 임피던스)진다(하이 임피던스).CS, WE, OE의 신호는 0일 때 active 된다.

SRAM – 681000 (1Mbit=128Kbyte)SRAM 681000 (1Mbit 128Kbyte)

SRAM의 메모리 셀 (1비트)SRAM의 메모리 셀 (1비트)

DRAM

SRAM

SRAM 읽기 타이밍SRAM 읽기 타이밍

SRAM 읽기와 쓰기 속도SRAM 읽기와 쓰기 속도

SRAM 쓰기 타이밍SRAM 쓰기 타이밍

DRAMDRAM

DRAM

읽거나 쓰기가 가능

전원이 공급되면 데이터 유지되지만 서서히전원이 공급되면 데이터 유지되지만 서서히데이터가 사라져 주기적으로 리플레쉬 함.

전원이 공급되지 않으면 데이터 사라짐

DRAM의 셀 구조DRAM의 셀 구조

FET와 캐패스터의 전류 손실 때문에주기적 리플레쉬가 필요하고 별도의 하드웨어가 필요하다

DRAM Write

DRAM Read

DRAM과 SDRAM 차이DRAM과 SDRAM 차이

메모리의 구현메모리의 구현

CPU와 메모리의 배치CPU와 메모리의 배치

시스템 설계

CPU와 메모리CPU와 메모리

의 메모리 처리 한계CPU의 메모리 처리 한계CPU가 처리할 수 있는 메모리의 한계가 있다.

CPU의 레지스터가 주소 지정을 할 수 있는 공간

8비트 CPU 대부분 16비트 주소를 갖는 64Kbyte 임.

CPU의 메모리 배치 방법프로그램과 변수/데이터 영역이 구분되지 않은경우

대부분의 CPU는 여기에 속함)

프로그램과 변수/데이터영역이 구분8051계열

CPU의 메모리 처리 한계CPU의 메모리 처리 한계

CPU가 정해진 길이 만큼의 메모리 한계CPU가 정해진 길이 만큼의 메모리 한계

필요에 따라 메모리의 용량을 결정

프로그램과 데이터 영역의 구별이 없는 CPU 경우 예프로그램과 데이터 영역의 구별이 없는 CPU 경우 예

0000AddressBus A[15:0]

32K

0000

ROM

16K

7FFF8000

RAM1

A15A14

A15=0CSCPU

디지털16K

16K

BFFFC000

RAM1

RAM2

MREQRDWR

CS

CS

A15=1,A14=0

A15=1,A14=1

로직

FFFFWR CS

A15 1,A14 1

Addressdecoder

메모리 배치 개념메모리 배치 개념

시스템이 필요한 용량만큼의 메모리 설계시스템이 필요한 용량만큼의 메모리 설계

CPU 신호

00 000

CPU측에서본 주소값ROM 칩1

A0A1

A0A1

CPU 신호

01

10

11

001

010

011

CSOE

A1A1

A2

MEMREQ

0

1

100

101

RAM 칩2CSRD

A0

WRRD 1

0

101

110

RAM 칩3

WR

CSA0

WR

1 111RDWR

ROM칩1의 CS 신호 논리ROM칩1의 CS 신호 논리

MREQ A2 A1 A0 Out

0 0 X X 0

0 1 X X 1

1 0 X X 11 0 X X 1

1 1 X X 1

MREQ A2 Out

0 0 00 0 0

0 1 1

1 0 11 0 1

1 1 1

RAM칩의 CS 신호 논리RAM칩의 CS 신호 논리

MREQ A2 A1 Out

0 0 0 1논리 식

0 0 0 1

0 0 1 1Out = MREQ A2 A1

= MREQ + A2 + A10 1 0 0

0 1 1 1

1 0 0 1

1 0 1 11 0 1 1

1 1 0 1

1 1 1 1

CPU의 기본 이론CPU의 기본 이론

입출력입출력 장치장치입출력입출력 장치장치

포트 (Port)포트 (Port)

장치에서 시스템 구성 상 상황에 따라 디지털 입출력이 필요지 력이

출력 : 어느 장치를 제어하기 위한 디지털 1비트 출력트 출력

CPU가 한번 쓰기를 하면 이 상태가 다음 쓰기전에는 유지해야 한다.

입력 : 디지털 입력 0,1의 상태를 읽음keypadkeypad

포트는 간단 디지털의 1비트만을 입/출력

주로 8비트 단위로 입출력-CPU마다 다름

디지털 입 출력디지털 입.출력

디지털 출력은 필요한 비트 만을 설계

초기의 CPU는 TTL를 사용 하였다초기의 CPU는 TTL를 사용 하였다.출력 :D-FF/LATCH을 이용

입력 74244등의 버퍼 사용입력 : 74244등의 버퍼 사용

MCU/임베디드는 칩 내부에서 지원메모리가 내부에 존재하므로 밖에 있는 메모

리를 억세스 할 필요가 없다.리를 억세 할 필 가 없다.

칩의 핀을 포트로 사용하도록 진화 하였다.

각 핀을 선택적으로 디지털 입 출력과 특수목각 핀을 선택적으로 디지털 입.출력과 특수목적으로 선택할 수 있다.

디지털 출력디지털 출력

초기의 CPU는 TTL의 D-FF/LATCH을 이용초기의 CPU는 TTL의 D FF/LATCH을 이용

D QD0

74374

CPU

Data Bus D[7:0]

D

CLK

Q

D

CLK

QD1

D2

CPU

Data Bus D[7:0] D

CLK

Q

D Q

D2

D3 출력 8비트

Address

AddrBus

CLK

D

CLK

Q

D Q

D4

D5

AddressDecoderRD/WR

PSENCLK

Q

D

CLK

QD6

D7D

CLK

QD7

디지털 입력디지털 입력

초기의 CPU는 TTL의 D-FF/LATCH을 이용초기의 CPU는 TTL의 D FF/LATCH을 이용

D0

74541

CPU

Data Bus D[7:0]

D1

D2

CPU

Data Bus D[7:0] D2

D3

8비트 입력

Address

AddrBus

D4

D5

8비트 입력

AddressDecoderRD/WR

PSEN D6

D7D7

포트-입출력의 구현 (범용)포트 입출력의 구현 (범용)

입출력을 선택적으로 사용한다. 력 택적 사용 다프로그램에 의해 입출력 선택 (레지스터 사용)

D[7:0] 포트가 입력인지 출력인지

출력 CLK PT7 PT6 PT5 PT4 PT3 PT2 PT1 PT0

[7 0]

. . .

포트가 입력인지 출력인지를 결정하는 레지스터

8개의 D-FF 사용D Q

PT0가 1이면

출력 Data 읽기

1 : 출력

8개의 D FF 사용CLK

PT0가 1이면출력 버퍼가 D-FF을 핀에 출력 한다.

D

CLK

QData bus

출력 Write

P0D0

1 : 출력0 : 입력

P tP tD-FF

출력 Write PortPort

외부 입력 읽기입력은 제어필요없다.

포트의 개수 - 처리단위PT0가 1이면출력 버퍼가 D-FF포트의 개수 처리단위

8개의 포트를 하나로 묶어 사용

을 핀에 출력 한다.

개의 하나 묶어 사용입출력 선택 및 제어를 위한 레지스터 – 8개 단위

D[7:0] 포트가 입력인지 출력인지

출력 CLK PT7 PT6 PT5 PT4 PT3 PT2 PT1 PT0

[ ] 포트가 입력인지 출력인지를 결정하는 레지스터

PortPortD[7:0]

. . .

PA0D

D0

DataB

D PA1D1

Bus

. . . PA.0

0,1,2,3,4,5,6,7

. . .

D PA7A,B,C,D,E, . . .0,1,2,3,4, . . . PA3, PB2

P1.3, P0.1

포트 이름 붙이기 예포트 이름 붙이기 예

AVRARM

일반적으로 많이 사용ARM

포트를 출력으로 사용포트를 출력으로 사용

출력 선택 : PT 레지스터에 1을 설정한다.력 택포트의 D-FF에 원하는 로직을 쓴다.

레지스터에 1을 쓰면 출력 선택PT0PT1PT2PT3PT4PT5PT6PT7

0 0 1 0 0 1 1 1PTA

. . . PT0가 1이므로출력 버퍼가 D-FF을핀에 출력 한다

레지스터에 1을 쓰면 출력 선택PT0PT1PT2PT3PT4PT5PT6PT7

출력 Data 읽기

D0

핀에 출력 한다.

1 : 출력

D

CLK

QData bus

출력 Write

PA0D0

D-FF

외부 입력 읽기입력은 제어필요없다.

출력한 데이터를 다시 읽기출력한 데이터를 다시 읽기

출력 선택 : PT 레지스터에 1을 설정한다.력 택포트의 D-FF에 원하는 로직을 쓴다.

레지스터에 1을 쓰면 출력 선택PT0PT1PT2PT3PT4PT5PT6PT7

0 0 1 0 0 1 1 1PTA

. . . PT0가 1이므로출력 버퍼가 D-FF을핀에 출력 한다

레지스터에 1을 쓰면 출력 선택PT0PT1PT2PT3PT4PT5PT6PT7

출력 Data 읽기

핀에 출력 한다.

1 : 출력

D

CLK

QData bus

출력 Write

PA0D0

D-FF

외부입력은 제어

외부 입력 읽기

외부입력은 제어필요없다.

포트를 입력으로 사용포트를 입력으로 사용

출력 선택 : PT 레지스터에 1을 설정한다.력 택포트의 D-FF에 원하는 로직을 쓴다.

레지스터에 0을 쓰면 출력 해제PT0PT1PT2PT3PT4PT5PT6PT7

0 0 1 0 0 1 1 0PTA

. . . PT0가 0이므로출력 버퍼가 Z 상태

레지스터에 0을 쓰면 출력 해제PT0PT1PT2PT3PT4PT5PT6PT7

출력 Data 읽기

0 Z

D

CLK

QData bus

출력 Write

PA0D0

D-FF

입력할 때 만

외부 입력 읽기

입력할 때 만읽어 들이면된다.

포트의 멀티기능 출력포트의 멀티기능 출력

디지털 입출력과 다른 하드웨어 출력 선택적으로 사용레지예 : 디지털 입출력과 UART의 핀으로 사용 UART_ENABLE 레지

스터 비트를 1로 설정하면 UART 쪽의버퍼를 활성화출력버퍼 Shift Register 버퍼를 활성화출력버퍼 Shift Register

X X X X X X X 1

UART 제어레지스터

UTxD_ENABLETxDUART

모듈

P3.1/TxD0 0 1 0 0 1 X 1PT3

UART 제어레지스터

PT3.1

DData bus

출력 Data 읽기

D1 0ZD

CLK

Q

D-FF

Data bus

출력 Write

포트출력은 무시

Z

P3.1

외부 입력 읽기

포트출력은 무시포트 입출력 레지스터는 무시된다.

포트의 멀티기능 입력포트의 멀티기능 입력

디지털 입출력과 다른 하드웨어 출력 선택적으로 사용

예 : 디지털 입출력과 UART의 핀으로 사용 UART_ENABLE 레지스터 비트를 1로 설정하면 UART 쪽의버퍼를 활성화입력버퍼 Shift Register

RxD버퍼를 활성화입력버퍼 Shift Register

X X X X X X X 1

UART 제어레지스터

RxD_ENABLE

UART모듈

P3.0/RxD0 0 1 0 0 1 0 XPT3

UART 제어레지스터

PT3.0

DData bus

출력 Data 읽기

D1 0ZD

CLK

Q

D-FF

Data bus

출력 Write

포트출력은 무시

Z

P3.0

외부 입력 읽기

포트출력은 무시포트 입출력 레지스터는 무시된다.

입출력 장치 - 입력입출력 장치 입력

키패드키패드키패드키패드

(keypad)(keypad)(keypad)(keypad)

키패드 (keypad)키패드 (keypad)

키패드는 장치의 특성에 개수는 결정

키의 개수와 CPU의 포트의 수에 따라 회키의 개수와 CPU의 포트의 수에 따라 회로를 결정

개수가 적을 경우 C U 포트 하나에 하나개수가 적을 경우 CPU 포트 하나에 하나의 키로 설계

개수가 많으면 매트릭스 형태로 설계

키의 개수가 적을 경우키의 개수가 적을 경우

CPU의 포트에 직접 연결 한다CPU의 포트에 직접 연결 한다.

5V CPU5V

전류1R 저항

CPU

4.7K 10K

P0 14.xV

P0.1

키의 눌리면키의 눌리면

CPU의 포트에 직접 연결 한다CPU의 포트에 직접 연결 한다.

5V CPU5V

R 저항

CPU

전류14.7K 10K

P0 1

전류1

0V

전류2

P0.1

소프트에서 처리소프트에서 처리

키가 눌리면 논리 1 -> 0로 바뀜

만약 포트의 인터럽트가 가능하면 인터럽만약 포트의 인터럽트가 가능하면 인터럽드 사용

인터럽트가 발생하면 키를 읽어 확인인터럽트가 발생하면 키를 읽어 확인

키에 맞는 기능 수행

인터럽트 불가능하면 계속 키가 눌렸는지확인확인

키가 눌리면 이에 맞는 동작 실행

키가 많을 때 (4x4=16키)11 22 33

44 55 66키가 많을 때 (4x4 16키)

VDD

77 88 99

** 00 ##VDD

R

◀◀ ▶▶ RR

Run/StopRun/StopR출력 회로

Run/StopRun/Stop

CPU 포트 출력

CPU 포트 입력TTL(74244)

CPU 포트 출력TTL D-FF

매트릭스 키의 신호처리매트릭스 키의 신호처리

키가 눌리면 인터럽트 신호 발생하는 경우어느 키 인지를 감지하는 프로그램 실행어느 키 인지를 감지하는 프로그램 실행

키에 맞는 동작 실행

인터럽트가 불가능 하면 키 눌렸는지 확인어느 키 인지를 확인하고 동작 실행

어느 키인지를 확인하는 절차 -1어느 키인지를 확인하는 절차 1

키 대기 상태에서 R[3:0]에 모두 0을 출력하고 키입력을 가다린다키 대기 상태에서 R[3:0]에 모두 0을 출력하고 키입력을 가다린다.만약 어느 비트라도 0이 입력되면 키가 눌렸음을 확인을 안다.

VDD

RR

키출력

R00

R1

R2

R3

0

0

0 R3

C0C1C2C3 D0D1

0

10

키입력

D1D2D3

011

키 확인 절차 - 2키 확인 절차 2

우선 R0에 을 나머지는 0을 나머지는 1을 출력하고 키입력 값을 읽는다우선 R0에 을 나머지는 0을 나머지는 1을 출력하고 키입력 값을 읽는다.입력된 키 값이 모두 1이므로 R0 줄의 모든 키는 입력이 되지 않았음.

VDD

RR

키출력

R00

R1

R2

R3

1

1

1 R3

C0C1C2C3 D0D1

1

11

키입력

D1D2D3

111

키확인 절차 - 3키확인 절차 3

R1에 0을 나머지는 1 출력하고 키입력값 C[3:0]을 읽는다.

VDD

키입력값에 두번째 비트가 0임을 확인

RR

출력

R01

R1

R2

R3

0

1

1 R3

C0C1C2C3 D0D1

1

10 D1

D2D3

011

키확인 절차 - 4키확인 절차 4

R1에 0을 나머지는 1 출력하고 키입력을 한다.

VDD

키입력을 하면 두번째 비트가 0임을 확인

RR

출력

R01

R1

R2

R3

1

0

1 R3

C0C1C2C3 D0D1

1

11 D1

D2D3

111

키을 읽을 때의 문제점키을 읽을 때의 문제점

키의 전자 신호는 보통 채터링이라는 신호 형태를 띤다.형태 다

F AA키 off

B키 눌림

C불안정

D안정

E키 떨어짐

F불안정

A키 off

• 키가 눌리면 변화 과정에서 C와 F와 같은 불안정 상태를 거친다.CPU는 이것의 상태를 수정할 수 있는 프로그램이 필요하다• CPU는 이것의 상태를 수정할 수 있는 프로그램이 필요하다.

- 키를 누르면 2번 실행할 경우 이 문제 때문 일 수 있다.

CPU의 기본 이론CPU의 기본 이론

입출력입출력 장치장치입출력입출력 장치장치

• LCDLCD

LCDLCD

문자형 LCD정해진 문자를 쓸수 있다. (ASCII)정해진 문자를 쓸수 있다. (ASCII)

간단한 구조 – CPU와의 인터페이스가 간단.

그래픽형 LCD그래픽형 LCDSTN-LCD : 흑백으로 적은 사이즈의 LCD

TFT-LCD : 휴대장치나 기타그래픽 처리 때문에 LCD 드라이버가 복잡

그래픽 메모리가 필요

메모리로 부터 고속 전송 필요

임베디드에서는 내부의 DMA등으로 그래픽 데이터전송

문자 LCD 모듈 내부 블록도문자 LCD 모듈 내부 블록도

ControllerPower Supply

DC/DC converter

Driver

DC/DC converter

Memory

Common

Driver

CPUCG

RAM

CG

ROM

LCDMemory

DD

RAM

Segment

DriverCGRAM CGROM

LCD C t ll & D i IC

RAM ROMRAMDriver

LCD Controller & Driver IC

LCD화면과 User가 원하는 LCD 화면에LCD화면과1:1로 대응하는

ASCII 코드

User가 원하는FONT를 만들어서

저장하는 RAM

LCD 화면에Display될 글자

데이터(font)를 저장

LCD 내부 Register와 신호 흐름LCD 내부 Register와 신호 흐름

I t ti i tRS=0

RS

R/W

E

Instruction register

D7 D6 D5 D4 D3 D2 D1 D0LCD

RS 0

8

버CG CG

E

D[7:0]

DD

8 AC6AC5AC4AC3AC2AC1AC0

Data register

D7 D6 D5 D4 D3 D2 D1 D0

퍼CG

RAM

CG

ROM+5V

Vo

DD

RAM

RS=1

8

GND8

제어 레지스터제어 레지스터

DR(Data Register)DR(Data Register)

DD RAM/CG RAM에 쓰거나 읽어낸 데이터를 일시적으로 저장터를 일시적으로 저장

IR(Instruction Register) : Write Only

Display Clear, Cursor Shift등의 명령과DD RAM및 CG RAM의 Address 저장

BF(Busy Flag)

RS=0, R/W=1, BFRS 0, R/W 1, BF

1 : 내부 설정중, 다음 명령을 대기

0 : 명령을 받을 수 있음0 : 명령을 받을 수 있음.

LCD에 명령을 줄때마다 BF 확인 필요

IR DR 억세스IR, DR 억세스

RS R/W 기 능

0 0 IR에쓰기0 0 IR에쓰기(Function Set, Display Clear, …)

0 1 Busy Flag 및Address Counter읽어들임

1 0 CG RAM및 DD RAM에 data쓰기1 0 CG RAM 및 DD RAM에 data 쓰기(DR → DD RAM, CG RAM)출력문자쓰기 (ASCII → DDRAM)( )

1 1 CG RAM 및 DD RAM에서 data 읽어들임(DD RAM CG RAM → DR)(DD RAM, CG RAM → DR)

문자형 LCD문자형 LCD

LCD

14D7 D7

CPU

10111213

D4

D6

D3

D5

D4

D6

D3

D5

789D2

D0D1

D2

D0D1

3

456

R/WA0A[15:0]

VCCVCC

ER/WRS

123

AddressDecoderMEM_CS

VCC

VSSVo

LCD Write TimingLCD Write Timing

LCD Read TimingLCD Read Timing

LCD 제어 명령 ILCD 제어 명령 I

LCD 제어 명령 IILCD 제어 명령 II

LCD 초기설정 FUNCTION SETFUNCTION SETLCD 초기설정 - FUNCTION SETFUNCTION SET

LCD 기능설정(FUNCTION SET) 명령

Interface의 길이, Display Line, Character font 설정

RS

0

R/W

0

DB7

0

DB6

0

DB5

1

DB4

DL

DB3

N

DB2

F

DB1

*

DB0

*

- DL : Interface 길이 F font dutyN 표시행수DL=1 : 8 bit data line

DL=0 : 4 bit data line

- N : Number of display line

0 5x8 1/80

1

1

1 5x10 1/110- N : Number of display line

- F : Type of character font* 2 5x8 1/161

LCD 기능설정은 “Busy flag/address read” 명령을 제외한 모든 명령보다 앞에서 실행되어야 한다.

초기화전원 ON

초기화VDD가 4.5V될 때까지 15ms 이상 대기

FUNCTION SET 명령 0011****

4.1 ms 이상 대기

100μsec 이상 대기

FUNCTION SET 명령 0011****

100μsec 이상 대기

FUNCTION SET 명령 0011****

FUNCTION SET 명령

DISPLAY OFF 명령

00 11 N F * *

0000 1 0 0 0

CLEAR DISPLAY 명령

ENTRY MODE 명령

DISPLAY ON 명령

0000 000 1

00000 1 I/D S

0000 1 1 C BDISPLAY ON 명령

초기설정 완료

0000 1 1 C B

LCD 프로그램#define LCD_DATA 0xXXXX // RS=1#define LCD COM 0xXXXX // RS=0#define LCD_COM 0xXXXX // RS 0

/* Function Set* 0x38 : 0011 1000* - 8bits I/O, 2 Line, 5x7 Matrix */

void LCD_PrintStr(int p, char *str){int lp;

if (LCD_GotoPos(p))

// 원하는 위치로 이동하는 함수// 2줄 x 40 char 문자형#define SZ_ONE_LINE 20#define SZ_ALL_LINE 40

i t LCD G t P (i t )

void LCD_Init(){

lcd_outp(LCD_COM,0x38); if (LCD_Busy())

( )

return;

if (p < SZ_ONE_LINE) lp = p + 0x80;

else {

int LCD_GotoPos(int pos){

if (pos >= SZ_ALL_LINE)return -1;

if (pos < SZ ONE LINE)lcd_outp(LCD_COM,0x38);

LCD_DspOff();LCD_Clear();LCD_DspOn(CURON);

lp = p - SZ_ONE_LINE;lp |= 0xC0;

}LCD_Busy();lcd_outp(LCD_COM,lp);

if (pos < SZ_ONE_LINE) pos |= 0x80;

else {pos -= SZ_ONE_LINE;pos |= 0xC0;

}_ p ( )}

char LCD_Busy(){

int cnt;

while (*str && p < SZ_ALL_LINE) {LCD_Busy();if (*str < ' ')

lcd_outp(LCD_DATA, ' ');else

LCD_Busy();lcd_outp(LCD_COM, pos);return 0;

}

// modeint cnt;

for (cnt = 0;cnt < 1000;cnt++) if (! (lcd_inp(LCD_COM) & 0x80) )

return 0;1

elselcd_outp(LCD_DATA, *str);

p++;

if (p == SZ ONE LINE ) {

// mode#define DSPON 0x04 // Display On#define CURON 0x02 // Cursor On#define BLINKON 0x01 // Blink On

void LCD DspOn(BYTE mode)return 1;

}

void LCD_Clear(){

if (p == SZ_ONE_LINE ) {lp = p - SZ_ONE_LINE;lp |= 0xC0;LCD_Busy();lcd_outp(LCD_COM,lp);

}

void LCD_DspOn(BYTE mode){

LCD_Busy();lcd_outp(LCD_COM,0x08 | DSPON | mode);

}

()LCD_Busy();lcd_outp(LCD_COM,0x01);

}

}

str++;}

}

void LCD_DspOff(){

LCD_Busy();lcd_outp(LCD_COM,0x08);

}

CPU의 기본 이론CPU의 기본 이론

인터럽트인터럽트인터럽트인터럽트(Interrupt)(Interrupt)

인터럽트인터럽트

인터럽트는 가 어느 프로그램 코드를인터럽트는 CPU가 어느 프로그램 코드를실행하고 있을 때, 프로그램을 동작을 멈추고 인터럽트를 요구하는 모듈에 처리를하는 과정을 말한다.

보통 CPU외의 Timer, Serial, 포트 등의 상태변화가 있을 때 CPU에게 알려 이에 맞는 동작을 하는 프로그램이 실행을 하는 프로그램이 실행

예를 들어 포트에 연결된 키가 눌려지면 인터럽트로 CPU에 알리고 현재 진행중인 프로그럽트로 CPU에 알리고 현재 진행중인 프로그램을 멈추고 키 처리 루틴을 실행

처리 방법처리 방법

CPU가 어느 부분의 프로그램 코드를 실행하고CPU가 어느 부분의 프로그램 코드를 실행하고있는 지를 인터럽트을 발생하는 부분에서는 모른다른다. 임의의 코드를 중지하고 현재 레지스터 값을 대피하고 인터럽트 발생한 부분의 프로그램을 찾

( )는다. ( 프로그램은 이미 결정되어 있음) 인터럽트의 발생 부분의 코드를 처리 한다.

( )처리가 끝나면 RETI(기계어 코드)에 따라 종료하고 대피한 레지스터를 복귀 한다.레지스터가 복귀되면 이전의 프로그램이 자동레지스터가 복귀되면 이전의 프로그램이 자동으로 계속 된다.

인터럽트의 발생부와 코드의 위치인터럽트의 발생부와 코드의 위치

CPU가 인터럽트에 대응하는 프로그램은 찾은CPU가 인터럽트에 대응하는 프로그램은 찾은방법은 주로 2가지를 사용 한다.

이미 결정된 주소를 점프한다이미 결정된 주소를 점프한다.8051, 8080, Z-80

CPU는 현재 실행중인 코드를 종료하고 정해진 주소로CPU는 현재 실행중인 코드를 종료하고 정해진 주소로점프(PC값 변경)

벡터 테이블을 찾아 주소 값을 읽고, 이 주소로 점프한다한다.

80386, 68000, ARM

CPU는 현재 실행중인 코드를 종료하고 벡터테이블에서CPU는 현재 실행중인 드를 종료하고 벡터테이블에서주소값을 읽는다.

읽혀진 주소값으로 점프(PC 값 변경)

인터럽트 처리 시 레지스터 대피인터럽트 처리 시 레지스터 대피

보통 스택 ( )을 이용하여 레지스터보통 스택 (stack)을 이용하여 레지스터를 저장 한다.

인터럽트 루틴 시작에서 PUSH 명령을 사용하여 저장

C의 경우 interrupt을 사용한 함수에서 자동 저장

레지스터 뱅크를 사용하는 방법레지스터 뱅크가 있어 레지스터 블록이 여러개 일 경우 현재 레지스터 뱅크를 다른 뱅크로변경 => 현재 실행되는 상태는 유지

CPU의 기본 이론CPU의 기본 이론

램램프로그램프로그램

프로그램과 메모리 사용(CPU)프로그램과 메모리 사용(CPU)

기계어 코드(ROM/RAM)명령이 처리위한 기계어 코드

int a;

명령이 처리위한 기계어영역

변수 데이터 (RAM)

int main()

{ 변수 데이터 (RAM)명령이 실행될 때 데이터가저장되는 공간

{

a = 10;

a++; 저장되는 공간

고정 데이터 (ROM/RAM)

a ;

printf(“a=%d”,a)

return 0;명령이 실행될 때 변하지 않는 변수 공간

return 0;

}

메모리와 변수와의 관계메모리와 변수와의 관계

프로그램 코드를 할 때, 코드와 변수 공간이 필요하다.이 하다

C와 어셈블리와는 표현 방식이 다르다.C에서 i t h 로 변수 선언을 하면 메모C에서 int, char, … 로 변수 선언을 하면 메모리의 특정 부분이 할당 된다. 자동 변수의 경우는 레지스터로 할당되는 경우도 있다우는 레지스터로 할당되는 경우도 있다.

어셈블리에서는 EQU로 특정 주소를 직접 지정하고 사용 한다정하고 사용 한다.

변수의 종류변수의 종류

변수는 특성이 여러가지가 있다.초기값이 없는 변수기값이 없는 변수

C의 전역변수 중에서 초기 설정을 하지 않는 변수int int cntcnt;;

void main()void main()

{{

cnt = 10;cnt = 10;

printf(printf(““cnt = %dcnt = %d₩₩nn””, cnt);, cnt);

}}

초기값이 있는 변수초기값이 있는 변수C의 전역변수 중 초기 설정을 하는 변수

int int cnt = 10cnt = 10;;

초기 실행 시 ROM에 있는 10이 RAM 변수영역으로 복사되어 설정 되고 main으로 점프 한다.

변수의 존재 방식변수의 존재 방식

선언된 변수는 변수영역의 메모리(RAM)에 할당된다.에 당 다

할당된 변수는 실행 코드에 의해 값이 변한다 실행 코드는 기계어한다. – 실행 코드는 기계어

CPURAM

0ACPU int cnt;0A

00

xx

MOV

A

ROM

xx

74

00기계어 코드

00

25

02

C 코딩

프로그램 메모리 배치 – 실행 시프로그램 메모리 배치 실행 시

int g total No = 100;

초기값 변수Data

int g_total_No = 100;char defname[] = “홍길동”;

int g temp;

Session 메모리

초기값없는 변수BSS

Data int g_temp;char *databuff;

void main()

mainmain함수함수 시작시작 전에전에 복사복사RAM

rodata

Stack 또는CPU 레지스터

상수값 데이터

void main(){

int cnt;static int sum;

변수 초기 데이터RAMROM

Codetext

heap

databuff = (char*) malloc(64);

FLASH

HEAP

STACK

heap

stack

sum = 0;for (cnt = 1; cnt <= 10; cnt ++)

sum += cnt;RAM

stack

printf(“Sum = %d₩n”, sum);}컴파일러 마다 session 구조는 약간씩 다름

프로그램 실행 모델 – 일반 OS프로그램 실행 모델 일반 OS

WindowWindow 또는또는 linuxlinux

초기값 변수Data

Session 메모리Window Window 또는또는 linuxlinux

1. 사용자에 의해 프로그램이 프로그램에 선택되면 하드디스크나 기타보조 저장 장치로 부터 RAM으로 로

초기값없는 변수BSS

Datamainmain함수함수 시작시작 전에전에 복사복사

RAM보조 저장 장치로 부터 RAM으로 로드 된다.

2. ‘변수 초기 데이터’를 초기값 변수영역으로 복사하는 등 프로그램 초

rodata 상수값 데이터

변수 초기 데이터

RAM

기 부분이 실행 된다. (개발자가 코딩하는 것이 아니라 링커가 초기 모듈을 결합)

3 main() 함수가 호출 된다Codetext

heap

3. main() 함수가 호출 된다.

임베디드임베디드HEAP

STACK

heap

stack

RAM

1. 부트로더가 플래쉬나 기타 저장장치로 부터 프로그램을 RAM에 복사한다. (통상 속도상 RAM 실행)

2 초기 프로그램을 실행하여 초기값stack 2. 초기 프로그램을 실행하여 초기값변수값을 복사한다.

3. main()을 호출 한다.

프로그램 실행 모델 – MCU/CPU프로그램 실행 모델 MCU/CPU

1 ROM 또는 FLASH에 프로그

초기값 변수Data

Session 메모리 1. ROM 또는 FLASH에 프로그램 코드가 존재 한다.

초기값없는 변수BSS

Datamainmain함수함수 시작시작 전에전에 복사복사

RAM 2. ‘변수 초기 데이터’를 초기값변수영역으로 복사하는 등 프

rodata 상수값 데이터

변수 초기 데이터

ROMFLASH

로그램 초기 부분이 실행 된다. (경우에 따라 개발자가코딩하거나 링커가 알아서 라Codetext

heap

FLASH 코딩하거나 링커가 알아서 라이브러리에서 결합)

HEAP

STACK

heap

stack

RAM 3. main() 함수가 호출 된다.

stack

프로그램과 CPU의 실행프로그램과 CPU의 실행

C와 기계어의 관계 그리고 실행

int a;

void main()

A EQU 0023H

MAIN:PUSH A컴파일러void main()

{a = 10;if (a == 10)

PUSH AMOV A,10CMP A,10JNE E dIF

컴파일러

if (a == 10)a++;

}

JNE EndIFINC A

EndIF:POP APOP ARET

if 메커니즘

a = 10;if (a == 10)

a++;

MOV A,10CMP A,10JNE EndIFINC Aif 메커니즘

C의 상당 부분은 if가 기본이다

a ;INC A

EndIF:

C의 상당 부분은 if가 기본이다.if, for, while, do~while은 기본적으로 if과 점프 명령으로 구성된다.

if의 실행 방법 : if (a == 10)1 CM A 101. CMP A,10

A레지스터의 현재값에서 ALU을 통해 10빼고 결과는 플래그만을 설정 한다. CMP 명령은 A레지스터는 변화 없다.

2. JNE EndIF

만약 A와 10이 같으면 결과 값이 0이 되고 캐리는 C=0이 된다. JNE 명령은 값이 같지 않으면 다음명령 스킵되도록 점프 한JNE 명령은 값이 같지 않으면 다음명령 스킵되도록 점프 한다.

3. INC A

만약 C=0이면 A레지스터 값을 1 증가 한다만약 C=0이면 A레지스터 값을 1 증가 한다.

C의 a++가 실행하기 위한 기계어 명령이다.