CC23x0R5DriverLibrary
pmctl.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Filename: pmctl.h
3  *
4  * Description: Defines and prototypes for the PMCTL module.
5  *
6  * Copyright (c) 2022-2024 Texas Instruments Incorporated
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1) Redistributions of source code must retain the above copyright notice,
12  * this list of conditions and the following disclaimer.
13  *
14  * 2) Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * 3) Neither the name of the copyright holder nor the names of its
19  * contributors may be used to endorse or promote products derived from this
20  * software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
26  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  ******************************************************************************/
35 
36 #ifndef __PMCTL_H__
37 #define __PMCTL_H__
38 
39 //*****************************************************************************
40 //
45 //
46 //*****************************************************************************
47 
48 //*****************************************************************************
49 //
50 // If building with a C++ compiler, make all of the definitions in this header
51 // have a C binding.
52 //
53 //*****************************************************************************
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57 
58 #include <stdbool.h>
59 #include <stdint.h>
60 
61 #include "../inc/hw_types.h"
62 #include "../inc/hw_memmap.h"
63 #include "../inc/hw_pmctl.h"
64 
65 #include "../cmsis/cc23x0r5.h"
66 #include "../cmsis/core/core_cm0plus.h"
67 
68 //*****************************************************************************
69 //
70 // API Functions and prototypes
71 //
72 //*****************************************************************************
73 
74 //*****************************************************************************
76 
77 //*****************************************************************************
79 #define PMCTL_RESET_SHUTDOWN_IO (PMCTL_RSTSTA_SDDET | PMCTL_RSTSTA_IOWUSD)
80 #define PMCTL_RESET_SHUTDOWN_SWD PMCTL_RSTSTA_SDDET
82 #define PMCTL_RESET_WATCHDOG (PMCTL_RSTSTA_SYSSRC_WDTEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
84 #define PMCTL_RESET_SYSTEM (PMCTL_RSTSTA_SYSSRC_SYSRSTEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
86 #define PMCTL_RESET_CPU (PMCTL_RSTSTA_SYSSRC_CPURSTEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
88 #define PMCTL_RESET_LOCKUP (PMCTL_RSTSTA_SYSSRC_LOCKUPEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
90 #define PMCTL_RESET_ANALOG_FSM_TIMEOUT (PMCTL_RSTSTA_SYSSRC_AFSMEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
92 #define PMCTL_RESET_ANALOG_ERROR (PMCTL_RSTSTA_SYSSRC_AERREV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
94 #define PMCTL_RESET_DIGITAL_ERROR (PMCTL_RSTSTA_SYSSRC_DERREV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
96 #define PMCTL_RESET_SWD (PMCTL_RSTSTA_SYSSRC_SWDRSTEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
98 #define PMCTL_RESET_LFXT (PMCTL_RSTSTA_SYSSRC_LFLOSSEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
100 #define PMCTL_RESET_TSD (PMCTL_RSTSTA_TSDEV | PMCTL_RSTSTA_RESETSRC_PINRESET)
102 #define PMCTL_RESET_VDDR PMCTL_RSTSTA_RESETSRC_VDDRLOSS
104 #define PMCTL_RESET_VDDS PMCTL_RSTSTA_RESETSRC_VDDSLOSS
106 #define PMCTL_RESET_PIN PMCTL_RSTSTA_RESETSRC_PINRESET
108 #define PMCTL_RESET_POR PMCTL_RSTSTA_RESETSRC_PWRON
110 
111 
112 //*****************************************************************************
114 
115 //*****************************************************************************
117 #define PMCTL_VOLTAGE_REGULATOR_DCDC PMCTL_VDDRCTL_SELECT_DCDC
118 #define PMCTL_VOLTAGE_REGULATOR_GLDO PMCTL_VDDRCTL_SELECT_GLDO
120 
121 
122 //*****************************************************************************
123 //
145 //
146 //*****************************************************************************
148 {
149  return HWREG(PMCTL_BASE + PMCTL_O_RSTSTA);
150 }
151 
152 //*****************************************************************************
153 //
160 //
161 //*****************************************************************************
163 {
164  // Disable interrupts
165  __disable_irq();
166 
167  // Write reset register
168  HWREG(PMCTL_BASE + PMCTL_O_RSTCTL) |= PMCTL_RSTCTL_SYSRST_SET;
169 
170  // Should never return from this function
171  while (1) {}
172 }
173 
174 //*****************************************************************************
175 //
186 //
187 //*****************************************************************************
189 {
190  // Write to VDDR regulator register while preserving other configuration
191  // fields
192  uint32_t tmp = HWREG(PMCTL_BASE + PMCTL_O_VDDRCTL) & ~PMCTL_VDDRCTL_SELECT_M;
193  HWREG(PMCTL_BASE + PMCTL_O_VDDRCTL) = tmp | regulator;
194 }
195 
196 //*****************************************************************************
197 //
205 //
206 //*****************************************************************************
208 {
209  return (HWREG(PMCTL_BASE + PMCTL_O_VDDRCTL) & PMCTL_VDDRCTL_SELECT_M);
210 }
211 
212 //*****************************************************************************
213 //
214 // Mark the end of the C bindings section for C++ compilers.
215 //
216 //*****************************************************************************
217 #ifdef __cplusplus
218 }
219 #endif
220 
221 //*****************************************************************************
222 //
226 //
227 //*****************************************************************************
228 
229 #endif // __PMCTL_H__
__STATIC_INLINE void PMCTLResetSystem(void)
Issue a system reset.
Definition: pmctl.h:162
__STATIC_INLINE uint32_t PMCTLGetVoltageRegulator(void)
Get the current VDDR regulator.
Definition: pmctl.h:207
__STATIC_FORCEINLINE void __disable_irq(void)
Disable IRQ Interrupts.
Definition: cmsis_gcc.h:207
__STATIC_INLINE void PMCTLSetVoltageRegulator(uint32_t regulator)
Set the VDDR regulator.
Definition: pmctl.h:188
__STATIC_INLINE uint32_t PMCTLGetResetReason(void)
Get the reason for the system reset.
Definition: pmctl.h:147
#define __STATIC_INLINE
Definition: cmsis_gcc.h:47