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 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_SWD (PMCTL_RSTSTA_SYSSRC_SWDRSTEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
92 #define PMCTL_RESET_LFXT (PMCTL_RSTSTA_SYSSRC_LFLOSSEV | PMCTL_RSTSTA_RESETSRC_SYSRESET)
94 #define PMCTL_RESET_TSD (PMCTL_RSTSTA_TSDEV | PMCTL_RSTSTA_RESETSRC_PINRESET)
96 #define PMCTL_RESET_VDDR PMCTL_RSTSTA_RESETSRC_VDDRLOSS
98 #define PMCTL_RESET_VDDS PMCTL_RSTSTA_RESETSRC_VDDSLOSS
100 #define PMCTL_RESET_PIN PMCTL_RSTSTA_RESETSRC_PINRESET
102 #define PMCTL_RESET_POR PMCTL_RSTSTA_RESETSRC_PWRON
104 
105 
106 //*****************************************************************************
108 
109 //*****************************************************************************
111 #define PMCTL_VOLTAGE_REGULATOR_DCDC PMCTL_VDDRCTL_SELECT_DCDC
112 #define PMCTL_VOLTAGE_REGULATOR_GLDO PMCTL_VDDRCTL_SELECT_GLDO
114 
115 
116 //*****************************************************************************
117 //
135 //
136 //*****************************************************************************
138 {
139  return HWREG(PMCTL_BASE + PMCTL_O_RSTSTA);
140 }
141 
142 //*****************************************************************************
143 //
150 //
151 //*****************************************************************************
153 {
154  // Disable interrupts
155  __disable_irq();
156 
157  // Write reset register
159 
160  // Should never return from this function
161  while (1) {}
162 }
163 
164 //*****************************************************************************
165 //
176 //
177 //*****************************************************************************
179 {
180  // Write to VDDR regulator register while preserving other configuration
181  // fields
183  HWREG(PMCTL_BASE + PMCTL_O_VDDRCTL) = tmp | regulator;
184 }
185 
186 //*****************************************************************************
187 //
195 //
196 //*****************************************************************************
198 {
200 }
201 
202 //*****************************************************************************
203 //
204 // Mark the end of the C bindings section for C++ compilers.
205 //
206 //*****************************************************************************
207 #ifdef __cplusplus
208 }
209 #endif
210 
211 //*****************************************************************************
212 //
216 //
217 //*****************************************************************************
218 
219 #endif // __PMCTL_H__
#define PMCTL_O_RSTCTL
Definition: hw_pmctl.h:70
__STATIC_INLINE void PMCTLResetSystem(void)
Issue a system reset.
Definition: pmctl.h:152
#define HWREG(x)
Definition: hw_types.h:79
#define __STATIC_INLINE
Definition: hw_types.h:58
#define PMCTL_VDDRCTL_SELECT_M
Definition: hw_pmctl.h:303
__STATIC_INLINE uint32_t PMCTLGetVoltageRegulator(void)
Get the current VDDR regulator.
Definition: pmctl.h:197
__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:178
#define PMCTL_BASE
Definition: hw_memmap.h:48
#define PMCTL_O_VDDRCTL
Definition: hw_pmctl.h:58
__STATIC_INLINE uint32_t PMCTLGetResetReason(void)
Get the reason for the system reset.
Definition: pmctl.h:137
#define PMCTL_O_RSTSTA
Definition: hw_pmctl.h:73
#define PMCTL_RSTCTL_SYSRST_SET
Definition: hw_pmctl.h:483