added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /*
<> 144:ef7eb2e8f9f7 2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
<> 144:ef7eb2e8f9f7 3 * All rights reserved.
<> 144:ef7eb2e8f9f7 4 *
<> 144:ef7eb2e8f9f7 5 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 6 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 7 *
<> 144:ef7eb2e8f9f7 8 * o Redistributions of source code must retain the above copyright notice, this list
<> 144:ef7eb2e8f9f7 9 * of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 10 *
<> 144:ef7eb2e8f9f7 11 * o Redistributions in binary form must reproduce the above copyright notice, this
<> 144:ef7eb2e8f9f7 12 * list of conditions and the following disclaimer in the documentation and/or
<> 144:ef7eb2e8f9f7 13 * other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 14 *
<> 144:ef7eb2e8f9f7 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
<> 144:ef7eb2e8f9f7 16 * contributors may be used to endorse or promote products derived from this
<> 144:ef7eb2e8f9f7 17 * software without specific prior written permission.
<> 144:ef7eb2e8f9f7 18 *
<> 144:ef7eb2e8f9f7 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
<> 144:ef7eb2e8f9f7 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
<> 144:ef7eb2e8f9f7 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
<> 144:ef7eb2e8f9f7 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
<> 144:ef7eb2e8f9f7 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
<> 144:ef7eb2e8f9f7 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
<> 144:ef7eb2e8f9f7 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
<> 144:ef7eb2e8f9f7 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
<> 144:ef7eb2e8f9f7 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 29 */
<> 144:ef7eb2e8f9f7 30
<> 144:ef7eb2e8f9f7 31 #ifndef _FSL_CLOCK_H_
<> 144:ef7eb2e8f9f7 32 #define _FSL_CLOCK_H_
<> 144:ef7eb2e8f9f7 33
<> 144:ef7eb2e8f9f7 34 #include "fsl_device_registers.h"
<> 144:ef7eb2e8f9f7 35 #include <stdint.h>
<> 144:ef7eb2e8f9f7 36 #include <stdbool.h>
<> 144:ef7eb2e8f9f7 37 #include <assert.h>
<> 144:ef7eb2e8f9f7 38
<> 144:ef7eb2e8f9f7 39 /*! @addtogroup mcglite */
<> 144:ef7eb2e8f9f7 40 /*! @{ */
<> 144:ef7eb2e8f9f7 41
<> 144:ef7eb2e8f9f7 42 /*******************************************************************************
<> 144:ef7eb2e8f9f7 43 * Definitions
<> 144:ef7eb2e8f9f7 44 ******************************************************************************/
<> 144:ef7eb2e8f9f7 45
<> 144:ef7eb2e8f9f7 46 /*! @brief Clock driver version. */
<> 144:ef7eb2e8f9f7 47 #define FSL_CLOCK_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) /*!< Version 2.1.0. */
<> 144:ef7eb2e8f9f7 48
<> 144:ef7eb2e8f9f7 49 /*! @brief External XTAL0 (OSC0) clock frequency.
<> 144:ef7eb2e8f9f7 50 *
<> 144:ef7eb2e8f9f7 51 * The XTAL0/EXTAL0 (OSC0) clock frequency in Hz, when the clock is setup, use the
<> 144:ef7eb2e8f9f7 52 * function CLOCK_SetXtal0Freq to set the value in to clock driver. For example,
<> 144:ef7eb2e8f9f7 53 * if XTAL0 is 8MHz,
<> 144:ef7eb2e8f9f7 54 * @code
<> 144:ef7eb2e8f9f7 55 * CLOCK_InitOsc0(...); // Setup the OSC0
<> 144:ef7eb2e8f9f7 56 * CLOCK_SetXtal0Freq(80000000); // Set the XTAL0 value to clock driver.
<> 144:ef7eb2e8f9f7 57 * @endcode
<> 144:ef7eb2e8f9f7 58 *
<> 144:ef7eb2e8f9f7 59 * This is important for the multicore platforms, only one core needs to setup
<> 144:ef7eb2e8f9f7 60 * OSC0 using CLOCK_InitOsc0, all other cores need to call CLOCK_SetXtal0Freq
<> 144:ef7eb2e8f9f7 61 * to get valid clock frequency.
<> 144:ef7eb2e8f9f7 62 */
<> 144:ef7eb2e8f9f7 63 extern uint32_t g_xtal0Freq;
<> 144:ef7eb2e8f9f7 64
<> 144:ef7eb2e8f9f7 65 /*! @brief External XTAL32/EXTAL32/RTC_CLKIN clock frequency.
<> 144:ef7eb2e8f9f7 66 *
<> 144:ef7eb2e8f9f7 67 * The XTAL32/EXTAL32/RTC_CLKIN clock frequency in Hz, when the clock is setup, use the
<> 144:ef7eb2e8f9f7 68 * function CLOCK_SetXtal32Freq to set the value in to clock driver.
<> 144:ef7eb2e8f9f7 69 *
<> 144:ef7eb2e8f9f7 70 * This is important for the multicore platforms, only one core needs to setup
<> 144:ef7eb2e8f9f7 71 * the clock, all other cores need to call CLOCK_SetXtal32Freq
<> 144:ef7eb2e8f9f7 72 * to get valid clock frequency.
<> 144:ef7eb2e8f9f7 73 */
<> 144:ef7eb2e8f9f7 74 extern uint32_t g_xtal32Freq;
<> 144:ef7eb2e8f9f7 75
<> 144:ef7eb2e8f9f7 76 /*! @brief Clock ip name array for DMAMUX. */
<> 144:ef7eb2e8f9f7 77 #define DMAMUX_CLOCKS \
<> 144:ef7eb2e8f9f7 78 { \
<> 144:ef7eb2e8f9f7 79 kCLOCK_Dmamux0 \
<> 144:ef7eb2e8f9f7 80 }
<> 144:ef7eb2e8f9f7 81
<> 144:ef7eb2e8f9f7 82 /*! @brief Clock ip name array for RTC. */
<> 144:ef7eb2e8f9f7 83 #define RTC_CLOCKS \
<> 144:ef7eb2e8f9f7 84 { \
<> 144:ef7eb2e8f9f7 85 kCLOCK_Rtc0 \
<> 144:ef7eb2e8f9f7 86 }
<> 144:ef7eb2e8f9f7 87
<> 144:ef7eb2e8f9f7 88 /*! @brief Clock ip name array for SAI. */
<> 144:ef7eb2e8f9f7 89 #define SAI_CLOCKS \
<> 144:ef7eb2e8f9f7 90 { \
<> 144:ef7eb2e8f9f7 91 kCLOCK_Sai0 \
<> 144:ef7eb2e8f9f7 92 }
<> 144:ef7eb2e8f9f7 93
<> 144:ef7eb2e8f9f7 94 /*! @brief Clock ip name array for SPI. */
<> 144:ef7eb2e8f9f7 95 #define SPI_CLOCKS \
<> 144:ef7eb2e8f9f7 96 { \
<> 144:ef7eb2e8f9f7 97 kCLOCK_Spi0, kCLOCK_Spi1 \
<> 144:ef7eb2e8f9f7 98 }
<> 144:ef7eb2e8f9f7 99
<> 144:ef7eb2e8f9f7 100 /*! @brief Clock ip name array for SLCD. */
<> 144:ef7eb2e8f9f7 101 #define SLCD_CLOCKS \
<> 144:ef7eb2e8f9f7 102 { \
<> 144:ef7eb2e8f9f7 103 kCLOCK_Slcd0 \
<> 144:ef7eb2e8f9f7 104 }
<> 144:ef7eb2e8f9f7 105
<> 144:ef7eb2e8f9f7 106 /*! @brief Clock ip name array for PIT. */
<> 144:ef7eb2e8f9f7 107 #define PIT_CLOCKS \
<> 144:ef7eb2e8f9f7 108 { \
<> 144:ef7eb2e8f9f7 109 kCLOCK_Pit0 \
<> 144:ef7eb2e8f9f7 110 }
<> 144:ef7eb2e8f9f7 111
<> 144:ef7eb2e8f9f7 112 /*! @brief Clock ip name array for PORT. */
<> 144:ef7eb2e8f9f7 113 #define PORT_CLOCKS \
<> 144:ef7eb2e8f9f7 114 { \
<> 144:ef7eb2e8f9f7 115 kCLOCK_PortA, kCLOCK_PortB, kCLOCK_PortC, kCLOCK_PortD, kCLOCK_PortE \
<> 144:ef7eb2e8f9f7 116 }
<> 144:ef7eb2e8f9f7 117
<> 144:ef7eb2e8f9f7 118 /*! @brief Clock ip name array for LPUART. */
<> 144:ef7eb2e8f9f7 119 #define LPUART_CLOCKS \
<> 144:ef7eb2e8f9f7 120 { \
<> 144:ef7eb2e8f9f7 121 kCLOCK_Lpuart0, kCLOCK_Lpuart1 \
<> 144:ef7eb2e8f9f7 122 }
<> 144:ef7eb2e8f9f7 123
<> 144:ef7eb2e8f9f7 124 /*! @brief Clock ip name array for DAC. */
<> 144:ef7eb2e8f9f7 125 #define DAC_CLOCKS \
<> 144:ef7eb2e8f9f7 126 { \
<> 144:ef7eb2e8f9f7 127 kCLOCK_Dac0 \
<> 144:ef7eb2e8f9f7 128 }
<> 144:ef7eb2e8f9f7 129
<> 144:ef7eb2e8f9f7 130 /*! @brief Clock ip name array for LPTMR. */
<> 144:ef7eb2e8f9f7 131 #define LPTMR_CLOCKS \
<> 144:ef7eb2e8f9f7 132 { \
<> 144:ef7eb2e8f9f7 133 kCLOCK_Lptmr0 \
<> 144:ef7eb2e8f9f7 134 }
<> 144:ef7eb2e8f9f7 135
<> 144:ef7eb2e8f9f7 136 /*! @brief Clock ip name array for ADC16. */
<> 144:ef7eb2e8f9f7 137 #define ADC16_CLOCKS \
<> 144:ef7eb2e8f9f7 138 { \
<> 144:ef7eb2e8f9f7 139 kCLOCK_Adc0 \
<> 144:ef7eb2e8f9f7 140 }
<> 144:ef7eb2e8f9f7 141
<> 144:ef7eb2e8f9f7 142 /*! @brief Clock ip name array for FLEXIO. */
<> 144:ef7eb2e8f9f7 143 #define FLEXIO_CLOCKS \
<> 144:ef7eb2e8f9f7 144 { \
<> 144:ef7eb2e8f9f7 145 kCLOCK_Flexio0 \
<> 144:ef7eb2e8f9f7 146 }
<> 144:ef7eb2e8f9f7 147
<> 144:ef7eb2e8f9f7 148 /*! @brief Clock ip name array for VREF. */
<> 144:ef7eb2e8f9f7 149 #define VREF_CLOCKS \
<> 144:ef7eb2e8f9f7 150 { \
<> 144:ef7eb2e8f9f7 151 kCLOCK_Vref0 \
<> 144:ef7eb2e8f9f7 152 }
<> 144:ef7eb2e8f9f7 153
<> 144:ef7eb2e8f9f7 154 /*! @brief Clock ip name array for DMA. */
<> 144:ef7eb2e8f9f7 155 #define DMA_CLOCKS \
<> 144:ef7eb2e8f9f7 156 { \
<> 144:ef7eb2e8f9f7 157 kCLOCK_Dma0 \
<> 144:ef7eb2e8f9f7 158 }
<> 144:ef7eb2e8f9f7 159
<> 144:ef7eb2e8f9f7 160 /*! @brief Clock ip name array for UART. */
<> 144:ef7eb2e8f9f7 161 #define UART_CLOCKS \
<> 144:ef7eb2e8f9f7 162 { \
<> 144:ef7eb2e8f9f7 163 kCLOCK_IpInvalid, kCLOCK_IpInvalid, kCLOCK_Uart2 \
<> 144:ef7eb2e8f9f7 164 }
<> 144:ef7eb2e8f9f7 165
<> 144:ef7eb2e8f9f7 166 /*! @brief Clock ip name array for TPM. */
<> 144:ef7eb2e8f9f7 167 #define TPM_CLOCKS \
<> 144:ef7eb2e8f9f7 168 { \
<> 144:ef7eb2e8f9f7 169 kCLOCK_Tpm0, kCLOCK_Tpm1, kCLOCK_Tpm2 \
<> 144:ef7eb2e8f9f7 170 }
<> 144:ef7eb2e8f9f7 171
<> 144:ef7eb2e8f9f7 172 /*! @brief Clock ip name array for I2C. */
<> 144:ef7eb2e8f9f7 173 #define I2C_CLOCKS \
<> 144:ef7eb2e8f9f7 174 { \
<> 144:ef7eb2e8f9f7 175 kCLOCK_I2c0, kCLOCK_I2c1 \
<> 144:ef7eb2e8f9f7 176 }
<> 144:ef7eb2e8f9f7 177
<> 144:ef7eb2e8f9f7 178 /*! @brief Clock ip name array for FTF. */
<> 144:ef7eb2e8f9f7 179 #define FTF_CLOCKS \
<> 144:ef7eb2e8f9f7 180 { \
<> 144:ef7eb2e8f9f7 181 kCLOCK_Ftf0 \
<> 144:ef7eb2e8f9f7 182 }
<> 144:ef7eb2e8f9f7 183
<> 144:ef7eb2e8f9f7 184 /*! @brief Clock ip name array for CMP. */
<> 144:ef7eb2e8f9f7 185 #define CMP_CLOCKS \
<> 144:ef7eb2e8f9f7 186 { \
<> 144:ef7eb2e8f9f7 187 kCLOCK_Cmp0, kCLOCK_Cmp1, kCLOCK_Cmp2 \
<> 144:ef7eb2e8f9f7 188 }
<> 144:ef7eb2e8f9f7 189
<> 144:ef7eb2e8f9f7 190 /*!
<> 144:ef7eb2e8f9f7 191 * @brief LPO clock frequency.
<> 144:ef7eb2e8f9f7 192 */
<> 144:ef7eb2e8f9f7 193 #define LPO_CLK_FREQ 1000U
<> 144:ef7eb2e8f9f7 194
<> 144:ef7eb2e8f9f7 195 /*! @brief Peripherals clock source definition. */
<> 144:ef7eb2e8f9f7 196 #define SYS_CLK kCLOCK_CoreSysClk
<> 144:ef7eb2e8f9f7 197 #define BUS_CLK kCLOCK_BusClk
<> 144:ef7eb2e8f9f7 198
<> 144:ef7eb2e8f9f7 199 #define I2C0_CLK_SRC SYS_CLK
<> 144:ef7eb2e8f9f7 200 #define I2C1_CLK_SRC SYS_CLK
<> 144:ef7eb2e8f9f7 201 #define SPI0_CLK_SRC BUS_CLK
<> 144:ef7eb2e8f9f7 202 #define SPI1_CLK_SRC SYS_CLK
<> 144:ef7eb2e8f9f7 203 #define UART2_CLK_SRC BUS_CLK
<> 144:ef7eb2e8f9f7 204
<> 144:ef7eb2e8f9f7 205 /*! @brief Clock name used to get clock frequency. */
<> 144:ef7eb2e8f9f7 206 typedef enum _clock_name
<> 144:ef7eb2e8f9f7 207 {
<> 144:ef7eb2e8f9f7 208
<> 144:ef7eb2e8f9f7 209 /* ----------------------------- System layer clock -------------------------------*/
<> 144:ef7eb2e8f9f7 210 kCLOCK_CoreSysClk, /*!< Core/system clock */
<> 144:ef7eb2e8f9f7 211 kCLOCK_PlatClk, /*!< Platform clock */
<> 144:ef7eb2e8f9f7 212 kCLOCK_BusClk, /*!< Bus clock */
<> 144:ef7eb2e8f9f7 213 kCLOCK_FlexBusClk, /*!< FlexBus clock */
<> 144:ef7eb2e8f9f7 214 kCLOCK_FlashClk, /*!< Flash clock */
<> 144:ef7eb2e8f9f7 215 kCLOCK_FastPeriphClk, /*!< Fast peripheral clock */
<> 144:ef7eb2e8f9f7 216 kCLOCK_PllFllSelClk, /*!< The clock after SIM[PLLFLLSEL]. */
<> 144:ef7eb2e8f9f7 217
<> 144:ef7eb2e8f9f7 218 /* ---------------------------------- OSC clock -----------------------------------*/
<> 144:ef7eb2e8f9f7 219 kCLOCK_Er32kClk, /*!< External reference 32K clock (ERCLK32K) */
<> 144:ef7eb2e8f9f7 220 kCLOCK_Osc0ErClk, /*!< OSC0 external reference clock (OSC0ERCLK) */
<> 144:ef7eb2e8f9f7 221 kCLOCK_Osc1ErClk, /*!< OSC1 external reference clock (OSC1ERCLK) */
<> 144:ef7eb2e8f9f7 222 kCLOCK_Osc0ErClkUndiv, /*!< OSC0 external reference undivided clock(OSC0ERCLK_UNDIV). */
<> 144:ef7eb2e8f9f7 223
<> 144:ef7eb2e8f9f7 224 /* ----------------------------- MCG and MCG-Lite clock ---------------------------*/
<> 144:ef7eb2e8f9f7 225 kCLOCK_McgFixedFreqClk, /*!< MCG fixed frequency clock (MCGFFCLK) */
<> 144:ef7eb2e8f9f7 226 kCLOCK_McgInternalRefClk, /*!< MCG internal reference clock (MCGIRCLK) */
<> 144:ef7eb2e8f9f7 227 kCLOCK_McgFllClk, /*!< MCGFLLCLK */
<> 144:ef7eb2e8f9f7 228 kCLOCK_McgPll0Clk, /*!< MCGPLL0CLK */
<> 144:ef7eb2e8f9f7 229 kCLOCK_McgPll1Clk, /*!< MCGPLL1CLK */
<> 144:ef7eb2e8f9f7 230 kCLOCK_McgExtPllClk, /*!< EXT_PLLCLK */
<> 144:ef7eb2e8f9f7 231 kCLOCK_McgPeriphClk, /*!< MCG peripheral clock (MCGPCLK) */
<> 144:ef7eb2e8f9f7 232 kCLOCK_McgIrc48MClk, /*!< MCG IRC48M clock */
<> 144:ef7eb2e8f9f7 233
<> 144:ef7eb2e8f9f7 234 /* --------------------------------- Other clock ----------------------------------*/
<> 144:ef7eb2e8f9f7 235 kCLOCK_LpoClk, /*!< LPO clock */
<> 144:ef7eb2e8f9f7 236
<> 144:ef7eb2e8f9f7 237 } clock_name_t;
<> 144:ef7eb2e8f9f7 238
<> 144:ef7eb2e8f9f7 239 /*! @brief USB clock source definition. */
<> 144:ef7eb2e8f9f7 240 typedef enum _clock_usb_src
<> 144:ef7eb2e8f9f7 241 {
<> 144:ef7eb2e8f9f7 242 kCLOCK_UsbSrcIrc48M = SIM_SOPT2_USBSRC(1U), /*!< Use IRC48M. */
<> 144:ef7eb2e8f9f7 243 kCLOCK_UsbSrcExt = SIM_SOPT2_USBSRC(0U) /*!< Use USB_CLKIN. */
<> 144:ef7eb2e8f9f7 244 } clock_usb_src_t;
<> 144:ef7eb2e8f9f7 245 /*------------------------------------------------------------------------------
<> 144:ef7eb2e8f9f7 246
<> 144:ef7eb2e8f9f7 247 clock_gate_t definition:
<> 144:ef7eb2e8f9f7 248
<> 144:ef7eb2e8f9f7 249 31 16 0
<> 144:ef7eb2e8f9f7 250 -----------------------------------------------------------------
<> 144:ef7eb2e8f9f7 251 | SIM_SCGC register offset | control bit offset in SCGC |
<> 144:ef7eb2e8f9f7 252 -----------------------------------------------------------------
<> 144:ef7eb2e8f9f7 253
<> 144:ef7eb2e8f9f7 254 For example, the SDHC clock gate is controlled by SIM_SCGC3[17], the
<> 144:ef7eb2e8f9f7 255 SIM_SCGC3 offset in SIM is 0x1030, then kCLOCK_GateSdhc0 is defined as
<> 144:ef7eb2e8f9f7 256
<> 144:ef7eb2e8f9f7 257 kCLOCK_GateSdhc0 = (0x1030 << 16) | 17;
<> 144:ef7eb2e8f9f7 258
<> 144:ef7eb2e8f9f7 259 ------------------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 260
<> 144:ef7eb2e8f9f7 261 #define CLK_GATE_REG_OFFSET_SHIFT 16U
<> 144:ef7eb2e8f9f7 262 #define CLK_GATE_REG_OFFSET_MASK 0xFFFF0000U
<> 144:ef7eb2e8f9f7 263 #define CLK_GATE_BIT_SHIFT_SHIFT 0U
<> 144:ef7eb2e8f9f7 264 #define CLK_GATE_BIT_SHIFT_MASK 0x0000FFFFU
<> 144:ef7eb2e8f9f7 265
<> 144:ef7eb2e8f9f7 266 #define CLK_GATE_DEFINE(reg_offset, bit_shift) \
<> 144:ef7eb2e8f9f7 267 ((((reg_offset) << CLK_GATE_REG_OFFSET_SHIFT) & CLK_GATE_REG_OFFSET_MASK) | \
<> 144:ef7eb2e8f9f7 268 (((bit_shift) << CLK_GATE_BIT_SHIFT_SHIFT) & CLK_GATE_BIT_SHIFT_MASK))
<> 144:ef7eb2e8f9f7 269
<> 144:ef7eb2e8f9f7 270 #define CLK_GATE_ABSTRACT_REG_OFFSET(x) (((x)&CLK_GATE_REG_OFFSET_MASK) >> CLK_GATE_REG_OFFSET_SHIFT)
<> 144:ef7eb2e8f9f7 271 #define CLK_GATE_ABSTRACT_BITS_SHIFT(x) (((x)&CLK_GATE_BIT_SHIFT_MASK) >> CLK_GATE_BIT_SHIFT_SHIFT)
<> 144:ef7eb2e8f9f7 272
<> 144:ef7eb2e8f9f7 273 /*! @brief Clock gate name used for CLOCK_EnableClock/CLOCK_DisableClock. */
<> 144:ef7eb2e8f9f7 274 typedef enum _clock_ip_name
<> 144:ef7eb2e8f9f7 275 {
<> 144:ef7eb2e8f9f7 276 kCLOCK_IpInvalid = 0U,
<> 144:ef7eb2e8f9f7 277 kCLOCK_I2c0 = CLK_GATE_DEFINE(0x1034U, 6U),
<> 144:ef7eb2e8f9f7 278 kCLOCK_I2c1 = CLK_GATE_DEFINE(0x1034U, 7U),
<> 144:ef7eb2e8f9f7 279 kCLOCK_Uart2 = CLK_GATE_DEFINE(0x1034U, 12U),
<> 144:ef7eb2e8f9f7 280 kCLOCK_Usbfs0 = CLK_GATE_DEFINE(0x1034U, 18U),
<> 144:ef7eb2e8f9f7 281 kCLOCK_Cmp0 = CLK_GATE_DEFINE(0x1034U, 19U),
<> 144:ef7eb2e8f9f7 282 kCLOCK_Cmp1 = CLK_GATE_DEFINE(0x1034U, 19U),
<> 144:ef7eb2e8f9f7 283 kCLOCK_Cmp2 = CLK_GATE_DEFINE(0x1034U, 19U),
<> 144:ef7eb2e8f9f7 284 kCLOCK_Vref0 = CLK_GATE_DEFINE(0x1034U, 20U),
<> 144:ef7eb2e8f9f7 285 kCLOCK_Spi0 = CLK_GATE_DEFINE(0x1034U, 22U),
<> 144:ef7eb2e8f9f7 286 kCLOCK_Spi1 = CLK_GATE_DEFINE(0x1034U, 23U),
<> 144:ef7eb2e8f9f7 287
<> 144:ef7eb2e8f9f7 288 kCLOCK_Lptmr0 = CLK_GATE_DEFINE(0x1038U, 0U),
<> 144:ef7eb2e8f9f7 289 kCLOCK_PortA = CLK_GATE_DEFINE(0x1038U, 9U),
<> 144:ef7eb2e8f9f7 290 kCLOCK_PortB = CLK_GATE_DEFINE(0x1038U, 10U),
<> 144:ef7eb2e8f9f7 291 kCLOCK_PortC = CLK_GATE_DEFINE(0x1038U, 11U),
<> 144:ef7eb2e8f9f7 292 kCLOCK_PortD = CLK_GATE_DEFINE(0x1038U, 12U),
<> 144:ef7eb2e8f9f7 293 kCLOCK_PortE = CLK_GATE_DEFINE(0x1038U, 13U),
<> 144:ef7eb2e8f9f7 294 kCLOCK_Slcd0 = CLK_GATE_DEFINE(0x1038U, 19U),
<> 144:ef7eb2e8f9f7 295 kCLOCK_Lpuart0 = CLK_GATE_DEFINE(0x1038U, 20U),
<> 144:ef7eb2e8f9f7 296 kCLOCK_Lpuart1 = CLK_GATE_DEFINE(0x1038U, 21U),
<> 144:ef7eb2e8f9f7 297 kCLOCK_Flexio0 = CLK_GATE_DEFINE(0x1038U, 31U),
<> 144:ef7eb2e8f9f7 298
<> 144:ef7eb2e8f9f7 299 kCLOCK_Ftf0 = CLK_GATE_DEFINE(0x103CU, 0U),
<> 144:ef7eb2e8f9f7 300 kCLOCK_Dmamux0 = CLK_GATE_DEFINE(0x103CU, 1U),
<> 144:ef7eb2e8f9f7 301 kCLOCK_Sai0 = CLK_GATE_DEFINE(0x103CU, 15U),
<> 144:ef7eb2e8f9f7 302 kCLOCK_Pit0 = CLK_GATE_DEFINE(0x103CU, 23U),
<> 144:ef7eb2e8f9f7 303 kCLOCK_Tpm0 = CLK_GATE_DEFINE(0x103CU, 24U),
<> 144:ef7eb2e8f9f7 304 kCLOCK_Tpm1 = CLK_GATE_DEFINE(0x103CU, 25U),
<> 144:ef7eb2e8f9f7 305 kCLOCK_Tpm2 = CLK_GATE_DEFINE(0x103CU, 26U),
<> 144:ef7eb2e8f9f7 306 kCLOCK_Adc0 = CLK_GATE_DEFINE(0x103CU, 27U),
<> 144:ef7eb2e8f9f7 307 kCLOCK_Rtc0 = CLK_GATE_DEFINE(0x103CU, 29U),
<> 144:ef7eb2e8f9f7 308 kCLOCK_Dac0 = CLK_GATE_DEFINE(0x103CU, 31U),
<> 144:ef7eb2e8f9f7 309
<> 144:ef7eb2e8f9f7 310 kCLOCK_Dma0 = CLK_GATE_DEFINE(0x1040U, 8U),
<> 144:ef7eb2e8f9f7 311 } clock_ip_name_t;
<> 144:ef7eb2e8f9f7 312
<> 144:ef7eb2e8f9f7 313 /*!@brief SIM configuration structure for clock setting. */
<> 144:ef7eb2e8f9f7 314 typedef struct _sim_clock_config
<> 144:ef7eb2e8f9f7 315 {
<> 144:ef7eb2e8f9f7 316 uint8_t er32kSrc; /*!< ERCLK32K source selection. */
<> 144:ef7eb2e8f9f7 317 uint32_t clkdiv1; /*!< SIM_CLKDIV1. */
<> 144:ef7eb2e8f9f7 318 } sim_clock_config_t;
<> 144:ef7eb2e8f9f7 319
<> 144:ef7eb2e8f9f7 320 /*! @brief Oscillator capacitor load setting.*/
<> 144:ef7eb2e8f9f7 321 enum _osc_cap_load
<> 144:ef7eb2e8f9f7 322 {
<> 144:ef7eb2e8f9f7 323 kOSC_Cap2P = OSC_CR_SC2P_MASK, /*!< 2 pF capacitor load */
<> 144:ef7eb2e8f9f7 324 kOSC_Cap4P = OSC_CR_SC4P_MASK, /*!< 4 pF capacitor load */
<> 144:ef7eb2e8f9f7 325 kOSC_Cap8P = OSC_CR_SC8P_MASK, /*!< 8 pF capacitor load */
<> 144:ef7eb2e8f9f7 326 kOSC_Cap16P = OSC_CR_SC16P_MASK /*!< 16 pF capacitor load */
<> 144:ef7eb2e8f9f7 327 };
<> 144:ef7eb2e8f9f7 328
<> 144:ef7eb2e8f9f7 329 /*! @brief OSCERCLK enable mode. */
<> 144:ef7eb2e8f9f7 330 enum _oscer_enable_mode
<> 144:ef7eb2e8f9f7 331 {
<> 144:ef7eb2e8f9f7 332 kOSC_ErClkEnable = OSC_CR_ERCLKEN_MASK, /*!< Enable. */
<> 144:ef7eb2e8f9f7 333 kOSC_ErClkEnableInStop = OSC_CR_EREFSTEN_MASK /*!< Enable in stop mode. */
<> 144:ef7eb2e8f9f7 334 };
<> 144:ef7eb2e8f9f7 335
<> 144:ef7eb2e8f9f7 336 /*! @brief OSC configuration for OSCERCLK. */
<> 144:ef7eb2e8f9f7 337 typedef struct _oscer_config
<> 144:ef7eb2e8f9f7 338 {
<> 144:ef7eb2e8f9f7 339 uint8_t enableMode; /*!< OSCERCLK enable mode. OR'ed value of \ref _oscer_enable_mode. */
<> 144:ef7eb2e8f9f7 340
<> 144:ef7eb2e8f9f7 341 } oscer_config_t;
<> 144:ef7eb2e8f9f7 342
<> 144:ef7eb2e8f9f7 343 /*! @brief OSC work mode. */
<> 144:ef7eb2e8f9f7 344 typedef enum _osc_mode
<> 144:ef7eb2e8f9f7 345 {
<> 144:ef7eb2e8f9f7 346 kOSC_ModeExt = 0U, /*!< Use external clock. */
<> 144:ef7eb2e8f9f7 347 kOSC_ModeOscLowPower = MCG_C2_EREFS0_MASK, /*!< Oscillator low power. */
<> 144:ef7eb2e8f9f7 348 kOSC_ModeOscHighGain = MCG_C2_EREFS0_MASK | MCG_C2_HGO0_MASK, /*!< Oscillator high gain. */
<> 144:ef7eb2e8f9f7 349 } osc_mode_t;
<> 144:ef7eb2e8f9f7 350
<> 144:ef7eb2e8f9f7 351 /*!
<> 144:ef7eb2e8f9f7 352 * @brief OSC Initialization Configuration Structure
<> 144:ef7eb2e8f9f7 353 *
<> 144:ef7eb2e8f9f7 354 * Defines the configuration data structure to initialize the OSC.
<> 144:ef7eb2e8f9f7 355 * When porting to a new board, set the following members
<> 144:ef7eb2e8f9f7 356 * according to board settings:
<> 144:ef7eb2e8f9f7 357 * 1. freq: The external frequency.
<> 144:ef7eb2e8f9f7 358 * 2. workMode: The OSC module mode.
<> 144:ef7eb2e8f9f7 359 */
<> 144:ef7eb2e8f9f7 360 typedef struct _osc_config
<> 144:ef7eb2e8f9f7 361 {
<> 144:ef7eb2e8f9f7 362 uint32_t freq; /*!< External clock frequency. */
<> 144:ef7eb2e8f9f7 363 uint8_t capLoad; /*!< Capacitor load setting. */
<> 144:ef7eb2e8f9f7 364 osc_mode_t workMode; /*!< OSC work mode setting. */
<> 144:ef7eb2e8f9f7 365 oscer_config_t oscerConfig; /*!< Configuration for OSCERCLK. */
<> 144:ef7eb2e8f9f7 366 } osc_config_t;
<> 144:ef7eb2e8f9f7 367
<> 144:ef7eb2e8f9f7 368 /*! @brief MCG_Lite clock source selection. */
<> 144:ef7eb2e8f9f7 369 typedef enum _mcglite_clkout_src
<> 144:ef7eb2e8f9f7 370 {
<> 144:ef7eb2e8f9f7 371 kMCGLITE_ClkSrcHirc, /*!< MCGOUTCLK source is HIRC */
<> 144:ef7eb2e8f9f7 372 kMCGLITE_ClkSrcLirc, /*!< MCGOUTCLK source is LIRC */
<> 144:ef7eb2e8f9f7 373 kMCGLITE_ClkSrcExt, /*!< MCGOUTCLK source is external clock source */
<> 144:ef7eb2e8f9f7 374 kMCGLITE_ClkSrcReserved
<> 144:ef7eb2e8f9f7 375 } mcglite_clkout_src_t;
<> 144:ef7eb2e8f9f7 376
<> 144:ef7eb2e8f9f7 377 /*! @brief MCG_Lite LIRC select. */
<> 144:ef7eb2e8f9f7 378 typedef enum _mcglite_lirc_mode
<> 144:ef7eb2e8f9f7 379 {
<> 144:ef7eb2e8f9f7 380 kMCGLITE_Lirc2M, /*!< Slow internal reference(LIRC) 2MHz clock selected */
<> 144:ef7eb2e8f9f7 381 kMCGLITE_Lirc8M, /*!< Slow internal reference(LIRC) 8MHz clock selected */
<> 144:ef7eb2e8f9f7 382 } mcglite_lirc_mode_t;
<> 144:ef7eb2e8f9f7 383
<> 144:ef7eb2e8f9f7 384 /*! @brief MCG_Lite divider factor selection for clock source*/
<> 144:ef7eb2e8f9f7 385 typedef enum _mcglite_lirc_div
<> 144:ef7eb2e8f9f7 386 {
<> 144:ef7eb2e8f9f7 387 kMCGLITE_LircDivBy1 = 0U, /*!< Divider is 1 */
<> 144:ef7eb2e8f9f7 388 kMCGLITE_LircDivBy2, /*!< Divider is 2 */
<> 144:ef7eb2e8f9f7 389 kMCGLITE_LircDivBy4, /*!< Divider is 4 */
<> 144:ef7eb2e8f9f7 390 kMCGLITE_LircDivBy8, /*!< Divider is 8 */
<> 144:ef7eb2e8f9f7 391 kMCGLITE_LircDivBy16, /*!< Divider is 16 */
<> 144:ef7eb2e8f9f7 392 kMCGLITE_LircDivBy32, /*!< Divider is 32 */
<> 144:ef7eb2e8f9f7 393 kMCGLITE_LircDivBy64, /*!< Divider is 64 */
<> 144:ef7eb2e8f9f7 394 kMCGLITE_LircDivBy128 /*!< Divider is 128 */
<> 144:ef7eb2e8f9f7 395 } mcglite_lirc_div_t;
<> 144:ef7eb2e8f9f7 396
<> 144:ef7eb2e8f9f7 397 /*! @brief MCG_Lite clock mode definitions */
<> 144:ef7eb2e8f9f7 398 typedef enum _mcglite_mode
<> 144:ef7eb2e8f9f7 399 {
<> 144:ef7eb2e8f9f7 400 kMCGLITE_ModeHirc48M, /*!< Clock mode is HIRC 48 M */
<> 144:ef7eb2e8f9f7 401 kMCGLITE_ModeLirc8M, /*!< Clock mode is LIRC 8 M */
<> 144:ef7eb2e8f9f7 402 kMCGLITE_ModeLirc2M, /*!< Clock mode is LIRC 2 M */
<> 144:ef7eb2e8f9f7 403 kMCGLITE_ModeExt, /*!< Clock mode is EXT */
<> 144:ef7eb2e8f9f7 404 kMCGLITE_ModeError /*!< Unknown mode */
<> 144:ef7eb2e8f9f7 405 } mcglite_mode_t;
<> 144:ef7eb2e8f9f7 406
<> 144:ef7eb2e8f9f7 407 /*! @brief MCG internal reference clock (MCGIRCLK) enable mode definition. */
<> 144:ef7eb2e8f9f7 408 enum _mcglite_irclk_enable_mode
<> 144:ef7eb2e8f9f7 409 {
<> 144:ef7eb2e8f9f7 410 kMCGLITE_IrclkEnable = MCG_C1_IRCLKEN_MASK, /*!< MCGIRCLK enable. */
<> 144:ef7eb2e8f9f7 411 kMCGLITE_IrclkEnableInStop = MCG_C1_IREFSTEN_MASK /*!< MCGIRCLK enable in stop mode. */
<> 144:ef7eb2e8f9f7 412 };
<> 144:ef7eb2e8f9f7 413
<> 144:ef7eb2e8f9f7 414 /*! @brief MCG_Lite configure structure for mode change. */
<> 144:ef7eb2e8f9f7 415 typedef struct _mcglite_config
<> 144:ef7eb2e8f9f7 416 {
<> 144:ef7eb2e8f9f7 417 mcglite_clkout_src_t outSrc; /*!< MCGOUT clock select. */
<> 144:ef7eb2e8f9f7 418 uint8_t irclkEnableMode; /*!< MCGIRCLK enable mode, OR'ed value of _mcglite_irclk_enable_mode. */
<> 144:ef7eb2e8f9f7 419 mcglite_lirc_mode_t ircs; /*!< MCG_C2[IRCS]. */
<> 144:ef7eb2e8f9f7 420 mcglite_lirc_div_t fcrdiv; /*!< MCG_SC[FCRDIV]. */
<> 144:ef7eb2e8f9f7 421 mcglite_lirc_div_t lircDiv2; /*!< MCG_MC[LIRC_DIV2]. */
<> 144:ef7eb2e8f9f7 422 bool hircEnableInNotHircMode; /*!< HIRC enable when not in HIRC mode. */
<> 144:ef7eb2e8f9f7 423 } mcglite_config_t;
<> 144:ef7eb2e8f9f7 424
<> 144:ef7eb2e8f9f7 425 /*******************************************************************************
<> 144:ef7eb2e8f9f7 426 * API
<> 144:ef7eb2e8f9f7 427 ******************************************************************************/
<> 144:ef7eb2e8f9f7 428
<> 144:ef7eb2e8f9f7 429 #if defined(__cplusplus)
<> 144:ef7eb2e8f9f7 430 extern "C" {
<> 144:ef7eb2e8f9f7 431 #endif /* __cplusplus */
<> 144:ef7eb2e8f9f7 432
<> 144:ef7eb2e8f9f7 433 /*!
<> 144:ef7eb2e8f9f7 434 * @brief Set the XTAL0 frequency based on board setting.
<> 144:ef7eb2e8f9f7 435 *
<> 144:ef7eb2e8f9f7 436 * @param freq The XTAL0/EXTAL0 input clock frequency in Hz.
<> 144:ef7eb2e8f9f7 437 */
<> 144:ef7eb2e8f9f7 438 static inline void CLOCK_SetXtal0Freq(uint32_t freq)
<> 144:ef7eb2e8f9f7 439 {
<> 144:ef7eb2e8f9f7 440 g_xtal0Freq = freq;
<> 144:ef7eb2e8f9f7 441 }
<> 144:ef7eb2e8f9f7 442
<> 144:ef7eb2e8f9f7 443 /*!
<> 144:ef7eb2e8f9f7 444 * @brief Set the XTAL32/RTC_CLKIN frequency based on board setting.
<> 144:ef7eb2e8f9f7 445 *
<> 144:ef7eb2e8f9f7 446 * @param freq The XTAL32/EXTAL32/RTC_CLKIN input clock frequency in Hz.
<> 144:ef7eb2e8f9f7 447 */
<> 144:ef7eb2e8f9f7 448 static inline void CLOCK_SetXtal32Freq(uint32_t freq)
<> 144:ef7eb2e8f9f7 449 {
<> 144:ef7eb2e8f9f7 450 g_xtal32Freq = freq;
<> 144:ef7eb2e8f9f7 451 }
<> 144:ef7eb2e8f9f7 452
<> 144:ef7eb2e8f9f7 453 /*!
<> 144:ef7eb2e8f9f7 454 * @brief Enable the clock for specific IP.
<> 144:ef7eb2e8f9f7 455 *
<> 144:ef7eb2e8f9f7 456 * @param name Which clock to enable, see \ref clock_ip_name_t.
<> 144:ef7eb2e8f9f7 457 */
<> 144:ef7eb2e8f9f7 458 static inline void CLOCK_EnableClock(clock_ip_name_t name)
<> 144:ef7eb2e8f9f7 459 {
<> 144:ef7eb2e8f9f7 460 uint32_t regAddr = SIM_BASE + CLK_GATE_ABSTRACT_REG_OFFSET((uint32_t)name);
<> 144:ef7eb2e8f9f7 461 (*(volatile uint32_t *)regAddr) |= (1U << CLK_GATE_ABSTRACT_BITS_SHIFT((uint32_t)name));
<> 144:ef7eb2e8f9f7 462 }
<> 144:ef7eb2e8f9f7 463
<> 144:ef7eb2e8f9f7 464 /*!
<> 144:ef7eb2e8f9f7 465 * @brief Disable the clock for specific IP.
<> 144:ef7eb2e8f9f7 466 *
<> 144:ef7eb2e8f9f7 467 * @param name Which clock to disable, see \ref clock_ip_name_t.
<> 144:ef7eb2e8f9f7 468 */
<> 144:ef7eb2e8f9f7 469 static inline void CLOCK_DisableClock(clock_ip_name_t name)
<> 144:ef7eb2e8f9f7 470 {
<> 144:ef7eb2e8f9f7 471 uint32_t regAddr = SIM_BASE + CLK_GATE_ABSTRACT_REG_OFFSET((uint32_t)name);
<> 144:ef7eb2e8f9f7 472 (*(volatile uint32_t *)regAddr) &= ~(1U << CLK_GATE_ABSTRACT_BITS_SHIFT((uint32_t)name));
<> 144:ef7eb2e8f9f7 473 }
<> 144:ef7eb2e8f9f7 474
<> 144:ef7eb2e8f9f7 475 /*!
<> 144:ef7eb2e8f9f7 476 * @brief Set ERCLK32K source.
<> 144:ef7eb2e8f9f7 477 *
<> 144:ef7eb2e8f9f7 478 * @param src The value to set ERCLK32K clock source.
<> 144:ef7eb2e8f9f7 479 */
<> 144:ef7eb2e8f9f7 480 static inline void CLOCK_SetEr32kClock(uint32_t src)
<> 144:ef7eb2e8f9f7 481 {
<> 144:ef7eb2e8f9f7 482 SIM->SOPT1 = ((SIM->SOPT1 & ~SIM_SOPT1_OSC32KSEL_MASK) | SIM_SOPT1_OSC32KSEL(src));
<> 144:ef7eb2e8f9f7 483 }
<> 144:ef7eb2e8f9f7 484
<> 144:ef7eb2e8f9f7 485 /*!
<> 144:ef7eb2e8f9f7 486 * @brief Set LPUART0 clock source.
<> 144:ef7eb2e8f9f7 487 *
<> 144:ef7eb2e8f9f7 488 * @param src The value to set LPUART0 clock source.
<> 144:ef7eb2e8f9f7 489 */
<> 144:ef7eb2e8f9f7 490 static inline void CLOCK_SetLpuart0Clock(uint32_t src)
<> 144:ef7eb2e8f9f7 491 {
<> 144:ef7eb2e8f9f7 492 SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_LPUART0SRC_MASK) | SIM_SOPT2_LPUART0SRC(src));
<> 144:ef7eb2e8f9f7 493 }
<> 144:ef7eb2e8f9f7 494
<> 144:ef7eb2e8f9f7 495 /*!
<> 144:ef7eb2e8f9f7 496 * @brief Set LPUART1 clock source.
<> 144:ef7eb2e8f9f7 497 *
<> 144:ef7eb2e8f9f7 498 * @param src The value to set LPUART1 clock source.
<> 144:ef7eb2e8f9f7 499 */
<> 144:ef7eb2e8f9f7 500 static inline void CLOCK_SetLpuart1Clock(uint32_t src)
<> 144:ef7eb2e8f9f7 501 {
<> 144:ef7eb2e8f9f7 502 SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_LPUART1SRC_MASK) | SIM_SOPT2_LPUART1SRC(src));
<> 144:ef7eb2e8f9f7 503 }
<> 144:ef7eb2e8f9f7 504
<> 144:ef7eb2e8f9f7 505 /*!
<> 144:ef7eb2e8f9f7 506 * @brief Set TPM clock source.
<> 144:ef7eb2e8f9f7 507 *
<> 144:ef7eb2e8f9f7 508 * @param src The value to set TPM clock source.
<> 144:ef7eb2e8f9f7 509 */
<> 144:ef7eb2e8f9f7 510 static inline void CLOCK_SetTpmClock(uint32_t src)
<> 144:ef7eb2e8f9f7 511 {
<> 144:ef7eb2e8f9f7 512 SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_TPMSRC_MASK) | SIM_SOPT2_TPMSRC(src));
<> 144:ef7eb2e8f9f7 513 }
<> 144:ef7eb2e8f9f7 514
<> 144:ef7eb2e8f9f7 515 /*!
<> 144:ef7eb2e8f9f7 516 * @brief Set FLEXIO clock source.
<> 144:ef7eb2e8f9f7 517 *
<> 144:ef7eb2e8f9f7 518 * @param src The value to set FLEXIO clock source.
<> 144:ef7eb2e8f9f7 519 */
<> 144:ef7eb2e8f9f7 520 static inline void CLOCK_SetFlexio0Clock(uint32_t src)
<> 144:ef7eb2e8f9f7 521 {
<> 144:ef7eb2e8f9f7 522 SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_FLEXIOSRC_MASK) | SIM_SOPT2_FLEXIOSRC(src));
<> 144:ef7eb2e8f9f7 523 }
<> 144:ef7eb2e8f9f7 524
<> 144:ef7eb2e8f9f7 525 /*! @brief Enable USB FS clock.
<> 144:ef7eb2e8f9f7 526 *
<> 144:ef7eb2e8f9f7 527 * @param src USB FS clock source.
<> 144:ef7eb2e8f9f7 528 * @param freq The frequency specified by src.
<> 144:ef7eb2e8f9f7 529 * @retval true The clock is set successfully.
<> 144:ef7eb2e8f9f7 530 * @retval false The clock source is invalid to get proper USB FS clock.
<> 144:ef7eb2e8f9f7 531 */
<> 144:ef7eb2e8f9f7 532 bool CLOCK_EnableUsbfs0Clock(clock_usb_src_t src, uint32_t freq);
<> 144:ef7eb2e8f9f7 533
<> 144:ef7eb2e8f9f7 534 /*! @brief Disable USB FS clock.
<> 144:ef7eb2e8f9f7 535 *
<> 144:ef7eb2e8f9f7 536 * Disable USB FS clock.
<> 144:ef7eb2e8f9f7 537 */
<> 144:ef7eb2e8f9f7 538 static inline void CLOCK_DisableUsbfs0Clock(void)
<> 144:ef7eb2e8f9f7 539 {
<> 144:ef7eb2e8f9f7 540 CLOCK_DisableClock(kCLOCK_Usbfs0);
<> 144:ef7eb2e8f9f7 541 }
<> 144:ef7eb2e8f9f7 542
<> 144:ef7eb2e8f9f7 543 /*!
<> 144:ef7eb2e8f9f7 544 * @brief Set CLKOUT source.
<> 144:ef7eb2e8f9f7 545 *
<> 144:ef7eb2e8f9f7 546 * @param src The value to set CLKOUT source.
<> 144:ef7eb2e8f9f7 547 */
<> 144:ef7eb2e8f9f7 548 static inline void CLOCK_SetClkOutClock(uint32_t src)
<> 144:ef7eb2e8f9f7 549 {
<> 144:ef7eb2e8f9f7 550 SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_CLKOUTSEL_MASK) | SIM_SOPT2_CLKOUTSEL(src));
<> 144:ef7eb2e8f9f7 551 }
<> 144:ef7eb2e8f9f7 552
<> 144:ef7eb2e8f9f7 553 /*!
<> 144:ef7eb2e8f9f7 554 * @brief Set RTC_CLKOUT source.
<> 144:ef7eb2e8f9f7 555 *
<> 144:ef7eb2e8f9f7 556 * @param src The value to set RTC_CLKOUT source.
<> 144:ef7eb2e8f9f7 557 */
<> 144:ef7eb2e8f9f7 558 static inline void CLOCK_SetRtcClkOutClock(uint32_t src)
<> 144:ef7eb2e8f9f7 559 {
<> 144:ef7eb2e8f9f7 560 SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_RTCCLKOUTSEL_MASK) | SIM_SOPT2_RTCCLKOUTSEL(src));
<> 144:ef7eb2e8f9f7 561 }
<> 144:ef7eb2e8f9f7 562
<> 144:ef7eb2e8f9f7 563 /*!
<> 144:ef7eb2e8f9f7 564 * @brief System clock divider
<> 144:ef7eb2e8f9f7 565 *
<> 144:ef7eb2e8f9f7 566 * Set the SIM_CLKDIV1[OUTDIV1], SIM_CLKDIV1[OUTDIV4].
<> 144:ef7eb2e8f9f7 567 *
<> 144:ef7eb2e8f9f7 568 * @param outdiv1 Clock 1 output divider value.
<> 144:ef7eb2e8f9f7 569 *
<> 144:ef7eb2e8f9f7 570 * @param outdiv4 Clock 4 output divider value.
<> 144:ef7eb2e8f9f7 571 */
<> 144:ef7eb2e8f9f7 572 static inline void CLOCK_SetOutDiv(uint32_t outdiv1, uint32_t outdiv4)
<> 144:ef7eb2e8f9f7 573 {
<> 144:ef7eb2e8f9f7 574 SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(outdiv1) | SIM_CLKDIV1_OUTDIV4(outdiv4);
<> 144:ef7eb2e8f9f7 575 }
<> 144:ef7eb2e8f9f7 576
<> 144:ef7eb2e8f9f7 577 /*!
<> 144:ef7eb2e8f9f7 578 * @brief Gets the clock frequency for a specific clock name.
<> 144:ef7eb2e8f9f7 579 *
<> 144:ef7eb2e8f9f7 580 * This function checks the current clock configurations and then calculates
<> 144:ef7eb2e8f9f7 581 * the clock frequency for a specific clock name defined in clock_name_t.
<> 144:ef7eb2e8f9f7 582 * The MCG must be properly configured before using this function.
<> 144:ef7eb2e8f9f7 583 *
<> 144:ef7eb2e8f9f7 584 * @param clockName Clock names defined in clock_name_t
<> 144:ef7eb2e8f9f7 585 * @return Clock frequency value in Hertz
<> 144:ef7eb2e8f9f7 586 */
<> 144:ef7eb2e8f9f7 587 uint32_t CLOCK_GetFreq(clock_name_t clockName);
<> 144:ef7eb2e8f9f7 588
<> 144:ef7eb2e8f9f7 589 /*!
<> 144:ef7eb2e8f9f7 590 * @brief Get the core clock or system clock frequency.
<> 144:ef7eb2e8f9f7 591 *
<> 144:ef7eb2e8f9f7 592 * @return Clock frequency in Hz.
<> 144:ef7eb2e8f9f7 593 */
<> 144:ef7eb2e8f9f7 594 uint32_t CLOCK_GetCoreSysClkFreq(void);
<> 144:ef7eb2e8f9f7 595
<> 144:ef7eb2e8f9f7 596 /*!
<> 144:ef7eb2e8f9f7 597 * @brief Get the platform clock frequency.
<> 144:ef7eb2e8f9f7 598 *
<> 144:ef7eb2e8f9f7 599 * @return Clock frequency in Hz.
<> 144:ef7eb2e8f9f7 600 */
<> 144:ef7eb2e8f9f7 601 uint32_t CLOCK_GetPlatClkFreq(void);
<> 144:ef7eb2e8f9f7 602
<> 144:ef7eb2e8f9f7 603 /*!
<> 144:ef7eb2e8f9f7 604 * @brief Get the bus clock frequency.
<> 144:ef7eb2e8f9f7 605 *
<> 144:ef7eb2e8f9f7 606 * @return Clock frequency in Hz.
<> 144:ef7eb2e8f9f7 607 */
<> 144:ef7eb2e8f9f7 608 uint32_t CLOCK_GetBusClkFreq(void);
<> 144:ef7eb2e8f9f7 609
<> 144:ef7eb2e8f9f7 610 /*!
<> 144:ef7eb2e8f9f7 611 * @brief Get the flash clock frequency.
<> 144:ef7eb2e8f9f7 612 *
<> 144:ef7eb2e8f9f7 613 * @return Clock frequency in Hz.
<> 144:ef7eb2e8f9f7 614 */
<> 144:ef7eb2e8f9f7 615 uint32_t CLOCK_GetFlashClkFreq(void);
<> 144:ef7eb2e8f9f7 616
<> 144:ef7eb2e8f9f7 617 /*!
<> 144:ef7eb2e8f9f7 618 * @brief Get the external reference 32K clock frequency (ERCLK32K).
<> 144:ef7eb2e8f9f7 619 *
<> 144:ef7eb2e8f9f7 620 * @return Clock frequency in Hz.
<> 144:ef7eb2e8f9f7 621 */
<> 144:ef7eb2e8f9f7 622 uint32_t CLOCK_GetEr32kClkFreq(void);
<> 144:ef7eb2e8f9f7 623
<> 144:ef7eb2e8f9f7 624 /*!
<> 144:ef7eb2e8f9f7 625 * @brief Get the OSC0 external reference clock frequency (OSC0ERCLK).
<> 144:ef7eb2e8f9f7 626 *
<> 144:ef7eb2e8f9f7 627 * @return Clock frequency in Hz.
<> 144:ef7eb2e8f9f7 628 */
<> 144:ef7eb2e8f9f7 629 uint32_t CLOCK_GetOsc0ErClkFreq(void);
<> 144:ef7eb2e8f9f7 630
<> 144:ef7eb2e8f9f7 631 /*!
<> 144:ef7eb2e8f9f7 632 * @brief Set the clock configure in SIM module.
<> 144:ef7eb2e8f9f7 633 *
<> 144:ef7eb2e8f9f7 634 * This function sets system layer clock settings in SIM module.
<> 144:ef7eb2e8f9f7 635 *
<> 144:ef7eb2e8f9f7 636 * @param config Pointer to the configure structure.
<> 144:ef7eb2e8f9f7 637 */
<> 144:ef7eb2e8f9f7 638 void CLOCK_SetSimConfig(sim_clock_config_t const *config);
<> 144:ef7eb2e8f9f7 639
<> 144:ef7eb2e8f9f7 640 /*!
<> 144:ef7eb2e8f9f7 641 * @brief Set the system clock dividers in SIM to safe value.
<> 144:ef7eb2e8f9f7 642 *
<> 144:ef7eb2e8f9f7 643 * The system level clocks (core clock, bus clock, flexbus clock and flash clock)
<> 144:ef7eb2e8f9f7 644 * must be in allowed ranges. During MCG clock mode switch, the MCG output clock
<> 144:ef7eb2e8f9f7 645 * changes then the system level clocks may be out of range. This function could
<> 144:ef7eb2e8f9f7 646 * be used before MCG mode change, to make sure system level clocks are in allowed
<> 144:ef7eb2e8f9f7 647 * range.
<> 144:ef7eb2e8f9f7 648 *
<> 144:ef7eb2e8f9f7 649 * @param config Pointer to the configure structure.
<> 144:ef7eb2e8f9f7 650 */
<> 144:ef7eb2e8f9f7 651 static inline void CLOCK_SetSimSafeDivs(void)
<> 144:ef7eb2e8f9f7 652 {
<> 144:ef7eb2e8f9f7 653 SIM->CLKDIV1 = 0x10030000U;
<> 144:ef7eb2e8f9f7 654 }
<> 144:ef7eb2e8f9f7 655
<> 144:ef7eb2e8f9f7 656 /*!
<> 144:ef7eb2e8f9f7 657 * @name MCG_Lite clock frequency
<> 144:ef7eb2e8f9f7 658 * @{
<> 144:ef7eb2e8f9f7 659 */
<> 144:ef7eb2e8f9f7 660
<> 144:ef7eb2e8f9f7 661 /*!
<> 144:ef7eb2e8f9f7 662 * @brief Gets the MCG_Lite output clock (MCGOUTCLK) frequency.
<> 144:ef7eb2e8f9f7 663 *
<> 144:ef7eb2e8f9f7 664 * This function gets the MCG_Lite output clock frequency (Hz) based on the current
<> 144:ef7eb2e8f9f7 665 * MCG_Lite register value.
<> 144:ef7eb2e8f9f7 666 *
<> 144:ef7eb2e8f9f7 667 * @return The frequency of MCGOUTCLK.
<> 144:ef7eb2e8f9f7 668 */
<> 144:ef7eb2e8f9f7 669 uint32_t CLOCK_GetOutClkFreq(void);
<> 144:ef7eb2e8f9f7 670
<> 144:ef7eb2e8f9f7 671 /*!
<> 144:ef7eb2e8f9f7 672 * @brief Gets the MCG internal reference clock (MCGIRCLK) frequency.
<> 144:ef7eb2e8f9f7 673 *
<> 144:ef7eb2e8f9f7 674 * This function gets the MCG_Lite internal reference clock frequency (Hz) based
<> 144:ef7eb2e8f9f7 675 * on the current MCG register value.
<> 144:ef7eb2e8f9f7 676 *
<> 144:ef7eb2e8f9f7 677 * @return The frequency of MCGIRCLK.
<> 144:ef7eb2e8f9f7 678 */
<> 144:ef7eb2e8f9f7 679 uint32_t CLOCK_GetInternalRefClkFreq(void);
<> 144:ef7eb2e8f9f7 680
<> 144:ef7eb2e8f9f7 681 /*!
<> 144:ef7eb2e8f9f7 682 * @brief Gets the current MCGPCLK frequency.
<> 144:ef7eb2e8f9f7 683 *
<> 144:ef7eb2e8f9f7 684 * This function gets the MCGPCLK frequency (Hertz) based on the current MCG_Lite
<> 144:ef7eb2e8f9f7 685 * register settings.
<> 144:ef7eb2e8f9f7 686 *
<> 144:ef7eb2e8f9f7 687 * @return The frequency of MCGPCLK.
<> 144:ef7eb2e8f9f7 688 */
<> 144:ef7eb2e8f9f7 689 uint32_t CLOCK_GetPeriphClkFreq(void);
<> 144:ef7eb2e8f9f7 690
<> 144:ef7eb2e8f9f7 691 /*! @}*/
<> 144:ef7eb2e8f9f7 692
<> 144:ef7eb2e8f9f7 693 /*!
<> 144:ef7eb2e8f9f7 694 * @name MCG_Lite mode.
<> 144:ef7eb2e8f9f7 695 * @{
<> 144:ef7eb2e8f9f7 696 */
<> 144:ef7eb2e8f9f7 697
<> 144:ef7eb2e8f9f7 698 /*!
<> 144:ef7eb2e8f9f7 699 * @brief Gets the current MCG_Lite mode.
<> 144:ef7eb2e8f9f7 700 *
<> 144:ef7eb2e8f9f7 701 * This function checks the MCG_Lite registers and determines the current MCG_Lite mode.
<> 144:ef7eb2e8f9f7 702 *
<> 144:ef7eb2e8f9f7 703 * @return Current MCG_Lite mode or error code.
<> 144:ef7eb2e8f9f7 704 */
<> 144:ef7eb2e8f9f7 705 mcglite_mode_t CLOCK_GetMode(void);
<> 144:ef7eb2e8f9f7 706
<> 144:ef7eb2e8f9f7 707 /*!
<> 144:ef7eb2e8f9f7 708 * @brief Sets the MCG_Lite configuration.
<> 144:ef7eb2e8f9f7 709 *
<> 144:ef7eb2e8f9f7 710 * This function configures the MCG_Lite, include output clock source, MCGIRCLK
<> 144:ef7eb2e8f9f7 711 * setting, HIRC setting and so on, see @ref mcglite_config_t for details.
<> 144:ef7eb2e8f9f7 712 *
<> 144:ef7eb2e8f9f7 713 * @param targetConfig Pointer to the target MCG_Lite mode configuration structure.
<> 144:ef7eb2e8f9f7 714 * @return Error code.
<> 144:ef7eb2e8f9f7 715 */
<> 144:ef7eb2e8f9f7 716 status_t CLOCK_SetMcgliteConfig(mcglite_config_t const *targetConfig);
<> 144:ef7eb2e8f9f7 717
<> 144:ef7eb2e8f9f7 718 /*! @}*/
<> 144:ef7eb2e8f9f7 719
<> 144:ef7eb2e8f9f7 720 /*!
<> 144:ef7eb2e8f9f7 721 * @name OSC configuration
<> 144:ef7eb2e8f9f7 722 * @{
<> 144:ef7eb2e8f9f7 723 */
<> 144:ef7eb2e8f9f7 724
<> 144:ef7eb2e8f9f7 725 /*!
<> 144:ef7eb2e8f9f7 726 * @brief Configures the OSC external reference clock (OSCERCLK).
<> 144:ef7eb2e8f9f7 727 *
<> 144:ef7eb2e8f9f7 728 * This function configures the OSC external reference clock (OSCERCLK).
<> 144:ef7eb2e8f9f7 729 * For example, to enable the OSCERCLK in normal mode and stop mode, and also set
<> 144:ef7eb2e8f9f7 730 * the output divider to 1, as follows:
<> 144:ef7eb2e8f9f7 731 *
<> 144:ef7eb2e8f9f7 732 @code
<> 144:ef7eb2e8f9f7 733 oscer_config_t config =
<> 144:ef7eb2e8f9f7 734 {
<> 144:ef7eb2e8f9f7 735 .enableMode = kOSC_ErClkEnable | kOSC_ErClkEnableInStop,
<> 144:ef7eb2e8f9f7 736 .erclkDiv = 1U,
<> 144:ef7eb2e8f9f7 737 };
<> 144:ef7eb2e8f9f7 738
<> 144:ef7eb2e8f9f7 739 OSC_SetExtRefClkConfig(OSC, &config);
<> 144:ef7eb2e8f9f7 740 @endcode
<> 144:ef7eb2e8f9f7 741 *
<> 144:ef7eb2e8f9f7 742 * @param base OSC peripheral address.
<> 144:ef7eb2e8f9f7 743 * @param config Pointer to the configuration structure.
<> 144:ef7eb2e8f9f7 744 */
<> 144:ef7eb2e8f9f7 745 static inline void OSC_SetExtRefClkConfig(OSC_Type *base, oscer_config_t const *config)
<> 144:ef7eb2e8f9f7 746 {
<> 144:ef7eb2e8f9f7 747 uint8_t reg = base->CR;
<> 144:ef7eb2e8f9f7 748
<> 144:ef7eb2e8f9f7 749 reg &= ~(OSC_CR_ERCLKEN_MASK | OSC_CR_EREFSTEN_MASK);
<> 144:ef7eb2e8f9f7 750 reg |= config->enableMode;
<> 144:ef7eb2e8f9f7 751
<> 144:ef7eb2e8f9f7 752 base->CR = reg;
<> 144:ef7eb2e8f9f7 753 }
<> 144:ef7eb2e8f9f7 754
<> 144:ef7eb2e8f9f7 755 /*!
<> 144:ef7eb2e8f9f7 756 * @brief Sets the capacitor load configuration for the oscillator.
<> 144:ef7eb2e8f9f7 757 *
<> 144:ef7eb2e8f9f7 758 * This function sets the specified capacitors configuration for the oscillator.
<> 144:ef7eb2e8f9f7 759 * This should be done in the early system level initialization function call
<> 144:ef7eb2e8f9f7 760 * based on the system configuration.
<> 144:ef7eb2e8f9f7 761 *
<> 144:ef7eb2e8f9f7 762 * @param base OSC peripheral address.
<> 144:ef7eb2e8f9f7 763 * @param capLoad OR'ed value for the capacitor load option, see \ref _osc_cap_load.
<> 144:ef7eb2e8f9f7 764 *
<> 144:ef7eb2e8f9f7 765 * Example:
<> 144:ef7eb2e8f9f7 766 @code
<> 144:ef7eb2e8f9f7 767 // To enable only 2 pF and 8 pF capacitor load, please use like this.
<> 144:ef7eb2e8f9f7 768 OSC_SetCapLoad(OSC, kOSC_Cap2P | kOSC_Cap8P);
<> 144:ef7eb2e8f9f7 769 @endcode
<> 144:ef7eb2e8f9f7 770 */
<> 144:ef7eb2e8f9f7 771
<> 144:ef7eb2e8f9f7 772 static inline void OSC_SetCapLoad(OSC_Type *base, uint8_t capLoad)
<> 144:ef7eb2e8f9f7 773 {
<> 144:ef7eb2e8f9f7 774 uint8_t reg = base->CR;
<> 144:ef7eb2e8f9f7 775
<> 144:ef7eb2e8f9f7 776 reg &= ~(OSC_CR_SC2P_MASK | OSC_CR_SC4P_MASK | OSC_CR_SC8P_MASK | OSC_CR_SC16P_MASK);
<> 144:ef7eb2e8f9f7 777 reg |= capLoad;
<> 144:ef7eb2e8f9f7 778
<> 144:ef7eb2e8f9f7 779 base->CR = reg;
<> 144:ef7eb2e8f9f7 780 }
<> 144:ef7eb2e8f9f7 781
<> 144:ef7eb2e8f9f7 782 /*!
<> 144:ef7eb2e8f9f7 783 * @brief Initialize OSC0.
<> 144:ef7eb2e8f9f7 784 *
<> 144:ef7eb2e8f9f7 785 * This function initializes the OSC0 according to the board configuration.
<> 144:ef7eb2e8f9f7 786 *
<> 144:ef7eb2e8f9f7 787 * @param config Pointer to the OSC0 configuration structure.
<> 144:ef7eb2e8f9f7 788 */
<> 144:ef7eb2e8f9f7 789 void CLOCK_InitOsc0(osc_config_t const *config);
<> 144:ef7eb2e8f9f7 790
<> 144:ef7eb2e8f9f7 791 /*!
<> 144:ef7eb2e8f9f7 792 * @brief Deinitializes the OSC0.
<> 144:ef7eb2e8f9f7 793 *
<> 144:ef7eb2e8f9f7 794 * This function deinitializes the OSC0.
<> 144:ef7eb2e8f9f7 795 */
<> 144:ef7eb2e8f9f7 796 void CLOCK_DeinitOsc0(void);
<> 144:ef7eb2e8f9f7 797
<> 144:ef7eb2e8f9f7 798 /*! @}*/
<> 144:ef7eb2e8f9f7 799
<> 144:ef7eb2e8f9f7 800 #if defined(__cplusplus)
<> 144:ef7eb2e8f9f7 801 }
<> 144:ef7eb2e8f9f7 802 #endif /* __cplusplus */
<> 144:ef7eb2e8f9f7 803
<> 144:ef7eb2e8f9f7 804 /*! @} */
<> 144:ef7eb2e8f9f7 805
<> 144:ef7eb2e8f9f7 806 #endif /* _FSL_CLOCK_H_ */