C2000 进入低功耗所需的配置

来源:互联网 发布:品茗软件怎么用 编辑:程序博客网 时间:2024/05/24 15:42

1.     进入低功耗的条件:如果外部频率输入信号持续一段时间为0,那么F2802x进入低功耗;

2.     进入低功耗之前,需要进入如下操作:

a.     将其他中断UART/ADCPWM)中断disable

                   EALLOW;

                   EPwm2Regs.ETSEL.bit.INTEN  =0;        // disable EPWM1INT generation

                   SciaRegs.SCICTL2.bit.RXBKINTENA =0;//disableRXRDY/BRKDT interrupt

                   EDIS;

 

                   PieCtrlRegs.PIEIER9.bit.INTx1=0;       // PIE Group 9,INT1

                   PieCtrlRegs.PIEIER9.bit.INTx2=0;       // PIE Group 9,INT2

                   PieCtrlRegs.PIEIER3.bit.INTx2 =0;            // EPWM2_INT

      PieCtrlRegs.PIEACK.all =PIEACK_GROUP1| PIEACK_GROUP3 | PIEACK_GROUP9;

3.     调用中断进入函数,为了获得最优化的功耗,需要将Flash设置为休眠模式,所以中断进入函数是放在RAM里面执行的。

if(SysCtrlRegs.PLLSTS.bit.MCLKSTS != 1)       // Only enter lowpower mode when PLL is not in limp mode.

                   {

                        EALLOW;

                        FlashRegs.FPWR.all =0x0001;                  //Pump and bank standby

 

                        //DisableWatchdog

                        SysCtrlRegs.WDCR= 0x006F;

                         EDIS;

      

 

                         asm(" RPT #10 ||NOP");

                        IDLE_EN;

             }

 

4.     中断复位程序

interrupt void WakeIntISR(void)

{

       // Enable thewatchdog

       EALLOW;

       SysCtrlRegs.WDCR = 0x002F;

       FlashRegs.FPWR.all =0x0003;                  //Pump and bank active

       EDIS;

 

       asm(" RPT #15 ||NOP");

 

       // Acknowledgeinterrupt to recieve more interrupts from PIE group 1

       PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

       EINT;

}

5.     低功耗唤醒以后,需要重新对系统参数进行初始化,另外,需要将disable的中断重新打开。如下所示。

                   EALLOW;

                   EPwm2Regs.ETSEL.bit.INTEN  =1;        // Enable EPWM1INT generation

                   SciaRegs.SCICTL2.bit.RXBKINTENA =1;//EnableRXRDY/BRKDT interrupt

                   EDIS;

                   //Turn on all interrupts

                   PieCtrlRegs.PIEIER9.bit.INTx1=1;       // PIE Group 9,INT1

                   PieCtrlRegs.PIEIER9.bit.INTx2=1;      // PIE Group 9, INT2

                   PieCtrlRegs.PIEIER3.bit.INTx2 =1;            // EPWM2_INT

                   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1 | PIEACK_GROUP3 | PIEACK_GROUP9;