]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_KPSDK_CODE/drivers/clock/fsl_clock_manager.h
Merge commit 'fdc38ef3f92af7adeeb4de49550d8838c8a39b5c'
[qmk_firmware.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / hal / TARGET_Freescale / TARGET_KPSDK_MCUS / TARGET_KPSDK_CODE / drivers / clock / fsl_clock_manager.h
1 /*
2  * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * o Redistributions of source code must retain the above copyright notice, this list
9  *   of conditions and the following disclaimer.
10  *
11  * o Redistributions in binary form must reproduce the above copyright notice, this
12  *   list of conditions and the following disclaimer in the documentation and/or
13  *   other materials provided with the distribution.
14  *
15  * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16  *   contributors may be used to endorse or promote products derived from this
17  *   software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #if !defined(__FSL_CLOCK_MANAGER_H__)
32 #define __FSL_CLOCK_MANAGER_H__
33
34 #include <stdint.h>
35 #include <stdbool.h>
36 #include <assert.h>
37 #include "fsl_mcg_hal.h"
38 #include "fsl_sim_hal.h"
39
40 /*! @addtogroup clock_manager*/
41 /*! @{*/
42
43 /*! @file*/
44
45 /*******************************************************************************
46  * Definitions
47  ******************************************************************************/
48
49 /* system clocks definition (should be moved to other proper place) */
50 #define CPU_XTAL1hz_CLK_HZ          1
51 #define CPU_LPO_CLK_HZ           1000
52
53 /* external clock definition (should be moved to other proper place) */
54
55 #define SDHC0_CLKIN                 0   /* kSimSDHC0_CLKIN */ 
56 #define ENET_1588_CLKIN             0   /* kSimENET_1588_CLKIN */
57 #define EXTAL_Clock                 0   /* kSimEXTAL_Clock */
58 #define EXTAL1_Clock                0   /* kSimEXTAL1_Clock */
59 #define USB_CLKIN                   0   /* kSimUSB_CLKIN */
60
61 /* Table of base addresses for instances. */
62 extern const uint32_t g_simBaseAddr[];
63 extern const uint32_t g_mcgBaseAddr[];
64
65 /*!
66  * @brief Error code definition for the clock manager APIs
67  */
68 typedef enum _clock_manager_error_code {
69     kClockManagerSuccess,                           /*!< success */
70     kClockManagerNoSuchClockName,                   /*!< cannot find the clock name */
71     kClockManagerNoSuchClockModule,                 /*!< cannot find the clock module name */
72     kClockManagerNoSuchClockSource,                 /*!< cannot find the clock source name */
73     kClockManagerNoSuchDivider,                     /*!< cannot find the divider name */
74     kClockManagerUnknown                            /*!< unknown error*/
75 } clock_manager_error_code_t;
76
77
78 /*******************************************************************************
79  * API
80  ******************************************************************************/
81
82 #if defined(__cplusplus)
83 extern "C" {
84 #endif /* __cplusplus*/
85
86 /*! @name Clock Frequencies*/
87 /*@{*/
88
89 /*!
90  * @brief Gets the clock frequency for a specific clock name.
91  *
92  * This function checks the current clock configurations and then calculates
93  * the clock frequency for a specific clock name defined in clock_names_t.
94  * The MCG must be properly configured before using this function. See
95  * the reference manual for supported clock names for different chip families.
96  * The returned value is in Hertz. If it cannot find the clock name
97  * or the name is not supported for a specific chip family, it returns an
98  * error.
99  *
100  * @param clockName Clock names defined in clock_names_t
101  * @param frequency Returned clock frequency value in Hertz
102  * @return status   Error code defined in clock_manager_error_code_t
103  */
104 clock_manager_error_code_t CLOCK_SYS_GetFreq(clock_names_t clockName,
105                                                         uint32_t *frequency);
106
107 /*!
108  * @brief Sets the clock source setting.
109  *
110  * This function sets the settings for a specified clock source. Each clock 
111  * source has its own clock selection settings. See the chip reference manual for 
112  * clock source detailed settings and the sim_clock_source_names_t 
113  * for clock sources.
114  *
115  * @param clockSource Clock source name defined in sim_clock_source_names_t
116  * @param setting     Setting value
117  * @return status     If the clock source doesn't exist, it returns an error.
118  */
119 clock_manager_error_code_t CLOCK_SYS_SetSource(clock_source_names_t clockSource, 
120                                                uint8_t setting);
121
122 /*!
123  * @brief Gets the clock source setting.
124  *
125  * This function gets the settings for a specified clock source. Each clock
126  * source has its own clock selection settings. See the reference manual for
127  * clock source detailed settings and the sim_clock_source_names_t
128  * for clock sources.
129  *
130  * @param clockSource Clock source name
131  * @param setting     Current setting for the clock source
132  * @return status     If the clock source doesn't exist, it returns an error.
133  */
134 clock_manager_error_code_t CLOCK_SYS_GetSource(clock_source_names_t clockSource, 
135                                                uint8_t *setting);
136
137 /*!
138  * @brief Sets the clock divider setting.
139  *
140  * This function sets the setting for a specified clock divider. See the
141  * reference manual for a supported clock divider and value range and the
142  * sim_clock_divider_names_t for dividers.
143  *
144  * @param clockDivider Clock divider name
145  * @param divider      Divider setting
146  * @return status      If the clock divider doesn't exist, it  returns an error.
147  */
148 clock_manager_error_code_t CLOCK_SYS_SetDivider(clock_divider_names_t clockDivider, 
149                                                 uint32_t setting);
150
151 /*!
152  * @brief Gets the clock divider setting.
153  *
154  * This function gets the setting for a specified clock divider. See the
155  * reference manual for a supported clock divider and value range and the 
156  * clock_divider_names_t for dividers.
157  *
158  * @param clockDivider Clock divider name
159  * @param divider      Divider value pointer
160  * @return status      If the clock divider doesn't exist, it returns an error.
161  */
162 clock_manager_error_code_t CLOCK_SYS_GetDivider(clock_divider_names_t clockDivider,
163                                                 uint32_t *setting);
164
165 /*!
166  * @brief Sets the clock out dividers setting.
167  *
168  * This function sets the setting for all clock out dividers at the same time.
169  * See the reference manual for a supported clock divider and value range and the
170  * clock_divider_names_t for clock out dividers.
171  *
172  * @param outdiv1      Outdivider1 setting
173  * @param outdiv2      Outdivider2 setting
174  * @param outdiv3      Outdivider3 setting
175  * @param outdiv4      Outdivider4 setting
176  */
177 static inline void CLOCK_SYS_SetOutDividers(uint32_t outdiv1, uint32_t outdiv2,
178                                             uint32_t outdiv3, uint32_t outdiv4)
179 {
180     CLOCK_HAL_SetOutDividers(g_simBaseAddr[0], outdiv1, outdiv2, outdiv3, outdiv4);
181 }
182
183 #if defined(__cplusplus)
184 }
185 #endif /* __cplusplus*/
186
187 /*! @}*/
188
189 /*
190  * Include the cpu specific clock API header files.
191  */
192 #if (defined(CPU_MK02FN128VFM10) || defined(CPU_MK02FN64VFM10) || defined(CPU_MK02FN128VLF10) || \
193     defined(CPU_MK02FN64VLF10) || defined(CPU_MK02FN128VLH10) || defined(CPU_MK02FN64VLH10))
194
195     #define K02F12810_SERIES
196
197 #elif (defined(CPU_MK20DX128VMP5) || defined(CPU_MK20DN128VMP5) || defined(CPU_MK20DX64VMP5) || \
198     defined(CPU_MK20DN64VMP5) || defined(CPU_MK20DX32VMP5) || defined(CPU_MK20DN32VMP5) || \
199     defined(CPU_MK20DX128VLH5) || defined(CPU_MK20DN128VLH5) || defined(CPU_MK20DX64VLH5) || \
200     defined(CPU_MK20DN64VLH5) || defined(CPU_MK20DX32VLH5) || defined(CPU_MK20DN32VLH5) || \
201     defined(CPU_MK20DX128VFM5) || defined(CPU_MK20DN128VFM5) || defined(CPU_MK20DX64VFM5) || \
202     defined(CPU_MK20DN64VFM5) || defined(CPU_MK20DX32VFM5) || defined(CPU_MK20DN32VFM5) || \
203     defined(CPU_MK20DX128VFT5) || defined(CPU_MK20DN128VFT5) || defined(CPU_MK20DX64VFT5) || \
204     defined(CPU_MK20DN64VFT5) || defined(CPU_MK20DX32VFT5) || defined(CPU_MK20DN32VFT5) || \
205     defined(CPU_MK20DX128VLF5) || defined(CPU_MK20DN128VLF5) || defined(CPU_MK20DX64VLF5) || \
206     defined(CPU_MK20DN64VLF5) || defined(CPU_MK20DX32VLF5) || defined(CPU_MK20DN32VLF5))
207
208     #define K20D5_SERIES
209
210
211 #elif (defined(CPU_MK22FN128VDC10) || defined(CPU_MK22FN128VLH10) || defined(CPU_MK22FN128VLL10) || \
212     defined(CPU_MK22FN128VMP10))
213
214     #define K22F12810_SERIES
215
216     /* Clock System Level API header file */
217     #include "MK22F12810/fsl_clock_K22F12810.h"
218
219 #elif (defined(CPU_MK22FN256VDC12) || defined(CPU_MK22FN256VLH12) || defined(CPU_MK22FN256VLL12) || \
220     defined(CPU_MK22FN256VMP12))
221
222     #define K22F25612_SERIES
223
224     /* Clock System Level API header file */
225     #include "MK22F25612/fsl_clock_K22F25612.h"
226
227
228
229 #elif (defined(CPU_MK22FN512VDC12) || defined(CPU_MK22FN512VLH12) || defined(CPU_MK22FN512VLL12))
230
231     #define K22F51212_SERIES
232
233     /* Clock System Level API header file */
234     #include "MK22F51212/fsl_clock_K22F51212.h"
235
236
237 #elif (defined(CPU_MK24FN1M0VDC12) || defined(CPU_MK24FN1M0VLQ12))
238
239     #define K24F12_SERIES
240
241     /* Clock System Level API header file */
242     #include "MK24F12/fsl_clock_K24F12.h"
243
244 #elif (defined(CPU_MK24FN256VDC12))
245
246     #define K24F25612_SERIES
247
248
249 #elif (defined(CPU_MK63FN1M0VLQ12) || defined(CPU_MK63FN1M0VMD12))
250
251     #define K63F12_SERIES
252
253     /* Clock System Level API header file */
254     #include "MK63F12/fsl_clock_K63F12.h"
255
256 #elif (defined(CPU_MK64FX512VDC12) || defined(CPU_MK64FN1M0VDC12) || defined(CPU_MK64FX512VLL12) || \
257     defined(CPU_MK64FN1M0VLL12) || defined(CPU_MK64FX512VLQ12) || defined(CPU_MK64FN1M0VLQ12) || \
258     defined(CPU_MK64FX512VMD12) || defined(CPU_MK64FN1M0VMD12))
259
260     #define K64F12_SERIES
261
262     /* Clock System Level API header file */
263     #include "MK64F12/fsl_clock_K64F12.h"
264
265 #elif (defined(CPU_MK65FN2M0CAC18) || defined(CPU_MK65FX1M0CAC18) || defined(CPU_MK65FN2M0VMI18) || \
266     defined(CPU_MK65FX1M0VMI18))
267
268     #define K65F18_SERIES
269
270
271 #elif (defined(CPU_MK66FN2M0VLQ18) || defined(CPU_MK66FX1M0VLQ18) || defined(CPU_MK66FN2M0VMD18) || \
272     defined(CPU_MK66FX1M0VMD18))
273
274     #define K66F18_SERIES
275
276
277 #elif (defined(CPU_MK70FN1M0VMF12) || defined(CPU_MK70FX512VMF12) || defined(CPU_MK70FN1M0VMF15) || \
278     defined(CPU_MK70FX512VMF15) || defined(CPU_MK70FN1M0VMJ12) || defined(CPU_MK70FX512VMJ12) || \
279     defined(CPU_MK70FN1M0VMJ15) || defined(CPU_MK70FX512VMJ15))
280
281     #define K70F12_SERIES
282
283
284 #elif (defined(CPU_MK70FN1M0VMF12) || defined(CPU_MK70FX512VMF12) || defined(CPU_MK70FN1M0VMF15) || \
285     defined(CPU_MK70FX512VMF15) || defined(CPU_MK70FN1M0VMJ12) || defined(CPU_MK70FX512VMJ12) || \
286     defined(CPU_MK70FN1M0VMJ15) || defined(CPU_MK70FX512VMJ15))
287
288     #define K70F15_SERIES
289
290
291 #elif (defined(CPU_MKL02Z32CAF4) || defined(CPU_MKL02Z8VFG4) || defined(CPU_MKL02Z16VFG4) || \
292     defined(CPU_MKL02Z32VFG4) || defined(CPU_MKL02Z16VFK4) || defined(CPU_MKL02Z32VFK4) || \
293     defined(CPU_MKL02Z16VFM4) || defined(CPU_MKL02Z32VFM4))
294
295     #define KL02Z4_SERIES
296
297
298 #elif (defined(CPU_MKL03Z32CAF4) || defined(CPU_MKL03Z8VFG4) || defined(CPU_MKL03Z16VFG4) || \
299     defined(CPU_MKL03Z32VFG4) || defined(CPU_MKL03Z8VFK4) || defined(CPU_MKL03Z16VFK4) || \
300     defined(CPU_MKL03Z32VFK4))
301
302     #define KL03Z4_SERIES
303
304
305 #elif (defined(CPU_MKL05Z8VFK4) || defined(CPU_MKL05Z16VFK4) || defined(CPU_MKL05Z32VFK4) || \
306     defined(CPU_MKL05Z8VLC4) || defined(CPU_MKL05Z16VLC4) || defined(CPU_MKL05Z32VLC4) || \
307     defined(CPU_MKL05Z8VFM4) || defined(CPU_MKL05Z16VFM4) || defined(CPU_MKL05Z32VFM4) || \
308     defined(CPU_MKL05Z16VLF4) || defined(CPU_MKL05Z32VLF4))
309
310     #define KL05Z4_SERIES
311
312
313 #elif (defined(CPU_MKL13Z64VFM4) || defined(CPU_MKL13Z128VFM4) || defined(CPU_MKL13Z256VFM4) || \
314     defined(CPU_MKL13Z64VFT4) || defined(CPU_MKL13Z128VFT4) || defined(CPU_MKL13Z256VFT4) || \
315     defined(CPU_MKL13Z64VLH4) || defined(CPU_MKL13Z128VLH4) || defined(CPU_MKL13Z256VLH4) || \
316     defined(CPU_MKL13Z64VMP4) || defined(CPU_MKL13Z128VMP4) || defined(CPU_MKL13Z256VMP4))
317
318     #define KL13Z4_SERIES
319
320
321 #elif (defined(CPU_MKL23Z64VFM4) || defined(CPU_MKL23Z128VFM4) || defined(CPU_MKL23Z256VFM4) || \
322     defined(CPU_MKL23Z64VFT4) || defined(CPU_MKL23Z128VFT4) || defined(CPU_MKL23Z256VFT4) || \
323     defined(CPU_MKL23Z64VLH4) || defined(CPU_MKL23Z128VLH4) || defined(CPU_MKL23Z256VLH4) || \
324     defined(CPU_MKL23Z64VMP4) || defined(CPU_MKL23Z128VMP4) || defined(CPU_MKL23Z256VMP4))
325
326     #define KL23Z4_SERIES
327
328
329 #elif (defined(CPU_MKL25Z32VFM4) || defined(CPU_MKL25Z64VFM4) || defined(CPU_MKL25Z128VFM4) || \
330     defined(CPU_MKL25Z32VFT4) || defined(CPU_MKL25Z64VFT4) || defined(CPU_MKL25Z128VFT4) || \
331     defined(CPU_MKL25Z32VLH4) || defined(CPU_MKL25Z64VLH4) || defined(CPU_MKL25Z128VLH4) || \
332     defined(CPU_MKL25Z32VLK4) || defined(CPU_MKL25Z64VLK4) || defined(CPU_MKL25Z128VLK4))
333
334     #define KL25Z4_SERIES
335
336     /* Clock System Level API header file */
337     #include "MKL25Z4/fsl_clock_KL25Z4.h"
338
339 #elif (defined(CPU_MKL26Z32VFM4) || defined(CPU_MKL26Z64VFM4) || defined(CPU_MKL26Z128VFM4) || \
340     defined(CPU_MKL26Z32VFT4) || defined(CPU_MKL26Z64VFT4) || defined(CPU_MKL26Z128VFT4) || \
341     defined(CPU_MKL26Z32VLH4) || defined(CPU_MKL26Z64VLH4) || defined(CPU_MKL26Z128VLH4) || \
342     defined(CPU_MKL26Z256VLH4) || defined(CPU_MKL26Z256VLK4) || defined(CPU_MKL26Z128VLL4) || \
343     defined(CPU_MKL26Z256VLL4) || defined(CPU_MKL26Z128VMC4) || defined(CPU_MKL26Z256VMC4))
344
345     #define KL26Z4_SERIES
346
347
348 #elif (defined(CPU_MKL33Z128VLH4) || defined(CPU_MKL33Z256VLH4) || defined(CPU_MKL33Z128VMP4) || \
349     defined(CPU_MKL33Z256VMP4))
350
351     #define KL33Z4_SERIES
352
353
354 #elif (defined(CPU_MKL43Z64VLH4) || defined(CPU_MKL43Z128VLH4) || defined(CPU_MKL43Z256VLH4) || \
355     defined(CPU_MKL43Z64VMP4) || defined(CPU_MKL43Z128VMP4) || defined(CPU_MKL43Z256VMP4))
356
357     #define KL43Z4_SERIES
358
359
360 #elif (defined(CPU_MKL46Z128VLH4) || defined(CPU_MKL46Z256VLH4) || defined(CPU_MKL46Z128VLL4) || \
361     defined(CPU_MKL46Z256VLL4) || defined(CPU_MKL46Z128VMC4) || defined(CPU_MKL46Z256VMC4))
362
363     #define KL46Z4_SERIES
364
365
366 #elif (defined(CPU_MKV30F128VFM10) || defined(CPU_MKV30F64VFM10) || defined(CPU_MKV30F128VLF10) || \
367     defined(CPU_MKV30F64VLF10) || defined(CPU_MKV30F128VLH10) || defined(CPU_MKV30F64VLH10))
368
369     #define KV30F12810_SERIES
370
371
372 #elif (defined(CPU_MKV31F128VLH10) || defined(CPU_MKV31F128VLL10))
373
374     #define KV31F12810_SERIES
375
376     /* Clock System Level API header file */
377     #include "MKV31F12810/fsl_clock_KV31F12810.h"
378
379 #elif (defined(CPU_MKV31F256VLH12) || defined(CPU_MKV31F256VLL12))
380
381     #define KV31F25612_SERIES
382
383     /* Clock System Level API header file */
384     #include "MKV31F25612/fsl_clock_KV31F25612.h"
385
386
387 #elif (defined(CPU_MKV31F512VLH12) || defined(CPU_MKV31F512VLL12))
388
389     #define KV31F51212_SERIES
390
391     /* Clock System Level API header file */
392     #include "MKV31F51212/fsl_clock_KV31F51212.h"
393
394 #elif (defined(CPU_MKV40F128VLH15) || defined(CPU_MKV40F128VLL15) || defined(CPU_MKV40F256VLH15) || \
395     defined(CPU_MKV40F256VLL15) || defined(CPU_MKV40F64VLH15))
396
397     #define KV40F15_SERIES
398
399
400 #elif (defined(CPU_MKV43F128VLH15) || defined(CPU_MKV43F128VLL15) || defined(CPU_MKV43F64VLH15))
401
402     #define KV43F15_SERIES
403
404
405 #elif (defined(CPU_MKV44F128VLH15) || defined(CPU_MKV44F128VLL15) || defined(CPU_MKV44F64VLH15))
406
407     #define KV44F15_SERIES
408
409
410 #elif (defined(CPU_MKV45F128VLH15) || defined(CPU_MKV45F128VLL15) || defined(CPU_MKV45F256VLH15) || \
411     defined(CPU_MKV45F256VLL15))
412
413     #define KV45F15_SERIES
414
415
416 #elif (defined(CPU_MKV46F128VLH15) || defined(CPU_MKV46F128VLL15) || defined(CPU_MKV46F256VLH15) || \
417     defined(CPU_MKV46F256VLL15))
418
419     #define KV46F15_SERIES
420
421 #else
422     #error "No valid CPU defined!"
423 #endif
424
425 #endif /* __FSL_CLOCK_MANAGER_H__*/
426 /*******************************************************************************
427  * EOF
428  ******************************************************************************/
429