认识低功耗模式

MSP430的中断,需要两个部分,一部分是打开中断,另外一部分是编写中断服务函数

打开中断

_BIS_SR与__bis_SR_register

首先我们得知道__bis_SR_register和_BIS_SR是一个玩意。查看宏定义可知

#define _BIS_SR(x)                      __bis_SR_register(x)

 _BIS_SR()可传入的参数

然后我们查看x的值,发现里面有八个可以传入的值

#define C                      (0x0001)
#define Z                      (0x0002)
#define N                      (0x0004)
#define V                      (0x0100)
#define GIE                    (0x0008)
#define CPUOFF                 (0x0010)
#define OSCOFF                 (0x0020)
#define SCG0                   (0x0040)
#define SCG1                   (0x0080)

我们这里只需要关系GIE就可以了,这个GIE表示总中断,如果没有使能GIE,那么你写的中断函数将永远无法进入!

低功耗

我们先看下面这一段宏定义

#define LPM0                   (CPUOFF)
#define LPM1                   (SCG0+CPUOFF)
#define LPM2                   (SCG1+CPUOFF)
#define LPM3                   (SCG1+SCG0+CPUOFF)
#define LPM4                   (SCG1+SCG0+OSCOFF+CPUOFF)

这里我们需要有一个概念了,众所周知MSP430引以为豪的东西就是低功耗。MSP430单片机具有7种低功耗模式(LPM0~4、LPM3.5和LPM4.5,并非全部系列都具有,MSP430F5529就没有),通过不同程度的休眠,可降低系统功耗。

MSP430F5529——中断理解_开发语言

中断服务函数

中断服务函数如下

#pragma vector=PORT1_VECTOR
__interrupt void Port_1 (void)
{
    
}

#pragma vector= xxx,此处的xxx是表示指定的中断函数。比如我是P1.1采用中断,就写#pragma vector= PORT1_VECTOR。 

/*****以下都是我一个一个的从库里面复制粘贴过来的,如有发现少了请评论*****/
RTC_VECTOR
PORT2_VECTOR
TIMER2_A1_VECTOR
TIMER2_A0_VECTOR
USCI_B1_VECTOR
USCI_A1_VECTOR
PORT1_VECTOR
TIMER1_A1_VECTOR
TIMER1_A0_VECTOR
DMA_VECTOR
USB_UBM_VECTOR
TIMER0_A1_VECTOR
TIMER0_A0_VECTOR
ADC12_VECTOR
USCI_B0_VECTOR
USCI_A0_VECTOR
WDT_VECTOR
TIMER0_B1_VECTOR
TIMER0_B0_VECTOR
COMP_B_VECTOR
UNMI_VECTOR
SYSNMI_VECTOR
RESET_VECTOR

中断函数必须是void型!!!后面那个Port_1名字随便取。中断函数不能传参!!!

总结

如果我们有中断一定要使能GIE!!!个人不建议新手使用低功耗!!!代码如下

_BIS_SR(GIE);//开启中断使能

注意:无论是外部中断还是串口中断,都是中断,需要打开GIE!!!