공부/MSP430 2012. 11. 15. 00:06

 

  1. MSP430x4xx 의 System Reset, Interrupts, Operating Mode

 

  1. 시스템 리셋과 초기화

 

그림4와 같이 크게 power-on reset(POR)과 power-up clear(PUC)신호가 있습니다. 이 신호들은 여러 가지 이벤트들에 의해 Reset 신호가 발생되면 초기 조건에 따라 동작됩니다. 그 내용을 살표 보면 다음과 같습니다

 

그림 4

 

POR은 디바이스 자체 reset 입니다. POR은 최초 전원 공급시 와 _RST/NMI 핀에 LOW 신호가 걸릴 때 생성됩니다. PUC는 POR이 생성될 때 동시에 생성되며 PUC가 독립적으로 생성되었을 때 POR이 발생 되지는 않습니다. 그 외에 PUC는 watchdog timer가 동작중에 이벤트가 발생되거나 watchdog timer에 보안키가 위반되거나 flash 메모리의 보안키에 위반될 때 발생합니다.

 

모든 MSP430x4xx 디바이스는 brownout(전원감지) reset 회로를 가지고 있습니다. Brownout 회로는 VCC가 낮은 전압으로 입력되는 것을 감지하며 이때 POR 신호가 발생합니다.

VCC가 입력되고 VCC를 인식할 수 있는 VCC(start) 에서 동작을 시작합니다. Brownout회로는 VCC(b_it+) 전압이상이 되는 것은 인식한 후 Reset을 멈추며 다시 VCC(b_it-) 전압 이하가 되면 POR을 동작시킵니다. 자세한 사항은 아래 그림5를 참고해주세요.

 

그림 5

 

 

  1. 시스템 리셋후의 동작

 

시스템에 POR신호 발생된 후에 MSP430은 다음과 같은 동작을 합니다.

 

_RST/NMI pin은 reset mode로 설정, I/O는 input 모드로 변경, 모든 주변모듈(peripheral modules)및 레지스터는 초기화 상태레지스터(SR)은 reset, watchdog timer는 동작, 프로그램카운터(PC)는 인터럽트 백터 0xFFFE(reset 백터)로 설정 .

 

시스템 reset후에 사용자는 msp430을 초기화 해야합니다. 그것은 다음과 같습니다.

RAM에 위쪽에 SP를 초기화 , watchdog timer를 초기화 , 주변모듈을 설정, 부가적으로 watchdog timer, 오실레이터 장애,플레쉬 메모리 플레그 등을 reset source로 설정해야 합니다.

 

 

 

 

  1. 인터럽트

 

인터럽트 우선수위는 그림6 과 같습니다. CPU/NMIRS가 최고우선권을 가지며 Module 1에 가까우면 우선순위가 높아집니다. 인터럽트는 시스템 reset 인터럽트, (non)-maskable NMI 인터럽트, Maskable 인터럽트 3종류가 있습니다.

 

그림 6

 

  1. NMI 인터럽트

 

(Non)-Maskable Interrupts (NMI)는 general interrupt enable bit (GIE)로 마스크 될 수 없습니다. 즉 GIE로 NMI의 사용여부를 결정할 수 없다는 말이며, 사용 여부는 각각의 인터럽트 설정 bit인 ACCVIE, NMIIE, OFIE 로 설정 가능 합니다. NMI 인터럽트가 허가되면 상태에 따라 자동으로 reset 될 수 있습니다. 프로그램 시작 시 NMI 인터럽트의 벡타 주소를 0xFFFC 부터 설정 할 수 있으며, 사용자 소프트웨어는 기동시에 NMI인터럽트 사용bit를 다시 설정해야 합니다. (reset시 기존의 상태를 보관하지 않습니다.) NMI 인터럽트는 3가지의 소스, 즉 _RST/NMI pin에 에지가 발생, Oscillator 장해, 플레쉬 메모리 접근 위반 일 때 발생됩니다.

다음 그림7 에서 볼 수 있습니다.

 

그림 7

