1. RISC 16bit CPU의 특징

4.1    특징

 

MSP430의 CPU는 C와 같은 고급 언어들의 사용을 편리하도록 설계되어 있습니다. 또한 CPU는 페이지 처리 없이 모든 어드레스 영역을 인식 할 수 있습니다.

CPU는 27개의 명령과 7개의 번지지정이 가능한 RISC 구조 입니다. 모든 번지 지정 방법을 사용할 수 있는 명령 구조 이며, PC, SR, SP는 일반적으로 사용될 수 있습니다. 명령은 한 클럭에 실행 되어 집니다. 16bit 레지스터를 이용해 16bit 단위로 메모리가 사용 될 수 있습니다. 16bit어드레스 버스로 모든 메모리 영역을 사용하며 16bit 데이터 버스는 byte, word 단위로 사용 가능하게 합니다. 메모리에서 메모리로 이동하는 연산이 처리 가능합니다.

CPU는 16개의 16bit 레지스터를 가지고 있습니다. R0-R3까지 기능을 가진 레지스터가 있고 R4-R15까지 일반적으로 사용되는 레지스터를 가지고 있습니다. 그림4-1에서 CPU를 확인 할 수 있습니다.

그림 4 - 1

4.2    Program Counter (PC)

 

16bit의 Program Counter (PC) 는 다음에 실행될 명령의 주소를 알려줍니다. 짝수 번지 단위로 이동되며 64K 내에 어떤 곳이나 선택이 가능합니다. (그림 4-2는 PC 입니다.)

 

그림 4 - 2

 

4.3    Stack Pointer (SP)

 

스텍 포인터는 서브루틴이나 인터럽트에서 복귀하는 주소를 저장 합니다. SP는 RAM에 초기화되며 짝수 어드레스 단위로 사용자에 의해 지정될 수 있습니다. (그림 4-3는 SP 입니다.)

 

그림 4 - 3

 

4.4    Status Register (SR)

 

상태 레지스터는 word 단위 명령으로만 사용이 가능합니다. 내용은 그림 4-4와 같습니다.

그 내용을 살펴보면 다음과 같습니다.

그림 4 - 4

 

V

산술연산결과의 값이 사용되는 범위를 넘으면 생성 됩니다.

SCG1

설정되면 SMCLK 정지 됩니다.

SCG0

만약 DCOCLK MCLK이나 SMCLK 사용되지 않는다면 설정되면 DCO 정지 됩니다.

OSCOFF 

설정되면 오실레이터 정지, LTXT1CLK MCLK, SMCLK 사용되지 않을 설정되면 LFXT1 크리스탈이 정지 됩니다.

CPUOFF

설정되면 CPU 정지

GIE

설정되면 모든 maskable 인터럽트는 정지 됩니다.

N

bit 설정되면 byte 또는 word 명령처리 음수의 값을 가진다면 설정 됩니다.

예를 들어 word 명령 처리 15bit 1이면 음수 이고, byte 명령처리 7bit 1이면 음수가 됩니다.

Z

연산결과가 0이면 설정 됩니다

C

byte 또는 word 명령일 자리올림이 발생하면 설정됩니다.

 

4.5    Constant Generator Registers CG1과 CG2

 

상수 생성 레지스터 CG1과 CG2 가 있습니다. 이 레지스터는 상수 연산시 자동으로 사용됩니다. 어셈 명령은 자동으로 6개의 상수 방식을 사용하며 이때 CG1과 CG2를 자동으로 사용됩니다.

 

4.4    일반적인 레지스터

 

12개의 일반적인 레지스터는 모두 data, 어드레스 주소의 인텍스 값 등으로 사용됩니다. 또한 byte 또는 word 단위 연산으로 사용할 수 있습니다. 16bit 레지스터 에서 8bit 이동 시 그림4-5와 같습니다.

 

그림 4 - 5

 

 

 

 

 

 

4.5    어드레스 모드

 

ASM 명령의 몇 가지 사항을 살펴 보고 넘어가 보겠습니다. 추후 www.mcuworld.com 에 소개되는 거의 대부분의 source 는 C 언어로 되어 있을 것입니다. 그러나 ASM 이 필요할 때를 대비하여 약간의 부연 설명만 하겠습니다.

 

어드레스 모드는 source 를 지정 할 수 있는 7가지 번지 지정방식과 destination 를 지정할 수 있는 4가지의 번지지정 방식을 사용하여 원하는 주소에서 연산이 가능하도록 합니다.

 

4.6    Register 모드

레지스터를 바로 지정하는 방식으로 레지스터에서 레지스터로 값을 연산할 때 사용합니다.

    

예) mov r10,r11

-> r10에 값 10이 저장되어 있고 R11에 15가 저장되어 있을 때 위에 명령을 처리하면 R11 은 10으로 변경된다.

 

4.7    Indexed 모드

 

레지스터에 저장되어 있는 값에서 설정된 값을 더한 주소에서 설정된 레지스터로 연산할 때 사용합니다.

 

예) mov 2(R5),6(R6)

-> 만약 R5에 0x1000이 저장되어 있고 R6에 0x2000 이 저장되어 있다면 (0x1000+2)번지에서 (0x2000+6)번지로 값이 이동된다.

 

4.8    Symbolic 모드

 

임의의 값을 문자로 지정하여 이 지정된 값을 (PC + 값) 연산한 번지에서 값을 연산한다.

 

예)mov AAA,BBB

->만약 AAA가 0x1000 으로 설정되어 있고 BBB가 0x2000 로 설정되어 있으면 0x1000+PC 번지의 값이 0x2000+PC 번지로 이동된다.

 

 

 

 

4.9    Absolute 모드

 

절대번지를 설정하여 사용한다.

 

예) mov &AAA,&BBB

->만약 AAA가 0x1000으로 설정되어 있고 BBB가 0x2000으로 설정되어 있으면 0x1000번지에서 0x2000번지로 값을 이동한다.

 

4.10    Indirect Register 모드

 

지정된 주소의 값을 이동할 때 사용한다. 만약 상호간의 변수의 값이 word, byte 와 같이 틀릴 때도 사용된다.

 

예)mov @R10, 0(R11)

-> R10의 값이 0x1000 이고 0x1000번지내에 워드 data가 존재하고 R11 이 0x02A7을 가지고 있고 0x02A7 번지내에 byte 단위의 data가 존재한다면 0x1000번지 내의 워드의 값 중 높은 값이 0x02A7번지에 이동된다.

 

4.11    Indirect Autoincrement 모드

 

Indirect Register 모드와 비슷하나 처리 후 소스에서 지정한 레지스터의 값이 증가한다. 즉 번지를 증가한다.

 

예) mov @r10+, 0(R11)

-> R10의 값이 0x1000이고 R11의 값이 0x2000 이면 0x1000번지의 값이 0x2000번지에 저장되며 R10의 값은 0x1002로 변경된다.

 

4.12    Immediate 모드

 

상수값을 정의된 주소로 저장한다.

 

예)mov #45h,TTTT

-> TTTT의 값이 0x1112 이면 0x0045의 상수가 0x1112+PC가 가르키는 주소에 저장된다.

 

 

그 외에 ASM명령의 경우 ADC.W와 같이 .W를 사용한 경우 word 연산을 수행하며 .B를 사용한 경우 byte 연산을 수행합니다. 아무것도 사용하지 않을 경우 word 연산을 수행합니다.

 

 

'공부 > MSP430' 카테고리의 다른 글

[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15
[MSP430] MSP430 자료 2  (0) 2012.11.15
[MSP430] MSP430 자료 1  (0) 2012.11.15

+ Recent posts