Data Structures | Macros | Typedefs | Functions
PowerCC26XX.h File Reference

Detailed Description

Power manager interface for CC26XX/CC13XX.

============================================================================

The Power header file should be included in an application as follows:

Refer to Power.h for a complete description of APIs.

Implementation

This header file defines the power resources, constraints, events, sleep states and transition latencies for CC26XX/CC13XX.


#include <ti/drivers/dpl/HwiP.h>
#include <ti/drivers/dpl/ClockP.h>
#include <ti/drivers/Power.h>
Include dependency graph for PowerCC26XX.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  PowerCC26XX_Config
 Global configuration structure. More...
 
struct  PowerCC26XX_ModuleState
 PowerCC26XX_ModuleState. More...
 

Macros

#define PowerCC26XX_RESUMETIMESTANDBY   750
 
#define PowerCC26XX_TOTALTIMESTANDBY   1000
 
#define PowerCC26XX_WAKEDELAYSTANDBY   240
 
#define PowerCC26XX_INITIALWAITRCOSC_LF   1000
 
#define PowerCC26XX_RETRYWAITRCOSC_LF   1000
 
#define PowerCC26XX_INITIALWAITXOSC_HF   50
 
#define PowerCC26XX_RETRYWAITXOSC_HF   50
 
#define PowerCC26XX_INITIALWAITXOSC_LF   10000
 
#define PowerCC26XX_RETRYWAITXOSC_LF   5000
 
#define PowerCC26XX_PERIPH_GPT0   0
 
#define PowerCC26XX_PERIPH_GPT1   1
 
#define PowerCC26XX_PERIPH_GPT2   2
 
#define PowerCC26XX_PERIPH_GPT3   3
 
#define PowerCC26XX_PERIPH_SSI0   4
 
#define PowerCC26XX_PERIPH_SSI1   5
 
#define PowerCC26XX_PERIPH_UART0   6
 
#define PowerCC26XX_PERIPH_I2C0   7
 
#define PowerCC26XX_PERIPH_TRNG   8
 
#define PowerCC26XX_PERIPH_GPIO   9
 
#define PowerCC26XX_PERIPH_UDMA   10
 
#define PowerCC26XX_PERIPH_CRYPTO   11
 
#define PowerCC26XX_PERIPH_I2S   12
 
#define PowerCC26XX_PERIPH_RFCORE   13
 
#define PowerCC26XX_XOSC_HF   14
 
#define PowerCC26XX_DOMAIN_PERIPH   15
 
#define PowerCC26XX_DOMAIN_SERIAL   16
 
#define PowerCC26XX_DOMAIN_RFCORE   17
 
#define PowerCC26XX_DOMAIN_SYSBUS   18
 
#define PowerCC26XX_STANDBY   0x1
 
#define PowerCC26XX_RETAIN_VIMS_CACHE_IN_STANDBY   0
 
#define PowerCC26XX_DISALLOW_SHUTDOWN   1
 
#define PowerCC26XX_DISALLOW_STANDBY   2
 
#define PowerCC26XX_DISALLOW_IDLE   3
 
#define PowerCC26XX_NEED_FLASH_IN_IDLE   4
 
#define PowerCC26XX_SWITCH_XOSC_HF_MANUALLY   5
 
#define PowerCC26XX_DISALLOW_XOSC_HF_SWITCHING   6
 
#define PowerCC26XX_ENTERING_STANDBY   0x1
 
#define PowerCC26XX_ENTERING_SHUTDOWN   0x2
 
#define PowerCC26XX_AWAKE_STANDBY   0x4
 
#define PowerCC26XX_AWAKE_STANDBY_LATE   0x8
 
#define PowerCC26XX_XOSC_HF_SWITCHED   0x10
 
#define PowerCC26XX_JTAG_PD_TURNED_ON   0x20
 
#define Power_getPerformanceLevel(void)   0
 
#define Power_setPerformanceLevel(level)   Power_EFAIL
 

Typedefs

typedef struct PowerCC26XX_Config PowerCC26XX_Config
 Global configuration structure. More...
 
typedef struct PowerCC26XX_ModuleState PowerCC26XX_ModuleState
 PowerCC26XX_ModuleState. More...
 

Functions

