SAM L10/L11 Power Manager (PM)

Last modified by Microchip on 2023/11/21 22:11

Overview

The Power Manager (PM) controls the Sleep modes and the power domain gating of the device.

Various Sleep modes are provided in order to fit power consumption requirements. This enables the PM to stop unused modules in order to save power. While in active mode, the CPU is executing application code. When the device enters a Sleep mode, program execution is stopped and some modules and clock domains are automatically switched off by the PM according to the Sleep mode. The application code decides which Sleep mode to enter and when. Interrupts from enabled peripherals and all enabled reset sources can restore the device from Sleep mode to Active mode.

The Performance Level (PLx) technique consists of adjusting the regulator output voltage to reduce power consumption. You can select on the fly the performance level configuration that best suits the application.

The power domain gating technique enables the PM to turn off unused power domain supplies individually while keeping others powered up. Based on activity monitoring, power domain gating is managed automatically by hardware without software intervention. This technique is transparent for the application while minimizing static consumption. You can also manually control which power domains will be turned on and off in standby Sleep mode.

The internal state of the logic is retained (retention state) allowing the application context to be kept in non-active states.

Back to top

Features

  • Power management control
    • Sleep modes: Idle, Standby, and Off
    • Performance levels: PL0 and PL2
    • SleepWalking available in Standby mode.
    • Full retention state in Standby mode
  • Power Domain Control
    • Standby Sleep mode with static power gating
    • SleepWalking extension to power gating
    • SRAM sub-blocks retention in Standby mode

Back to top

Block Diagram

SAM L10 Power Manager

Back to top

Principle of Operation

The PM bus clock (CLK_PM_APB) can be enabled and disabled in the Main Clock module. If this clock is disabled, it can only be re-enabled by a system reset.

The interrupt request line is connected to the interrupt controller. Using the PM interrupt requires the interrupt controller to be configured first.

When the CPU is halted in debug mode, the PM continues normal operation. If standby Sleep mode is requested by the system while in debug mode, the power domains are not turned off. As a consequence, power measurements while in debug mode are not relevant.

If off, Sleep mode is requested by the system while in debug mode, the core domains are kept on, and the debug modules are kept running to allow the debugger to access internal registers. When exiting the off mode upon a reset condition, the core domains are reset except the debug logic, allowing you to keep using their current debug session.

Hot plugging in Standby mode is supported except if the Switchable Power Domain (PDSW) is in a retention state. Cold plugging in off mode is supported as long as the reset duration is superior to (Tmin).

Registers with write access can be write-protected optionally by the Peripheral Access Controller (PAC). PAC Write-Protection is not available for the Interrupt Flag (INTFLAG) register. Optional PAC Write-Protection is denoted by the PAC Write-Protection property in each individual register description. Write-Protection does not apply to accesses through an external debugger.

​Refer to the "PM – Power Manager" chapter from the product datasheet to get more details.

Code example

/***
 *** The Example has no copyright and can be used by anyone.
 *** The following example is based on Device File Package
 *** required to compile the macro definitions used.
 *** The Device File Package is avaiblable by downloading Atmel Studio 7.
 ***/

 
/***
 *** In this example the aim is to start a 1s timer.
 *** RTC in calendar mode (mode 2) using periodic event
 *** using the XOSC32K 1KHZ output as closk source
 *** The RTC is also configured to trigger an ADC start conversion every seconds
 *** based on the Periodic Event PEREO7
 ***/

/** Dynamic Power Gating enabled ***/
PM->STDBYCFG.bit.DPGPDSW = PM_STDBYCFG_DPGPDSW_1_Val;
 
/*** 4kB SRAM out of 16kB will be retained in STANDBY ***/
PM->PWCFG.bit.RAMPSWC = PM_PWCFG_RAMPSWC_4KB_Val;
 
/*** Changing Sleep Mode to STANDBY ***/
PM->SLEEPCFG.bit.SLEEPMODE = PM_SLEEPCFG_SLEEPMODE_STANDBY_Val;
/*** Ensure register is written before issuing wfi command ***/
while(PM->SLEEPCFG.bit.SLEEPMODE!=PM_SLEEPCFG_SLEEPMODE_STANDBY_Val);
/*** WAIT FOR IRQ ***/
__DSB();
__WFI();

Back to top