玩转MSP-ESP430G2(基础篇)
(八)低功耗模式补充
如果MSP430处于低功耗模式的工作状态,当可屏蔽中断和非可屏蔽中断源产生时,就会唤醒CPU进入中断处理程序。
- 入栈保护当前PC指针寄存器。
- 入栈保护当前SR状态寄存器。
- 清零SR状态寄存器(置GIE=0,屏蔽可屏蔽中断,并结束低功耗模式,CPU切换到Active模式)。
- 从中断向量表中取出中断向量到PC指针寄存器。
- 跳转到中断服务器程序开始执行。
- 中断执行完毕后执行RETI返回指令。
- 出栈恢复SR状态寄存器和PC指针寄存器的值。
- CPU恢复到原来的低功耗模式。
以上操作皆有硬件来完成
注意:如果在CPU返回原先低功耗模式时该表低功耗的模式,需要在中断处理程序中修改堆栈中的SR控制位的值。
相关代码:
#define C (0x0001u)
#define Z (0x0002u)
#define N (0x0004u)
#define V (0x0100u)
#define GIE (0x0008u)
#define CPUOFF (0x0010u)
#define OSCOFF (0x0020u)
#define SCG0 (0x0040u)
#define SCG1 (0x0080u)
/*Low power modes coded with bits 4-7 in SR*/
#ifndef_IAR_SYSTEMS_ICC__/*Begin #defines for assembler*/
#define LPM0 (CPUOFF)
#define LPM1 (SCG0+CPUOFF)
#define LPM2 (SCG1+CPUOFF)
#define LPM3 (SCG0+SCG1+CPUOFF)
#define LPM4 (SCG0+SCG1+OSCOFF+CPUOFF)
/*End #defines for assembler */
#else /* Begin #defines for C */
#define LPMO_bits (CPUOFF)
#define LPM1_bits (SCGO+CPUOFF)
#define LPM2_bits (SCG1+CPUOFF)
#define LPM3_bits (SCG1+SCG0+CPUOFF)
#define LPM4_bits (SCG1+SCG0+OSCOFF+CPUOFF)
#include"in430.h"
#define LPM0 _BIS_SR(LPM0_bits) /*Exit Low Power Mode 0*/
#define LPM0_EXIT _BIS_SR_IRO(LPM0_bits) /*Exit Low Power Mode 0*/
#define LPM1 _BIS_SR(LPM1_bits) /*Exit Low Power Mode 1*/
#define LPM1_EXIT _BIS_SR_IRO(LPM1_bits) /*Exit Low Power Mode 1*/
#define LPM2 _BIS_SR(LPM2_bits) /*Exit Low Power Mode 2*/
#define LPM2_EXIT _BIS_SR_IRO(LPM2_bits) /*Exit Low Power Mode 2*/
#define LPM3 _BIS_SR(LPM3_bits) /*Exit Low Power Mode 3*/
#define LPM3_EXIT _BIS_SR_IRO(LPM3_bits) /*Exit Low Power Mode 3*/
#define LPM4 _BIS_SR(LPM4_bits) /*Exit Low Power Mode 4*/
#define LPM4_EXIT _BIS_SR_IRO(LPM4_bits) /*Exit Low Power Mode 4*/