MSP430--低功耗模式

2019-07-25 15:29发布

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
quray1985
1楼-- · 2019-07-25 20:27
  1.     void main(void)  
  2.     {  
  3.       BCSCTL1 |= DIVA_2;//ACLK 4分频:由LFXT1CLK提供(32kHZ)  
  4.       WDTCTL = WDT_ADLY_1000; //WDT作为间隔定时器:8000ms  
  5.       IE1 |= WDTIE;  
  6.       while(1)  
  7.       {  
  8.         unsigned int i;  
  9.         _BIS_SR(LPM3_bits+GIE);//设置SR寄存器,进入LPM3,打开全局中断  
  10.       }   
  11.     }  
复制代码
进入LPM3:SCG1+SCG0+CPUOFF:也就是只有ACLK是活动的,但是仍支持WDT,TIMER.

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

同理要清除SR中某一位的话就用 _BIC_SR();
lefeng
2楼-- · 2019-07-25 20:55
进入低功耗模式后,有时候会出现不能唤醒,应该注意些什么

一周热门 更多>