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 |