bool PowerCC26XX_calibrate (unsigned int arg)
 The RC Oscillator (RCOSC) calibration function. More...
 
void PowerCC26XX_doWFI (void)
 The Wait for interrupt (WFI) policy. More...
 
ClockP_Handle PowerCC26XX_getClockHandle (void)
 Get the handle of the Clock object used for scheduling device wakeups. More...
 
uint32_t PowerCC26XX_getXoscStartupTime (uint32_t timeUntilWakeupInMs)
 Get the estimated HF crystal oscillator (XOSC_HF) startup delay, for a given delay from now, until startup is initiated. More...
 
bool PowerCC26XX_injectCalibration (void)
 Explicitly trigger RC oscillator calibration. More...
 
bool PowerCC26XX_noCalibrate (unsigned int arg)
 Function to specify when RCOSC calibration is to be disabled. More...
 
bool PowerCC26XX_isStableXOSC_HF (void)
 Check if the XOSC_HF is stable and ready to be switched to. More...
 
void PowerCC26XX_switchXOSC_HF (void)
 Switch the HF clock source to XOSC_HF. More...
 
void PowerCC26XX_standbyPolicy (void)
 The STANDBY Power Policy. More...
 
void PowerCC26XX_schedulerDisable (void)
 
void PowerCC26XX_schedulerRestore (void)
 

Macro Definition Documentation

§ PowerCC26XX_RESUMETIMESTANDBY

#define PowerCC26XX_RESUMETIMESTANDBY   750

The latency to reserve for resume from STANDBY (usec).

§ PowerCC26XX_TOTALTIMESTANDBY

#define PowerCC26XX_TOTALTIMESTANDBY   1000

The total latency to reserve for entry to and exit from STANDBY (usec).

§ PowerCC26XX_WAKEDELAYSTANDBY

#define PowerCC26XX_WAKEDELAYSTANDBY   240

The initial delay when waking from STANDBY (usec).

§ PowerCC26XX_INITIALWAITRCOSC_LF

#define PowerCC26XX_INITIALWAITRCOSC_LF   1000

The initial wait time (usec) before checking if RCOSC_LF is stable.

§ PowerCC26XX_RETRYWAITRCOSC_LF

#define PowerCC26XX_RETRYWAITRCOSC_LF   1000

The retry wait time (usec) when checking to see if RCOSC_LF is stable.

§ PowerCC26XX_INITIALWAITXOSC_HF

#define PowerCC26XX_INITIALWAITXOSC_HF   50

The initial wait time (usec) before checking if XOSC_HF is stable.

§ PowerCC26XX_RETRYWAITXOSC_HF

#define PowerCC26XX_RETRYWAITXOSC_HF   50

The retry wait time (usec) when checking to see if XOSC_HF is stable.

§ PowerCC26XX_INITIALWAITXOSC_LF

#define PowerCC26XX_INITIALWAITXOSC_LF   10000

The initial wait time (usec) before checking if XOSC_LF is stable.

§ PowerCC26XX_RETRYWAITXOSC_LF

#define PowerCC26XX_RETRYWAITXOSC_LF   5000

The retry wait time (usec) when checking to see if XOSC_LF is stable.

§ PowerCC26XX_PERIPH_GPT0

#define PowerCC26XX_PERIPH_GPT0   0

Resource ID: General Purpose Timer 0

§ PowerCC26XX_PERIPH_GPT1

#define PowerCC26XX_PERIPH_GPT1   1

Resource ID: General Purpose Timer 1

§ PowerCC26XX_PERIPH_GPT2

#define PowerCC26XX_PERIPH_GPT2   2

Resource ID: General Purpose Timer 2

§ PowerCC26XX_PERIPH_GPT3

#define PowerCC26XX_PERIPH_GPT3   3

Resource ID: General Purpose Timer 3

§ PowerCC26XX_PERIPH_SSI0

#define PowerCC26XX_PERIPH_SSI0   4

Resource ID: Synchronous Serial Interface 0

§ PowerCC26XX_PERIPH_SSI1

#define PowerCC26XX_PERIPH_SSI1   5

Resource ID: Synchronous Serial Interface 1

§ PowerCC26XX_PERIPH_UART0

