[资料分享] MSP430--低功耗模式

Aguilera   2020-5-6 21:27 楼主

1.CPU的结构:16个寄存器R0-R15,16位算数逻辑单元ALU和一个指令控制单元。

2.寄存器中R4-R15是通用寄存器没有特殊功能。

  R0-R3具有特殊性:

  R0:程序计数器PC(Program counter),存放着下一条要从程序存储器中取出的指令的地址。

  R1:堆栈指针SP(Stack Point),系统堆栈在系统调用子函数或者进入中断服务程序时,保护程序计数器PC。

  R2:状态寄存器SR(State Register):

  R3:常数发生器

3.状态寄存器SR

image.png

4.低功耗

不同的低功耗模式就是配置不同的SCG1,SCG0,OscOff,CPUOff.

SCG1:复位使能SMCLK,置位则禁止SMCLK.

SCG0:复位激活DCO,置位且DCOCLK不用于MCLK或SMCLK时禁止DCO。

OscOff:复位则LFXT激活,置位且LFXT不用于MCLK或SMCLK时,LFXT振荡器禁止--对应着ACLK。

CPUOff:复位则MCLK激活,置位则MCLK停止。

解释:

(1)POR:POWER ON RESET.上电或复位信号都可以发生POR。

   PUC:POWER UP CLEAR.POR可以出发PUC,另外看门狗的事件可以出发PUC。

(2)AM:全部活动

   LPM0:CPUOFF=1,CPU被禁止,即MCLK被禁止。

   LPM1:CPUOFF=1,SCG0=1。CPU-MCLK禁止,且若DCO未用做MCLK或SMCLK,则DCO禁止。

   LPM2:CPUOFF=1,SCG1=1。CPU-MCLK禁止,SMCLK禁止。(DCO未用作MCLK,SMCLK则自动禁止)

   LPM3:CPUOFF=1,SCG1=1,SCG0=1.CPU-MCLK禁止,SMCLK禁止,DCO禁止。

   LPM4:CPUOFF=1,SCG1=1,SCG0=1,OSCOFF=1.全部禁止,包括ACLK也禁止。

5.系统工作原理:单片机各个模块运行完全独立。定时器,IO,AD,看门狗等都可以在主CPU休眠的状态下独立运行。

  软件将CPU设定到某一低功耗工作模式下,在需要时使用中断将CPU从休眠状态中唤醒,完成工作后又进入相应的休眠状态。

  系统响应中断的过程:如果在中断处理子程序中修改堆栈中SR的状态,那么中断返回后将不再是原来的SR状态。

    PC入栈,SR入栈。

    中断向量赋给PC。

    GIE,CPUOFF,OSCOFF,SCG1清除。

    IFG标志位清除.

 执行中断处理子程序。

 执行RETI指令,中断返回。

    SR出栈

    PC出栈

void main(void)
{
  BCSCTL1 |= DIVA_2;//ACLK 4分频:由LFXT1CLK提供(32kHZ)
  WDTCTL = WDT_ADLY_1000; //WDT作为间隔定时器:8000ms
  IE1 |= WDTIE;
  while(1)
  {
    unsigned int i;
    _BIS_SR(LPM3_bits+GIE);//设置SR寄存器,进入LPM3,打开全局中断
  }  
}


进入LPM3:SCG1+SCG0+CPUOFF:也就是只有ACLK是活动的,但是仍支持WDT,TIMER.

编译器支持直接对位赋值:_intrinsic unsigned short _BIS_SR(unsigned short),位于in430.h

同理要清除SR中某一位的话就用 _BIC_SR();

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复