xref: /btstack/port/msp432p401lp-cc256x/ti/devices/msp432p4xx/driverlib/pss.h (revision 5fd0122a3e19d95e11e1f3eb8a08a2b2acb2557e)
1*5fd0122aSMatthias Ringwald /* --COPYRIGHT--,BSD
2*5fd0122aSMatthias Ringwald  * Copyright (c) 2017, Texas Instruments Incorporated
3*5fd0122aSMatthias Ringwald  * All rights reserved.
4*5fd0122aSMatthias Ringwald  *
5*5fd0122aSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
6*5fd0122aSMatthias Ringwald  * modification, are permitted provided that the following conditions
7*5fd0122aSMatthias Ringwald  * are met:
8*5fd0122aSMatthias Ringwald  *
9*5fd0122aSMatthias Ringwald  * *  Redistributions of source code must retain the above copyright
10*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
11*5fd0122aSMatthias Ringwald  *
12*5fd0122aSMatthias Ringwald  * *  Redistributions in binary form must reproduce the above copyright
13*5fd0122aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
14*5fd0122aSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
15*5fd0122aSMatthias Ringwald  *
16*5fd0122aSMatthias Ringwald  * *  Neither the name of Texas Instruments Incorporated nor the names of
17*5fd0122aSMatthias Ringwald  *    its contributors may be used to endorse or promote products derived
18*5fd0122aSMatthias Ringwald  *    from this software without specific prior written permission.
19*5fd0122aSMatthias Ringwald  *
20*5fd0122aSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21*5fd0122aSMatthias Ringwald  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22*5fd0122aSMatthias Ringwald  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23*5fd0122aSMatthias Ringwald  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24*5fd0122aSMatthias Ringwald  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25*5fd0122aSMatthias Ringwald  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26*5fd0122aSMatthias Ringwald  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27*5fd0122aSMatthias Ringwald  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28*5fd0122aSMatthias Ringwald  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29*5fd0122aSMatthias Ringwald  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30*5fd0122aSMatthias Ringwald  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*5fd0122aSMatthias Ringwald  * --/COPYRIGHT--*/
32*5fd0122aSMatthias Ringwald #ifndef __PSS_H__
33*5fd0122aSMatthias Ringwald #define __PSS_H__
34*5fd0122aSMatthias Ringwald 
35*5fd0122aSMatthias Ringwald //*****************************************************************************
36*5fd0122aSMatthias Ringwald //
37*5fd0122aSMatthias Ringwald //! \addtogroup pss_api
38*5fd0122aSMatthias Ringwald //! @{
39*5fd0122aSMatthias Ringwald //
40*5fd0122aSMatthias Ringwald //*****************************************************************************
41*5fd0122aSMatthias Ringwald 
42*5fd0122aSMatthias Ringwald //*****************************************************************************
43*5fd0122aSMatthias Ringwald //
44*5fd0122aSMatthias Ringwald // If building with a C++ compiler, make all of the definitions in this header
45*5fd0122aSMatthias Ringwald // have a C binding.
46*5fd0122aSMatthias Ringwald //
47*5fd0122aSMatthias Ringwald //*****************************************************************************
48*5fd0122aSMatthias Ringwald #ifdef __cplusplus
49*5fd0122aSMatthias Ringwald extern "C"
50*5fd0122aSMatthias Ringwald {
51*5fd0122aSMatthias Ringwald #endif
52*5fd0122aSMatthias Ringwald 
53*5fd0122aSMatthias Ringwald #include <stdint.h>
54*5fd0122aSMatthias Ringwald #include <ti/devices/msp432p4xx/inc/msp.h>
55*5fd0122aSMatthias Ringwald #include <stdbool.h>
56*5fd0122aSMatthias Ringwald 
57*5fd0122aSMatthias Ringwald //*****************************************************************************
58*5fd0122aSMatthias Ringwald //
59*5fd0122aSMatthias Ringwald // Control specific variables
60*5fd0122aSMatthias Ringwald //
61*5fd0122aSMatthias Ringwald //*****************************************************************************
62*5fd0122aSMatthias Ringwald #define PSS_KEY_VALUE PSS_KEY_KEY_VAL
63*5fd0122aSMatthias Ringwald 
64*5fd0122aSMatthias Ringwald #define PSS_SVSMH PSS_IE_SVSMHIE
65*5fd0122aSMatthias Ringwald 
66*5fd0122aSMatthias Ringwald #define PSS_FULL_PERFORMANCE_MODE   0x01
67*5fd0122aSMatthias Ringwald #define PSS_NORMAL_PERFORMANCE_MODE 0x00
68*5fd0122aSMatthias Ringwald 
69*5fd0122aSMatthias Ringwald //*****************************************************************************
70*5fd0122aSMatthias Ringwald //
71*5fd0122aSMatthias Ringwald // Prototypes for the APIs.
72*5fd0122aSMatthias Ringwald //
73*5fd0122aSMatthias Ringwald //*****************************************************************************
74*5fd0122aSMatthias Ringwald 
75*5fd0122aSMatthias Ringwald //*****************************************************************************
76*5fd0122aSMatthias Ringwald //
77*5fd0122aSMatthias Ringwald //! Enables output of the High Side interrupt flag on the device \b SVMHOUT pin
78*5fd0122aSMatthias Ringwald //!
79*5fd0122aSMatthias Ringwald //! \param activeLow True if the signal should be logic low when SVSMHIFG
80*5fd0122aSMatthias Ringwald //!     is set. False if signal should be high when \b SVSMHIFG is set.
81*5fd0122aSMatthias Ringwald //!
82*5fd0122aSMatthias Ringwald //! \return None.
83*5fd0122aSMatthias Ringwald //
84*5fd0122aSMatthias Ringwald //*****************************************************************************
85*5fd0122aSMatthias Ringwald extern void PSS_enableHighSidePinToggle(bool activeLow);
86*5fd0122aSMatthias Ringwald 
87*5fd0122aSMatthias Ringwald //*****************************************************************************
88*5fd0122aSMatthias Ringwald //
89*5fd0122aSMatthias Ringwald //! Disables output of the High Side interrupt flag on the device \b SVMHOUT pin
90*5fd0122aSMatthias Ringwald //!
91*5fd0122aSMatthias Ringwald //! \return None.
92*5fd0122aSMatthias Ringwald //
93*5fd0122aSMatthias Ringwald //*****************************************************************************
94*5fd0122aSMatthias Ringwald extern void PSS_disableHighSidePinToggle(void);
95*5fd0122aSMatthias Ringwald 
96*5fd0122aSMatthias Ringwald //*****************************************************************************
97*5fd0122aSMatthias Ringwald //
98*5fd0122aSMatthias Ringwald //! Enables high side voltage supervisor/monitor.
99*5fd0122aSMatthias Ringwald //!
100*5fd0122aSMatthias Ringwald //! \return None.
101*5fd0122aSMatthias Ringwald //
102*5fd0122aSMatthias Ringwald //*****************************************************************************
103*5fd0122aSMatthias Ringwald extern void PSS_enableHighSide(void);
104*5fd0122aSMatthias Ringwald 
105*5fd0122aSMatthias Ringwald //*****************************************************************************
106*5fd0122aSMatthias Ringwald //
107*5fd0122aSMatthias Ringwald //! Disables high side voltage supervisor/monitor.
108*5fd0122aSMatthias Ringwald //!
109*5fd0122aSMatthias Ringwald //! \return None.
110*5fd0122aSMatthias Ringwald //
111*5fd0122aSMatthias Ringwald //*****************************************************************************
112*5fd0122aSMatthias Ringwald extern void PSS_disableHighSide(void);
113*5fd0122aSMatthias Ringwald 
114*5fd0122aSMatthias Ringwald //*****************************************************************************
115*5fd0122aSMatthias Ringwald //
116*5fd0122aSMatthias Ringwald //! Sets the performance mode of the high side regulator. Full performance
117*5fd0122aSMatthias Ringwald //! mode allows for the best response times while normal performance mode is
118*5fd0122aSMatthias Ringwald //! optimized for the lowest possible current consumption.
119*5fd0122aSMatthias Ringwald //!
120*5fd0122aSMatthias Ringwald //! \param powerMode is the performance mode to set. Valid values are one of
121*5fd0122aSMatthias Ringwald //! the following:
122*5fd0122aSMatthias Ringwald //!     - \b PSS_FULL_PERFORMANCE_MODE,
123*5fd0122aSMatthias Ringwald //!     - \b PSS_NORMAL_PERFORMANCE_MODE
124*5fd0122aSMatthias Ringwald //!
125*5fd0122aSMatthias Ringwald //! \return None.
126*5fd0122aSMatthias Ringwald //
127*5fd0122aSMatthias Ringwald //*****************************************************************************
128*5fd0122aSMatthias Ringwald extern void PSS_setHighSidePerformanceMode(uint_fast8_t powerMode);
129*5fd0122aSMatthias Ringwald 
130*5fd0122aSMatthias Ringwald //*****************************************************************************
131*5fd0122aSMatthias Ringwald //
132*5fd0122aSMatthias Ringwald //! Gets the performance mode of the high side voltage regulator. Refer to the
133*5fd0122aSMatthias Ringwald //! user's guide for specific information about information about the different
134*5fd0122aSMatthias Ringwald //! performance modes.
135*5fd0122aSMatthias Ringwald //!
136*5fd0122aSMatthias Ringwald //! \return Performance mode of the voltage regulator
137*5fd0122aSMatthias Ringwald //
138*5fd0122aSMatthias Ringwald //*****************************************************************************
139*5fd0122aSMatthias Ringwald extern uint_fast8_t PSS_getHighSidePerformanceMode(void);
140*5fd0122aSMatthias Ringwald 
141*5fd0122aSMatthias Ringwald //*****************************************************************************
142*5fd0122aSMatthias Ringwald //
143*5fd0122aSMatthias Ringwald //! Sets the high side voltage supervisor to monitor mode
144*5fd0122aSMatthias Ringwald //!
145*5fd0122aSMatthias Ringwald //! \return None.
146*5fd0122aSMatthias Ringwald //
147*5fd0122aSMatthias Ringwald //*****************************************************************************
148*5fd0122aSMatthias Ringwald extern void PSS_enableHighSideMonitor(void);
149*5fd0122aSMatthias Ringwald 
150*5fd0122aSMatthias Ringwald //*****************************************************************************
151*5fd0122aSMatthias Ringwald //
152*5fd0122aSMatthias Ringwald //! Switches the high side of the power supply system to be a supervisor instead
153*5fd0122aSMatthias Ringwald //! of a monitor
154*5fd0122aSMatthias Ringwald //!
155*5fd0122aSMatthias Ringwald //! \return None.
156*5fd0122aSMatthias Ringwald //
157*5fd0122aSMatthias Ringwald //*****************************************************************************
158*5fd0122aSMatthias Ringwald extern void PSS_disableHighSideMonitor(void);
159*5fd0122aSMatthias Ringwald 
160*5fd0122aSMatthias Ringwald //*****************************************************************************
161*5fd0122aSMatthias Ringwald //
162*5fd0122aSMatthias Ringwald //! Sets the voltage level at which the high side of the device voltage
163*5fd0122aSMatthias Ringwald //! regulator triggers a reset. This value is represented as an unsigned eight
164*5fd0122aSMatthias Ringwald //! bit integer where only the lowest three bits are most significant.
165*5fd0122aSMatthias Ringwald //!
166*5fd0122aSMatthias Ringwald //! \param triggerVoltage Voltage level in which high side supervisor/monitor
167*5fd0122aSMatthias Ringwald //!         triggers a reset. See the device specific data sheet for details
168*5fd0122aSMatthias Ringwald //!         on these voltage levels.
169*5fd0122aSMatthias Ringwald //!
170*5fd0122aSMatthias Ringwald //! Typical values will vary from part to part (so it is very important to
171*5fd0122aSMatthias Ringwald //! check the SVSH section of the data sheet. For reference only, the typical
172*5fd0122aSMatthias Ringwald //! MSP432 101 values are listed below:
173*5fd0122aSMatthias Ringwald //!     - 0 --> 1.57V
174*5fd0122aSMatthias Ringwald //!     - 1 --> 1.62V
175*5fd0122aSMatthias Ringwald //!     - 2 --> 1.83V
176*5fd0122aSMatthias Ringwald //!     - 3 --> 2V
177*5fd0122aSMatthias Ringwald //!     - 4 --> 2.25V
178*5fd0122aSMatthias Ringwald //!     - 5 --> 2.4V
179*5fd0122aSMatthias Ringwald //!     - 6 --> 2.6V
180*5fd0122aSMatthias Ringwald //!     - 7 --> 2.8V
181*5fd0122aSMatthias Ringwald //!
182*5fd0122aSMatthias Ringwald //! \return None.
183*5fd0122aSMatthias Ringwald //
184*5fd0122aSMatthias Ringwald //*****************************************************************************
185*5fd0122aSMatthias Ringwald extern void PSS_setHighSideVoltageTrigger(uint_fast8_t triggerVoltage);
186*5fd0122aSMatthias Ringwald 
187*5fd0122aSMatthias Ringwald //*****************************************************************************
188*5fd0122aSMatthias Ringwald //
189*5fd0122aSMatthias Ringwald //! Returns the voltage level at which the high side of the device voltage
190*5fd0122aSMatthias Ringwald //! regulator triggers a reset.
191*5fd0122aSMatthias Ringwald //!
192*5fd0122aSMatthias Ringwald //! \return The voltage level that the high side voltage supervisor/monitor
193*5fd0122aSMatthias Ringwald //! triggers a reset. This value is represented as an unsigned eight
194*5fd0122aSMatthias Ringwald //! bit integer where only the lowest three bits are most significant.
195*5fd0122aSMatthias Ringwald //! See \link PSS_setHighSideVoltageTrigger \endlink for information regarding
196*5fd0122aSMatthias Ringwald //! the return value
197*5fd0122aSMatthias Ringwald //
198*5fd0122aSMatthias Ringwald //*****************************************************************************
199*5fd0122aSMatthias Ringwald extern uint_fast8_t PSS_getHighSideVoltageTrigger(void);
200*5fd0122aSMatthias Ringwald 
201*5fd0122aSMatthias Ringwald //*****************************************************************************
202*5fd0122aSMatthias Ringwald //
203*5fd0122aSMatthias Ringwald //! Enables the power supply system interrupt source.
204*5fd0122aSMatthias Ringwald //!
205*5fd0122aSMatthias Ringwald //! \return None.
206*5fd0122aSMatthias Ringwald //
207*5fd0122aSMatthias Ringwald //*****************************************************************************
208*5fd0122aSMatthias Ringwald extern void PSS_enableInterrupt(void);
209*5fd0122aSMatthias Ringwald 
210*5fd0122aSMatthias Ringwald //*****************************************************************************
211*5fd0122aSMatthias Ringwald //
212*5fd0122aSMatthias Ringwald //! Disables the power supply system interrupt source.
213*5fd0122aSMatthias Ringwald //!
214*5fd0122aSMatthias Ringwald //! \return None.
215*5fd0122aSMatthias Ringwald //
216*5fd0122aSMatthias Ringwald //*****************************************************************************
217*5fd0122aSMatthias Ringwald extern void PSS_disableInterrupt(void);
218*5fd0122aSMatthias Ringwald 
219*5fd0122aSMatthias Ringwald //*****************************************************************************
220*5fd0122aSMatthias Ringwald //
221*5fd0122aSMatthias Ringwald //! Gets the current interrupt status.
222*5fd0122aSMatthias Ringwald //!
223*5fd0122aSMatthias Ringwald //! \return The current interrupt status ( \b PSS_SVSMH )
224*5fd0122aSMatthias Ringwald //!
225*5fd0122aSMatthias Ringwald //*****************************************************************************
226*5fd0122aSMatthias Ringwald extern uint32_t PSS_getInterruptStatus(void);
227*5fd0122aSMatthias Ringwald 
228*5fd0122aSMatthias Ringwald //*****************************************************************************
229*5fd0122aSMatthias Ringwald //
230*5fd0122aSMatthias Ringwald //! Clears power supply system interrupt source.
231*5fd0122aSMatthias Ringwald //!
232*5fd0122aSMatthias Ringwald //! \return None.
233*5fd0122aSMatthias Ringwald //
234*5fd0122aSMatthias Ringwald //*****************************************************************************
235*5fd0122aSMatthias Ringwald extern void PSS_clearInterruptFlag(void);
236*5fd0122aSMatthias Ringwald 
237*5fd0122aSMatthias Ringwald 
238*5fd0122aSMatthias Ringwald //*****************************************************************************
239*5fd0122aSMatthias Ringwald //
240*5fd0122aSMatthias Ringwald //! Enables the "forced" mode of the DCDC regulator. In this mode, the fail
241*5fd0122aSMatthias Ringwald //! safe mechanism that disables the regulator to LDO mode when the supply
242*5fd0122aSMatthias Ringwald //! voltage falls below the minimum supply voltage required for DCDC operation
243*5fd0122aSMatthias Ringwald //! is turned off.
244*5fd0122aSMatthias Ringwald //!
245*5fd0122aSMatthias Ringwald //! \return None.
246*5fd0122aSMatthias Ringwald //
247*5fd0122aSMatthias Ringwald //*****************************************************************************
248*5fd0122aSMatthias Ringwald extern void PSS_enableForcedDCDCOperation(void);
249*5fd0122aSMatthias Ringwald 
250*5fd0122aSMatthias Ringwald 
251*5fd0122aSMatthias Ringwald //*****************************************************************************
252*5fd0122aSMatthias Ringwald //
253*5fd0122aSMatthias Ringwald //! Disables the "forced" mode of the DCDC regulator. In this mode, the fail
254*5fd0122aSMatthias Ringwald //! safe mechanism that disables the regulator to LDO mode when the supply
255*5fd0122aSMatthias Ringwald //! voltage falls below the minimum supply voltage required for DCDC operation
256*5fd0122aSMatthias Ringwald //! is turned on.
257*5fd0122aSMatthias Ringwald //!
258*5fd0122aSMatthias Ringwald //! \return None.
259*5fd0122aSMatthias Ringwald //
260*5fd0122aSMatthias Ringwald //*****************************************************************************
261*5fd0122aSMatthias Ringwald extern void PSS_disableForcedDCDCOperation(void);
262*5fd0122aSMatthias Ringwald 
263*5fd0122aSMatthias Ringwald //*****************************************************************************
264*5fd0122aSMatthias Ringwald //
265*5fd0122aSMatthias Ringwald //! Registers an interrupt handler for the power supply system interrupt.
266*5fd0122aSMatthias Ringwald //!
267*5fd0122aSMatthias Ringwald //! \param intHandler is a pointer to the function to be called when the power
268*5fd0122aSMatthias Ringwald //! supply system interrupt occurs.
269*5fd0122aSMatthias Ringwald //!
270*5fd0122aSMatthias Ringwald //! This function registers the handler to be called when a power supply system
271*5fd0122aSMatthias Ringwald //! interrupt occurs. This function enables the global interrupt in the
272*5fd0122aSMatthias Ringwald //! interrupt controller; specific PSS interrupts must be enabled
273*5fd0122aSMatthias Ringwald //! via PSS_enableInterrupt().  It is the interrupt handler's responsibility to
274*5fd0122aSMatthias Ringwald //! clear the interrupt source via PSS_clearInterruptFlag().
275*5fd0122aSMatthias Ringwald //!
276*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about
277*5fd0122aSMatthias Ringwald //! registering interrupt handlers.
278*5fd0122aSMatthias Ringwald //!
279*5fd0122aSMatthias Ringwald //! \return None.
280*5fd0122aSMatthias Ringwald //
281*5fd0122aSMatthias Ringwald //*****************************************************************************
282*5fd0122aSMatthias Ringwald extern void PSS_registerInterrupt(void (*intHandler)(void));
283*5fd0122aSMatthias Ringwald 
284*5fd0122aSMatthias Ringwald //*****************************************************************************
285*5fd0122aSMatthias Ringwald //
286*5fd0122aSMatthias Ringwald //! Unregisters the interrupt handler for the power supply system
287*5fd0122aSMatthias Ringwald //!
288*5fd0122aSMatthias Ringwald //! This function unregisters the handler to be called when a power supply
289*5fd0122aSMatthias Ringwald //! system interrupt occurs.  This function also masks off the interrupt in the
290*5fd0122aSMatthias Ringwald //! interrupt controller so that the interrupt handler no longer is called.
291*5fd0122aSMatthias Ringwald //!
292*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about
293*5fd0122aSMatthias Ringwald //! registering interrupt handlers.
294*5fd0122aSMatthias Ringwald //!
295*5fd0122aSMatthias Ringwald //! \return None.
296*5fd0122aSMatthias Ringwald //
297*5fd0122aSMatthias Ringwald //*****************************************************************************
298*5fd0122aSMatthias Ringwald extern void PSS_unregisterInterrupt(void);
299*5fd0122aSMatthias Ringwald 
300*5fd0122aSMatthias Ringwald //*****************************************************************************
301*5fd0122aSMatthias Ringwald //
302*5fd0122aSMatthias Ringwald // Mark the end of the C bindings section for C++ compilers.
303*5fd0122aSMatthias Ringwald //
304*5fd0122aSMatthias Ringwald //*****************************************************************************
305*5fd0122aSMatthias Ringwald #ifdef __cplusplus
306*5fd0122aSMatthias Ringwald }
307*5fd0122aSMatthias Ringwald #endif
308*5fd0122aSMatthias Ringwald 
309*5fd0122aSMatthias Ringwald //*****************************************************************************
310*5fd0122aSMatthias Ringwald //
311*5fd0122aSMatthias Ringwald // Close the Doxygen group.
312*5fd0122aSMatthias Ringwald //! @}
313*5fd0122aSMatthias Ringwald //
314*5fd0122aSMatthias Ringwald //*****************************************************************************
315*5fd0122aSMatthias Ringwald 
316*5fd0122aSMatthias Ringwald #endif // __PSS_H__
317