#define PowerCC26XX_PERIPH_UART0   6

Resource ID: UART 0

§ PowerCC26XX_PERIPH_I2C0

#define PowerCC26XX_PERIPH_I2C0   7

Resource ID: I2C 0

§ PowerCC26XX_PERIPH_TRNG

#define PowerCC26XX_PERIPH_TRNG   8

Resource ID: True Random Number Generator

§ PowerCC26XX_PERIPH_GPIO

#define PowerCC26XX_PERIPH_GPIO   9

Resource ID: General Purpose I/Os

§ PowerCC26XX_PERIPH_UDMA

#define PowerCC26XX_PERIPH_UDMA   10

Resource ID: uDMA Controller

§ PowerCC26XX_PERIPH_CRYPTO

#define PowerCC26XX_PERIPH_CRYPTO   11

Resource ID: AES Security Module

§ PowerCC26XX_PERIPH_I2S

#define PowerCC26XX_PERIPH_I2S   12

Resource ID: I2S

§ PowerCC26XX_PERIPH_RFCORE

#define PowerCC26XX_PERIPH_RFCORE   13

Resource ID: RF Core Module

§ PowerCC26XX_XOSC_HF

#define PowerCC26XX_XOSC_HF   14

Resource ID: High Frequency Crystal Oscillator

§ PowerCC26XX_DOMAIN_PERIPH

#define PowerCC26XX_DOMAIN_PERIPH   15

Resource ID: Peripheral Power Domain

§ PowerCC26XX_DOMAIN_SERIAL

#define PowerCC26XX_DOMAIN_SERIAL   16

Resource ID: Serial Power Domain

§ PowerCC26XX_DOMAIN_RFCORE

#define PowerCC26XX_DOMAIN_RFCORE   17

Resource ID: RF Core Power Domain

§ PowerCC26XX_DOMAIN_SYSBUS

#define PowerCC26XX_DOMAIN_SYSBUS   18

Resource ID: System Bus Power Domain

§ PowerCC26XX_STANDBY

#define PowerCC26XX_STANDBY   0x1

The STANDBY sleep state

§ PowerCC26XX_RETAIN_VIMS_CACHE_IN_STANDBY

#define PowerCC26XX_RETAIN_VIMS_CACHE_IN_STANDBY   0

Constraint: VIMS RAM must be retained while in STANDBY

§ PowerCC26XX_DISALLOW_SHUTDOWN

#define PowerCC26XX_DISALLOW_SHUTDOWN   1

Constraint: Disallow a transition to the SHUTDOWN state

§ PowerCC26XX_DISALLOW_STANDBY

#define PowerCC26XX_DISALLOW_STANDBY   2

Constraint: Disallow a transition to the STANDBY sleep state

§ PowerCC26XX_DISALLOW_IDLE

#define PowerCC26XX_DISALLOW_IDLE   3

Constraint: Disallow a transition to the IDLE sleep state

§ PowerCC26XX_NEED_FLASH_IN_IDLE

#define PowerCC26XX_NEED_FLASH_IN_IDLE   4

Constraint: Flash memory needs to enabled during IDLE

§ PowerCC26XX_SWITCH_XOSC_HF_MANUALLY

#define PowerCC26XX_SWITCH_XOSC_HF_MANUALLY   5

Constraint: Prevent power driver from starting an RTOS clock and automatically switching to the XOSC_HF when it is ready. The power driver will turn on the XOSC_HF and return control to the application. The application must poll the status of the XOSC_HF and make sure that it is stable before manually switching to it. If the constraint is released before the application has switched to the XOSC_HF, the application is still responsible for switching to the XOSC_HF. Failing to do so may cause an undefined internal state in the power driver.

§ PowerCC26XX_DISALLOW_XOSC_HF_SWITCHING

#define PowerCC26XX_DISALLOW_XOSC_HF_SWITCHING   6

Constraint: Prevent power driver from switching to XOSC_HF when the crystal is ready. The RTOS clock will be rescheduled to try again in the future. This is a workaround to prevent the flash from being accessed by a bus master other than the CPU while switching to XOSC_HF. This would cause a bus stall. This functionality is only implemented on CC26X0, CC26X0R2, and CC13X0 as the bug was fixed in hardware on later devices.