_RST/NMI pin은 최초 전원 인가 시(Power-up)에 reset mode로 설정됩니다. _RST/NMI의 기능은 WDTCTL에 의해 설정되며, 만약 _RST/NMI가 reset mode로 설정되어 있으면, CPU는 _RST/NMI가 Low로 유지되고 있는 동안 Reset을 하고 있다가 _RST/NMI pin이 High가 되면 CPU는 0xFFFE에서 다시 동작 되게 됩니다. 만약 _RST/NMI가 NMI기능으로 설정되면 NMIES bit 에 위해 선택되어진 신호가 발생할 때 NMIIE bit가 설정되어 있으면 NMI 인터럽트가 발생 됩니다.

 

Oscillator 장해신호는 crystal Oscillator가 문제가 발생되었을 때 발생됩니다. OFIE bit가 설정되어 있어야만 Oscillator 장해신호 발생시에 인터텁트가 발생되며 OFFIFG 플레그는 NMI가 OSCF에 의해 의해서 영향을 받았는지 결정할 수 있도록 NMI 서비스 루틴에서 프로그램적으로 검사되어야 합니다.

 

Flash 접근위반이 발생하면 ACCVIFG flag는 1로 설정 됩니다. ACCVIE bit 를 설정해서 flash 접근위반이 발생할 경우 NMI 인터럽트가 발생됩니다. ACCVIFG flag는 NMI 루틴에서 확인할 수 있습니다.

 

NMI는 특이하게 멀티 source (/RST/NMI pin에 에지가 발생, Oscillator 장해, 플레쉬 메모리 접근 위반)에 의해 인터럽트가 발생됩니다. 즉 NMIIE,OFIE,ACCVIE 를 설정 함으로서 인터럽트를 발생할 수 있습니다. 사용자에 의한 인터럽트 처리루틴의 예는 그림8과 같습니다.

 

그림 8

 

주의해야 할 점은 ACCVIE, NMIIE,OFIE 는 NMI 루틴에서 설정되면 안됩니다. RETI (인터럽트 복귀명령)전에 또 다른 인터럽트가 발생하여 스텍이 오버플로우 될 수 있습니다.

 

  1. Maskable 인터럽트

 

Maskable 인터럽트는 watchdog timer overflow를 포함한 주변장치들에 의해 영향을 받습니다. 각각의 인터럽트는 허가 bit가 있어 사용을 설정할 수 있으며 모든 인터럽트는 SR의 GIE bit로 사용을 설정할 수 있습니다. 인터럽트를 사용하기 위해서는 GIE bit 설정이 꼭 필요 합니다. 설정하지 않으면 인터럽트가 발생되지 않습니다. 물론 이전에도 설명하였지만 NMI는 GIE와 상관이 없습니다.

인터럽트 발생 후 처리까지는 모두 6 cycle이 필요합니다. 그리고 인터럽트 서비스 루틴이 처리됩니다. 그 과정을 살펴보면 다음과 같습니다. 먼저 수행되고 있는 명령 처리가 완료되고 PC를 스텍에 넣습니다. 다시 SR을 스텍에 넣으며 가장 우선순위 인터럽트는 처리되고 중복되어 발생된 낮은 인터럽트는 처리 대기 됩니다. 해당 인터럽트 요구 플레그는 자동으로 reset되고 대기되고 있는 인터럽트는 계속 대기 되고 있습니다. SCG0를 제외한 SR은 지워지고 이로 인해 low power 모드는 종료됩니다. 인터럽트 백터가 PC에 실려 인터럽트 처리 루틴으로 점프합니다. 그림9 를 보면 인터럽트 발생전과 발생후의 SP의 모습을 볼 수 있습니다.

그림 9

인터럽트 루틴의 종료는 RETI 명령에 의해 실행됩니다. 인터럽트에서 복귀하기 위해서는 5 cycle 이 필요합니다. 스텍에 저장된 SR을 복귀하고 GIE, CPUOFF등의 모든 정보를 복귀한 후 스텍에 저장된 PC 위치로 이동합니다. 그리고 이전에 중지된 루틴을 다시 수행합니다.

그림 10

인터럽트 백터와 POWER-UP 시작위치는 0xFFFF 에서 0xFFE0까지 위치합니다. 백터 위치는 그림11 과 같습니다.

그림 11

SFR 에는 각종 인터럽트 enable bit,flag 등이 있습니다. 자세한 내용은 SFR 설정부분을 참고해야 합니다.

 

  1. 동작 모드

 

