Power manager interface for CC23X0 devices.
============================================================================
The Power header file should be included in an application by including the top level header file as follows:
Refer to Power.h for a complete description of APIs.
This header file defines the power resources, constraints, events, sleep states and transition latencies for CC23X0.
#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/dpl/ClockP.h>
#include <ti/drivers/Power.h>
#include <ti/devices/DeviceFamily.h>
#include <DeviceFamily_constructPath(inc/hw_pmctl.h)>
#include <DeviceFamily_constructPath(inc/hw_clkctl.h)>
#include <DeviceFamily_constructPath(inc/hw_lrfddbell.h)>
#include <DeviceFamily_constructPath(inc/hw_memmap.h)>
#include <DeviceFamily_constructPath(inc/hw_types.h)>
#include <DeviceFamily_constructPath(driverlib/pmctl.h)>
Go to the source code of this file.
Data Structures | |
struct | PowerCC23X0_Config |
Global configuration structure. More... | |
Macros | |
#define | PowerCC23X0_RESUMETIMESTANDBY 400 |
#define | PowerCC23X0_TOTALTIMESTANDBY 500 |
#define | PowerCC23X0_WAKEDELAYSTANDBY 185 |
#define | PowerCC23X0_HFXT_THRESHOLD_TEMP_DEFAULT (-40) |
#define | PowerLPF3_PERIPH_GPIO (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_GPIO_S) |
#define | PowerLPF3_PERIPH_UART0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_UART0_S) |
#define | PowerLPF3_PERIPH_I2C0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_I2C0_S) |
#define | PowerLPF3_PERIPH_SPI0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_SPI0_S) |
#define | PowerLPF3_PERIPH_ADC0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_ADC0_S) |
#define | PowerLPF3_PERIPH_AES (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LAES_S) |
#define | PowerLPF3_PERIPH_DMA (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_DMA_S) |
#define | PowerLPF3_PERIPH_LGPT0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT0_S) |
#define | PowerLPF3_PERIPH_LGPT1 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT1_S) |
#define | PowerLPF3_PERIPH_LGPT2 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT2_S) |
#define | PowerLPF3_PERIPH_LGPT3 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT3_S) |
#define | PowerLPF3_PERIPH_LFRD_TRC (PowerCC23X0_PERIPH_GROUP_LRFD | LRFDDBELL_CLKCTL_TRC_S) |
#define | PowerLPF3_PERIPH_LFRD_S2RRAM (PowerCC23X0_PERIPH_GROUP_LRFD | LRFDDBELL_CLKCTL_S2RRAM_S) |
#define | PowerLPF3_STANDBY 0x1 |
#define | PowerLPF3_DISALLOW_SHUTDOWN 0 |
#define | PowerLPF3_DISALLOW_STANDBY 1 |
#define | PowerLPF3_DISALLOW_IDLE 2 |
#define | PowerLPF3_NEED_FLASH_IN_IDLE 3 |
#define | PowerLPF3_ENTERING_STANDBY (1 << 0) |
#define | PowerLPF3_ENTERING_SHUTDOWN (1 << 1) |
#define | PowerLPF3_AWAKE_STANDBY (1 << 2) |
#define | PowerLPF3_HFXT_AVAILABLE (1 << 3) |
#define | PowerLPF3_LFCLK_SWITCHED (1 << 4) |
Enumerations | |
enum | PowerLPF3_ResetReason { PowerLPF3_RESET_SHUTDOWN_IO = PMCTL_RESET_SHUTDOWN_IO, PowerLPF3_RESET_SHUTDOWN_SWD = PMCTL_RESET_SHUTDOWN_SWD, PowerLPF3_RESET_WATCHDOG = PMCTL_RESET_WATCHDOG, PowerLPF3_RESET_SYSTEM = PMCTL_RESET_SYSTEM, PowerLPF3_RESET_CPU = PMCTL_RESET_CPU, PowerLPF3_RESET_LOCKUP = PMCTL_RESET_LOCKUP, PowerLPF3_RESET_TSD = PMCTL_RESET_TSD, PowerLPF3_RESET_SWD = PMCTL_RESET_SWD, PowerLPF3_RESET_LFXT = PMCTL_RESET_LFXT, PowerLPF3_RESET_VDDR = PMCTL_RESET_VDDR, PowerLPF3_RESET_VDDS = PMCTL_RESET_VDDS, PowerLPF3_RESET_PIN = PMCTL_RESET_PIN, PowerLPF3_RESET_POR = PMCTL_RESET_POR, PowerLPF3_RESET_SHUTDOWN_IO = PMCTL_RESET_SHUTDOWN_IO, PowerLPF3_RESET_SHUTDOWN_SWD = PMCTL_RESET_SHUTDOWN_SWD, PowerLPF3_RESET_WATCHDOG = PMCTL_RESET_WATCHDOG, PowerLPF3_RESET_SYSTEM = PMCTL_RESET_SYSTEM, PowerLPF3_RESET_CPU = PMCTL_RESET_CPU, PowerLPF3_RESET_LOCKUP = PMCTL_RESET_LOCKUP, PowerLPF3_RESET_TSD = PMCTL_RESET_TSD, PowerLPF3_RESET_SWD = PMCTL_RESET_SWD, PowerLPF3_RESET_LFXT = PMCTL_RESET_LFXT, PowerLPF3_RESET_VDDR = PMCTL_RESET_VDDR, PowerLPF3_RESET_VDDS = PMCTL_RESET_VDDS, PowerLPF3_RESET_PIN = PMCTL_RESET_PIN, PowerLPF3_RESET_POR = PMCTL_RESET_POR } |
Reasons the device has booted or rebooted. More... | |
Functions | |
void | PowerCC23X0_doWFI (void) |
The wait for interrupt (WFI) policy. More... | |
static PowerLPF3_ResetReason | PowerLPF3_getResetReason (void) |
Returns the reason for the most recent reset or wakeup. More... | |
static void | PowerLPF3_releaseLatches (void) |
Unlatch all IOs. More... | |
void | PowerCC23X0_standbyPolicy (void) |
The STANDBY Power Policy. More... | |
void | PowerLPF3_selectLFOSC (void) |
Select LFOSC as LFCLK source. More... | |
void | PowerLPF3_selectLFXT (void) |
Select LFXT as LFCLK source. More... | |
void | PowerLPF3_initHFXTCompensation (int32_t P0, int32_t P1, int32_t P2, int32_t P3, uint8_t shift, bool fcfgInsertion) |
Initialise HFXT temperature compensation coefficients. More... | |
void | PowerLPF3_enableHFXTCompensation (int16_t tempThreshold, int16_t tempDelta) |
Enable HFXT temperature compensation. More... | |
void | PowerLPF3_disableHFXTCompensation (void) |
Disable HFXT temperature compensation. More... | |
void | PowerCC23X0_schedulerDisable (void) |
void | PowerCC23X0_schedulerRestore (void) |
#define PowerCC23X0_RESUMETIMESTANDBY 400 |
The latency to reserve for resume from STANDBY (usec).
#define PowerCC23X0_TOTALTIMESTANDBY 500 |
The total latency to reserve for entry to and exit from STANDBY (usec).
#define PowerCC23X0_WAKEDELAYSTANDBY 185 |
The initial delay when waking from STANDBY (usec).
#define PowerCC23X0_HFXT_THRESHOLD_TEMP_DEFAULT (-40) |
#define PowerLPF3_PERIPH_GPIO (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_GPIO_S) |
Resource ID: General Purpose I/O
#define PowerLPF3_PERIPH_UART0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_UART0_S) |
Resource ID: UART 0
#define PowerLPF3_PERIPH_I2C0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_I2C0_S) |
Resource ID: I2C 0
#define PowerLPF3_PERIPH_SPI0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_SPI0_S) |
Resource ID: SPI 0
#define PowerLPF3_PERIPH_ADC0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_ADC0_S) |
Resource ID: ADC
#define PowerLPF3_PERIPH_AES (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LAES_S) |
Resource ID: AES Security Module
#define PowerLPF3_PERIPH_DMA (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_DMA_S) |
Resource ID: uDMA Controller
#define PowerLPF3_PERIPH_LGPT0 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT0_S) |
Resource ID: General Purpose Timer 0
#define PowerLPF3_PERIPH_LGPT1 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT1_S) |
Resource ID: General Purpose Timer 1
#define PowerLPF3_PERIPH_LGPT2 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT2_S) |
Resource ID: General Purpose Timer 2
#define PowerLPF3_PERIPH_LGPT3 (PowerCC23X0_PERIPH_GROUP_CLKCTL0 | CLKCTL_DESCEX0_LGPT3_S) |
Resource ID: General Purpose Timer 3
#define PowerLPF3_PERIPH_LFRD_TRC (PowerCC23X0_PERIPH_GROUP_LRFD | LRFDDBELL_CLKCTL_TRC_S) |
Resource ID: LRFD Tracer
#define PowerLPF3_PERIPH_LFRD_S2RRAM (PowerCC23X0_PERIPH_GROUP_LRFD | LRFDDBELL_CLKCTL_S2RRAM_S) |
Resource ID: LRFD S2R RAM
#define PowerLPF3_STANDBY 0x1 |
The STANDBY sleep state
#define PowerLPF3_DISALLOW_SHUTDOWN 0 |
Constraint: Disallow a transition to the SHUTDOWN state
#define PowerLPF3_DISALLOW_STANDBY 1 |
Constraint: Disallow a transition to the STANDBY sleep state
#define PowerLPF3_DISALLOW_IDLE 2 |
Constraint: Disallow a transition to the IDLE sleep state
#define PowerLPF3_NEED_FLASH_IN_IDLE 3 |
Constraint: Flash memory needs to enabled during IDLE
#define PowerLPF3_ENTERING_STANDBY (1 << 0) |
Power event: The device is entering the STANDBY sleep state
#define PowerLPF3_ENTERING_SHUTDOWN (1 << 1) |
Power event: The device is entering the SHUTDOWN state
#define PowerLPF3_AWAKE_STANDBY (1 << 2) |
Power event: The device is waking up from the STANDBY sleep state
#define PowerLPF3_HFXT_AVAILABLE (1 << 3) |
Power event: The high frequency (HF) crystal oscillator is now available for use (HFXT) by the digital domain
#define PowerLPF3_LFCLK_SWITCHED (1 << 4) |
Power event: The system has switched to the low frequency clock source configured in CCFG
Reasons the device has booted or rebooted.
void PowerCC23X0_doWFI | ( | void | ) |
The wait for interrupt (WFI) policy.
This is a lightweight Power Policy which simply invokes CPU wait for interrupt.
This policy can be selected statically via the policyFxn pointer in the PowerCC23X0_Config structure, or dynamically at runtime, via Power_setPolicy().
|
inlinestatic |
Returns the reason for the most recent reset or wakeup.
|
inlinestatic |
Unlatch all IOs.
This function releases the latches on all frozen IOs. This function should be called after waking up from shutdown and reconfiguring the IO state so as not to cause glitches.
References PowerCC23X0_schedulerDisable(), PowerCC23X0_schedulerRestore(), PowerCC23X0_standbyPolicy(), PowerLPF3_disableHFXTCompensation(), PowerLPF3_enableHFXTCompensation(), PowerLPF3_initHFXTCompensation(), PowerLPF3_selectLFOSC(), and PowerLPF3_selectLFXT().
void PowerCC23X0_standbyPolicy | ( | void | ) |
The STANDBY Power Policy.
This is an agressive Power Policy, which considers active constraints, sleep state transition latencies, and time until the next scheduled work, and automatically transitions the device into the deepest sleep state possible.
The first goal is to enter STANDBY; if that is not appropriate given current conditions (e.g., the sleep transition latency is greater greater than the time until the next scheduled Clock event), then the secondary goal is the IDLE state; if that is disallowed (e.g., if the PowerLPF3_DISALLOW_IDLE constraint is declared), then the policy will fallback and simply invoke WFI, to clock gate the CPU until the next interrupt.
In order for this policy to run, it must be selected as the Power Policy (either by being specified as the 'policyFxn' in the PowerCC23X0_Config structure, or specified at runtime with Power_setPolicy()), and the Power Policy must be enabled (either via 'enablePolicy' in the PowerCC23X0_Config structure, or via a call to Power_enablePolicy() at runtime).
Referenced by PowerLPF3_releaseLatches().
void PowerLPF3_selectLFOSC | ( | void | ) |
Select LFOSC as LFCLK source.
Turn on the LFOSC and choose it as LFCLK source. Once LFCLK has switched, the PowerLPF3_LFCLK_SWITCHED notification will be issued and all subscribers to this event will be notified.
Referenced by PowerLPF3_releaseLatches().
void PowerLPF3_selectLFXT | ( | void | ) |
Select LFXT as LFCLK source.
Turn on the LFXT and choose it as LFCLK source. Once LFCLK has switched, the PowerLPF3_LFCLK_SWITCHED notification will be issued and all subscribers to this event will be notified.
Referenced by PowerLPF3_releaseLatches().
void PowerLPF3_initHFXTCompensation | ( | int32_t | P0, |
int32_t | P1, | ||
int32_t | P2, | ||
int32_t | P3, | ||
uint8_t | shift, | ||
bool | fcfgInsertion | ||
) |
Initialise HFXT temperature compensation coefficients.
Initialise the parameters used for HFXT temperature coefficients. They approximate the ppm offset of the HFXT frequency with the following polynomial as a function of temperature (degC), where P_3 = P3 / 2^shift, P_2 = P2 / 2^shift, etc.. ppm(T) = P_3*T^3 + P_2*T^2 + P_1*T + P_0
[in] | P0 | 0th-order coefficient, multiplied by 2^shift |
[in] | P1 | 1st-order coefficient, multiplied by 2^shift |
[in] | P2 | 2nd-order coefficient, multiplied by 2^shift |
[in] | P3 | 3rd-order coefficient, multiplied by 2^shift |
[in] | shift | Shift-value for scaling fixed-point coefficients |
[in] | fcfgInsertion | Boolean used to indicate presence of HFXT FCFG data. |
Referenced by PowerLPF3_releaseLatches().
void PowerLPF3_enableHFXTCompensation | ( | int16_t | tempThreshold, |
int16_t | tempDelta | ||
) |
Enable HFXT temperature compensation.
Enable automatic compensation for temperature-based frequency-drift of HFXT
This function should only be called once, but can be invoked again if PowerLPF3_enableHFXTCompensation has been called
[in] | tempThreshold | Threshold above which temperature compensation will be performed. This can be useful to save power consumption if HFXT performance is acceptable at low temperatures, and only required at high temperatures. If the threshold is set to for example 80 degrees, then the first compensation will occur once the temperature reaches 81 degrees. Units in degrees Celsius. |
[in] | tempDelta | Delta describing how much the temperature can drift before compensation is applied. If compensation is performed at 81 degrees, and the delta is set to 5, then a re-compensation is performed at either 76 degrees or 86 degrees, depending on which temperature state occurs first. Units in degrees Celsius. |
Referenced by PowerLPF3_releaseLatches().
void PowerLPF3_disableHFXTCompensation | ( | void | ) |
Disable HFXT temperature compensation.
Disable automatic compensation for temperature-based frequency-drift of HFXT
Referenced by PowerLPF3_releaseLatches().
void PowerCC23X0_schedulerDisable | ( | void | ) |
Referenced by PowerLPF3_releaseLatches().
void PowerCC23X0_schedulerRestore | ( | void | ) |
Referenced by PowerLPF3_releaseLatches().