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 __CS_H__ 33*5fd0122aSMatthias Ringwald #define __CS_H__ 34*5fd0122aSMatthias Ringwald 35*5fd0122aSMatthias Ringwald //***************************************************************************** 36*5fd0122aSMatthias Ringwald // 37*5fd0122aSMatthias Ringwald //! \addtogroup cs_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 <stdbool.h> 55*5fd0122aSMatthias Ringwald #include <ti/devices/msp432p4xx/inc/msp.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 CS_CLOCK_DIVIDER_1 CS_CTL1_DIVS_0 63*5fd0122aSMatthias Ringwald #define CS_CLOCK_DIVIDER_2 CS_CTL1_DIVS_1 64*5fd0122aSMatthias Ringwald #define CS_CLOCK_DIVIDER_4 CS_CTL1_DIVS_2 65*5fd0122aSMatthias Ringwald #define CS_CLOCK_DIVIDER_8 CS_CTL1_DIVS_3 66*5fd0122aSMatthias Ringwald #define CS_CLOCK_DIVIDER_16 CS_CTL1_DIVS_4 67*5fd0122aSMatthias Ringwald #define CS_CLOCK_DIVIDER_32 CS_CTL1_DIVS_5 68*5fd0122aSMatthias Ringwald #define CS_CLOCK_DIVIDER_64 CS_CTL1_DIVS_6 69*5fd0122aSMatthias Ringwald #define CS_CLOCK_DIVIDER_128 CS_CTL1_DIVS_7 70*5fd0122aSMatthias Ringwald 71*5fd0122aSMatthias Ringwald #define CS_LFXTCLK_SELECT CS_CTL1_SELM_0 72*5fd0122aSMatthias Ringwald #define CS_HFXTCLK_SELECT CS_CTL1_SELM_5 73*5fd0122aSMatthias Ringwald #define CS_VLOCLK_SELECT CS_CTL1_SELM_1 74*5fd0122aSMatthias Ringwald #define CS_REFOCLK_SELECT CS_CTL1_SELM_2 75*5fd0122aSMatthias Ringwald #define CS_DCOCLK_SELECT CS_CTL1_SELM_3 76*5fd0122aSMatthias Ringwald #define CS_MODOSC_SELECT CS_CTL1_SELM_4 77*5fd0122aSMatthias Ringwald 78*5fd0122aSMatthias Ringwald #define CS_KEY 0x695A 79*5fd0122aSMatthias Ringwald 80*5fd0122aSMatthias Ringwald /* Number of positions to shift for divider calculation */ 81*5fd0122aSMatthias Ringwald #define CS_ACLK_DIV_BITPOS 0x04 82*5fd0122aSMatthias Ringwald #define CS_MCLK_DIV_BITPOS 0x0C 83*5fd0122aSMatthias Ringwald #define CS_SMCLK_DIV_BITPOS 0x00 84*5fd0122aSMatthias Ringwald #define CS_HSMCLK_DIV_BITPOS 0x08 85*5fd0122aSMatthias Ringwald 86*5fd0122aSMatthias Ringwald /* Number of positions to shift for source calculation */ 87*5fd0122aSMatthias Ringwald #define CS_ACLK_SRC_BITPOS 0x08 88*5fd0122aSMatthias Ringwald #define CS_MCLK_SRC_BITPOS 0x00 89*5fd0122aSMatthias Ringwald #define CS_SMCLK_SRC_BITPOS 0x04 90*5fd0122aSMatthias Ringwald #define CS_HSMCLK_SRC_BITPOS 0x04 91*5fd0122aSMatthias Ringwald 92*5fd0122aSMatthias Ringwald /* REFO Clock Values */ 93*5fd0122aSMatthias Ringwald #define CS_REFO_32KHZ 0x00 94*5fd0122aSMatthias Ringwald #define CS_REFO_128KHZ 0x01 95*5fd0122aSMatthias Ringwald 96*5fd0122aSMatthias Ringwald /* Frequency Values */ 97*5fd0122aSMatthias Ringwald #define CS_VLOCLK_FREQUENCY 10000 98*5fd0122aSMatthias Ringwald #define CS_MODCLK_FREQUENCY 24000000 99*5fd0122aSMatthias Ringwald 100*5fd0122aSMatthias Ringwald /* Interrupts */ 101*5fd0122aSMatthias Ringwald #define CS_LFXT_FAULT CS_IE_LFXTIE 102*5fd0122aSMatthias Ringwald #define CS_HFXT_FAULT CS_IE_HFXTIE 103*5fd0122aSMatthias Ringwald #define CS_DCO_OPEN_FAULT CS_IE_DCOR_OPNIE 104*5fd0122aSMatthias Ringwald #define CS_STARTCOUNT_LFXT_FAULT CS_IE_FCNTLFIE 105*5fd0122aSMatthias Ringwald #define CS_STARTCOUNT_HFXT_FAULT CS_IE_FCNTHFIE 106*5fd0122aSMatthias Ringwald #define CS_DCO_SHORT_FAULT CS_IFG_DCOR_SHTIFG 107*5fd0122aSMatthias Ringwald 108*5fd0122aSMatthias Ringwald #define CS_HFXT_DRIVE CS_CTL2_HFXTDRIVE 109*5fd0122aSMatthias Ringwald #define CS_HFXT_BYPASS CS_CTL2_HFXTBYPASS 110*5fd0122aSMatthias Ringwald 111*5fd0122aSMatthias Ringwald #define CS_LFXT_DRIVE0 CS_CTL2_LFXTDRIVE_0 112*5fd0122aSMatthias Ringwald #define CS_LFXT_DRIVE1 CS_CTL2_LFXTDRIVE_1 113*5fd0122aSMatthias Ringwald #define CS_LFXT_DRIVE2 CS_CTL2_LFXTDRIVE_2 114*5fd0122aSMatthias Ringwald #define CS_LFXT_DRIVE3 CS_CTL2_LFXTDRIVE_3 115*5fd0122aSMatthias Ringwald #define CS_LFXT_BYPASS CS_CTL2_LFXTBYPASS 116*5fd0122aSMatthias Ringwald 117*5fd0122aSMatthias Ringwald #define CS_ACLK CS_CLKEN_ACLK_EN 118*5fd0122aSMatthias Ringwald #define CS_MCLK CS_CLKEN_MCLK_EN 119*5fd0122aSMatthias Ringwald #define CS_SMCLK CS_CLKEN_SMCLK_EN 120*5fd0122aSMatthias Ringwald #define CS_HSMCLK CS_CLKEN_HSMCLK_EN 121*5fd0122aSMatthias Ringwald #define CS_BCLK CS_STAT_BCLK_READY 122*5fd0122aSMatthias Ringwald 123*5fd0122aSMatthias Ringwald #define CS_LFXTCLK 0x01 124*5fd0122aSMatthias Ringwald 125*5fd0122aSMatthias Ringwald #define CS_1MHZ 1000000 126*5fd0122aSMatthias Ringwald #define CS_15MHZ 1500000 127*5fd0122aSMatthias Ringwald #define CS_3MHZ 3000000 128*5fd0122aSMatthias Ringwald #define CS_4MHZ 4000000 129*5fd0122aSMatthias Ringwald #define CS_6MHZ 6000000 130*5fd0122aSMatthias Ringwald #define CS_8MHZ 8000000 131*5fd0122aSMatthias Ringwald #define CS_12MHZ 12000000 132*5fd0122aSMatthias Ringwald #define CS_16MHZ 16000000 133*5fd0122aSMatthias Ringwald #define CS_24MHZ 24000000 134*5fd0122aSMatthias Ringwald #define CS_32MHZ 32000000 135*5fd0122aSMatthias Ringwald #define CS_40MHZ 40000000 136*5fd0122aSMatthias Ringwald #define CS_48MHZ 48000000 137*5fd0122aSMatthias Ringwald 138*5fd0122aSMatthias Ringwald #define CS_DCO_FREQUENCY_1_5 CS_CTL0_DCORSEL_0 139*5fd0122aSMatthias Ringwald #define CS_DCO_FREQUENCY_3 CS_CTL0_DCORSEL_1 140*5fd0122aSMatthias Ringwald #define CS_DCO_FREQUENCY_6 CS_CTL0_DCORSEL_2 141*5fd0122aSMatthias Ringwald #define CS_DCO_FREQUENCY_12 CS_CTL0_DCORSEL_3 142*5fd0122aSMatthias Ringwald #define CS_DCO_FREQUENCY_24 CS_CTL0_DCORSEL_4 143*5fd0122aSMatthias Ringwald #define CS_DCO_FREQUENCY_48 CS_CTL0_DCORSEL_5 144*5fd0122aSMatthias Ringwald 145*5fd0122aSMatthias Ringwald #define CS_HFXT_FAULT_COUNTER 0x01 146*5fd0122aSMatthias Ringwald #define CS_LFXT_FAULT_COUNTER 0x02 147*5fd0122aSMatthias Ringwald 148*5fd0122aSMatthias Ringwald #define CS_FAULT_COUNTER_4096_CYCLES CS_CTL3_FCNTLF_0 149*5fd0122aSMatthias Ringwald #define CS_FAULT_COUNTER_8192_CYCLES CS_CTL3_FCNTLF_1 150*5fd0122aSMatthias Ringwald #define CS_FAULT_COUNTER_16384_CYCLES CS_CTL3_FCNTLF_2 151*5fd0122aSMatthias Ringwald #define CS_FAULT_COUNTER_32768_CYCLES CS_CTL3_FCNTLF_3 152*5fd0122aSMatthias Ringwald 153*5fd0122aSMatthias Ringwald #define CS_OVER32MHZ 0x01 154*5fd0122aSMatthias Ringwald #define CS_UNDER32MHZ 0x02 155*5fd0122aSMatthias Ringwald 156*5fd0122aSMatthias Ringwald //****************************************************************************** 157*5fd0122aSMatthias Ringwald // 158*5fd0122aSMatthias Ringwald //! This function sets the external clock sources LFXT and HFXT crystal 159*5fd0122aSMatthias Ringwald //! oscillator frequency values. This function must be called if an external 160*5fd0122aSMatthias Ringwald //! crystal LFXT or HFXT is used and the user intends to call 161*5fd0122aSMatthias Ringwald //! CS_getSMCLK, CS_getMCLK, CS_getBCLK, CS_getHSMCLK, CS_getACLK and 162*5fd0122aSMatthias Ringwald //! any of the HFXT oscillator control functions 163*5fd0122aSMatthias Ringwald //! 164*5fd0122aSMatthias Ringwald //! \param lfxt_XT_CLK_frequency is the LFXT crystal frequencies in Hz 165*5fd0122aSMatthias Ringwald //! \param hfxt_XT_CLK_frequency is the HFXT crystal frequencies in Hz 166*5fd0122aSMatthias Ringwald //! 167*5fd0122aSMatthias Ringwald //! \return None 168*5fd0122aSMatthias Ringwald // 169*5fd0122aSMatthias Ringwald //****************************************************************************** 170*5fd0122aSMatthias Ringwald extern void CS_setExternalClockSourceFrequency(uint32_t lfxt_XT_CLK_frequency, 171*5fd0122aSMatthias Ringwald uint32_t hfxt_XT_CLK_frequency); 172*5fd0122aSMatthias Ringwald 173*5fd0122aSMatthias Ringwald //****************************************************************************** 174*5fd0122aSMatthias Ringwald // 175*5fd0122aSMatthias Ringwald //! This function initializes each of the clock signals. The user must ensure 176*5fd0122aSMatthias Ringwald //! that this function is called for each clock signal. If not, the default 177*5fd0122aSMatthias Ringwald //! state is assumed for the particular clock signal. Refer to DriverLib 178*5fd0122aSMatthias Ringwald //! documentation for CS module or Device Family User's Guide for details of 179*5fd0122aSMatthias Ringwald //! default clock signal states. 180*5fd0122aSMatthias Ringwald //! 181*5fd0122aSMatthias Ringwald //! Note that this function is blocking and will wait on the appropriate bit 182*5fd0122aSMatthias Ringwald //! to be set in the CSSTAT READY register to be set before setting the clock 183*5fd0122aSMatthias Ringwald //! source. 184*5fd0122aSMatthias Ringwald //! 185*5fd0122aSMatthias Ringwald //! Also note that when HSMCLK and SMCLK share the same clock signal. If you 186*5fd0122aSMatthias Ringwald //! change the clock signal for HSMCLK, the clock signal for SMCLK will change 187*5fd0122aSMatthias Ringwald //! also (and vice-versa). 188*5fd0122aSMatthias Ringwald //! 189*5fd0122aSMatthias Ringwald //! HFXTCLK is not available for BCLK or ACLK. 190*5fd0122aSMatthias Ringwald //! 191*5fd0122aSMatthias Ringwald //! \param selectedClockSignal Clock signal to initialize. 192*5fd0122aSMatthias Ringwald //! - \b CS_ACLK, 193*5fd0122aSMatthias Ringwald //! - \b CS_MCLK, 194*5fd0122aSMatthias Ringwald //! - \b CS_HSMCLK 195*5fd0122aSMatthias Ringwald //! - \b CS_SMCLK 196*5fd0122aSMatthias Ringwald //! - \b CS_BCLK [clockSourceDivider is ignored for this parameter] 197*5fd0122aSMatthias Ringwald //! \param clockSource Clock source for the selectedClockSignal signal. 198*5fd0122aSMatthias Ringwald //! - \b CS_LFXTCLK_SELECT, 199*5fd0122aSMatthias Ringwald //! - \b CS_HFXTCLK_SELECT, 200*5fd0122aSMatthias Ringwald //! - \b CS_VLOCLK_SELECT, [Not available for BCLK] 201*5fd0122aSMatthias Ringwald //! - \b CS_DCOCLK_SELECT, [Not available for ACLK, BCLK] 202*5fd0122aSMatthias Ringwald //! - \b CS_REFOCLK_SELECT, 203*5fd0122aSMatthias Ringwald //! - \b CS_MODOSC_SELECT [Not available for ACLK, BCLK] 204*5fd0122aSMatthias Ringwald //! \param clockSourceDivider - selected the clock divider to calculate 205*5fd0122aSMatthias Ringwald //! clock signal from clock source. This parameter is ignored when 206*5fd0122aSMatthias Ringwald //! setting BLCK. Valid values are: 207*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_1, 208*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_2, 209*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_4, 210*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_8, 211*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_16, 212*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_32, 213*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_64, 214*5fd0122aSMatthias Ringwald //! - \b CS_CLOCK_DIVIDER_128 215*5fd0122aSMatthias Ringwald //! 216*5fd0122aSMatthias Ringwald //! \return NONE 217*5fd0122aSMatthias Ringwald // 218*5fd0122aSMatthias Ringwald //****************************************************************************** 219*5fd0122aSMatthias Ringwald extern void CS_initClockSignal(uint32_t selectedClockSignal, 220*5fd0122aSMatthias Ringwald uint32_t clockSource, uint32_t clockSourceDivider); 221*5fd0122aSMatthias Ringwald 222*5fd0122aSMatthias Ringwald //****************************************************************************** 223*5fd0122aSMatthias Ringwald // 224*5fd0122aSMatthias Ringwald //! Initializes the HFXT crystal oscillator, which supports crystal frequencies 225*5fd0122aSMatthias Ringwald //! between 0 MHz and 48 MHz, depending on the selected drive strength. Loops 226*5fd0122aSMatthias Ringwald //! until all oscillator fault flags are cleared, with no timeout. See the 227*5fd0122aSMatthias Ringwald //! device-specific data sheet for appropriate drive settings. NOTE: User must 228*5fd0122aSMatthias Ringwald //! call CS_setExternalClockSourceFrequency to set frequency of external clocks 229*5fd0122aSMatthias Ringwald //! before calling this function. 230*5fd0122aSMatthias Ringwald //! 231*5fd0122aSMatthias Ringwald //! \param bypassMode When this variable is set, the oscillator will start 232*5fd0122aSMatthias Ringwald //! in bypass mode and the signal can be generated by a digital square wave. 233*5fd0122aSMatthias Ringwald //! 234*5fd0122aSMatthias Ringwald //! \return true if started correctly, false otherwise 235*5fd0122aSMatthias Ringwald // 236*5fd0122aSMatthias Ringwald //****************************************************************************** 237*5fd0122aSMatthias Ringwald extern bool CS_startHFXT(bool bypassMode); 238*5fd0122aSMatthias Ringwald 239*5fd0122aSMatthias Ringwald //****************************************************************************** 240*5fd0122aSMatthias Ringwald // 241*5fd0122aSMatthias Ringwald //! Initializes the HFXT crystal oscillator, which supports crystal frequencies 242*5fd0122aSMatthias Ringwald //! between 0 MHz and 48 MHz, depending on the selected drive strength. Loops 243*5fd0122aSMatthias Ringwald //! until all oscillator fault flags are cleared, with no timeout. See the 244*5fd0122aSMatthias Ringwald //! device-specific data sheet for appropriate drive settings. NOTE: User must 245*5fd0122aSMatthias Ringwald //! call CS_setExternalClockSourceFrequency to set frequency of external clocks 246*5fd0122aSMatthias Ringwald //! before calling this function. This function has a timeout associated with 247*5fd0122aSMatthias Ringwald //! stabilizing the oscillator. 248*5fd0122aSMatthias Ringwald //! 249*5fd0122aSMatthias Ringwald //! \param bypassMode When this variable is set, the oscillator will start 250*5fd0122aSMatthias Ringwald //! in bypass mode and the signal can be generated by a digital square wave. 251*5fd0122aSMatthias Ringwald //! 252*5fd0122aSMatthias Ringwald //! \param timeout is the count value that gets decremented every time the loop 253*5fd0122aSMatthias Ringwald //! that clears oscillator fault flags gets executed. 254*5fd0122aSMatthias Ringwald //! 255*5fd0122aSMatthias Ringwald //! \return true if started correctly, false otherwise 256*5fd0122aSMatthias Ringwald // 257*5fd0122aSMatthias Ringwald //****************************************************************************** 258*5fd0122aSMatthias Ringwald extern bool CS_startHFXTWithTimeout(bool bypassMode, uint32_t timeout); 259*5fd0122aSMatthias Ringwald 260*5fd0122aSMatthias Ringwald //****************************************************************************** 261*5fd0122aSMatthias Ringwald // 262*5fd0122aSMatthias Ringwald //! Initializes the LFXT crystal oscillator, which supports crystal frequencies 263*5fd0122aSMatthias Ringwald //! up to 50kHz, depending on the selected drive strength. Loops 264*5fd0122aSMatthias Ringwald //! until all oscillator fault flags are cleared, with no timeout. See the 265*5fd0122aSMatthias Ringwald //! device-specific data sheet for appropriate drive settings. NOTE: User must 266*5fd0122aSMatthias Ringwald //! call CS_setExternalClockSourceFrequency to set frequency of external clocks 267*5fd0122aSMatthias Ringwald //! before calling this function. 268*5fd0122aSMatthias Ringwald //! 269*5fd0122aSMatthias Ringwald //! \param xtDrive is the target drive strength for the LFXT crystal 270*5fd0122aSMatthias Ringwald //! oscillator. 271*5fd0122aSMatthias Ringwald //! Valid values are: 272*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE0, 273*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE1, 274*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE2, 275*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE3, [Default Value] 276*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_BYPASS 277*5fd0122aSMatthias Ringwald //! 278*5fd0122aSMatthias Ringwald //! \note When CS_LFXT_BYPASS is passed as a parameter the oscillator will start 279*5fd0122aSMatthias Ringwald //! in bypass mode and the signal can be generated by a digital square wave. 280*5fd0122aSMatthias Ringwald //! 281*5fd0122aSMatthias Ringwald //! \return true if started correctly, false otherwise 282*5fd0122aSMatthias Ringwald // 283*5fd0122aSMatthias Ringwald //****************************************************************************** 284*5fd0122aSMatthias Ringwald extern bool CS_startLFXT(uint32_t xtDrive); 285*5fd0122aSMatthias Ringwald 286*5fd0122aSMatthias Ringwald //****************************************************************************** 287*5fd0122aSMatthias Ringwald // 288*5fd0122aSMatthias Ringwald //! Initializes the LFXT crystal oscillator, which supports crystal frequencies 289*5fd0122aSMatthias Ringwald //! up to 50kHz, depending on the selected drive strength. Loops 290*5fd0122aSMatthias Ringwald //! until all oscillator fault flags are cleared. See the 291*5fd0122aSMatthias Ringwald //! device-specific data sheet for appropriate drive settings. NOTE: User must 292*5fd0122aSMatthias Ringwald //! call CS_setExternalClockSourceFrequency to set frequency of external clocks 293*5fd0122aSMatthias Ringwald //! before calling this function. This function has a timeout associated with 294*5fd0122aSMatthias Ringwald //! stabilizing the oscillator. 295*5fd0122aSMatthias Ringwald //! 296*5fd0122aSMatthias Ringwald //! \param xtDrive is the target drive strength for the LFXT crystal 297*5fd0122aSMatthias Ringwald //! oscillator. 298*5fd0122aSMatthias Ringwald //! Valid values are: 299*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE0, 300*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE1, 301*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE2, 302*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_DRIVE3, [Default Value] 303*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_BYPASS 304*5fd0122aSMatthias Ringwald //! 305*5fd0122aSMatthias Ringwald //! \note When CS_LFXT_BYPASS is passed as a parameter the oscillator will 306*5fd0122aSMatthias Ringwald //! start in bypass mode and the signal can be generated by a digital square 307*5fd0122aSMatthias Ringwald //! wave. 308*5fd0122aSMatthias Ringwald //! 309*5fd0122aSMatthias Ringwald //! \param timeout is the count value that gets decremented every time the loop 310*5fd0122aSMatthias Ringwald //! that clears oscillator fault flags gets executed. 311*5fd0122aSMatthias Ringwald //! 312*5fd0122aSMatthias Ringwald //! \return true if started correctly, false otherwise 313*5fd0122aSMatthias Ringwald // 314*5fd0122aSMatthias Ringwald //****************************************************************************** 315*5fd0122aSMatthias Ringwald extern bool CS_startLFXTWithTimeout(uint32_t xtDrive, uint32_t timeout); 316*5fd0122aSMatthias Ringwald 317*5fd0122aSMatthias Ringwald //****************************************************************************** 318*5fd0122aSMatthias Ringwald // 319*5fd0122aSMatthias Ringwald //! Selects between the frequency of the internal REFO clock source 320*5fd0122aSMatthias Ringwald //! 321*5fd0122aSMatthias Ringwald //! \param referenceFrequency selects between the valid frequencies: 322*5fd0122aSMatthias Ringwald //! - \b CS_REFO_32KHZ, 323*5fd0122aSMatthias Ringwald //! - \b CS_REFO_128KHZ, 324*5fd0122aSMatthias Ringwald //! 325*5fd0122aSMatthias Ringwald //! \return NONE 326*5fd0122aSMatthias Ringwald // 327*5fd0122aSMatthias Ringwald //****************************************************************************** 328*5fd0122aSMatthias Ringwald extern void CS_setReferenceOscillatorFrequency(uint8_t referenceFrequency); 329*5fd0122aSMatthias Ringwald 330*5fd0122aSMatthias Ringwald //****************************************************************************** 331*5fd0122aSMatthias Ringwald // 332*5fd0122aSMatthias Ringwald //! Enables conditional module requests 333*5fd0122aSMatthias Ringwald //! 334*5fd0122aSMatthias Ringwald //! \param selectClock selects specific request enables. Valid values are 335*5fd0122aSMatthias Ringwald //! are a logical OR of the following values: 336*5fd0122aSMatthias Ringwald //! - \b CS_ACLK, 337*5fd0122aSMatthias Ringwald //! - \b CS_HSMCLK, 338*5fd0122aSMatthias Ringwald //! - \b CS_SMCLK, 339*5fd0122aSMatthias Ringwald //! - \b CS_MCLK 340*5fd0122aSMatthias Ringwald //! 341*5fd0122aSMatthias Ringwald //! \return NONE 342*5fd0122aSMatthias Ringwald // 343*5fd0122aSMatthias Ringwald //****************************************************************************** 344*5fd0122aSMatthias Ringwald extern void CS_enableClockRequest(uint32_t selectClock); 345*5fd0122aSMatthias Ringwald 346*5fd0122aSMatthias Ringwald //****************************************************************************** 347*5fd0122aSMatthias Ringwald // 348*5fd0122aSMatthias Ringwald //! Disables conditional module requests 349*5fd0122aSMatthias Ringwald //! 350*5fd0122aSMatthias Ringwald //! \param selectClock selects specific request disables. Valid values are 351*5fd0122aSMatthias Ringwald //! are a logical OR of the following values: 352*5fd0122aSMatthias Ringwald //! - \b CS_ACLK, 353*5fd0122aSMatthias Ringwald //! - \b CS_HSMCLK, 354*5fd0122aSMatthias Ringwald //! - \b CS_SMCLK, 355*5fd0122aSMatthias Ringwald //! - \b CS_MCLK 356*5fd0122aSMatthias Ringwald //! 357*5fd0122aSMatthias Ringwald //! \return NONE 358*5fd0122aSMatthias Ringwald // 359*5fd0122aSMatthias Ringwald //****************************************************************************** 360*5fd0122aSMatthias Ringwald extern void CS_disableClockRequest(uint32_t selectClock); 361*5fd0122aSMatthias Ringwald 362*5fd0122aSMatthias Ringwald //****************************************************************************** 363*5fd0122aSMatthias Ringwald // 364*5fd0122aSMatthias Ringwald //! Get the current ACLK frequency. 365*5fd0122aSMatthias Ringwald //! 366*5fd0122aSMatthias Ringwald //! If a oscillator fault is set, the frequency returned will be based on the 367*5fd0122aSMatthias Ringwald //! fail safe mechanism of CS module. The user of this API must ensure that 368*5fd0122aSMatthias Ringwald //! \link CS_setExternalClockSourceFrequency() \endlink API was invoked before 369*5fd0122aSMatthias Ringwald //! in case LFXT is being used. 370*5fd0122aSMatthias Ringwald //! 371*5fd0122aSMatthias Ringwald //! \return Current ACLK frequency in Hz 372*5fd0122aSMatthias Ringwald // 373*5fd0122aSMatthias Ringwald //****************************************************************************** 374*5fd0122aSMatthias Ringwald extern uint32_t CS_getACLK(void); 375*5fd0122aSMatthias Ringwald 376*5fd0122aSMatthias Ringwald //****************************************************************************** 377*5fd0122aSMatthias Ringwald // 378*5fd0122aSMatthias Ringwald //! Get the current SMCLK frequency. 379*5fd0122aSMatthias Ringwald //! 380*5fd0122aSMatthias Ringwald //! If a oscillator fault is set, the frequency returned will be based on the 381*5fd0122aSMatthias Ringwald //! fail safe mechanism of CS module. The user of this API must ensure that 382*5fd0122aSMatthias Ringwald //! CS_setExternalClockSourceFrequency API was invoked before in case LFXT or 383*5fd0122aSMatthias Ringwald //! HFXT is being used. 384*5fd0122aSMatthias Ringwald //! 385*5fd0122aSMatthias Ringwald //! \return Current SMCLK frequency in Hz 386*5fd0122aSMatthias Ringwald // 387*5fd0122aSMatthias Ringwald //****************************************************************************** 388*5fd0122aSMatthias Ringwald extern uint32_t CS_getSMCLK(void); 389*5fd0122aSMatthias Ringwald 390*5fd0122aSMatthias Ringwald //****************************************************************************** 391*5fd0122aSMatthias Ringwald // 392*5fd0122aSMatthias Ringwald //! Get the current MCLK frequency. 393*5fd0122aSMatthias Ringwald //! 394*5fd0122aSMatthias Ringwald //! If a oscillator fault is set, the frequency returned will be based on the 395*5fd0122aSMatthias Ringwald //! fail safe mechanism of CS module. The user of this API must ensure that 396*5fd0122aSMatthias Ringwald //! CS_setExternalClockSourceFrequency API was invoked before in case LFXT or 397*5fd0122aSMatthias Ringwald //! HFXT is being used. 398*5fd0122aSMatthias Ringwald //! 399*5fd0122aSMatthias Ringwald //! \return Current MCLK frequency in Hz 400*5fd0122aSMatthias Ringwald // 401*5fd0122aSMatthias Ringwald //****************************************************************************** 402*5fd0122aSMatthias Ringwald extern uint32_t CS_getMCLK(void); 403*5fd0122aSMatthias Ringwald 404*5fd0122aSMatthias Ringwald //****************************************************************************** 405*5fd0122aSMatthias Ringwald // 406*5fd0122aSMatthias Ringwald //! Get the current BCLK frequency. 407*5fd0122aSMatthias Ringwald //! 408*5fd0122aSMatthias Ringwald //! If a oscillator fault is set, the frequency returned will be based on the 409*5fd0122aSMatthias Ringwald //! fail safe mechanism of CS module. The user of this API must ensure that 410*5fd0122aSMatthias Ringwald //! \link CS_setExternalClockSourceFrequency \endlink API was invoked before in 411*5fd0122aSMatthias Ringwald //! case LFXT or HFXT is being used. 412*5fd0122aSMatthias Ringwald //! 413*5fd0122aSMatthias Ringwald //! \return Current BCLK frequency in Hz 414*5fd0122aSMatthias Ringwald // 415*5fd0122aSMatthias Ringwald //****************************************************************************** 416*5fd0122aSMatthias Ringwald extern uint32_t CS_getBCLK(void); 417*5fd0122aSMatthias Ringwald 418*5fd0122aSMatthias Ringwald //****************************************************************************** 419*5fd0122aSMatthias Ringwald // 420*5fd0122aSMatthias Ringwald //! Get the current HSMCLK frequency. 421*5fd0122aSMatthias Ringwald //! 422*5fd0122aSMatthias Ringwald //! If a oscillator fault is set, the frequency returned will be based on the 423*5fd0122aSMatthias Ringwald //! fail safe mechanism of CS module. The user of this API must ensure that 424*5fd0122aSMatthias Ringwald //! \link CS_setExternalClockSourceFrequency \endlink API was invoked before in 425*5fd0122aSMatthias Ringwald //! case LFXT or HFXT is being used. 426*5fd0122aSMatthias Ringwald //! 427*5fd0122aSMatthias Ringwald //! \return Current HSMCLK frequency in Hz 428*5fd0122aSMatthias Ringwald // 429*5fd0122aSMatthias Ringwald //****************************************************************************** 430*5fd0122aSMatthias Ringwald extern uint32_t CS_getHSMCLK(void); 431*5fd0122aSMatthias Ringwald 432*5fd0122aSMatthias Ringwald //****************************************************************************** 433*5fd0122aSMatthias Ringwald // 434*5fd0122aSMatthias Ringwald //! Sets the centered frequency of DCO operation. Each frequency represents 435*5fd0122aSMatthias Ringwald //! the centred frequency of a particular frequency range. Further tuning can 436*5fd0122aSMatthias Ringwald //! be achieved by using the CS_tuneDCOFrequency function. Note that setting 437*5fd0122aSMatthias Ringwald //! the nominal frequency will reset the tuning parameters. 438*5fd0122aSMatthias Ringwald //! 439*5fd0122aSMatthias Ringwald //! \param dcoFreq selects between the valid frequencies: 440*5fd0122aSMatthias Ringwald //! - \b CS_DCO_FREQUENCY_1_5, [1MHz to 2MHz] 441*5fd0122aSMatthias Ringwald //! - \b CS_DCO_FREQUENCY_3, [2MHz to 4MHz] 442*5fd0122aSMatthias Ringwald //! - \b CS_DCO_FREQUENCY_6, [4MHz to 8MHz] 443*5fd0122aSMatthias Ringwald //! - \b CS_DCO_FREQUENCY_12, [8MHz to 16MHz] 444*5fd0122aSMatthias Ringwald //! - \b CS_DCO_FREQUENCY_24, [16MHz to 32MHz] 445*5fd0122aSMatthias Ringwald //! - \b CS_DCO_FREQUENCY_48 [32MHz to 64MHz] 446*5fd0122aSMatthias Ringwald //! 447*5fd0122aSMatthias Ringwald //! \return NONE 448*5fd0122aSMatthias Ringwald // 449*5fd0122aSMatthias Ringwald //****************************************************************************** 450*5fd0122aSMatthias Ringwald extern void CS_setDCOCenteredFrequency(uint32_t dcoFreq); 451*5fd0122aSMatthias Ringwald 452*5fd0122aSMatthias Ringwald //****************************************************************************** 453*5fd0122aSMatthias Ringwald // 454*5fd0122aSMatthias Ringwald //! Automatically sets/tunes the DCO to the given frequency. Any valid value 455*5fd0122aSMatthias Ringwald //! up to max frequency in the spec can be given to this function and the API 456*5fd0122aSMatthias Ringwald //! will do its best to determine the correct tuning parameter. 457*5fd0122aSMatthias Ringwald //! 458*5fd0122aSMatthias Ringwald //! \note The frequency ranges that can be custom tuned on early release MSP432 459*5fd0122aSMatthias Ringwald //! devices is limited. For further details on supported tunable frequencies, 460*5fd0122aSMatthias Ringwald //! please refer to the device errata sheet or data sheet. 461*5fd0122aSMatthias Ringwald //! 462*5fd0122aSMatthias Ringwald //! \param dcoFrequency Frequency in Hz that the user wants to set the DCO to. 463*5fd0122aSMatthias Ringwald //! 464*5fd0122aSMatthias Ringwald //! \note This function uses floating point math to calculate the DCO tuning 465*5fd0122aSMatthias Ringwald //! parameter. If efficiency is a concern, the user should use the 466*5fd0122aSMatthias Ringwald //! \link FPU_enableModule \endlink function (if available) to enable 467*5fd0122aSMatthias Ringwald //! the floating point co-processor. 468*5fd0122aSMatthias Ringwald //! 469*5fd0122aSMatthias Ringwald //! \return None 470*5fd0122aSMatthias Ringwald // 471*5fd0122aSMatthias Ringwald //****************************************************************************** 472*5fd0122aSMatthias Ringwald extern void CS_setDCOFrequency(uint32_t dcoFrequency); 473*5fd0122aSMatthias Ringwald 474*5fd0122aSMatthias Ringwald //****************************************************************************** 475*5fd0122aSMatthias Ringwald // 476*5fd0122aSMatthias Ringwald //! Tunes the DCO to a specific frequency. Tuning of the DCO is based off of the 477*5fd0122aSMatthias Ringwald //! following equation in the user's guide: 478*5fd0122aSMatthias Ringwald //! 479*5fd0122aSMatthias Ringwald //! See the user's guide for more detailed information about DCO tuning. 480*5fd0122aSMatthias Ringwald //! 481*5fd0122aSMatthias Ringwald //! \note This function is not currently available on pre-release MSP432 devices. 482*5fd0122aSMatthias Ringwald //! On early release versions of MSP432, the DCO calibration information has not been 483*5fd0122aSMatthias Ringwald //! populated making the DCO only able to operate at the pre-calibrated centered 484*5fd0122aSMatthias Ringwald //! frequencies accessible by the \link CS_setDCOCenteredFrequency \endlink 485*5fd0122aSMatthias Ringwald //! function. While this function will be added on the final devices being released, 486*5fd0122aSMatthias Ringwald //! for early silicon please default to the pre-calibrated DCO center frequencies. 487*5fd0122aSMatthias Ringwald //! 488*5fd0122aSMatthias Ringwald //! \param tuneParameter Tuning parameter in 2's Compliment representation. 489*5fd0122aSMatthias Ringwald //! Can be negative or positive. 490*5fd0122aSMatthias Ringwald //! 491*5fd0122aSMatthias Ringwald //! \return NONE 492*5fd0122aSMatthias Ringwald // 493*5fd0122aSMatthias Ringwald //****************************************************************************** 494*5fd0122aSMatthias Ringwald extern void CS_tuneDCOFrequency(int16_t tuneParameter); 495*5fd0122aSMatthias Ringwald 496*5fd0122aSMatthias Ringwald //****************************************************************************** 497*5fd0122aSMatthias Ringwald // 498*5fd0122aSMatthias Ringwald //! Enables the external resistor for DCO operation 499*5fd0122aSMatthias Ringwald //! 500*5fd0122aSMatthias Ringwald //! \return NONE 501*5fd0122aSMatthias Ringwald // 502*5fd0122aSMatthias Ringwald //****************************************************************************** 503*5fd0122aSMatthias Ringwald extern void CS_enableDCOExternalResistor(void); 504*5fd0122aSMatthias Ringwald 505*5fd0122aSMatthias Ringwald //****************************************************************************** 506*5fd0122aSMatthias Ringwald // 507*5fd0122aSMatthias Ringwald //! Disables the external resistor for DCO operation 508*5fd0122aSMatthias Ringwald //! 509*5fd0122aSMatthias Ringwald //! \return NONE 510*5fd0122aSMatthias Ringwald // 511*5fd0122aSMatthias Ringwald //****************************************************************************** 512*5fd0122aSMatthias Ringwald extern void CS_disableDCOExternalResistor(void); 513*5fd0122aSMatthias Ringwald 514*5fd0122aSMatthias Ringwald //****************************************************************************** 515*5fd0122aSMatthias Ringwald // 516*5fd0122aSMatthias Ringwald //! Sets the calibration value for the DCO when using the external resistor 517*5fd0122aSMatthias Ringwald //! mode. This value is used for tuning the DCO to custom frequencies. By 518*5fd0122aSMatthias Ringwald //! default, the value in the CS module is populated by the calibration 519*5fd0122aSMatthias Ringwald //! data of the suggested external resistor (see device datasheet). 520*5fd0122aSMatthias Ringwald //! 521*5fd0122aSMatthias Ringwald //! \param calData is the calibration data constant for the external resistor. 522*5fd0122aSMatthias Ringwald //! 523*5fd0122aSMatthias Ringwald //! \param freqRange is the range of the DCO to set the external calibration 524*5fd0122aSMatthias Ringwald //! for. Frequencies above 32MHZ have a different calibration value 525*5fd0122aSMatthias Ringwald //! than frequencies below 32MHZ. 526*5fd0122aSMatthias Ringwald //! 527*5fd0122aSMatthias Ringwald //! \return None 528*5fd0122aSMatthias Ringwald // 529*5fd0122aSMatthias Ringwald //****************************************************************************** 530*5fd0122aSMatthias Ringwald extern void CS_setDCOExternalResistorCalibration(uint_fast8_t uiCalData, 531*5fd0122aSMatthias Ringwald uint_fast8_t freqRange); 532*5fd0122aSMatthias Ringwald 533*5fd0122aSMatthias Ringwald //****************************************************************************** 534*5fd0122aSMatthias Ringwald // 535*5fd0122aSMatthias Ringwald //! Gets the current tuned DCO frequency. If no tuning has been done, this 536*5fd0122aSMatthias Ringwald //! returns the nominal DCO frequency of the current DCO range. Note that this 537*5fd0122aSMatthias Ringwald //! function will grab any constant/calibration data from the DDDS table 538*5fd0122aSMatthias Ringwald //! without any user interaction needed. 539*5fd0122aSMatthias Ringwald //! 540*5fd0122aSMatthias Ringwald //! \note This function uses floating point math to calculate the DCO tuning 541*5fd0122aSMatthias Ringwald //! parameter. If efficiency is a concern, the user should use the 542*5fd0122aSMatthias Ringwald //! \link FPU_enableModule \endlink function (if available) to enable 543*5fd0122aSMatthias Ringwald //! the floating point co-processor. 544*5fd0122aSMatthias Ringwald //! 545*5fd0122aSMatthias Ringwald //! \return Current DCO frequency in Hz 546*5fd0122aSMatthias Ringwald // 547*5fd0122aSMatthias Ringwald //****************************************************************************** 548*5fd0122aSMatthias Ringwald extern uint32_t CS_getDCOFrequency(void); 549*5fd0122aSMatthias Ringwald 550*5fd0122aSMatthias Ringwald //****************************************************************************** 551*5fd0122aSMatthias Ringwald // 552*5fd0122aSMatthias Ringwald //! Automatically sets/tunes the DCO to the given frequency. Any valid value 553*5fd0122aSMatthias Ringwald //! up to (and including) 64Mhz can be given to this function and the API 554*5fd0122aSMatthias Ringwald //! will do its best to determine the correct tuning parameter. 555*5fd0122aSMatthias Ringwald //! 556*5fd0122aSMatthias Ringwald //! 557*5fd0122aSMatthias Ringwald //! \note This function is not currently available on pre-release MSP432 devices. 558*5fd0122aSMatthias Ringwald //! On early release versions of MSP432, the DCO calibration information has not been 559*5fd0122aSMatthias Ringwald //! populated making the DCO only able to operate at the pre-calibrated centered 560*5fd0122aSMatthias Ringwald //! frequencies accessible by the \link CS_setDCOCenteredFrequency \endlink 561*5fd0122aSMatthias Ringwald //! function. While this function will be added on the final devices being released, 562*5fd0122aSMatthias Ringwald //! for early silicon please default to the pre-calibrated DCO center frequencies. 563*5fd0122aSMatthias Ringwald //! 564*5fd0122aSMatthias Ringwald //! \param dcoFrequency Frequency in Hz (1500000 - 64000000) that the user wants 565*5fd0122aSMatthias Ringwald //! to set the DCO to. 566*5fd0122aSMatthias Ringwald //! 567*5fd0122aSMatthias Ringwald //! \note This function uses floating point math to calculate the DCO tuning 568*5fd0122aSMatthias Ringwald //! parameter. If efficiency is a concern, the user should use the 569*5fd0122aSMatthias Ringwald //! \link FPU_enableModule \endlink function (if available) to enable 570*5fd0122aSMatthias Ringwald //! the floating point co-processor. 571*5fd0122aSMatthias Ringwald //! 572*5fd0122aSMatthias Ringwald //! \return None 573*5fd0122aSMatthias Ringwald // 574*5fd0122aSMatthias Ringwald //****************************************************************************** 575*5fd0122aSMatthias Ringwald extern void CS_setDCOFrequency(uint32_t dcoFrequency); 576*5fd0122aSMatthias Ringwald 577*5fd0122aSMatthias Ringwald //****************************************************************************** 578*5fd0122aSMatthias Ringwald // 579*5fd0122aSMatthias Ringwald //! Enables the fault counter for the CS module. This function can enable 580*5fd0122aSMatthias Ringwald //! either the HFXT fault counter or the LFXT fault counter. 581*5fd0122aSMatthias Ringwald //! 582*5fd0122aSMatthias Ringwald //! \param counterSelect selects the fault counter to enable 583*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT_COUNTER 584*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT_COUNTER 585*5fd0122aSMatthias Ringwald //! 586*5fd0122aSMatthias Ringwald //! \return NONE 587*5fd0122aSMatthias Ringwald // 588*5fd0122aSMatthias Ringwald //****************************************************************************** 589*5fd0122aSMatthias Ringwald extern void CS_enableFaultCounter(uint_fast8_t counterSelect); 590*5fd0122aSMatthias Ringwald 591*5fd0122aSMatthias Ringwald //****************************************************************************** 592*5fd0122aSMatthias Ringwald // 593*5fd0122aSMatthias Ringwald //! Disables the fault counter for the CS module. This function can disable 594*5fd0122aSMatthias Ringwald //! either the HFXT fault counter or the LFXT fault counter. 595*5fd0122aSMatthias Ringwald //! 596*5fd0122aSMatthias Ringwald //! \param counterSelect selects the fault counter to disable 597*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT_COUNTER 598*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT_COUNTER 599*5fd0122aSMatthias Ringwald //! 600*5fd0122aSMatthias Ringwald //! \return NONE 601*5fd0122aSMatthias Ringwald // 602*5fd0122aSMatthias Ringwald //****************************************************************************** 603*5fd0122aSMatthias Ringwald extern void CS_disableFaultCounter(uint_fast8_t counterSelect); 604*5fd0122aSMatthias Ringwald 605*5fd0122aSMatthias Ringwald //****************************************************************************** 606*5fd0122aSMatthias Ringwald // 607*5fd0122aSMatthias Ringwald //! Resets the fault counter for the CS module. This function can reset 608*5fd0122aSMatthias Ringwald //! either the HFXT fault counter or the LFXT fault counter. 609*5fd0122aSMatthias Ringwald //! 610*5fd0122aSMatthias Ringwald //! \param counterSelect selects the fault counter to reset 611*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT_COUNTER 612*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT_COUNTER 613*5fd0122aSMatthias Ringwald //! 614*5fd0122aSMatthias Ringwald //! \return NONE 615*5fd0122aSMatthias Ringwald // 616*5fd0122aSMatthias Ringwald //****************************************************************************** 617*5fd0122aSMatthias Ringwald extern void CS_resetFaultCounter(uint_fast8_t counterSelect); 618*5fd0122aSMatthias Ringwald 619*5fd0122aSMatthias Ringwald //****************************************************************************** 620*5fd0122aSMatthias Ringwald // 621*5fd0122aSMatthias Ringwald //! Sets the count for the start value of the fault counter. This function can 622*5fd0122aSMatthias Ringwald //! be used to set either the HFXT count or the LFXT count. 623*5fd0122aSMatthias Ringwald //! 624*5fd0122aSMatthias Ringwald //! \param counterSelect selects the fault counter to reset 625*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT_COUNTER 626*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT_COUNTER 627*5fd0122aSMatthias Ringwald //! \param countValue selects the cycles to set the fault counter to 628*5fd0122aSMatthias Ringwald //! - \b CS_FAULT_COUNTER_4096_CYCLES 629*5fd0122aSMatthias Ringwald //! - \b CS_FAULT_COUNTER_8192_CYCLES 630*5fd0122aSMatthias Ringwald //! - \b CS_FAULT_COUNTER_16384_CYCLES 631*5fd0122aSMatthias Ringwald //! - \b CS_FAULT_COUNTER_32768_CYCLES 632*5fd0122aSMatthias Ringwald //! 633*5fd0122aSMatthias Ringwald //! \return NONE 634*5fd0122aSMatthias Ringwald // 635*5fd0122aSMatthias Ringwald //****************************************************************************** 636*5fd0122aSMatthias Ringwald extern void CS_startFaultCounter(uint_fast8_t counterSelect, 637*5fd0122aSMatthias Ringwald uint_fast8_t countValue); 638*5fd0122aSMatthias Ringwald 639*5fd0122aSMatthias Ringwald //***************************************************************************** 640*5fd0122aSMatthias Ringwald // 641*5fd0122aSMatthias Ringwald //! Enables individual clock control interrupt sources. 642*5fd0122aSMatthias Ringwald //! 643*5fd0122aSMatthias Ringwald //! \param flags is a bit mask of the interrupt sources to be enabled. Must 644*5fd0122aSMatthias Ringwald //! be a logical OR of: 645*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT, 646*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT, 647*5fd0122aSMatthias Ringwald //! - \b CS_DCOMIN_FAULT, 648*5fd0122aSMatthias Ringwald //! - \b CS_DCOMAX_FAULT, 649*5fd0122aSMatthias Ringwald //! - \b CS_DCO_OPEN_FAULT, 650*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_LFXT_FAULT, 651*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_HFXT_FAULT, 652*5fd0122aSMatthias Ringwald //! 653*5fd0122aSMatthias Ringwald //! This function enables the indicated clock system interrupt sources. Only 654*5fd0122aSMatthias Ringwald //! the sources that are enabled can be reflected to the processor interrupt; 655*5fd0122aSMatthias Ringwald //! disabled sources have no effect on the processor. 656*5fd0122aSMatthias Ringwald //! 657*5fd0122aSMatthias Ringwald //! \note The interrupt sources vary based on the part in use. 658*5fd0122aSMatthias Ringwald //! Please consult the data sheet for the part you are using to determine 659*5fd0122aSMatthias Ringwald //! which interrupt sources are available. 660*5fd0122aSMatthias Ringwald //! 661*5fd0122aSMatthias Ringwald //! \return None. 662*5fd0122aSMatthias Ringwald // 663*5fd0122aSMatthias Ringwald //***************************************************************************** 664*5fd0122aSMatthias Ringwald extern void CS_enableInterrupt(uint32_t flags); 665*5fd0122aSMatthias Ringwald 666*5fd0122aSMatthias Ringwald //***************************************************************************** 667*5fd0122aSMatthias Ringwald // 668*5fd0122aSMatthias Ringwald //! Disables individual clock system interrupt sources. 669*5fd0122aSMatthias Ringwald //! 670*5fd0122aSMatthias Ringwald //! \param flags is a bit mask of the interrupt sources to be disabled. Must 671*5fd0122aSMatthias Ringwald //! be a logical OR of: 672*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT, 673*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT, 674*5fd0122aSMatthias Ringwald //! - \b CS_DCOMIN_FAULT, 675*5fd0122aSMatthias Ringwald //! - \b CS_DCOMAX_FAULT, 676*5fd0122aSMatthias Ringwald //! - \b CS_DCO_OPEN_FAULT, 677*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_LFXT_FAULT, 678*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_HFXT_FAULT, 679*5fd0122aSMatthias Ringwald //! 680*5fd0122aSMatthias Ringwald //! \note The interrupt sources vary based on the part in use. 681*5fd0122aSMatthias Ringwald //! Please consult the data sheet for the part you are using to determine 682*5fd0122aSMatthias Ringwald //! which interrupt sources are available. 683*5fd0122aSMatthias Ringwald //! 684*5fd0122aSMatthias Ringwald //! \return None. 685*5fd0122aSMatthias Ringwald // 686*5fd0122aSMatthias Ringwald //***************************************************************************** 687*5fd0122aSMatthias Ringwald extern void CS_disableInterrupt(uint32_t flags); 688*5fd0122aSMatthias Ringwald 689*5fd0122aSMatthias Ringwald //***************************************************************************** 690*5fd0122aSMatthias Ringwald // 691*5fd0122aSMatthias Ringwald //! Gets the current interrupt status masked with the enabled interrupts. 692*5fd0122aSMatthias Ringwald //! This function is useful to call in ISRs to get a list of pending interrupts 693*5fd0122aSMatthias Ringwald //! that are actually enabled and could have caused the ISR. 694*5fd0122aSMatthias Ringwald //! 695*5fd0122aSMatthias Ringwald //! \return The current interrupt status, enumerated as a bit field of 696*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT, 697*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT, 698*5fd0122aSMatthias Ringwald //! - \b CS_DCO_OPEN_FAULT, 699*5fd0122aSMatthias Ringwald //! - \b CS_DCO_SHORT_FAULT, 700*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_LFXT_FAULT, 701*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_HFXT_FAULT, 702*5fd0122aSMatthias Ringwald //! 703*5fd0122aSMatthias Ringwald //! \note The interrupt sources vary based on the part in use. 704*5fd0122aSMatthias Ringwald //! Please consult the data sheet for the part you are using to determine 705*5fd0122aSMatthias Ringwald //! which interrupt sources are available. 706*5fd0122aSMatthias Ringwald // 707*5fd0122aSMatthias Ringwald //***************************************************************************** 708*5fd0122aSMatthias Ringwald extern uint32_t CS_getEnabledInterruptStatus(void); 709*5fd0122aSMatthias Ringwald 710*5fd0122aSMatthias Ringwald //***************************************************************************** 711*5fd0122aSMatthias Ringwald // 712*5fd0122aSMatthias Ringwald //! Gets the current interrupt status. 713*5fd0122aSMatthias Ringwald //! 714*5fd0122aSMatthias Ringwald //! \return The current interrupt status, enumerated as a bit field of: 715*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT, 716*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT, 717*5fd0122aSMatthias Ringwald //! - \b CS_DCO_OPEN_FAULT, 718*5fd0122aSMatthias Ringwald //! - \b CS_DCO_SHORT_FAULT, 719*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_LFXT_FAULT, 720*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_HFXT_FAULT, 721*5fd0122aSMatthias Ringwald //! 722*5fd0122aSMatthias Ringwald //! \note The interrupt sources vary based on the part in use. 723*5fd0122aSMatthias Ringwald //! Please consult the data sheet for the part you are using to determine 724*5fd0122aSMatthias Ringwald //! which interrupt sources are available. 725*5fd0122aSMatthias Ringwald // 726*5fd0122aSMatthias Ringwald //***************************************************************************** 727*5fd0122aSMatthias Ringwald extern uint32_t CS_getInterruptStatus(void); 728*5fd0122aSMatthias Ringwald 729*5fd0122aSMatthias Ringwald //***************************************************************************** 730*5fd0122aSMatthias Ringwald // 731*5fd0122aSMatthias Ringwald //! Clears clock system interrupt sources. 732*5fd0122aSMatthias Ringwald //! 733*5fd0122aSMatthias Ringwald //! \param flags is a bit mask of the interrupt sources to be cleared. Must 734*5fd0122aSMatthias Ringwald //! be a logical OR of: 735*5fd0122aSMatthias Ringwald //! - \b CS_LFXT_FAULT, 736*5fd0122aSMatthias Ringwald //! - \b CS_HFXT_FAULT, 737*5fd0122aSMatthias Ringwald //! - \b CS_DCO_OPEN_FAULT, 738*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_LFXT_FAULT, 739*5fd0122aSMatthias Ringwald //! - \b CS_STARTCOUNT_HFXT_FAULT, 740*5fd0122aSMatthias Ringwald //! 741*5fd0122aSMatthias Ringwald //! The specified clock system interrupt sources are cleared, so that they no 742*5fd0122aSMatthias Ringwald //! longer assert. This function must be called in the interrupt handler to 743*5fd0122aSMatthias Ringwald //! keep it from being called again immediately upon exit. 744*5fd0122aSMatthias Ringwald //! 745*5fd0122aSMatthias Ringwald //! \note Because there is a write buffer in the Cortex-M processor, it may 746*5fd0122aSMatthias Ringwald //! take several clock cycles before the interrupt source is actually cleared. 747*5fd0122aSMatthias Ringwald //! Therefore, it is recommended that the interrupt source be cleared early in 748*5fd0122aSMatthias Ringwald //! the interrupt handler (as opposed to the very last action) to avoid 749*5fd0122aSMatthias Ringwald //! returning from the interrupt handler before the interrupt source is 750*5fd0122aSMatthias Ringwald //! actually cleared. Failure to do so may result in the interrupt handler 751*5fd0122aSMatthias Ringwald //! being immediately reentered (because the interrupt controller still sees 752*5fd0122aSMatthias Ringwald //! the interrupt source asserted). 753*5fd0122aSMatthias Ringwald //! 754*5fd0122aSMatthias Ringwald //! \note The interrupt sources vary based on the part in use. 755*5fd0122aSMatthias Ringwald //! Please consult the data sheet for the part you are using to determine 756*5fd0122aSMatthias Ringwald //! which interrupt sources are available. 757*5fd0122aSMatthias Ringwald //! 758*5fd0122aSMatthias Ringwald //! \return None. 759*5fd0122aSMatthias Ringwald // 760*5fd0122aSMatthias Ringwald //***************************************************************************** 761*5fd0122aSMatthias Ringwald extern void CS_clearInterruptFlag(uint32_t flags); 762*5fd0122aSMatthias Ringwald 763*5fd0122aSMatthias Ringwald //***************************************************************************** 764*5fd0122aSMatthias Ringwald // 765*5fd0122aSMatthias Ringwald //! Registers an interrupt handler for the clock system interrupt. 766*5fd0122aSMatthias Ringwald //! 767*5fd0122aSMatthias Ringwald //! \param intHandler is a pointer to the function to be called when the clock 768*5fd0122aSMatthias Ringwald //! system interrupt occurs. 769*5fd0122aSMatthias Ringwald //! 770*5fd0122aSMatthias Ringwald //! This function registers the handler to be called when a clock system 771*5fd0122aSMatthias Ringwald //! interrupt occurs. This function enables the global interrupt in the 772*5fd0122aSMatthias Ringwald //! interrupt controller; specific clock system interrupts must be enabled 773*5fd0122aSMatthias Ringwald //! via CS_enableInterrupt(). It is the interrupt handler's responsibility to 774*5fd0122aSMatthias Ringwald //! clear the interrupt source via CS_clearInterruptFlag(). 775*5fd0122aSMatthias Ringwald //! 776*5fd0122aSMatthias Ringwald //! Clock System can generate interrupts when 777*5fd0122aSMatthias Ringwald //! 778*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about 779*5fd0122aSMatthias Ringwald //! registering interrupt handlers. 780*5fd0122aSMatthias Ringwald //! 781*5fd0122aSMatthias Ringwald //! \return None. 782*5fd0122aSMatthias Ringwald // 783*5fd0122aSMatthias Ringwald //***************************************************************************** 784*5fd0122aSMatthias Ringwald extern void CS_registerInterrupt(void (*intHandler)(void)); 785*5fd0122aSMatthias Ringwald 786*5fd0122aSMatthias Ringwald //***************************************************************************** 787*5fd0122aSMatthias Ringwald // 788*5fd0122aSMatthias Ringwald //! Unregisters the interrupt handler for the clock system. 789*5fd0122aSMatthias Ringwald //! 790*5fd0122aSMatthias Ringwald //! This function unregisters the handler to be called when a clock system 791*5fd0122aSMatthias Ringwald //! interrupt occurs. This function also masks off the interrupt in the 792*5fd0122aSMatthias Ringwald //! interrupt controller so that the interrupt handler no longer is called. 793*5fd0122aSMatthias Ringwald //! 794*5fd0122aSMatthias Ringwald //! \sa Interrupt_registerInterrupt() for important information about 795*5fd0122aSMatthias Ringwald //! registering interrupt handlers. 796*5fd0122aSMatthias Ringwald //! 797*5fd0122aSMatthias Ringwald //! \return None. 798*5fd0122aSMatthias Ringwald // 799*5fd0122aSMatthias Ringwald //***************************************************************************** 800*5fd0122aSMatthias Ringwald extern void CS_unregisterInterrupt(void); 801*5fd0122aSMatthias Ringwald 802*5fd0122aSMatthias Ringwald //***************************************************************************** 803*5fd0122aSMatthias Ringwald // 804*5fd0122aSMatthias Ringwald // Mark the end of the C bindings section for C++ compilers. 805*5fd0122aSMatthias Ringwald // 806*5fd0122aSMatthias Ringwald //***************************************************************************** 807*5fd0122aSMatthias Ringwald #ifdef __cplusplus 808*5fd0122aSMatthias Ringwald } 809*5fd0122aSMatthias Ringwald #endif 810*5fd0122aSMatthias Ringwald 811*5fd0122aSMatthias Ringwald //***************************************************************************** 812*5fd0122aSMatthias Ringwald // 813*5fd0122aSMatthias Ringwald // Close the Doxygen group. 814*5fd0122aSMatthias Ringwald //! @} 815*5fd0122aSMatthias Ringwald // 816*5fd0122aSMatthias Ringwald //***************************************************************************** 817*5fd0122aSMatthias Ringwald 818*5fd0122aSMatthias Ringwald #endif 819