EFM32片内外设--EMU之关闭RAM

大家都说EFM32是针对低功耗的应用而开发的。不光光体现在宣传手册上的指标,那里有几种低功耗,每种低功耗的功耗等等的数据这些大体上的数据。在一些细小的方面,EFM32确实也为了节省功耗,做了一些特殊的处理。

今天和大家说的就是,EFM32甚至可以将部分的RAM关闭,而省出那么一点维持RAM数据的电流。虽然维持RAM的电流在datasheet上没有具体的说明,也没有数据,但是可想而知,关闭总归还是会省出一点的。^_^.

根据Reference manual的描述,EFM32内部的RAM是被分块的。除第一块不能关闭之外,其他的块是可以单独关闭的。分块的大小和EFM32的型号有关。由于Tiny gecko的内部RAM最大只有4KB,因此tiny gecko没有这部分的功能。而Geck的RAM,每块大小为4K,而Leopard gecko和Giant gecko的RAM,每块为32kB。下面就来看下具体如何操作,以及测试的结果。

注意点:

1.RAM电源关闭之后,只有Reset才能重新上电。

2.栈。小心你的栈如果是用到了后面的那几个block,然后你有关闭了他们的电源的话,嘻嘻。。会有HardFault哦。。

硬件准备:G STK

软件准备:由于关闭1个block,效果会不太明显,因此关闭了3个block的RAM。

例程:

#include <stdint.h>
#include <stdbool.h>
#include "efm32.h"
#include "efm32_chip.h"
#include "efm32_emu.h"

/* LED driver */
#include "leds.h"

volatile uint32_t msTicks; /* counts 1ms timeTicks */

/**************************************************************************//**
* @brief SysTick_Handler
* Interrupt Service Routine for system tick counter
*****************************************************************************/
void SysTick_Handler(void)
{
  msTicks++;       /* increment counter necessary in Delay()*/
}

/**************************************************************************//**
* @brief Delays number of msTick Systicks (typically 1 ms)
* @param dlyTicks Number of ticks to delay
*****************************************************************************/
void Delay(uint32_t dlyTicks)
{
  uint32_t curTicks;

  curTicks = msTicks;
  while ((msTicks - curTicks) < dlyTicks) ;
}

/**************************************************************************//**
* @brief  Main function
*****************************************************************************/
int main(void)
{
  int count = 0;
  /* Chip errata */
  CHIP_Init();

  /* Ensure core frequency has been updated */
  SystemCoreClockUpdate();
  /* Setup SysTick Timer for 1 msec interrupts  */
  if (SysTick_Config(SystemCoreClock / 100)) while (1) ;

  EMU->MEMCTRL = 0x07;
  while (1)
  {
    EMU_EnterEM2(false);
  }
}

结果:正常情况下,耗电量为567nA,关闭之后,454nA。这个结果仅供参考。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值