打印

MSP430--低功耗模式

[复制链接]
411|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quray1985|  楼主 | 2015-9-30 20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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




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出栈

相关帖子

沙发
quray1985|  楼主 | 2015-9-30 20:42 | 只看该作者
    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();

使用特权

评论回复
板凳
lefeng| | 2015-10-8 21:42 | 只看该作者
进入低功耗模式后,有时候会出现不能唤醒,应该注意些什么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

1488

帖子

5

粉丝