xref: /btstack/port/msp432p401lp-cc256x/ti/devices/msp432p4xx/driverlib/cs.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 __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