天天看點

如何配置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進入低功耗模式

繼續閱讀