2199|0

6607

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

配置C2000进入低功耗模式的方法 [复制链接]

1. 简介

在很多应用中,需要在开发设计过程中对MCU/DSP功耗进行软硬件的优化。一般来说,关闭未使用的外设时钟、外围电路优化等措施能够降低一部分的系统功耗,但是最直接的方式就是配置MCU进入低功耗模式。以F28035为例,datasheet中可以看到在正常运行情况下电流消耗的典型值为114+14mA(相比市面上很多MCU这个功耗是偏高的)。而在STANDBY模式下功耗只有4mA左右。

2. 低功耗模式分析

从上图中我们可以看出,在不同的低功耗模式下,芯片的电流消耗是不同的。我们可以根据功耗需求和唤醒方式去选择进入哪一种低功耗模式。通过LPMCR0寄存器配置好模式,通过执行IDLE指令(asm(" IDLE"))进入休眠。

在本文的配置中是将芯片设置为STANDBY模式,由外部GPIO唤醒MCU退出低功耗。

3. 退出休眠模式的方法

最常见的退出低功耗模式的方式是由外部GPIOA去唤醒。以STANDBY为例,需要外部唤醒信号给一个tw(WAKE-INT)时间的低电平信号,具体维持时间可以参考数据手册。

4. 代码配置流程


配置WAKEINT中断服务程序

     EALLOW;      

     PieVectTable.WAKEINT= &WakeIntISR;

             EDIS;

              PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // Enablethe WAKEINT interrupt in the PIE module

              PieCtrlRegs.PIEACK.all|= PIEACK_GROUP1;

               IER|= M_INT1;

              interrupt void WakeIntISR(void)

               {

                      EALLOW;  

                      SysCtrlRegs.WDCR =0x002F;  //enablewatchdog

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

                      EDIS;

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

                       //Acknowledge interrupt to recieve more interrupts from PIE group 1

                       PieCtrlRegs.PIEACK.all =PIEACK_GROUP1;

                       EINT;

                }

配置进入低功耗的模式和唤醒引脚

                EALLOW;

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

                 {

                                   SysCtrlRegs.LPMCR0.bit.LPM= 0x0001;          // LPM mode = Standby

                  //               SysCtrlRegs.LPMCR0.bit.LPM = 0x0002;    // LPM mode = Halt

                 }

                  GpioIntRegs.GPIOLPMSEL.bit.GPIO19= 1;      //Choose GPIO19 pin for wakeup

                  EDIS;

进入低功耗之前的准备工作

   ·首先需要disable将除了WAKEINT之外的中断

   ·进入低功耗函数

       //----------------------------------------------------------

       void EnterLPM(void)

      {

          if(SysCtrlRegs.PLLSTS.bit.MCLKSTS != 1) 

          {

              EALLOW;

              FlashRegs.FPWR.all = 0x0001; // Pump andbank standby

               SysCtrlRegs.WDCR= 0x006F;   //Disable Watchdog

              EDIS;

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

              asm(" IDLE");

           }

      }

等外部信号触发芯片唤醒后,首先会执行WakeIntISR函数,将flash和watchdog使能。随后PC重新从EnterLPM函数后面开始执行。

     /*设置系统参数准备进入低功耗模式,除了WAKEINT之外的中断disable*/

     EnterLPM();

     /*系统参数重新初始化,其他中断enable*/

 

5. 注意事项

  1)     当C2000进入低功耗模式不会影响输出引脚的状态;

       2)     当处于limp mode下,不能将C2000设置为HALT低功耗模式,所以在进入低功耗都会对PLLSTS[MCLKSTS] bit = 0进行判断;

       3)     为了获得最佳的低功耗效果,需要将flash和OTP通用设置到sleep/standby模式,所以也推荐将WakeIntISR和EnterLPM函数放置到RAM中运行。

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表