MSP430은 Ultralow-power용 장비에 사용되기 위해 설계 되어 있습니다. 그림 2-8과 같은 동작모드가 존재합니다. 동작모드를 어떻게 사용할 것인지는 3가지를 고려한 후 선택해야 합니다. 그것은 Power를 어떻게 쓸 것인지, 동작속도를 어떻게 할 것인지, 디바이스를 어떻게 사용할 것인지 입니다. 그에 따라 동작모드를 선택 해야 하며 전류 소모량 또한 차이가 납니다.

 

동작모드는 AM, LPM0에서 LPM4까지 있습니다. LPM0 에서 LPM4까지는 CPUOFF, OSCOFF, SCG0, SCG1에 의해 설정됩니다. 이들 bit들은 상태 레지트터(SR)에서 제어 되도록 되어 있습니다. 이로 인해 현재동작동중인 모드가 인터럽트 서비스 루틴이 동작되는 동안 자동으로 스텍에 저장되게 됩니다. 만약 저장되어 있는 SR 값이 인터럽트 서비스 루틴 동안 변경되지 않는다면 인터럽트 종료 후 이전동작 모드로 돌아가게 됩니다.

다른 동작 모드로 동작 하려면 인터럽트 서비스 루틴에서 SR을 조절하면 됩니다. Mode 제어비트와 스택은 어떤 명령으로도 접근이 가능하므로 제어비트로 조정하면 바로 동작 모드가 변경되게 됩니다. 정지된 clock을 사용하는 주변장치는 자동으로 정지되며, 주변장치는 자신의 제어 레지스터에 의해서도 정지 될 수 있습니다. 모든 I/O port의 pin과 RAM/register는 값을 유지하며, 정상동작으로 전환은 모든 인터럽트를 통하여 가능하게 됩니다.

 

SCG1 

SCG0 

OSCOFF 

CPUOFF 

MODE 

CPU 상태

0

0

0

0

active 

CPU 동작, 모든 클럭 동작

0

0

0

1

LPM0

CPU,MCLK 정지 , SMCLK,ACLK 동작

0

1

0

1

LPM1

CPU,MCLK,DCO 정지,

MCLK,ACLK 동작모드에서 DCO를 사용 안하면 DC generator 정지,

SMCLK,ACLK 동작

1

0

0

1

LPM2

CPU,MCLK,SMCLK,DCO 정지,

DC generator 사용가능 , ACLK 동작

1

1

0

1

LPM3

CPU,MCLK,SMCLK,DCO 정지,

DC generator 정지 , ACLK 동작

1

1

1

1

LPM4

모든 동작 정지

 

 

  1. Low power mode 의 사용

 

MSP430은 Low power mode에서 어떤 이벤트가 발생되면 동작 모드를 전환할까요?

인터럽트 서비스 루틴에 들어갈 때 먼저 PC및 SR을 스텍에 저장하고 CPUOFF, SCG1, OSCOFF 비트를 자동으로 reset 하게 되어 동작모드가 전환 되며, 인터럽트 서비스 루틴에서 빠져 나올 때는 SR을 스텍에서 복귀하고 동작모드가 복귀됩니다. 만약 인터럽트 복귀 전에 stack에 있는 SR bit를 수정한다면 동작모드를 변경 할 수 있습니다.

 

MSP430은 온도 특성을 가지고 있습니다. 문제는 영하에서 DCO를 low power 모드 사용을 위해 사용을 안 할 때 입니다. 만약 온도변화가 심할 때 low power 모드가 되었고 특별히 동작 모드를 조정하지 않는 다면 wake-up시에 DCO 주파수는 대단히 달라질 수 있습니다.

이런 것을 피하기 위해서 DCO 주파수는 low power 모드에 들어가기 전에 가장 낮은 값으로 변화 시켜야 합니다.

 

LPM3는 MSP430의 Clock 시스템을 사용하여 최저의 파워를 소모하는 상태입니다. LPM3의 소비전력은 RTC동작전류와 모든 인터럽트가 실행되는 것을 합해서 2uA가 안됩니다.

32Khz의 크리스탈은 ACLK를 위해 사용 되어지며 6uS만에 안정화되는 DCO는 CPU 클럭으로 활용됩니다.

 

 

'공부 > 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
posted by 큰파도

댓글을 달아 주세요