§ PowerCC26XX_ENTERING_STANDBY

#define PowerCC26XX_ENTERING_STANDBY   0x1

Power event: The device is entering the STANDBY sleep state

§ PowerCC26XX_ENTERING_SHUTDOWN

#define PowerCC26XX_ENTERING_SHUTDOWN   0x2

Power event: The device is entering the SHUTDOWN state

§ PowerCC26XX_AWAKE_STANDBY

#define PowerCC26XX_AWAKE_STANDBY   0x4

Power event: The device is waking up from the STANDBY sleep state

§ PowerCC26XX_AWAKE_STANDBY_LATE

#define PowerCC26XX_AWAKE_STANDBY_LATE   0x8

Power event: The device is waking up from STANDBY (this event is sent later during wakeup, after interrupts are re-enabled)

§ PowerCC26XX_XOSC_HF_SWITCHED

#define PowerCC26XX_XOSC_HF_SWITCHED   0x10

Power event: The high frequency (HF) clock source has been switched to XOSC_HF

§ PowerCC26XX_JTAG_PD_TURNED_ON

#define PowerCC26XX_JTAG_PD_TURNED_ON   0x20
Warning
Note that this power event is only supported by the CC2640R2 device!

The JTAG subsystem on the CC26xx devices is automatically enabled after receiving 8 pulses on the TCK pin. This will cause the device to draw more power in all power modes (Active, Idle, Standby, Shutdown). The PowerCC26XX_JTAG_PD_TURNED_ON power event will let you know when this has happened outside of a debug session due to noise on the pin. This allows the application to do a reset of the device when it's convenient in order disable the JTAG subsystem and conserve power.

In order to turn off the JTAG_PD the application should subscribe to this event. In the callback function the application can call Power_shutdown() and this will force a reset of the device. Alternatively the the callback function can post another event so that the application can reset the device when it's more convenient to do so.

When Power_shutdown() is called when the JTAG subsystem is on, the device will reset and branch to the flash image again, only now with the JTAG_PD turned off, thus the excess power is gone. The wakeup source as read through the SysCtrlResetSourceGet() will in this case return RSTSRC_WAKEUP_FROM_SHUTDOWN.

The power driver will, each time before entering standby, check to see if the JTAG_PD has been turned on after boot. If so, it will notify all subscribers to the PowerCC26XX_JTAG_PD_TURNED_ON event. If the JTAG_PD was turned on during boot, which is the case when using the debugger, the notification will NOT be sent even if the event is registered. This is because when actively developing code with an IDE and emulator, the user typically wants to be able to debug their code through standby without the device resetting.

Summary of when the PowerCC26XX_JTAG_PD_TURNED_ON notification function will be called.

JTAG_PD state Notification function registered Notification function called
Off Don't care No
Turned on during bootDon't care No
Turned on after boot No No
Turned on after boot Yes Yes
Warning
If the PowerCC26XX_JTAG_PD_TURNED_ON event is registered, and the notification callback function calls Power_shutdown() it will not be possible to attach an emulator to a running target. This is becasue the device will reset as soon as the emulator turns on the JTAG_PD as part of the connect sequence.

Code snippet on how to register the notification and the callback function:

void jtagPdTurnedOnCallbackFxn()
{
// Optionally save any critical application information
// gracefullyShutdownApplication();
// Call shutdown, this will reset device, and the application will reboot with JTAG_PD off.
Power_shutdown(NULL, NULL);
// Power_shutdown(...) should never return, device will reset.
}
void taskFxn(UArg a0, UArg a1)
{
...
// Register "JTAG power domain turned on" notification function
// Everytime the device is about to enter standby, the power driver will check
// to see if the JTAG_PD has been turned on after boot. If so, the notification
// function will be called before entering standby...
Power_registerNotify(&jtagPdTurnedOnNotifyObj, PowerCC26XX_JTAG_PD_TURNED_ON, (Fxn)jtagPdTurnedOnCallbackFxn, NULL);
...
}

§ Power_getPerformanceLevel

#define Power_getPerformanceLevel (   void)    0

§ Power_setPerformanceLevel

#define Power_setPerformanceLevel (   level)    Power_EFAIL

Typedef Documentation

