PowerCC32XX.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2019, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
59 #ifndef ti_drivers_power_PowerCC32XX__include
60 #define ti_drivers_power_PowerCC32XX__include
61 
62 #include <stdint.h>
63 #include <ti/drivers/utils/List.h>
64 #include <ti/drivers/Power.h>
65 
66 /* driverlib header files */
67 #include <ti/devices/cc32xx/inc/hw_types.h>
68 #include <ti/devices/cc32xx/driverlib/rom.h>
69 #include <ti/devices/cc32xx/driverlib/rom_map.h>
70 #include <ti/devices/cc32xx/driverlib/pin.h>
71 
72 #ifdef __cplusplus
73 extern "C" {
74 #endif
75 
76 /* latency values were measured with a logic analyzer, and rounded up */
77 
79 #define PowerCC32XX_RESUMETIMELPDS 2500
80 
82 #define PowerCC32XX_TOTALTIMELPDS 20000
83 
85 #define PowerCC32XX_TOTALTIMESHUTDOWN 500000
86 
87 /* Power resources */
88 #define PowerCC32XX_PERIPH_CAMERA 0
89 
91 #define PowerCC32XX_PERIPH_I2S 1
92 
94 #define PowerCC32XX_PERIPH_SDHOST 2
95 
97 #define PowerCC32XX_PERIPH_GSPI 3
98 
100 #define PowerCC32XX_PERIPH_LSPI 4
101 
103 #define PowerCC32XX_PERIPH_UDMA 5
104 
106 #define PowerCC32XX_PERIPH_GPIOA0 6
107 
109 #define PowerCC32XX_PERIPH_GPIOA1 7
110 
112 #define PowerCC32XX_PERIPH_GPIOA2 8
113 
115 #define PowerCC32XX_PERIPH_GPIOA3 9
116 
118 #define PowerCC32XX_PERIPH_GPIOA4 10
119 
121 #define PowerCC32XX_PERIPH_WDT 11
122 
124 #define PowerCC32XX_PERIPH_UARTA0 12
125 
127 #define PowerCC32XX_PERIPH_UARTA1 13
128 
130 #define PowerCC32XX_PERIPH_TIMERA0 14
131 
133 #define PowerCC32XX_PERIPH_TIMERA1 15
134 
136 #define PowerCC32XX_PERIPH_TIMERA2 16
137 
139 #define PowerCC32XX_PERIPH_TIMERA3 17
140 
142 #define PowerCC32XX_PERIPH_DTHE 18
143 
145 #define PowerCC32XX_PERIPH_SSPI 19
146 
148 #define PowerCC32XX_PERIPH_I2CA0 20
149 
151 /* \cond */
152 #define PowerCC32XX_NUMRESOURCES 21 /* Number of resources in database */
153 /* \endcond */
154 
155 /*
156  * Power constraints on the CC32XX device
157  */
158 #define PowerCC32XX_DISALLOW_LPDS 0
159 
161 #define PowerCC32XX_DISALLOW_SHUTDOWN 1
162 
164 /* \cond */
165 #define PowerCC32XX_NUMCONSTRAINTS 2
166 /* \endcond */
167 
168 /*
169  * Power events on the CC32XX device
170  *
171  * Each event must be a power of two, and the event IDs must be sequential
172  * without any gaps.
173  */
174 #define PowerCC32XX_ENTERING_LPDS 0x1
175 
177 #define PowerCC32XX_ENTERING_SHUTDOWN 0x2
178 
180 #define PowerCC32XX_AWAKE_LPDS 0x4
181 
183 /* \cond */
184 #define PowerCC32XX_NUMEVENTS 3
185 /* \endcond */
186 
187 /* Power sleep states */
188 #define PowerCC32XX_LPDS 0x1
190 /* \cond */
191 /* Use by NVIC Register structure */
192 #define PowerCC32XX_numNVICSetEnableRegs 6
193 #define PowerCC32XX_numNVICIntPriority 49
194 /* \endcond */
195 
196 /* \cond */
197 /* Number of pins that can be parked in LPDS */
198 #define PowerCC32XX_NUMPINS 34
199 /* \endcond */
200 
202 typedef struct {
203  uint32_t pin;
205  uint32_t parkState;
208 
210 typedef struct {
221  void (*enterLPDSHookFxn)(void);
228  void (*resumeLPDSHookFxn)(void);
275  void (*wakeupGPIOFxnLPDS)(uint_least8_t argument);
279  uint_least8_t wakeupGPIOFxnLPDSArg;
333  uint32_t numPins;
335 
340 typedef struct {
341  uint32_t vectorTable;
342  uint32_t auxCtrl;
343  uint32_t intCtrlState;
344  uint32_t appInt;
345  uint32_t sysCtrl;
346  uint32_t configCtrl;
347  uint32_t sysPri1;
348  uint32_t sysPri2;
349  uint32_t sysPri3;
350  uint32_t sysHcrs;
351  uint32_t systickCtrl;
352  uint32_t systickReload;
353  uint32_t systickCalib;
354  uint32_t intSetEn[PowerCC32XX_numNVICSetEnableRegs];
355  uint32_t intPriority[PowerCC32XX_numNVICIntPriority];
356 } PowerCC32XX_NVICRegisters;
363 typedef struct {
364  uint32_t msp;
365  uint32_t psp;
366  uint32_t psr;
367  uint32_t primask;
368  uint32_t faultmask;
369  uint32_t basepri;
370  uint32_t control;
371 } PowerCC32XX_MCURegisters;
378 typedef struct {
379  PowerCC32XX_MCURegisters m4Regs;
380  PowerCC32XX_NVICRegisters nvicRegs;
381 } PowerCC32XX_SaveRegisters;
385 typedef enum {
387  PowerCC32XX_NO_PULL_HIZ = PIN_TYPE_STD,
389  PowerCC32XX_WEAK_PULL_UP_STD = PIN_TYPE_STD_PU,
403 
405 typedef enum {
475 
484 typedef struct {
529  void (*wakeupGPIOFxnLPDS)(uint_least8_t argument);
533  uint_least8_t wakeupGPIOFxnLPDSArg;
553 
558 typedef struct {
559  List_List notifyList;
560  uint32_t constraintMask;
561  uint32_t state;
562  uint16_t dbRecords[PowerCC32XX_NUMRESOURCES];
563  bool enablePolicy;
564  bool initialized;
565  uint8_t refCount[PowerCC32XX_NUMRESOURCES];
566  uint8_t constraintCounts[PowerCC32XX_NUMCONSTRAINTS];
567  Power_PolicyFxn policyFxn;
568  uint32_t pinType[PowerCC32XX_NUMPINS];
569  uint16_t pinDir[PowerCC32XX_NUMPINS];
570  uint8_t pinMode[PowerCC32XX_NUMPINS];
571  uint16_t stateAntPin29;
572  uint16_t stateAntPin30;
573  uint32_t pinLockMask;
574  PowerCC32XX_Wakeup wakeupConfig;
575 } PowerCC32XX_ModuleState;
589 
591 void PowerCC32XX_initPolicy(void);
592 
602 
604 PowerCC32XX_ParkState PowerCC32XX_getParkState(PowerCC32XX_Pin pin);
605 
607 void PowerCC32XX_restoreParkState(PowerCC32XX_Pin pin,
608  PowerCC32XX_ParkState state);
609 
611 void PowerCC32XX_setParkState(PowerCC32XX_Pin pin, uint32_t level);
612 
629 void PowerCC32XX_disableIORetention(unsigned long groupFlags);
630 
641 void PowerCC32XX_sleepPolicy(void);
642 
658  int_fast16_t PowerCC32XX_reset(uint_fast16_t resourceId);
659 
660 /* \cond */
661 #define Power_getPerformanceLevel(void) 0
662 #define Power_setPerformanceLevel(level) Power_EFAIL
663 /* \endcond */
664 
665 #ifdef __cplusplus
666 }
667 #endif
668 
669 #endif /* ti_drivers_power_PowerCC32XX__include */
Definition: PowerCC32XX.h:433
Definition: PowerCC32XX.h:409
Definition: PowerCC32XX.h:415
Definition: PowerCC32XX.h:445
Definition: PowerCC32XX.h:461
void PowerCC32XX_configureWakeup(PowerCC32XX_Wakeup *wakeup)
Function configures wakeup for LPDS and shutdown.
Definition: List.h:131
void PowerCC32XX_getWakeup(PowerCC32XX_Wakeup *wakeup)
Function to get wakeup configuration settings.
bool enableNetworkWakeupLPDS
Definition: PowerCC32XX.h:490
Definition: PowerCC32XX.h:435
uint32_t ramRetentionMaskLPDS
SRAM retention mask for LPDS.
Definition: PowerCC32XX.h:305
Definition: PowerCC32XX.h:411
Definition: PowerCC32XX.h:399
Definition: PowerCC32XX.h:447
Definition: PowerCC32XX.h:473
PowerCC32XX_ParkInfo * pinParkDefs
Pointer to an array of pins to be parked during LPDS.
Definition: PowerCC32XX.h:329
Definition: PowerCC32XX.h:421
PowerCC32XX_ParkState PowerCC32XX_getParkState(PowerCC32XX_Pin pin)
Definition: PowerCC32XX.h:395
bool enableNetworkWakeupLPDS
Definition: PowerCC32XX.h:236
bool enableGPIOWakeupLPDS
Definition: PowerCC32XX.h:486
void(* Power_PolicyInitFxn)(void)
Power policy initialization function pointer.
Definition: Power.h:402
bool enableGPIOWakeupLPDS
Definition: PowerCC32XX.h:232
Definition: PowerCC32XX.h:465
Power Manager.
Definition: PowerCC32XX.h:451
Definition: PowerCC32XX.h:453
Definition: PowerCC32XX.h:389
Specify the wakeup sources for LPDS and Shutdown.
Definition: PowerCC32XX.h:484
bool enablePolicy
Definition: PowerCC32XX.h:230
Definition: PowerCC32XX.h:455
Definition: PowerCC32XX.h:463
Definition: PowerCC32XX.h:417
uint32_t wakeupGPIOSourceShutdown
The GPIO sources for wakeup from shutdown.
Definition: PowerCC32XX.h:289
uint32_t parkState
Definition: PowerCC32XX.h:205
Definition: PowerCC32XX.h:387
Definition: PowerCC32XX.h:471
uint32_t pin
Definition: PowerCC32XX.h:203
Definition: PowerCC32XX.h:469
Definition: PowerCC32XX.h:391
Definition: PowerCC32XX.h:449
void PowerCC32XX_sleepPolicy(void)
A reference power policy is provided which can transition the MCU from the active state to one of two...
uint32_t wakeupGPIOSourceLPDS
The GPIO source for wakeup from LPDS.
Definition: PowerCC32XX.h:500
void PowerCC32XX_disableIORetention(unsigned long groupFlags)
Function to disable IO retention and unlock pin groups following exit from Shutdown.
void(* Power_PolicyFxn)(void)
Power policy function pointer.
Definition: Power.h:407
Definition: PowerCC32XX.h:457
Definition: PowerCC32XX.h:419
uint32_t wakeupGPIOTypeShutdown
The GPIO trigger type for wakeup from shutdown.
Definition: PowerCC32XX.h:297
uint32_t wakeupGPIOTypeLPDS
The GPIO trigger type for wakeup from LPDS.
Definition: PowerCC32XX.h:508
Definition: PowerCC32XX.h:425
Definition: PowerCC32XX.h:459
bool keepDebugActiveDuringLPDS
Keep debug interface active during LPDS.
Definition: PowerCC32XX.h:315
Definition: PowerCC32XX.h:397
Used to specify parking of a pin during LPDS.
Definition: PowerCC32XX.h:202
int_fast16_t PowerCC32XX_reset(uint_fast16_t resourceId)
Software reset of a resource.
Power_PolicyFxn policyFxn
Definition: PowerCC32XX.h:214
bool enableGPIOWakeupShutdown
Definition: PowerCC32XX.h:234
void PowerCC32XX_restoreParkState(PowerCC32XX_Pin pin, PowerCC32XX_ParkState state)
PowerCC32XX_Pin
Enumeration of pins that can be parked.
Definition: PowerCC32XX.h:405
uint32_t numPins
Number of pins to be parked during LPDS.
Definition: PowerCC32XX.h:333
Definition: PowerCC32XX.h:437
uint32_t wakeupGPIOSourceShutdown
The GPIO sources for wakeup from shutdown.
Definition: PowerCC32XX.h:543
Definition: PowerCC32XX.h:407
Definition: PowerCC32XX.h:427
void PowerCC32XX_setParkState(PowerCC32XX_Pin pin, uint32_t level)
Definition: PowerCC32XX.h:439
uint32_t wakeupGPIOTypeShutdown
The GPIO trigger type for wakeup from shutdown.
Definition: PowerCC32XX.h:551
Power global configuration.
Definition: PowerCC32XX.h:210
Definition: PowerCC32XX.h:393
Definition: PowerCC32XX.h:429
void PowerCC32XX_initPolicy(void)
Definition: PowerCC32XX.h:467
uint_least8_t wakeupGPIOFxnLPDSArg
The argument to be passed to wakeupGPIOFxnLPDS()
Definition: PowerCC32XX.h:533
Definition: PowerCC32XX.h:443
Definition: PowerCC32XX.h:431
bool enableGPIOWakeupShutdown
Definition: PowerCC32XX.h:488
Definition: PowerCC32XX.h:423
Power_PolicyInitFxn policyInitFxn
Definition: PowerCC32XX.h:212
uint32_t wakeupGPIOSourceLPDS
The GPIO source for wakeup from LPDS.
Definition: PowerCC32XX.h:246
uint_least8_t wakeupGPIOFxnLPDSArg
The argument to be passed to wakeupGPIOFxnLPDS()
Definition: PowerCC32XX.h:279
uint32_t wakeupGPIOTypeLPDS
The GPIO trigger type for wakeup from LPDS.
Definition: PowerCC32XX.h:254
Definition: PowerCC32XX.h:401
uint32_t ioRetentionShutdown
IO retention mask for Shutdown.
Definition: PowerCC32XX.h:323
Definition: PowerCC32XX.h:441
Definition: PowerCC32XX.h:413
Linked List interface for use in drivers.
PowerCC32XX_ParkState
Enumeration of states a pin can be parked in.
Definition: PowerCC32XX.h:385
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale