added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
144:ef7eb2e8f9f7
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

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_ */