§ PowerCC26XX_Config

Global configuration structure.

§ PowerCC26XX_ModuleState

PowerCC26XX_ModuleState.

Power manager state structure. The application must not access any members of this structure!

Function Documentation

§ PowerCC26XX_calibrate()

bool PowerCC26XX_calibrate ( unsigned int  arg)

The RC Oscillator (RCOSC) calibration function.

The function to be used for performing RCOSC calibation. This is the default calibration function, and is specified via the calibrateFxn pointer in the PowerCC26XX_Config structure.

Parameters
argused internally
Returns
used internally

§ PowerCC26XX_doWFI()

void PowerCC26XX_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 PowerCC26XX_Config structure, or dynamically at runtime, via Power_setPolicy().

§ PowerCC26XX_getClockHandle()

ClockP_Handle PowerCC26XX_getClockHandle ( void  )

Get the handle of the Clock object used for scheduling device wakeups.

During initialization, the Power Manager creates a Clock object that a Power Policy can use to schedule device wakeups. This function can be called by a policy function to get the handle of this pre-allocated Clock object.

Returns
The handle of the Clock object

§ PowerCC26XX_getXoscStartupTime()

uint32_t PowerCC26XX_getXoscStartupTime ( uint32_t  timeUntilWakeupInMs)

Get the estimated HF crystal oscillator (XOSC_HF) startup delay, for a given delay from now, until startup is initiated.

Parameters
timeUntilWakeupInMsThe estimated time until the next wakeup event, in units of milliseconds
Returns
The estimated HF crystal oscillator startup latency, in units of microseconds.

§ PowerCC26XX_injectCalibration()

bool PowerCC26XX_injectCalibration ( void  )

Explicitly trigger RC oscillator calibration.

When enabled, RCOSC calibration is normally triggered upon each device wakeup from STANDBY. To trigger more frequent calibration, an application can explicitly call this function, to initiate an immediate calibration cycle.

Returns
true if calibration was actually initiated otherwise false

§ PowerCC26XX_noCalibrate()

bool PowerCC26XX_noCalibrate ( unsigned int  arg)

Function to specify when RCOSC calibration is to be disabled.

This function should be specified as the 'calibrateFxn' in the PowerCC26XX_Config structure when RCOSC calibration is to be disabled.

Note that the reason a function pointer is used here (versus a simple Boolean) is so that references to internal calibration subroutines can be removed, to eliminate pulling the calibration code into the application image; this enables a significant reduction in memory footprint when calibration is disabled.

Parameters
argused internally
Returns
used internally

§ PowerCC26XX_isStableXOSC_HF()

bool PowerCC26XX_isStableXOSC_HF ( void  )

Check if the XOSC_HF is stable and ready to be switched to.

Precondition
Set PowerCC26XX_SWITCH_XOSC_HF_MANUALLY in the early standby wakeup notification.

This function should be called when using the PowerCC26XX_SWITCH_XOSC_HF_MANUALLY power constraint to ensure that the XOSC_HF is stable before switching to it.

See also
PowerCC26XX_switchXOSC_HF()

§ PowerCC26XX_switchXOSC_HF()

void PowerCC26XX_switchXOSC_HF ( void  )

Switch the HF clock source to XOSC_HF.

Precondition
PowerCC26XX_switchXOSC_HF() returns true.

This function should only be called when using the PowerCC26XX_SWITCH_XOSC_HF_MANUALLY power constraint after ensuring the XOSC_HF is stable. If the driver cannot switch to the XOSC_HF despite the crystal being stable, a clock will be scheduled in the future and the callback will try to switch again.

See also
PowerCC26XX_isStableXOSC_HF()

§ PowerCC26XX_standbyPolicy()

void PowerCC26XX_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 PowerCC26XX_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 PowerCC26XX_Config structure, or specified at runtime with Power_setPolicy()), and the Power Policy must be enabled (either via 'enablePolicy' in the PowerCC26XX_Config structure, or via a call to Power_enablePolicy() at runtime).

§ PowerCC26XX_schedulerDisable()

void PowerCC26XX_schedulerDisable ( void  )

§ PowerCC26XX_schedulerRestore()

void PowerCC26XX_schedulerRestore ( void  )
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale