[MSP430] 회로도

 

 

SCHEMATIC1_PAGE(20040108).pdf

 

SCHEMATIC1_PAGE(20040116).pdf

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

[MSP430] 회로도  (0) 2012.11.15
[MSP430] MSP430 자료 9  (0) 2012.11.15
[MSP430] MSP430 자료 8  (0) 2012.11.15
[MSP430] MSP430 자료 7  (0) 2012.11.15
[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15

 

10. Watchdog Timer

 

10.1    기본사항

 

MSP430은 Watchdog timer 의 주 기능은 프로그램을 잘못 짜 문제가 있을 때 재 기동을 하기 위해 존재 합니다. Watchdog Timer에 설정되었던 시간이 끝나면 시스템이 재기동 되어 집니다.

기능은 8개의 시간 설정가능, Watchdog mode, Interval 타이머 모드, WDT 보호를 위해 암호존재, RST/NMI pin 제어, Clock source 설정, 전원보호를 위해 정지 가능, PUC후에 WDT모듈은 DCOCLK를 사용해 최초 32ms대기를 합니다. 그러므로 32ms 이전에 WDT상태를 다시 설정 해야 합니다.

 

 

그림 10 - 1

 

10.2    Watchdog Timer의 동작

 

WDTCTL레지스터는 Watchdog 타이머의 대기시간을 설정 할 수 있습니다. 더불어 RST/NMI pin을 설정하기 위한 bit를 포함하고 있다. WDTCTL 은 16bit로 상위 8bit는 password 입니다. 그래서 접근하기 위해서는 0x5A를 사용합니다. 읽힌값은 상위 byte는 0x69로 읽혀집니다.

 

WDTCNT는 16bit UP counter 입니다. WDTCTL의 값에 따라 카운터 됩니다. WDTCNT는 ACLK 또는 SMCLK를 기준 클럭으로 사용하여 동작합니다. 기준클럭은 WDTSEL bit로 선택 되어 집니다.

 

PUC후 WDT모듈은 DCOCLK를 사용해 최초 32ms를 대기 하고 있습니다. 32ms 완료전에 WDT를 제거 하거나 다시 WDT 을 Reset 해야 합니다. 안그러면 PUC가 발생 합니다. 또한 부정확한 암호에 의해 WDTCTL을 사용하면 PUC가 발생하고 WDT 는 Reset 되고 RST/NMI pin능 Reset 모드로 변경됩니다.

 

10.3    Interval Timer의 동작

 

WDTTMSEL bit를 1로 설정하면 Interval Timer 모드를 설정 됩니다. 이 모드는 주기를 제공 하기위해 사용 될수 있습니다. 이 모드에서 시간 간격이 만료되면 WDTIFG가 설정되며 이때 PUC는 발생이 안됩니다. 예상외에 PUC 발생을 피하기 위해 WDT의 인터벌 시간의 변경은 WDTCNCTL =1 로 한 후 해야 합니다. WDT 의 Clock source를 변경하기 전에는 WDT를 정지한 후 해야 한다.

 

10.4    Watchdog Timer의 인터럽트 동작

 

Watchdog timer를 인터럽트로 사용하기 위해 IFG1.0 (WDTIFG) 와 IE1.0 (WDTIE)를 사용됩니다. WDT가 Watchdog mode 일때 WDTIFG flag는 Reset Vector 인터럽트 발생을 나타냅니다. WDTIFG는 Reset Vector 인터럽트 서비스 루틴에 의해 사용되어 집니다.

 

10.5    Watchdog Timer의 저출력 모드에서의 동작

 

MSP430은 몇 개의 저출력 모드가 있는 것을 알고 있을것입니다. 저출력모드에서는 Watchdog Timer 의 사용을 주의 해야 합니다. 예를 들어 WDT가 워치도그 모드일 때 SMCLK는 WDT의 소스로 사용되어지면 안됩니다. 만일 LPM3 모드가 되면 SMCLK는 정지합니다. 그래서 WDT도 작동하지 않습니다. 이럴때는 WDTHOLD를 이용해 WDT를 사용안할수 있습니다. 사용안하면 그만큼의 소비전력도 줄일수 있습니다.

 

WDTCTL (Watchdog Timer Register)

BIT 

15 

14 

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x69 이 읽힘

쓸 때 0x5A를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

WDTHOLD 

WDTNMIES 

WDTNMI 

WDTTMSEL 

WDTCNTCL 

WDTSSEL 

WDTISx 

초기값

0 

0 

0 

0 

0 

0 

0 

0 

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R 

R/W 

R/W 

 

WDTHOLD: Watchdog timer 의 정지 또는 동작을 설정합니다.

    ( 0: 동작 , 1: 정지)

WDTNMIES: Watchdog Timer NMI의 edge 선택

이 bit의 변경시 NMI 발생이 가능 변경전에 WDTNMI = 0 으로 설정 해야 한다.

     (0: 상승에지( rising edge) 1:하강 에지( falling edge))

WDTNMI: Watchdog 타이머의 NMI 선택 RST/NMI pin 기능 선택 가능

    (0: Reset 기능 , 1: NMI 기능 )

WDTTMSEL: Watchdog 타이머 모드 변경

    ( 0: Watchdog 모드 , 1:인터벌 타이버 모드)

WDTCNTCL: Watchdog 타이머 Reset, Watchdog 타이머 를 자동 0으로 만들어 준다.

    ( 0: 동작 없음 , 1: 클리어 클리어후 자동으로 0으로 변경된다.)

WDTSSEL: Watchdog timer 클럭 소스 설정

    (0 : SMCLK , 1:ACLK)

WDTISx: Watchdog timer 대기시간 설정

 

WDTISx 

동작

0 

0 

Watchdog timer 클럭 소스/32768

0 

1 

Watchdog timer 클럭 소스/8192

1 

0 

Watchdog timer 클럭 소스/512

1 

1 

Watchdog timer 클럭 소스/64

 

IE1 (Interrupt Enable Register 1)

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

             

WDTIE 

초기값

             

0 

읽고쓰기

             

R/W 

 

WDTIE: Watchdog 타이머 인터럽트 enable

    이 bit는 인터벌 모드에서 WDTIFG 에 의해 인터럽트 발생이 가능 하게 합니다.

이 bit는 WDT mode에서는 설정할 필요가 없습니다.

     ( 0: 인터럽트 발생 불가 , 1: 인터럽트 발생 가능)

 

IFG1 (Interrupt Flag Register 1)

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

             

WDTIFG 

초기값

             

0 

읽고쓰기

             

R/W 

 

WDTIFG: Watchdog 타이머 인터럽트 발생 플레그

WDTIFG는 프로그램에 의해 제거될때까지 설정되어 있습니다. 인터벌 모드에서 WDTIFG는 인터럽트 서비스 루틴에서 자동으로 Reset 될수도 있도 프로그램에 의해 리셋 될수도 있습니다.

    

     ( 0: 동작없음 , 1: 인터럽트 발생 인터럽트 서비스루틴 기다림)

 

 

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

[MSP430] 회로도  (0) 2012.11.15
[MSP430] MSP430 자료 9  (0) 2012.11.15
[MSP430] MSP430 자료 8  (0) 2012.11.15
[MSP430] MSP430 자료 7  (0) 2012.11.15
[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15

 

9. Digital I/O

 

9.1    기본사항

 

MSP430은 P1 – P6 까지 6 PORT의 Digital I/O를 가지고 있습니다. 각각의 PORT는 8개의 PIN이 존재 합니다.

모든 I/O는 입력 또는 출력을 각각 선택가능하고, 각 입출력라인은 개별적으로 입출력용으로 사용 할 수 있습니다. 또한 P1,P2는 개별적으로 외부 인터럽트 기능이 있으며 인터럽트는 상승 또는 하강 에지( rising edge or falling edge)만 검사 할 수 있습니다.

 

9.2    Digital I/O의 사용

 

I/O는 사용자가 초기에 S/W 적으로 설정 해야 합니다. PnIN레지스터는 I/O의 입력되고 있는 상태를 나타 냅니다. PnOUT 레지스터는 출력 값을 설정할 수 있습니다. PnDIR은 각각의 Pin의 입출력을 설정할 수 있습니다. Bit의 값이 0이면 입력이 되고,1 이면 출력이 설정 됩니다. PnSEL은 각각의 PIN에 명기된 기능으로 연결 되도록 설정 할 수 있습니다. Bit가 0 이면 I/O기능으로 설정하는 것이고 1이면 Pin에 명기된 기능으로 연결되어 집니다. 주의 할 것은 연결되어진 특수기능이 출력이 되어야 한다면 해당 PnDIR을 출력으로 설정해야 한다. P1SEL와 P2SEL가 설정되면 해당 Pin의 인터럽트는 사용이 금지 됩니다. 즉 P1IE나 P2IE와 관계없이 인터럽트가 발생되지 않을 수 있습니다.

Pin이 명기된 기능의 입력으로 선택되어지면 PIN의 값은 LATCH로 입력됩니다. 이때 PnSELx = 1 이라면 입력신호는 Pin의 실제 신호를 따라갑니다. 그러나 PnSELx = 0 이라면 현재의 신호를 그대로 유지합니다.

 

9.3    P1,P2의 인터럽트 사용

 

P1,P2 PORT 는 PnIFG, PnIE, PnIES 레지스터로 인터럽트 기능을 설정할 수 있습니다.

P1의 모든 인터럽트 소스는 한 개의 인터럽트 백터에서 처리 되며, P2또한 한 개의 인터럽트 백터에서 처리 됩니다. 각각의 Pin에 인터럽트 상태가 발생되면 해당 PnIFG 의 bit가 설정됩니다. PnIFG bit 가 설정되었을 때 해당 PnIE bit가 설정되어 있고 GIE bit가 설정되어 있다면 인터럽트는 발생됩니다. PnIFG bit를 S/W 적으로 설정 할 수 도 있습니다. PnIFG 인터럽트 발생 후 해당 루틴 실행 중에 인터럽트가 다시 걸린다면 다시 인터럽트 처리를 한다. 그러나 인터럽트가 발생하려면 MCLK의 1.5배 이상의 인터럽트가 발생할 상태가 유지 되어야 합니다. PnIES bit는 인터럽트 발생을 위한 상승 또는 하강 에지( rising edge or falling edge)를 선택 할 수 있습니다. 0면 상승에지 를 선택 하며, 1이면 하강 에지를 선택 하는 것입니다.

인터럽트가 발생되려면 PnIE의 해당 bit를 1로 설정해야 한다. 쓰지않는 Pin은 소비전력을 줄이기 위해 출력으로 설정하고 다른 곳에 연결하지 않도록 합니다.

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

[MSP430] 회로도  (0) 2012.11.15
[MSP430] MSP430 자료 9  (0) 2012.11.15
[MSP430] MSP430 자료 8  (0) 2012.11.15
[MSP430] MSP430 자료 7  (0) 2012.11.15
[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15

 

8. Hardware Multiplier

 

8.1    기본사항

 

하드웨어 곱셈기는 MSP430의 CPU와는 별도로 동작합니다. 계산은 부호 있는 곱셈, 부호 없는 곱셈, 부호 있는 곱셈 accumulate , 부호 있는 곱셈 accumulate를 이용합니다. 연산 단위는 16*16bit ,16*8bit , 8*16bit , 8*8 bit가 수행 될 수 있습니다.

 

그림 8 - 1

8.2    Hardware Multiplier 사용

 

하드웨어 곱셈기를 사용하기 위해 2개의 16bit 연산 레지스터(operand register) 가 존재하며 그것은 OP1, OP2 이다. 3개의 연산결과를 출력하는 레지스터 RESLO,RESHI,SUMEXT 가 있다. RESLO는 결과 word의 low값, RESHI는 결과 word의 high 값, SUMEXT는 확장된 결과값을 나타낸다. 결과는 OP2에 쓰고 난후 다음 명령에서 읽어 질수 있다. 그러나 간접 어드레스 지정 모드에서는 제외된다.

OP1은 MPY,MPYS,MAC,MACS 의 어드레스를 나타낸다. 각각의 어드레스는 그림8-2와 같다.

그림 8 - 2

OP1에 어드레스를 선택하는 것은 명령형식을 선택 하지만 명령을 처리 하지는 않습니다. OP2에 값을 넣는 것으로 연산을 시작합니다. 결과는 RESLO,RESHI,SUMEXT에 저장 됩니다. OP1의 값이 계속 연산에 사용된다면 다시 OP1에 값을 넣을 필요는 없습니다.

RESHI 값은 그림 8-3과 같이 넣어 질 수 있다.

그림 8 - 3

SUMEXT는 그림 8-4와 같이 나타난다.

그림 8 - 4

 

곱셈기는 MACS 모드에서는 underflow 또는 overflow 를 검사하지 않습니다.

정수의 범위는 0 – 0x7FFFFFFF 까지 이며 0x80000000 - 0xFFFFFFFF 까지 입니다. SUMEXT는 오버 플로우 일 때 0xFFFF를 표시합니다. 곱셈기 사용 중 에는 인터럽트를 사용하지 마십시오

 

; 16x16 Unsigned Multiply

MOV #01234h,&MPY ; Load first operand

MOV #05678h,&OP2 ; Load second operand

; ... ; Process results

 

; 8x8 Unsigned Multiply. Absolute addressing.

MOV.B #012h,&0130h ; Load first operand

MOV.B #034h,&0138h ; Load 2nd operand

; ... ; Process results

 

; 16x16 Signed Multiply

MOV #01234h,&MPYS ; Load first operand

MOV #05678h,&OP2 ; Load 2nd operand

; ... ; Process results

 

; 8x8 Signed Multiply. Absolute addressing.

MOV.B #012h,&0132h ; Load first operand

SXT &MPYS ; Sign extend first operand

MOV.B #034h,&0138h ; Load 2nd operand

SXT &OP2 ; Sign extend 2nd operand

; (triggers 2nd multiplication)

 

; ... ; Process results

; 16x16 Unsigned Multiply Accumulate

MOV #01234h,&MAC ; Load first operand

MOV #05678h,&OP2 ; Load 2nd operand

; ... ; Process results

 

; 8x8 Unsigned Multiply Accumulate. Absolute addressing

MOV.B #012h,&0134h ; Load first operand

MOV.B #034h,&0138h ; Load 2nd operand

; ... ; Process results

 

; 16x16 Signed Multiply Accumulate

MOV #01234h,&MACS ; Load first operand

MOV #05678h,&OP2 ; Load 2nd operand

; ... ; Process results

 

 

; 8x8 Signed Multiply Accumulate. Absolute addressing

MOV.B #012h,&0136h ; Load first operand

SXT &MACS ; Sign extend first operand

MOV.B #034h,R5 ; Temp. location for 2nd operand

SXT R5 ; Sign extend 2nd operand

MOV R5,&OP2 ; Load 2nd operand

; ... ; Process results

 

 

; Access multiplier results with indirect addressing

MOV #RESLO,R5 ; RESLO address in R5 for indirect

MOV &OPER1,&MPY ; Load 1st operand

MOV &OPER2,&OP2 ; Load 2nd operand

NOP ; Need one cycle

MOV @R5+,&xxx ; Move RESLO

MOV @R5,&xxx ; Move RESHI

 

 

; Disable interrupts before using the hardware multiplier

DINT ; Disable interrupts

NOP ; Required for DINT

MOV #xxh,&MPY ; Load 1st operand

MOV #xxh,&OP2 ; Load 2nd operand

EINT ; Interrupts may be enable before

; Process results

 

 

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

[MSP430] MSP430 자료 9  (0) 2012.11.15
[MSP430] MSP430 자료 8  (0) 2012.11.15
[MSP430] MSP430 자료 7  (0) 2012.11.15
[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15

 

7. Supply Voltage Supervisor

 

7.1    기본사항

 

Supply voltage supervisor(SVS)는 AVCC 또는 외부 전압을 감시하기 위해 사용되어 입니다. SVS는 AVCC 또는 외부전압이 사용자에 의해 선택되어진 전압이하로 떨어질 경우 플레그를 Set하거나 POR Reset을 수행 할수 있습니다.

SVS의 기능을 살펴 보면 AVCC 모니터링, 선택가능 한 POR 발생, S/W적으로 처리 가능한 SVS 출력, S/W적으로 설정가능 한 14개의 전압 Level을 들 수 있습니다. 주의 해야 할 것은 MSP430x41x는 특이하게 설정된 한 개의 전압레벨 검출만 수행 가능하다는 것입니다. 또한 VLDx =0 이면 SVS 는 정지 되고 아닐 경우 1.9V 전압레벨로 고정됩니다.

 

그림 7 - 1

 

7.2    SVS 의 동작

 

SVS는 AVCC전압이 선택된 레벨 아래로 떨어지는 것만 측정합니다. 저 전압 조건에 따라 POR Reset이 작동되거나, 저 전압 상태 flag를 생성 시킬 수 있습니다. SVS는 전류 소비를 줄이기 위해 POR Reset 작동 후 사용이 중지 됩니다. 재사용을 위해서는 다시 설정 해야 합니다.

VLDx bit를 이용해서 14개의 전압 비교 레벨을 선택가능하고 bit가 0 이면 SVS는 정지 됩니다. SVSON bit를 이용해 SVS를 정지하거나 실행 시킬 수 있습니다.

저전압 조건이 발생하면 SVSFG bit가 선택되어 집니다. PORON이 선택되어져 있으면 SVSFG가 설정되면 POR을 생성합니다. SVSFG는 소프트웨어적으로 Reset 되어야 다음 상태를 확인 할 수 있습니다.

 

 

그림 7 - 2

 

SVSCTL (SVS Control Register)

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

VLDx 

PORON 

SVSON 

SVSOP 

SVSFG

초기값

0 

0 

0 

0 

0 

0 

0 

0 

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R 

R 

R/W 

 

VLDx : voltage level 을 선택한다.

    0000    : SVS off    0001    : 1.9V        0010    : 2.1V        0011    : 2.2V        0100    : 2.3V        0101    : 2.4V       

    0110    : 2.5V        0111    : 2.65V        1000    : 2.8V        1001    : 2.9V        1010    : 3.05V        1011    : 3.2V

    1100    : 3.35V        1101    : 3.5V        1110    : 3.7V        

    1111    : SVSin에 들어오는 전압을 1.2V와 비교

 

PORON    : POR reset On/Off

    ( 0: SVSFG가 설정되어도 POR 발생안함 , 1:SVSFG가 설정되면 POR reset 발생)

SVSON : SVS On/Off

    ( 0: SVS 사용 안함 , 1: SVS 사용 함)

SVSOP: SVS 비교 출력

    ( 0 : SVS 출력핀을 high , 1: SVS 출력핀은 low)

SVSFG : SVS flag

    (0 : low전압으로 안 떨어짐 , 1: low 전압으로 떨어짐)

 

 

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

[MSP430] MSP430 자료 8  (0) 2012.11.15
[MSP430] MSP430 자료 7  (0) 2012.11.15
[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15
[MSP430] MSP430 자료 3  (0) 2012.11.15

 

6. FLASH memory Controller

 

6.1    기본사항

 

MSP430 Flash memory 는 bit, byte, word 단위 프로그램이 가능합니다. Flash memory 모듈은 프로그램/소거 와 같은 조작을 할 수 있는 제어장치를 가집니다. 제어장치(controller)는 3개의 관련 레지스터와 timing 발생기(generator), 프로그램/소거 전압 발생기(generator)를 가지고 있습니다. 동작에 필요한 파워는 매우 작습니다. 또한 세그먼트(segment)단위의 삭제와 전체(mass)단위 소거가 가능 합니다. 주의 해야 할 사항은 Flash 쓰기 및 삭제와 같은 동작을 하기 위해 2.7V 이상의 VCC 가 필요하며 2.7V 이하의 쓰기 및 소거 작업은 그 결과를 예측할 수 없습니다.

 

그림 6 - 1

 

6.2    Flash memory segment

 

MSP430의 Flash memory는 세그먼트 단위로 분할되어 있습니다. 쓸 때는 bit, byte, word 단위로 Flash memory를 사용할 수 있으나 소거 작업 시에는 세그먼트 단위로 이루어 저야 합니다. 소거 작업에는 3가지 모드가 존재 합니다. 그것은 한 개의 세그먼트 단위로 삭제, main Flash 에 위치한 세그먼트 삭제, main및 information Flash 영역을 포함한 전제 세그먼트 삭제 입니다. Flash memory는 main과 information 영역으로 나누어 집니다. Main과 information 영역의 조작방법에는 차이가 없습니다. 두 개의 영역은 코드영역 또는 data영역으로 사용될 수 있습니다. Main과 information 영역의 차이는 세그먼트 사이즈와 물리적 주소 밖에 없습니다. Information 세그먼트에는 2개의 128byte의 세그먼트 영역이 있으며, main에는 적어도 2개의 512byte의 세그먼트 영역이 있습니다.

 

그림 6 - 2

 

6.3     Flash memory 동작

 

기본적으로 Flash memory는 read mode이며 read mode에서는 삭제 또는 쓰기 가 불가능 합니다. 또한 Flash timing 발생기(generator), 프로그램/소거 전압 발생기(generator)는 정지 됩니다. 이때 Flash 는 ROM처럼 동작 합니다.

 

MSP430은 In system program(ISP) 기능을 가지며 CPU는 자신의 Flash를 프로그램 가능합니다. Flash memory는 BLKWRT, WRT, MERAS, ERASE bit를 사용하여 프로그램/소거 모드 선택이 가능합니다. 모드는 총 5개가 존재 합니다. Flash 는 프로그램/소거 될 때 읽거나 기록하는 것은 금지 됩니다.

 

5가지 모드를 살펴보면 byte/word 쓰기, block 쓰기, segment 지우기, mass 지우기(모든 main memory), 모든 Flash 영역 지우기 입니다. 모든 Flash 의 업데이트는 Flash 의 code 영역 및 RAM에 있는 code 영역에서 전부 가능 합니다.

 

 

6.4    Flash timing 발생기(generator)

 

쓰고 지우는 작업을 위해 timing 발생기(generator)는 그림 6-3과 같이 동작 되어 집니다. timing 발생기(generator)의 동작주파수 f(FTG)의 범위는 257Khz – 476Khz 입니다. timing 발생기(generator)는 ACLK, SMCLK, MCLK의 클럭을 이용하여 FNx bit에 의해 나누어져 f(FTG) 출력으로 공급됩니다. f(FTG) 주파수가 프로그램/소거 동작 동안에 오동작을 하면 프로그램/소거 동작은 신뢰 할 수 없어 집니다.

 

그림 6 - 3

 

 

6.5    Erasing Flash Memory

Flash memory는 삭제되었을 때 각각의 bit는 1이 됩니다. 그림 6-4 와 같이 ERASE, MERAS bit 설정으로 삭제 모드가 선택 가능해 집니다.

그림 6 - 4

삭제의 시작은 삭제 번지 범위 내에서 dummy 값을 쓰면 시작됩니다. Dummy 쓰기 후 Flash timing 발생기(generator)와 삭제 동작을 시작 합니다. 그림 6-5는 삭제 타이밍 입니다.

그림 6 - 5

busy bit는 dummy 쓰기 직후에 자동으로 설정되며 삭제 주기 동안 유지됩니다. BUSY, MERAS, ERASE는 삭제 주기가 완료되면 자동으로 삭제 됩니다. 이런 삭제 시간은 모든 MSP430에서 동일합니다.

 

삭제되는 번지 범위 내에서 dummy 쓰기는 Flash memory에 영향이 없기 때문에 어떠한 표시도 남지 않습니다. 이때 잘못된 dummy 쓰기는 무시됩니다.

모든 인터럽트는 Flash 삭제 작업 전에 중지되어야 합니다. 삭제 작업 후 인터럽트를 다시 동작시키면 Flash 삭제 작업 중에 발생한 인터럽트가 해당 flag를 설정해 둔 사태이기 때문에 flag에 따른 인터럽트 처리 루틴이 동작 됩니다.

 

6.6     Flash memory에서 삭제 동작

어떤 삭제 동작도 RAM 또는 Flash 에서 시작 가능합니다. Flash 부분 삭제가 Flash memory에서 시작되어 질 때 Flash controller에 의해 타이밍 제어가 됩니다. 이때 CPU는 삭제가 완료될 때까지 정지하고 있습니다.

삭제완료 후 CPU는 코드 실행을 재개 합니다. 주의할 사항은 현재 실행되고 code가 있는 Flash memory 도 삭제가 가능하기 때문에 code가 지워져 CPU가 소거 후 어떻게 동작하는지 알 수 없을 수도 있다는 것입니다.

그림 6-6 은 Flash memory에서 삭제 동작을 나타냅니다.

그림 6 - 6

 

6.7    RAM 에서 삭제 동작

어떤 삭제 동작도 RAM 에서 시작 될 수 있습니다. 이때 CPU는 정지하지 않고 RAM에 있는 code는 계속 실행 합니다. CPU는 다른 Flash에 접근하기 전에 BUSY bit를 조사해야 합니다. BUSY가 설정되어 있을 때 Flash 에 접근하면 접근위반이 되어 ACCVIFG가 설정됩니다. 이때 삭제 동작의 결과를 예측할 수 없습니다.

 

그림 6 - 7

  1. Flash memory 쓰기

 

Write 모드는 WRT, BLKWRT bit를 이용합니다. 두 가지의 쓰기 모드가 존재하며 두 가지의 쓰기 모드는 각각의 쓰기 과정이 존재 합니다. Byte/word 쓰기 동작과 Block 쓰기가 존재 하며 Block 쓰기가 대략 2배 정도 빠릅니다. 쓰기 동작 동안 BUSY bit 는 설정 되어 있으며, 쓰기 동작이 RAM 에서 시작 되었으면 BUSY가 설정되어 있는 동안 Flash 에 접근하면 안됩니다. 접근한다면 접근 위반이 되어 ACCVIFG가 설정됩니다. 이때 쓰기 동작의 결과를 예측할 수 없습니다.

 

그림 6 - 8

 

  1. byte/word 쓰기 동작

 

byte/word 쓰기 동작은 Flash 나 RAM 영역에서 시작 가능 합니다. Flash memory에서 동작 될 때 Flash controller 에서 타이밍을 제어하며 완료 될 때까지 CPU는 정지 됩니다. 쓰기 완료 후 CPU는 다음 명령을 실해 합니다.

 

그림 6 - 9

 

byte/word 쓰기가 RAM에서 시작 되면 CPU는 계속 동작하며 CPU가 BUSY 가 0 이 되기 전에 Flash 에 접근하면 접근위반으로 ACCVIFG가 설정 됩니다. 그리고 쓰기 완료는 예측 할 수 없습니다.

 

6.10    Flash memory에서 byte/word쓰기 동작

그림 6 - 10

 

6.11    RAM 에서 byte/word 쓰기 동작

그림 6 - 11

  1. block 쓰기

 

많은 양의 순차적 byte나 word를 쓸 때 좀더 속도를 빠르게 하기 위해 block write를 사용합니다. 하나의 block은 64byte이며 각각 0xXX00, 0xXX40, 0xXX80, 0xXXC0 번지에서 시작 됩니다. 또한 0xXX3F, 0xXX7F, 0xXXBF, 0xXXFF에서 끝납니다. 그림 6-12에서 예를 확인 할 수 있습니다.

 

그림 6 - 12

 

블록쓰기는 Flash 에서 시작 될 수 없습니다. 블록쓰기는 ROM 또는 RAM 영역에서 시작되어야 합니다. BUSY 는 블록쓰기 동안 설정 되어 있으며, 하나의 byte/word를 쓰기 전에 WAIT bit를 점검해서 WAIT bit가 설정되어 있으면 다음 쓰기가 가능하다는 것을 나타냅니다. 연속 블록쓰기를 할 때 현재 블록이 완전히 쓰여진 후 BLKWRT를 0으로 설정해야 하고 BUSY가 0 이 되면 다음 블록을 쓰는 것이 가능합니다. 그림6-13은 블록 쓰기 타이밍을 표시하고 그림 6-14는 flow를 보여줍니다.

 

그림 6 - 13

 

 

그림 6 - 14

 

6.13     쓰기나 지우기 작업 후에 Flash memory access

 

어떤 쓰기나 지우기 동작이 RAM에서 시작되고 BUSY=1 이면 CPU는 어떠한 Flash 영역도 읽거나 쓰면 안 되고, 만약 그렇지 않았다면 접근위반이 발생하여 ACCVIFG가 설정됩니다. 물론 결과는 예측 불가능해집니다.

만약 Flash 에 쓸 때 WRT이 0 으로 설정되어 있으면 ACCVIFG 가 설정되고 Flash memory에는 아무런 영향을 미치지 않습니다.

 

Byte/word 쓰기 또는 지우는 동작이 Flash memory에서 시작될 때 Flash 컨트롤러는 CPU의 다음처리 명령을 0x3FFF로 설정 합니다. 0x3FFF는 jmp PC 명령으로 Flash 조작 중에 멈추어 있는 CPU를 다시 살립니다. 컨트롤러가 Flash 에 대한 조작이 끝나거나 BUSY가 0 이면 CPU는 다음 명령을 처리 합니다.

 

주의할 사항은 Flash 조작적에 모든 인터럽트는 사용이 금지되어야 합니다. 만일 인터럽트를 사용하게 둔 상태에서 Flash 조작 중에 인터럽트가 발생되면 jmp PC 명령을 CPU가 호출되게 됩니다. 그래서 Flash 조작이 완료되면 CPU는 인터럽트 처리루틴이 실행되지 않고 임의에 위치에서 프로그램이 실행됩니다.

 

그림 6-15 은 Flash access 동안에 BUSY=1일 조건 입니다.

 

그림 6 - 15

 

6.14    쓰기나 지우기 동작 중에 정지

 

Flash 조작 중에 EMEX bit를 조작 하여 Flash 조작을 중지 할 수 있습니다. EMEX bit를 설정하여 Flash 조작을 멈추고 Flash 컨트롤러를 멈춥니다. 모든 Flash 조작이 중지되고 Flash는 read 모드가 됩니다. 모든 FCTL1레지스터는 reset 됩니다. 이때 Flash 조작에 대한 결과는 예측할 수 없습니다.

 

6.15    Flash memory controller의 동작

 

FCTLx register 는 16bit 입니다. Password 가 걸려있고, read와 write가 가능합니다. 레지스터를 읽거나 쓸 때는 워드 명령이 사용되며 쓰기 접근을 위해서는 상위 byte에 0xA5를 포함해야 합니다. 0xA5가 FCTLx 레지스터의 쓰기 패스워드가 됩니다. 0xA5 이외의 값은 KEYV flag를 동작시켜 PUC가 발생되어 system reset 이 됩니다. FCTLx 레지스터는 읽을 때는 0x96이 상위 byte에서 읽어집니다.

FCTL1의 기록은 block write mode에서 WAIT가 1 일 때만 가능합니다. 소거 또는 byte/word 쓰기 동작 중에 FCTL1에 어떠한 쓰기 동작 을 해도 접근위반이 됩니다. 그래서 ACCVIFG가 설정됩니다.

블록 쓰기 모드에서 WAIT가 0 일때 FCRL1을 쓰면 접근위반이 되어 ACCVIFG가 설정됩니다.

BUSY가 1일 때 FCTLx 레지스터에 쓰기 동작은 접근 위반이 되고 읽기동작은 접근위반이 되지 않습니다.

 

6.16    Flash memory컨트롤러 인터럽트

 

Flash memory 컨트롤러는 2개의 인터럽트 원인이 있습니다. 그것은 KEYV와 ACCVIFG 입니다. 접근위반이 발생될 때 ACCVIFG가 설정되며 이 때문에 인터럽트가 발생됩니다. ACCVIFG 인터럽트는 NMI 인터럽트로 GIE와 관계없이 동작 됩니다. 접근위반이 어디서 발생되었는지 알기 위해서 프로그램적인 점검이 필요합니다. ACCVIFG는 소프트웨어에 의해 reset이 가능합니다. Flash 컨트롤러 레지스터에 부정확한 암호로 쓰기작업을 하면 위반 flag인 KEYV가 설정됩니다. 이때는 PUC가 바로 발생됩니다.

 

6.17 프로그램 가능한 Flash 디바이스

 

MSP430은 여러 가지 방식으로 프로그램 가능 합니다.

먼저 JTAG을 통하여 프로그램 가능한데 JTAG은 4개의 시그널 PIN을 이용합니다. JTAG 은 FUSE로 보호되며 FUSE 사용으로 JTAG 사용이 금지 될 수 있습니다.

또 하나는 MSP430은 bootstrap loader(BSL)울 가지고 있습니다. BSL은 UART을 이용하여 RAM을 읽거나 프로그램이 가능합니다. BSL을 이용한 Flash 접근은 256bit의 사용자 암호에 의해 보호 됩니다.

마지막으로 사용자가 여러 가지 프로그램적인 방법을 사용하여 UART, SPI, 일반I/O 등등을 사용하여 프로그램 할 수 있습니다.

 

그림 6 - 16

 

FCTL1 (Flash memory Control Register 1)

BIT 

15 

14

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

BLKWRT 

WRT 

x 

x 

x 

MERAS 

ERASE 

X

초기값

0 

0 

0 

0 

0 

0 

0 

0 

읽고쓰기

R/W 

R/W 

R 

R 

R 

R/W 

R/W 

R 

 

BLKWRT : block 쓰기 모드 설정, WRT와 함께 block 모드를 설정 합니다.

EMEX 가 설정되면 BLKWRT는 자동으로 reset 됩니다.

(0 : block 쓰기 모드 off , 1: block 쓰기 모드 on)

 

WRT : 쓰기동작, 기록중임을 나타냅니다. EMEX 가 설정되면 자동으로 reset 됩니다.

( 0 : 쓰기 동작 off , 1: 쓰기 동작 on)

 

MERAS : mass 삭제 동작 설정

ERASE : MERAS 와 ERASE 두 개의 설정으로 삭제모드를 설정합니다.

Emex 설정으로 자동 reset 됩니다.

 

MERAS 

ERASE 

동작

0 

0 

삭제 안함

0 

1 

한 개 세그먼트 단위 삭제

1 

0 

모든 main 세그먼트 삭제

1 

1 

모든 세그먼트 삭제

 

FCTL2 (Flash memoey Control Register 2)

BIT 

15 

14 

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

FSSELx 

FNx 

초기값

0 

1 

0 

0 

0 

0 

1 

0 

읽고쓰기

R/W 

R/W 

R/W

R/W 

R/W 

R/W 

R/W 

R/W 

 

FSSELx : Flash timing 발생기(generator)의 소스를 설정 합니다.

( 00: ACLK , 01: MCLK , 10(11): SMCLK )

 

FNx : Flash timing 발생기(generator)의 소스를 얼마나 나누어 사용 할 것인지를 설정합니다.

나누어지는 값은 FNx +1 이다.

 

FCTL3 (Flash memoey Control Register 3)

BIT 

15 

14 

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

x 

x 

EMEX 

LOCK 

WAIT 

ACCVIFG 

KEYV 

BUSY 

초기값

0 

0 

0 

1 

1 

0 

0 

0 

읽고쓰기

R 

R 

R/W 

R/W 

R 

R/W 

R/W 

R/W 

 

EMEX : Flash 조작 중지 (0 : 조작 중지 안함 , 1: 조작 중지)

 

LOCK : Flash 를 쓰거나 지우는 작업 후에 memory를 unlock 합니다.

Lock bit는 byte/word 쓰기 동안 언제든지 1이 설정 될 수 있습니다.

또한 정상으로 완료되면 설정 될 수 있습니다. Lock bit가 BLKWRT = WAIT =1 일 때 설정되면

BLKWRT 와 WAIT 는 reset 되고 block 쓰기는 끝납니다.

( 0: unlock ,1:lock)

WAIT : Flash memory가 기록 되는 것을 나타냄

( 0: 다음 쓰기나 지우기 작업 준비 안됨, 1: 다음 쓰기나 지우기 작업 준비 됨)

ACCVIFG : 접근위반 발생

( 0: 접근위반 발생 안됨 , 1; 접근 위반 발생)

 

KEYV : Flash 보안 위반

( 0: 패스워드 정확 , 1: 패스워드 오류)

 

BUSY : Flash timing 발생기(generator)의 동작 표시

( 0 : Flash timing 발생기(generator) 동작 안함 , 1: Flash timing 발생기(generator) 동작 중)

 

IE1 (Interrupt Enable Register 1)

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

   

ACCIVIE 

         

초기값

   

0 

         

읽고쓰기

   

R/W 

         

 

ACCVIE : Flash 접근 위반 flag 발생을 가능하게 한다.

( 0: ACCVIFG 발생 불가 , 1: ACCVIFG 발생 가능)

 

 

 

 

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

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

 

  1. FLL+ Clock module

 

5.1    FLL+ Clock module 구조

 

FLL+ Clock module은 msp430x4xx 디바이스에 clock 을 공급합니다. FLL+ Clock module를 사용하여 저가의 System 을 만들 수 있습니다. 또한 ultra low power 구현이 가능해 집니다. FLL+ Clock module은 내부에 3가지의 clock 소스(LFXT1CLK , XT2CLK, DCOCLK)가 존재합니다. 그 중 가장 사용이 편리한 것을 선택해서 사용이 가능하다. 내부의 FLL은 LFXT1 크리스탈(시계용) 주파수를 이용한 디지털 modulator 와 디지털 오실레이터 제어기(DCO)를 사용 합니다. Fll+ Clock module 은 두 개의 외부 크럭 입력부가 있으며, 크리스탈, 레조네이트, 또는 내부 발진기를 이용하여 동작합니다. (모든 것은 소프트웨어 적으로 제어가 가능 합니다.)

 

FLL+ clock 모듈은 두 개 또는 세 개의 clock source (LFXT1CLK , XT2CLK, DCOCLK )가 사용됩니다.

 

LFXT1CLK 는 저 주파수 또는 고 주파수 클럭용으로 사용 가능합니다. 32768Hz 의 시계용 크리스탈, 일반 크리스탈, 레조네이터 등이 사용되며, 450kHz – 8MHz 까지 사용이 가능 합니다.

XT2CLK 는 옵션으로 사용 가능한 고 주파수 클럭용으로 사용 가능합니다. 450kHz – 8MHz 까지 사용이 가능 합니다.

 

DCOCLK 는 내부에서 제어 가능한 RC특성을 가진 오실레이터 이며, FLL에 의해 안정화 됩니다.

 

4개의 clock 신호(ACLK, ACLK/n, MCLK, SMCLK)를 FLL+ module 용으로 사용할 수 있습니다.

 

ACLK은 보조 클럭 이며 LFXT1CLK를 source로 사용합니다. 주변 모듈사용을 위해 프로그램적으로 선택 하여 사용할 수 있습니다.

ACLK/n 은 ACLK를 n으로 나눈 클럭 입니다. N은 1,2,4,8이 될 수 있으며, 외부 출력용으로 사용할 수 있습니다.

MCLK는 메인 클럭 입니다. LFXT1CLK, XT2CLK, DCOCLK 중에 프로그램적으로 선택하여 사용할 수 있습니다. FLL에 의해 1,2,4,8로 나누어질 수 있으며, CPU와 SYSTEM에 사용 될 수 있습니다.

SMCLK은 보조 클럭 이며 오실레이터2 가 장착이 되어 있다면 XT2CLK 이나 DCOCLK중 프로그램적으로 선택하여 사용할 수 있습니다. 주변장치에 사용 되어 집니다.

 

msp430x44x나 msp430x43x의 FLL+ clock 모듈은 그림 5-1과 같습니다. 또한 msp430x42x와 mxp430x41x는 그림 5-2와 같습니다.

 

 

 

 

그림 5 - 1

그림 5 - 2

 

5.2    FLL+ Clock module 동작

 

FLL+ Clock 모듈은 PUC(power up clear)후에 MCLK, SMCLK는 DCOCLK에 의해 ACLK위 32배로 설정됩니다. 예를 들어 ACLK에 32768Hz 크리스탈을 사용하면 MCLK, SMCLK는 1.048576MHz 로 설정 됩니다.

 

상태 레지스터 컨트롤 bit 인 SCG0, SCG1, OSCOFF, CPUOFF의 설정은 MSP430의 동작모드를 조절하고 FLL+ Clock 모듈의 구성 요소들의 사용을 설정할 수 있습니다. System Reset 또는 인터럽트 동작 모드에 관련된 부분을 참고해서 보시길 바랍니다.

 

SCFQCTL, SCFI0, SCFI1, FLL_CTL0, FLL_CTL1레지스터의 설정은 FLL+ Clock 모듈을 조절합니다. 또한 FLL+ 는 동작중에 소프트웨어적으로 기능을 변경될 수 있습니다

 

5.3    LOW POWER 에서 FLL + Clock

 

에너지 보호를 위해서는 낮은 클럭을 사용하며, 빠른 동작 속도 요구 할 때는 빠른 클럭을 사용합니다. 이때주의 해야 할 것은 작동온도와 공급전압에 따는 클럭 안정도를 생각해야 한다는 것입니다.

 

저 출력 동작을 위해 ACLK는 32768Hz의 크리스탈을 사용하는 것이 좋습니다. 인터럽트가 발생해서 고속 동작이 필요할 때는 DCO를 이용해 MCLK를 고속 동작 시키는 방법이 있습니다. 단 이때도 주의해야 할 것은 주파수가 안정될 시간이 필요하다는 것입니다.

 

5.4    LFXT1 오실레이터

 

LFXT1 오실레이터는 LF(low-frequency) mode (XTS_FLL = 0)에서 32768Hz의 크리스탈을 사용하여 ultra low 전류를 사용하도록 지원 합니다. 32768Hz 크리스탈은 Xin과 Xout에 별도의 부품없이 연결하여 사용할 수 있습니다.

 

LFXT1 오실레이터는 HF(high-frequency) mode (XTS_FLL =1)에서 고속 크리스탈 또는 레조네이터를 사용 할 수 있습니다. 고속 크리스탈이나 레조네이터도 별도의 부품 없이 Xin과 Xout 에 바로 연결되어 사용할 수 있습니다.

 

XCAPxPF bit는 LFXT1에 연결된 크리스탈에 내부적으로 1,6,8,10pF의 콘덴서를 단것처럼 만들어 줍니다. 부가적으로 외부 콘덴서가 필요하며 달아 사용하면 됩니다. 만약 MCLK용으로 사용하지 않는다면 OSCOFF를 이용해 LFXT1을 정지시킬 수 있습니다.

( SELM 이 3이 아닐 때 CPUOFF = 1이 된다.)

 

LFXT1에 저 주파수 크리스탈을 사용시 잡음 영향을 받을 수 있으므로 크리스탈을 최대한 pin 가까이 놓아야 합니다. 또한 기본적으로 XCAPxPF는 0으로 설정되어 있으므로 1pF의 값을 가집니다. 그래서 크리스탈이 불안전하게 동작할 수 있습니다. 그래서 초기에 XCAPxPF의 값을 조정해야 합니다.

 

5.5    XT2 오실레이터

 

몇몇 MSP430x4xx 칩은 XT2기능이 있습니다. XT2는 LFXT1의 HF mode 의 특성과 동일 하므로 XT2CLK를 HF mode 처럼 사용해야 합니다. 주의할 사항은 내부에 콘덴서 값을 가지지 않아 외부에 달아야 합니다. 만약 XT2CLK가 MCLK 또는 SMCLK로 사용되지 않는다면 XT2OFF에 의해 중지 할 수 있습니다.

 

5.6    Digitally-Controlled Oscillator (DCO)

 

DCO는 내부에서 동작하는 RC 특성을 가진 오실 레이터 입니다. DCO 주파수는 FLL에 의해 ACLK 의 N 배로 안정화 됩니다. 주파수는 SCFQCTL 레지스터의 bit6-bit0까지 설정 할 수 있습니다. DCOPLUS bit 설정으로 FDCOCLK 주파수는 FDCO 또는 FDCO/D가 됩니다.

 

FLLDx bit 설정으로 D의 값은 1,2,4,8중 한 가지로 설정 될 수 있습니다. 기본적으로 DCOPLUS 는 D=2가 되도록 설정되어 있습니다. 즉 FDCOCLK는 FDCO/2 가 됩니다.

 

SCFQCTL 과 DCOPLUS 의 설정에 따라 다음과 같이 DCOCLK가 조정됩니다.

DCOPLUS = 0 이면 FDCOCLK =(N+1) * FACLK

DCOPLUS = 1 이면 FDCOCLK =D * (N+1) * FACLK

 

5.7    DCO 주파수 범위

 

FDCO 의 주파수 범위는 아래의 그림 5-3 의 리스트에 따라 FNx의 bit에 따라 선택됩니다. DCO는 DCOCLK의 주어진 범위 내에서 동작하도록 합니다. 이때 이용자는 MCLK이 최대 동작 주파수를 넘지 않도록 설정해야 합니다.

 

그림 5 - 3

5.8    Frequency Locked Loop (FLL)

 

FLL은 연속적으로 상승 또는 하강하는 10bit의 주파수 적분기 입니다. SCFI1와 SCFI0의 조건에 따라 DCO는 주파수 적분기를 조절합니다. ACLK 크리스탈 주기에 맞추어 +1 또는 –1씩 조절 됩니다. 5개의 SCFI1의 bit7-bit3는 DCO주파수 tap을 설정합니다. 주파수 tap은 29개가 있으며 28-31까지는 주파수는 동일 합니다. 각각의 tap은 이전에 비해 주파수가 약 10%정도 높아 집니다. 변조기(Modulator)는 2개의 이웃하는 DCO 주파수를 섞어 줍니다. SCFI1의 2-0bit와 SCFI0의 1-0bit는 변조기를 위해 사용됩니다(이것은 자동으로 조절됩니다). DCO는 PUC(power up clear)후 가장 낮은 주파수로 동작합니다. (이유는 SCFI0와 SCFI1이 초기화 되기 때문입니다.) 먼저 일반적인 동작을 이해 DCO를 설정 해야 합니다. DCO는 하나의 ACLK주기내에 32가지의 DCLK 주기를 가질 수 있습니다.

 

그림 5 - 4

 

5.9    FLL와 Modulator 사용정지

 

FLL은 상태 레지스터의 SCG0가 1일 경우 정지 합니다. FLL 이 정지하면 DCO는 이전에 설정된 상태로 동작하나 DCOCLK이 자동으로 안정화 되지 않습니다. DCO는 SCFQ_M 이 0이면 정지됩니다. DCO가 정지되면 DCOCLK는 사용 가능한 DCO tap 에 맞추어집니다.

 

 

5.10    Low power 모드에서 FLL의 동작

 

인터럽트 서비스 루틴 동작시 SCG1, CPUOFF, OSCOFF의 설정은 제거 되지만 SCG0의 설정은 제거되지 않습니다. 이것은 LPM1-4에서 발생한 인터럽트루틴에서 FLL을 조작해야 하는 것을 뜻 합니다. FLL은 정지 상태이며 SCFI0와 SCFI1에 정의된 상태로 DCO는 동작합니다. FLL 조작이 필요 할 때는 SCFI0을 제어하면 됩니다.

 

  1. Buffered Clock Output

 

ACLK을 1,2,4,8로 나누어져(클럭속도가 빨라짐) P1.5에 출력될수 있습니다. 나누어지는 값은 FLL_DIV에 의해 선택되어 집니다. ACLK는 다른 핀에도 다중 출력이 되며 이때 ACLK out으로 설정 되어야 합니다.

 

 

5.12    FLL+ Fail-Sefe 동작

 

FLL+ module에는 오실레이터 고장에 대한 안전 기능이 있습니다. 안전기능은 그림 5-5와 같이 LFXT1, DCO, XT2의 고장을 찾을 수 있습니다.

 

그림 5 - 5

 

고장조건은 다음과 같습니다.

 

LF mode에서 LFXT1이 저 주파수 오실레이터 장애(LFOF)가 발생, HF mode 에서 LFXT1이 고 주파수 오실레이터 장애(XT1OF)가 발생, XT2의 고 주파수 오실레이터 장애(XT2OF) 발생, DCO의 DCO 장애 플래그(DCOF) 발생을 말한다.

크리스탈이 정확하게 움직이지 않는다면 크리스탈 오실레이터 장애 bit LFOF, XT1OF, XT2OF에 설정됩니다. 고장 되어 있는 동안 장애 bit는 설정되어 있으며 이상 없이 동작 하게 되면 자동으로 제거 됩니다.

LFXT1 크리스탈 장애시 ACLK는 발생되지 않습니다.

 

DCO가 가장 낮은 tap이 되면 SCFI1의 bit7-3번까지 지워집니다. 이때 DCOF가 발생됩니다. DCO가 가장 높은 tap일때도 DCOF는 발생 됩니다. DCOF는 가장높거나 가장 낮은 tap에서 벗어나면 자동으로 제거 됩니다.

오실레이터 장애(LFOF,XT1OF,XT2OF,DCOF)발생시 오실레이터 장애 인터럽트 플레그 (OFIFG)가 설정되거나 POR( power of reset)이 됩니다.

인터럽트가 동작하면 OFIE 는 자동으로 지워 집니다. 그러나 OFIFG는 프로그램에 의해 지워야 합니다. 인터럽트 루틴에서는 bit를 검사해 고장의 원인을 찾을 수 있습니다. 만일 고장이 MCLK 에 영향을 주면 자동으로 MCLK의 소스를 DCO로 변경합니다. 그러나 이 동작에 의해 SELMx bit의 설정을 바꾸지 않습니다. 그래서 SELMx bit는 프로그램적으로 변경 시켜야 합니다.

 

 

 

5.13    관련 레지스터 설명

 

SCFQCTL (system clock control register)

BIT 

명칭

SCFQ_M 

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

SCFQ_M : 변조기(modulation)의 사용유무 설정 ( 0: 사용 ,1:비사용)

N     : 변조값,DCO에 사용될 변조값을 설정 한다.(아래 계산에서 N 값 조정)

DCOPLUS = 0 이면 FDCOCLK =(N+1) * FACLK

DCOPLUS = 1 이면 FDCOCLK =D * (N+1) * FACLK

 

 

SCFI0 (system clock frequency integrator register 0)

BIT 

명칭

FLLDx 

FN_x 

MODx(LSBs)

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

FLLDx     : Fdocclk의 D 값 조정 ( 00: /1 , 01: /2 , 10: /4 ,11 :/8)

FN_x     : DCO 의 동작 범위 설정

(0000:0.7-6Mhz, 0001:1.4–12Mhz, 001x:2.2-17Mhz, 01xx:3.2-25Mhz, 1xxx:5-40Mhz)

MODx    : 변조에 사용되는 변조값의 아래 bit 이 값은 FLL+ 에 의해 자동으로 조절 된다.

 

 

SCFI1 (system clock frequency integrator register 1)

BIT 

명칭

DCOx 

MODx(MSBs) 

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

DCOx     : 이 bit는 DCO tap을 선택해서 자동으로 FLL+ 값을 조정하게 한다.

MODx     : 변조에 사용되는 변조값의 상위 bit 이 값은 FLL+ 에 의해 자동 조절 됩니다.

 

 

FLL_CTL0 (FLL+ Control Register 0)

BIT 

명칭

DCOPLUS 

XTS_FLL 

XCAPxPF 

XT2OF 

XT1OF 

LFOF 

DCOF 

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

 

DCOPLUS : DCO를 MCLK나 SMCLK에 출력할 때 FLLDx(D값) 사용 할 것인지 결정한다.

(0 : 사용한다. ,1: 사용하지 않는다.)

XTS_FLL : LFTX1 mode 를 선택한다. (0: 저 주파수 모드 , 1: 고 주파수 모드)

XCAPxPF : LFTX1 의 내부 콘덴서 값을 조정한다. (00 : 1pF , 01: 6pF , 10 : 8pF , 11 : 10pF)

XT2OF     : XT2오실레이터 장애 (1이면 발생)

XT1OF     : LFXT1의 고 주파수 오실레이터 장애 (1이면 발생)

LFOF     : LFXT1의 저 주파수 오실레이터 장애 (1이면 발생)

DCOF    : DCO 오실레이터 장애 (1이면 발생)

 

 

FLL_CTL1 (FLL+ Control Register 1)

BIT 

명칭

사용안함

SMCLKOFF 

XT2OFF 

SELMx 

SELS 

FLL_DIVx 

초기값

0

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

SMCLKOFF : SMCLK 사용금지 선택 ( 0: SMCLK 사용 , 1 : SMCLK 사용금지)

XT2OFF : XT2 오실레이터 사용금지 선택

(0 : XT2 사용, 1: MCLK나 SMCLK 용으로 사용안할 때 사용금지 )

SELMx : MCLK의 소스 선택 (00:DCOCLK , 01:DCOCLK ,10:XT2CLK, 11:LFXT1CLK)

SELS    : SMCLK의 소스 선택 (0: DCOCLK , 1: XT2CLK)

FLL_DIVx : ACLK의 나눌값 선택 (ACLK/n 의 n 값) (00 : /1 , 01:/2 , 10:/4 , 11:/8)

 

 

IE1 (Interrupt Enable Register 1)

BIT 

명칭

      

OFIE 

 

초기값

      

 

읽고쓰기

      

R/W 

 

 

OSC 인터럽트 장애 인터럽트 동작 유무 설정 (0 : 인터럽트 동작 안함, 1: 인터럽트 동작)

 

 

IFG1 (Interrupt Flag Register 1)

BIT 

명칭

      

OFIFG 

 

초기값

      

 

읽고쓰기

      

R/W 

 

 

인터럽트가 발생되는지 알려준다. (0: 인터럽트 조건이 아님 , 1: 인터럽트 조건)

 

 

 

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

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

 

  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 자료 3  (0) 2012.11.15
[MSP430] MSP430 자료 2  (0) 2012.11.15
[MSP430] MSP430 자료 1  (0) 2012.11.15

+ Recent posts