天天看点

如何配置C2000进入低功耗模式

版权声明:欢迎转载,请注明出处,谢谢!

  1. 简介

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

    如何配置C2000进入低功耗模式
  2. 低功耗模式分析

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

    如何配置C2000进入低功耗模式
    在本文的配置中是将芯片设置为STANDBY模式,由外部GPIO唤醒MCU退出低功耗。
  3. 退出休眠模式的方法

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

    如何配置C2000进入低功耗模式
  4. 代码配置流程(以下均以STANDBY为例)
  1. 配置WAKEINT中断服务程序
EALLOW;	
	PieVectTable.WAKEINT = &WakeIntISR;
		EDIS;
           
PieCtrlRegs.PIEIER1.bit.INTx8 = 1;		// Enable the WAKEINT interrupt in the PIE module
		PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
		IER |= M_INT1;
           
interrupt void WakeIntISR(void)
	{
		EALLOW;
		SysCtrlRegs.WDCR = 0x002F;  			//enable watchdog
		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;
	}
           
  1. 配置进入低功耗的模式和唤醒引脚
EALLOW;
	if(SysCtrlRegs.PLLSTS.bit.MCLKSTS != 1) 	// Only enter low power mode 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;
           
  1. 进入低功耗之前的准备工作

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

    •进入低功耗函数

//----------------------------------------------------------
void EnterLPM(void)
{
	if(SysCtrlRegs.PLLSTS.bit.MCLKSTS != 1) 	// Only enter low power mode when PLL is not in limp mode.
	{
		EALLOW;
		FlashRegs.FPWR.all = 0x0001;			// Pump and bank standby
	    	SysCtrlRegs.WDCR= 0x006F; 	     //Disable Watchdog
		EDIS;
		asm(" RPT #10 || NOP");
		asm(" IDLE");
	}
}
           
  1. 等外部信号触发芯片唤醒后,首先会执行WakeIntISR函数,将flash和watchdog使能。随后PC重新从EnterLPM函数后面开始执行。
/*设置系统参数准备进入低功耗模式,除了WAKEINT之外的中断disable*/
EnterLPM();
/*系统参数重新初始化,其他中断enable*/
           
  1. 注意事项
  1. 当C2000进入低功耗模式不会影响输出引脚的状态;
  2. 当处于limp mode下,不能将C2000设置为HALT低功耗模式,所以在进入低功耗都会对PLLSTS[MCLKSTS] bit = 0进行判断;
  3. 为了获得最佳的低功耗效果,需要将flash和OTP通用设置到sleep/standby模式,所以也推荐将WakeIntISR和EnterLPM函数放置到RAM中运行。

请关注公众号【C2000小百科】,更多内容将会在公众号中发布。

如何配置C2000进入低功耗模式

继续阅读