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