Files
mongoose/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip/drivers/fsl_clock.h
T

953 lines
36 KiB
C

/*
* Copyright 2020-2024 NXP
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _FSL_CLOCK_H_
#define _FSL_CLOCK_H_
#include "fsl_common.h"
#include "fsl_reset.h"
/*! @addtogroup clock */
/*! @{ */
/*! @file */
/*******************************************************************************
* Configurations
******************************************************************************/
/*! @brief Configure whether driver controls clock
*
* When set to 0, peripheral drivers will enable clock in initialize function
* and disable clock in de-initialize function. When set to 1, peripheral
* driver will not control the clock, application could control the clock out of
* the driver.
*
* @note All drivers share this feature switcher. If it is set to 1, application
* should handle clock enable and disable for all drivers.
*/
#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL))
#define FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL 0
#endif
/*******************************************************************************
* Definitions
******************************************************************************/
/*! @name Driver version */
/*@{*/
/*! @brief CLOCK driver version 2.3.0. */
#define FSL_CLOCK_DRIVER_VERSION (MAKE_VERSION(2, 3, 0))
/*@}*/
/* Definition for delay API in clock driver, users can redefine it to the real application. */
#ifndef SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY
#define SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY (260000000UL)
#endif
/*! @brief Clock ip name array for GPIO. */
#define GPIO_CLOCKS \
{ \
kCLOCK_HsGpio0, kCLOCK_HsGpio1 \
}
/*! @brief Clock ip name array for CACHE64. */
#define CACHE64_CLOCKS \
{ \
kCLOCK_Flexspi, kCLOCK_Flexspi \
}
/*! @brief Clock ip name array for FLEXSPI. */
#define FLEXSPI_CLOCKS \
{ \
kCLOCK_Flexspi \
}
/*! @brief Clock ip name array for FLEXCOMM. */
#define FLEXCOMM_CLOCKS \
{ \
kCLOCK_Flexcomm0, kCLOCK_Flexcomm1, kCLOCK_Flexcomm2, kCLOCK_Flexcomm3, kCLOCK_Flexcomm14 \
}
/*! @brief Clock ip name array for LPUART. */
#define USART_CLOCKS \
{ \
kCLOCK_Flexcomm0, kCLOCK_Flexcomm1, kCLOCK_Flexcomm2, kCLOCK_Flexcomm3 \
}
/*! @brief Clock ip name array for I2C. */
#define I2C_CLOCKS \
{ \
kCLOCK_Flexcomm0, kCLOCK_Flexcomm1, kCLOCK_Flexcomm2, kCLOCK_Flexcomm3 \
}
/*! @brief Clock ip name array for SPI. */
#define SPI_CLOCKS \
{ \
kCLOCK_Flexcomm0, kCLOCK_Flexcomm1, kCLOCK_Flexcomm2, kCLOCK_Flexcomm3, kCLOCK_Flexcomm14 \
}
/*! @brief Clock ip name array for ACOMP. */
#define ACOMP_CLOCKS \
{ \
kCLOCK_Gau \
}
/*! @brief Clock ip name array for ADC. */
#define ADC_CLOCKS \
{ \
kCLOCK_Gau, kCLOCK_Gau \
}
/*! @brief Clock ip name array for DAC. */
#define DAC_CLOCKS \
{ \
kCLOCK_Gau \
}
/*! @brief Clock ip name array for LCDIC. */
#define LCDIC_CLOCKS \
{ \
kCLOCK_Lcdic \
}
/*! @brief Clock ip name array for DMA. */
#define DMA_CLOCKS \
{ \
kCLOCK_Dma0, kCLOCK_Dma1 \
}
/*! @brief Clock ip name array for DMIC. */
#define DMIC_CLOCKS \
{ \
kCLOCK_Dmic0 \
}
/*! @brief Clock ip name array for ENET. */
#define ENET_CLOCKS \
{ \
kCLOCK_EnetIpg \
}
/*! @brief Extra clock ip name array for ENET. */
#define ENET_EXTRA_CLOCKS \
{ \
kCLOCK_EnetIpgS \
}
/*! @brief Clock ip name array for Powerquad */
#define POWERQUAD_CLOCKS \
{ \
kCLOCK_PowerQuad \
}
/*! @brief Clock ip name array for OSTimer */
#define OSTIMER_CLOCKS \
{ \
kCLOCK_OsEventTimer \
}
/*! @brief Clock ip name array for CT32B. */
#define CTIMER_CLOCKS \
{ \
kCLOCK_Ct32b0, kCLOCK_Ct32b1, kCLOCK_Ct32b2, kCLOCK_Ct32b3, kCLOCK_Ct32b4 \
}
/*! @brief Clock ip name array for UTICK. */
#define UTICK_CLOCKS \
{ \
kCLOCK_Utick \
}
/*! @brief Clock ip name array for MRT. */
#define MRT_CLOCKS \
{ \
kCLOCK_Mrt, kCLOCK_FreeMrt \
}
/*! @brief Clock ip name array for SCT. */
#define SCT_CLOCKS \
{ \
kCLOCK_Sct \
}
/*! @brief Clock ip name array for RTC. */
#define RTC_CLOCKS \
{ \
kCLOCK_Rtc \
}
/*! @brief Clock ip name array for WWDT. */
#define WWDT_CLOCKS \
{ \
kCLOCK_Wwdt0 \
}
/*! @brief Clock ip name array for TRNG. */
#define TRNG_CLOCKS \
{ \
kCLOCK_Trng \
}
/*! @brief Clock ip name array for USIM. */
#define USIM_CLOCKS \
{ \
kCLOCK_Usim \
}
/*! @brief Clock gate name used for CLOCK_EnableClock/CLOCK_DisableClock. */
/*------------------------------------------------------------------------------
clock_ip_name_t definition:
------------------------------------------------------------------------------*/
#define CLK_GATE_REG_OFFSET_SHIFT 8U
#define CLK_GATE_REG_OFFSET_MASK 0xFF00U
#define CLK_GATE_BIT_SHIFT_SHIFT 0U
#define CLK_GATE_BIT_SHIFT_MASK 0x000000FFU
#define CLK_GATE_DEFINE(reg_offset, bit_shift) \
((((reg_offset) << CLK_GATE_REG_OFFSET_SHIFT) & CLK_GATE_REG_OFFSET_MASK) | \
(((bit_shift) << CLK_GATE_BIT_SHIFT_SHIFT) & CLK_GATE_BIT_SHIFT_MASK))
#define CLK_GATE_ABSTRACT_REG_OFFSET(x) (((uint32_t)(x)&CLK_GATE_REG_OFFSET_MASK) >> CLK_GATE_REG_OFFSET_SHIFT)
#define CLK_GATE_ABSTRACT_BITS_SHIFT(x) (((uint32_t)(x)&CLK_GATE_BIT_SHIFT_MASK) >> CLK_GATE_BIT_SHIFT_SHIFT)
#define CLK_CTL0_PSCCTL0 0
#define CLK_CTL0_PSCCTL1 1
#define CLK_CTL0_PSCCTL2 2
#define CLK_CTL1_PSCCTL0 3
#define CLK_CTL1_PSCCTL1 4
#define CLK_CTL1_PSCCTL2 5
#define SYS_CLK_GATE_FLAG_MASK (0x10000UL)
#define SYS_CLK_GATE_DEFINE(bit_shift) (((bit_shift)&CLK_GATE_BIT_SHIFT_MASK) | SYS_CLK_GATE_FLAG_MASK)
#define SYS_CLK_GATE_BIT_MASK(x) (1UL << (((uint32_t)(x)&CLK_GATE_BIT_SHIFT_MASK) >> CLK_GATE_BIT_SHIFT_SHIFT))
#define CLKCTL0_TUPLE_MUXA(reg, choice) (((reg)&0xFFCU) | ((choice) << 12U))
#define CLKCTL0_TUPLE_MUXB(reg, choice) ((((reg)&0xFFCU) << 16) | ((choice) << 28U))
#define CLKCTL1_TUPLE_FLAG_MASK (0x8000U)
#define CLKCTL1_TUPLE_MUXA(reg, choice) (((reg)&0xFFCU) | CLKCTL1_TUPLE_FLAG_MASK | ((choice) << 12U))
#define CLKCTL1_TUPLE_MUXB(reg, choice) ((((reg)&0xFFCU) | CLKCTL1_TUPLE_FLAG_MASK | ((choice) << 28U)) << 16)
#define CLKCTL_TUPLE_REG(base, tuple) ((volatile uint32_t *)(((uint32_t)(base)) + ((uint32_t)(tuple)&0xFFCU)))
#define CLKCTL_TUPLE_SEL(tuple) (((uint32_t)(tuple) >> 12U) & 0x7U)
#define CLKOUT_TUPLE_MUX_AVAIL (0x2U)
#define CLKOUT_TUPLE_MUX(ch0, ch1, ch2) (CLKOUT_TUPLE_MUX_AVAIL | ((ch0) << 4U) | ((ch1) << 8) | ((ch2) << 12))
#define PMU_TUPLE_MUX_AVAIL (0x1U)
#define PMU_TUPLE_MUX(reg, choice) (((reg)&0xFFCU) | ((choice) << 12U) | PMU_TUPLE_MUX_AVAIL)
#define PMU_TUPLE_REG(base, tuple) ((volatile uint32_t *)(((uint32_t)(base)) + ((uint32_t)(tuple)&0xFFCU)))
#define PMU_TUPLE_SEL(tuple) (((uint32_t)(tuple) >> 12U) & 0x3U)
/*! @brief Clock name used to get clock frequency. */
typedef enum _clock_name
{
kCLOCK_CoreSysClk, /*!< Core clock (aka HCLK) */
kCLOCK_BusClk, /*!< Bus clock (AHB/APB clock, aka HCLK) */
kCLOCK_MclkClk, /*!< MCLK, to MCLK pin */
} clock_name_t;
/*!
* @brief Peripheral clock name difinition used for
* clock gate.
*/
typedef enum _clock_ip_name
{
kCLOCK_IpInvalid = 0U,
kCLOCK_TcpuMciClk = SYS_CLK_GATE_DEFINE(0),
kCLOCK_TcpuMciFlexspiClk = SYS_CLK_GATE_DEFINE(1),
kCLOCK_TddrMciEnetClk = SYS_CLK_GATE_DEFINE(2),
kCLOCK_TddrMciFlexspiClk = SYS_CLK_GATE_DEFINE(3),
kCLOCK_T3PllMciIrcClk = SYS_CLK_GATE_DEFINE(4),
kCLOCK_T3PllMci256mClk = SYS_CLK_GATE_DEFINE(5),
kCLOCK_T3PllMci213mClk = SYS_CLK_GATE_DEFINE(6),
kCLOCK_T3PllMciFlexspiClk = SYS_CLK_GATE_DEFINE(7),
kCLOCK_RefClkSys = SYS_CLK_GATE_DEFINE(9),
kCLOCK_RefClkTcpu = SYS_CLK_GATE_DEFINE(28),
kCLOCK_RefClkTddr = SYS_CLK_GATE_DEFINE(29),
kCLOCK_RefClkAud = SYS_CLK_GATE_DEFINE(30),
kCLOCK_RefClkUsb = SYS_CLK_GATE_DEFINE(31),
kCLOCK_RefClkCauSlp = SYS_CLK_GATE_DEFINE(32),
kCLOCK_Cpu = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 0),
kCLOCK_Matrix = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 1),
kCLOCK_Romcp = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 2),
kCLOCK_PowerQuad = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 8),
kCLOCK_Pkc = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 9),
kCLOCK_Els = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 10),
kCLOCK_Puf = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 11),
kCLOCK_Flexspi = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 16),
kCLOCK_Hpu = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 20),
kCLOCK_Usb = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 22),
kCLOCK_Sct = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 24),
kCLOCK_AonMem = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 25),
kCLOCK_Gdma = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 28),
kCLOCK_Dma0 = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 29),
kCLOCK_Dma1 = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 30),
kCLOCK_Sdio = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL0, 31),
kCLOCK_ElsApb = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 0),
kCLOCK_SdioSlv = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 2),
kCLOCK_Gau = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 16),
kCLOCK_Otp = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 17),
kCLOCK_SecureGpio = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 24),
kCLOCK_EnetIpg = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 25),
kCLOCK_EnetIpgS = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 26),
kCLOCK_Trng = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL1, 27),
kCLOCK_Utick = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL2, 0),
kCLOCK_Wwdt0 = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL2, 1),
kCLOCK_Usim = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL2, 2),
kCLOCK_Itrc = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL2, 3),
kCLOCK_FreeMrt = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL2, 26),
kCLOCK_Lcdic = CLK_GATE_DEFINE(CLK_CTL0_PSCCTL2, 27),
kCLOCK_Flexcomm0 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL0, 8),
kCLOCK_Flexcomm1 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL0, 9),
kCLOCK_Flexcomm2 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL0, 10),
kCLOCK_Flexcomm3 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL0, 11),
kCLOCK_Flexcomm14 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL0, 22),
kCLOCK_Dmic0 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL0, 24),
kCLOCK_OsEventTimer = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL0, 27),
kCLOCK_HsGpio0 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL1, 0),
kCLOCK_HsGpio1 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL1, 1),
kCLOCK_Crc = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL1, 16),
kCLOCK_Freqme = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL1, 31),
kCLOCK_Ct32b0 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 0),
kCLOCK_Ct32b1 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 1),
kCLOCK_Ct32b2 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 2),
kCLOCK_Ct32b3 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 3),
kCLOCK_Ct32b4 = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 4),
kCLOCK_Pmu = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 6),
kCLOCK_Rtc = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 7),
kCLOCK_Mrt = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 8),
kCLOCK_Pint = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 30),
kCLOCK_InputMux = CLK_GATE_DEFINE(CLK_CTL1_PSCCTL2, 31),
} clock_ip_name_t;
/*!
* @brief Peripheral clock source selection definition.
*/
typedef enum _clock_attach_id
{
kXTAL_to_SYSOSC_CLK = CLKCTL0_TUPLE_MUXA(0x168U, 0),
kCLKIN_to_SYSOSC_CLK = CLKCTL0_TUPLE_MUXA(0x168U, 1),
kNONE_to_SYSOSC_CLK = CLKCTL0_TUPLE_MUXA(0x168U, 7),
kSYSOSC_to_MAIN_CLK = CLKCTL0_TUPLE_MUXA(0x430U, 0) | CLKCTL0_TUPLE_MUXB(0x434U, 0),
kFFRO_DIV4_to_MAIN_CLK = CLKCTL0_TUPLE_MUXA(0x430U, 1) | CLKCTL0_TUPLE_MUXB(0x434U, 0),
kLPOSC_to_MAIN_CLK = CLKCTL0_TUPLE_MUXA(0x430U, 2) | CLKCTL0_TUPLE_MUXB(0x434U, 0),
kFFRO_to_MAIN_CLK = CLKCTL0_TUPLE_MUXA(0x430U, 3) | CLKCTL0_TUPLE_MUXB(0x434U, 0),
kSFRO_to_MAIN_CLK = CLKCTL0_TUPLE_MUXA(0x434U, 1),
kMAIN_PLL_to_MAIN_CLK = CLKCTL0_TUPLE_MUXA(0x434U, 2),
kCLK32K_to_MAIN_CLK = CLKCTL0_TUPLE_MUXA(0x434U, 3),
kMAIN_CLK_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 0),
kT3PLL_MCI_FLEXSPI_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 1),
kAUX0_PLL_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 2),
kTCPU_MCI_FLEXSPI_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 3),
kAUX1_PLL_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 4),
kTDDR_MCI_FLEXSPI_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 5),
kT3PLL_MCI_256M_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 6),
kNONE_to_FLEXSPI_CLK = CLKCTL0_TUPLE_MUXA(0x620U, 7),
kMAIN_CLK_to_SCT_CLK = CLKCTL0_TUPLE_MUXA(0x640U, 0),
kMAIN_PLL_to_SCT_CLK = CLKCTL0_TUPLE_MUXA(0x640U, 1),
kAUX0_PLL_to_SCT_CLK = CLKCTL0_TUPLE_MUXA(0x640U, 2),
kFFRO_to_SCT_CLK = CLKCTL0_TUPLE_MUXA(0x640U, 3),
kAUX1_PLL_to_SCT_CLK = CLKCTL0_TUPLE_MUXA(0x640U, 4),
kAUDIO_PLL_to_SCT_CLK = CLKCTL0_TUPLE_MUXA(0x640U, 5),
kNONE_to_SCT_CLK = CLKCTL0_TUPLE_MUXA(0x640U, 7),
kLPOSC_to_UTICK_CLK = CLKCTL0_TUPLE_MUXA(0x700U, 0),
kMAIN_CLK_to_UTICK_CLK = CLKCTL0_TUPLE_MUXA(0x700U, 1),
kNONE_to_UTICK_CLK = CLKCTL0_TUPLE_MUXA(0x700U, 3),
kLPOSC_to_WDT0_CLK = CLKCTL0_TUPLE_MUXA(0x720U, 0),
kMAIN_CLK_to_WDT0_CLK = CLKCTL0_TUPLE_MUXA(0x720U, 1),
kNONE_to_WDT0_CLK = CLKCTL0_TUPLE_MUXA(0x720U, 3),
kSYSTICK_DIV_to_SYSTICK_CLK = CLKCTL0_TUPLE_MUXA(0x760U, 0),
kLPOSC_to_SYSTICK_CLK = CLKCTL0_TUPLE_MUXA(0x760U, 1),
kCLK32K_to_SYSTICK_CLK = CLKCTL0_TUPLE_MUXA(0x760U, 2),
kSFRO_to_SYSTICK_CLK = CLKCTL0_TUPLE_MUXA(0x760U, 3),
kNONE_to_SYSTICK_CLK = CLKCTL0_TUPLE_MUXA(0x760U, 7),
kMAIN_CLK_to_USIM_CLK = CLKCTL0_TUPLE_MUXA(0x774U, 0),
kAUDIO_PLL_to_USIM_CLK = CLKCTL0_TUPLE_MUXA(0x774U, 1),
kFFRO_to_USIM_CLK = CLKCTL0_TUPLE_MUXA(0x774U, 2),
kNONE_to_USIM_CLK = CLKCTL0_TUPLE_MUXA(0x774U, 3),
kMAIN_CLK_to_LCD_CLK = CLKCTL0_TUPLE_MUXA(0x778U, 0),
kT3PLL_MCI_FLEXSPI_to_LCD_CLK = CLKCTL0_TUPLE_MUXA(0x778U, 1),
kTCPU_MCI_FLEXSPI_to_LCD_CLK = CLKCTL0_TUPLE_MUXA(0x778U, 2),
kTDDR_MCI_FLEXSPI_to_LCD_CLK = CLKCTL0_TUPLE_MUXA(0x778U, 3),
kNONE_to_LCD_CLK = CLKCTL0_TUPLE_MUXA(0x778U, 7),
kMAIN_CLK_to_GAU_CLK = CLKCTL0_TUPLE_MUXA(0x77CU, 0),
kT3PLL_MCI_256M_to_GAU_CLK = CLKCTL0_TUPLE_MUXA(0x77CU, 1),
kAVPLL_CH2_to_GAU_CLK = CLKCTL0_TUPLE_MUXA(0x77CU, 2),
kNONE_to_GAU_CLK = CLKCTL0_TUPLE_MUXA(0x77CU, 3),
kT3PLL_MCI_256M_to_ELS_GDET = CLKCTL0_TUPLE_MUXA(0x7A8U, 0),
kELS_128M_to_ELS_GDET = CLKCTL0_TUPLE_MUXA(0x7A8U, 1),
kELS_64M_to_ELS_GDET = CLKCTL0_TUPLE_MUXA(0x7A8U, 2),
kOTP_FUSE_32M_to_ELS_GDET = CLKCTL0_TUPLE_MUXA(0x7A8U, 3),
kNONE_to_ELS_GDET = CLKCTL0_TUPLE_MUXA(0x7A8U, 7),
kLPOSC_to_OSTIMER_CLK = CLKCTL1_TUPLE_MUXA(0x480U, 0),
kCLK32K_to_OSTIMER_CLK = CLKCTL1_TUPLE_MUXA(0x480U, 1),
kHCLK_to_OSTIMER_CLK = CLKCTL1_TUPLE_MUXA(0x480U, 2),
kMAIN_CLK_to_OSTIMER_CLK = CLKCTL1_TUPLE_MUXA(0x480U, 3),
kNONE_to_OSTIMER_CLK = CLKCTL1_TUPLE_MUXA(0x480U, 7),
kSFRO_to_FLEXCOMM0 = CLKCTL1_TUPLE_MUXA(0x508U, 0),
kFFRO_to_FLEXCOMM0 = CLKCTL1_TUPLE_MUXA(0x508U, 1),
kAUDIO_PLL_to_FLEXCOMM0 = CLKCTL1_TUPLE_MUXA(0x508U, 2),
kMCLK_IN_to_FLEXCOMM0 = CLKCTL1_TUPLE_MUXA(0x508U, 3),
kFRG_to_FLEXCOMM0 = CLKCTL1_TUPLE_MUXA(0x508U, 4),
kNONE_to_FLEXCOMM0 = CLKCTL1_TUPLE_MUXA(0x508U, 7),
kSFRO_to_FLEXCOMM1 = CLKCTL1_TUPLE_MUXA(0x528U, 0),
kFFRO_to_FLEXCOMM1 = CLKCTL1_TUPLE_MUXA(0x528U, 1),
kAUDIO_PLL_to_FLEXCOMM1 = CLKCTL1_TUPLE_MUXA(0x528U, 2),
kMCLK_IN_to_FLEXCOMM1 = CLKCTL1_TUPLE_MUXA(0x528U, 3),
kFRG_to_FLEXCOMM1 = CLKCTL1_TUPLE_MUXA(0x528U, 4),
kNONE_to_FLEXCOMM1 = CLKCTL1_TUPLE_MUXA(0x528U, 7),
kSFRO_to_FLEXCOMM2 = CLKCTL1_TUPLE_MUXA(0x548U, 0),
kFFRO_to_FLEXCOMM2 = CLKCTL1_TUPLE_MUXA(0x548U, 1),
kAUDIO_PLL_to_FLEXCOMM2 = CLKCTL1_TUPLE_MUXA(0x548U, 2),
kMCLK_IN_to_FLEXCOMM2 = CLKCTL1_TUPLE_MUXA(0x548U, 3),
kFRG_to_FLEXCOMM2 = CLKCTL1_TUPLE_MUXA(0x548U, 4),
kNONE_to_FLEXCOMM2 = CLKCTL1_TUPLE_MUXA(0x548U, 7),
kSFRO_to_FLEXCOMM3 = CLKCTL1_TUPLE_MUXA(0x568U, 0),
kFFRO_to_FLEXCOMM3 = CLKCTL1_TUPLE_MUXA(0x568U, 1),
kAUDIO_PLL_to_FLEXCOMM3 = CLKCTL1_TUPLE_MUXA(0x568U, 2),
kMCLK_IN_to_FLEXCOMM3 = CLKCTL1_TUPLE_MUXA(0x568U, 3),
kFRG_to_FLEXCOMM3 = CLKCTL1_TUPLE_MUXA(0x568U, 4),
kNONE_to_FLEXCOMM3 = CLKCTL1_TUPLE_MUXA(0x568U, 7),
kSFRO_to_FLEXCOMM14 = CLKCTL1_TUPLE_MUXA(0x6C8U, 0),
kFFRO_to_FLEXCOMM14 = CLKCTL1_TUPLE_MUXA(0x6C8U, 1),
kAUDIO_PLL_to_FLEXCOMM14 = CLKCTL1_TUPLE_MUXA(0x6C8U, 2),
kMCLK_IN_to_FLEXCOMM14 = CLKCTL1_TUPLE_MUXA(0x6C8U, 3),
kFRG_to_FLEXCOMM14 = CLKCTL1_TUPLE_MUXA(0x6C8U, 4),
kNONE_to_FLEXCOMM14 = CLKCTL1_TUPLE_MUXA(0x6C8U, 7),
kSFRO_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 0),
kFFRO_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 1),
kAUDIO_PLL_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 2),
kMCLK_IN_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 3),
kLPOSC_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 4),
kCLK32K_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 5),
kMAIN_CLK_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 6),
kNONE_to_DMIC_CLK = CLKCTL1_TUPLE_MUXA(0x700U, 7),
kMAIN_CLK_to_CTIMER0 = CLKCTL1_TUPLE_MUXA(0x720U, 0),
kSFRO_to_CTIMER0 = CLKCTL1_TUPLE_MUXA(0x720U, 1),
kFFRO_to_CTIMER0 = CLKCTL1_TUPLE_MUXA(0x720U, 2),
kAUDIO_PLL_to_CTIMER0 = CLKCTL1_TUPLE_MUXA(0x720U, 3),
kMCLK_IN_to_CTIMER0 = CLKCTL1_TUPLE_MUXA(0x720U, 4),
kLPOSC_to_CTIMER0 = CLKCTL1_TUPLE_MUXA(0x720U, 5),
kNONE_to_CTIMER0 = CLKCTL1_TUPLE_MUXA(0x720U, 7),
kMAIN_CLK_to_CTIMER1 = CLKCTL1_TUPLE_MUXA(0x724U, 0),
kSFRO_to_CTIMER1 = CLKCTL1_TUPLE_MUXA(0x724U, 1),
kFFRO_to_CTIMER1 = CLKCTL1_TUPLE_MUXA(0x724U, 2),
kAUDIO_PLL_to_CTIMER1 = CLKCTL1_TUPLE_MUXA(0x724U, 3),
kMCLK_IN_to_CTIMER1 = CLKCTL1_TUPLE_MUXA(0x724U, 4),
kLPOSC_to_CTIMER1 = CLKCTL1_TUPLE_MUXA(0x724U, 5),
kNONE_to_CTIMER1 = CLKCTL1_TUPLE_MUXA(0x724U, 7),
kMAIN_CLK_to_CTIMER2 = CLKCTL1_TUPLE_MUXA(0x728U, 0),
kSFRO_to_CTIMER2 = CLKCTL1_TUPLE_MUXA(0x728U, 1),
kFFRO_to_CTIMER2 = CLKCTL1_TUPLE_MUXA(0x728U, 2),
kAUDIO_PLL_to_CTIMER2 = CLKCTL1_TUPLE_MUXA(0x728U, 3),
kMCLK_IN_to_CTIMER2 = CLKCTL1_TUPLE_MUXA(0x728U, 4),
kLPOSC_to_CTIMER2 = CLKCTL1_TUPLE_MUXA(0x728U, 5),
kNONE_to_CTIMER2 = CLKCTL1_TUPLE_MUXA(0x728U, 7),
kMAIN_CLK_to_CTIMER3 = CLKCTL1_TUPLE_MUXA(0x72CU, 0),
kSFRO_to_CTIMER3 = CLKCTL1_TUPLE_MUXA(0x72CU, 1),
kFFRO_to_CTIMER3 = CLKCTL1_TUPLE_MUXA(0x72CU, 2),
kAUDIO_PLL_to_CTIMER3 = CLKCTL1_TUPLE_MUXA(0x72CU, 3),
kMCLK_IN_to_CTIMER3 = CLKCTL1_TUPLE_MUXA(0x72CU, 4),
kLPOSC_to_CTIMER3 = CLKCTL1_TUPLE_MUXA(0x72CU, 5),
kNONE_to_CTIMER3 = CLKCTL1_TUPLE_MUXA(0x72CU, 7),
kFFRO_to_MCLK_CLK = CLKCTL1_TUPLE_MUXA(0x740U, 0),
kAUDIO_PLL_to_MCLK_CLK = CLKCTL1_TUPLE_MUXA(0x740U, 1),
kMAIN_CLK_to_MCLK_CLK = CLKCTL1_TUPLE_MUXA(0x740U, 2),
kNONE_to_MCLK_CLK = CLKCTL1_TUPLE_MUXA(0x740U, 3),
kSFRO_to_CLKOUT = CLKOUT_TUPLE_MUX(0U, 0U, 0U),
kSYSOSC_to_CLKOUT = CLKOUT_TUPLE_MUX(1U, 0U, 0U),
kLPOSC_to_CLKOUT = CLKOUT_TUPLE_MUX(2U, 0U, 0U),
kFFRO_to_CLKOUT = CLKOUT_TUPLE_MUX(3U, 0U, 0U),
kMAIN_CLK_to_CLKOUT = CLKOUT_TUPLE_MUX(4U, 0U, 0U),
kREFCLK_SYS_to_CLKOUT = CLKOUT_TUPLE_MUX(5U, 0U, 0U),
kAVPLL_CH2_to_CLKOUT = CLKOUT_TUPLE_MUX(6U, 0U, 0U),
kMAIN_PLL_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 1U, 0U),
kAUX0_PLL_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 2U, 0U),
kAUX1_PLL_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 4U, 0U),
kAUDIO_PLL_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 5U, 0U),
kCLK32K_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 6U, 0U),
kTCPU_MCI_FLEXSPI_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 7U, 1U),
kTDDR_MCI_FLEXSPI_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 7U, 2U),
kT3PLL_MCI_FLEXSPI_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 7U, 3U),
kT3PLL_MCI_256M_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 7U, 4U),
kCAU_SLP_REF_CLK_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 7U, 5U),
kTDDR_MCI_ENET_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 7U, 6U),
kNONE_to_CLKOUT = CLKOUT_TUPLE_MUX(7U, 7U, 7U),
kRC32K_to_CLK32K = PMU_TUPLE_MUX(0x70U, 0),
kXTAL32K_to_CLK32K = PMU_TUPLE_MUX(0x70U, 1),
kNCO32K_to_CLK32K = PMU_TUPLE_MUX(0x70U, 2),
} clock_attach_id_t;
/*!
* @brief Clock divider definition.
*/
typedef enum _clock_div_name
{
kCLOCK_DivMainPllClk = CLKCTL0_TUPLE_MUXA(0x240U, 0),
kCLOCK_DivAux0PllClk = CLKCTL0_TUPLE_MUXA(0x248U, 0),
kCLOCK_DivAux1PllClk = CLKCTL0_TUPLE_MUXA(0x24CU, 0),
kCLOCK_DivSysCpuAhbClk = CLKCTL0_TUPLE_MUXA(0x400U, 0),
kCLOCK_DivPfc1Clk = CLKCTL0_TUPLE_MUXA(0x504U, 0),
kCLOCK_DivFlexspiClk = CLKCTL0_TUPLE_MUXA(0x624U, 0),
kCLOCK_DivSctClk = CLKCTL0_TUPLE_MUXA(0x644U, 0),
kCLOCK_DivUsbHsFclk = CLKCTL0_TUPLE_MUXA(0x664U, 0),
kCLOCK_DivSystickClk = CLKCTL0_TUPLE_MUXA(0x764U, 0),
kCLOCK_DivLcdClk = CLKCTL0_TUPLE_MUXA(0x768U, 0),
kCLOCK_DivGauClk = CLKCTL0_TUPLE_MUXA(0x76CU, 0),
kCLOCK_DivUsimClk = CLKCTL0_TUPLE_MUXA(0x770U, 0),
kCLOCK_DivPmuFclk = CLKCTL0_TUPLE_MUXA(0x780U, 0),
kCLOCK_DivAudioPllClk = CLKCTL1_TUPLE_MUXA(0x240U, 0),
kCLOCK_DivPllFrgClk = CLKCTL1_TUPLE_MUXA(0x6FCU, 0),
kCLOCK_DivDmicClk = CLKCTL1_TUPLE_MUXA(0x704U, 0),
kCLOCK_DivMclkClk = CLKCTL1_TUPLE_MUXA(0x744U, 0),
kCLOCK_DivClockOut = CLKCTL1_TUPLE_MUXA(0x768U, 0),
} clock_div_name_t;
/*! @brief PLL configuration for FRG */
typedef struct _clock_frg_clk_config
{
uint8_t num; /*!< FRG clock */
enum
{
kCLOCK_FrgMainClk = 0, /*!< Main System clock */
kCLOCK_FrgPllDiv, /*!< Main pll clock divider*/
kCLOCK_FrgSFro, /*!< 16MHz FRO */
kCLOCK_FrgFFro, /*!< FRO48/60 */
} sfg_clock_src;
uint8_t divider; /*!< Denominator of the fractional divider. */
uint8_t mult; /*!< Numerator of the fractional divider. */
} clock_frg_clk_config_t;
/*! @brief TCPU PLL divider for tcpu_mci_flexspi_clk */
typedef enum
{
kCLOCK_TcpuFlexspiDiv12 = 0, /*!< Divided by 12 */
kCLOCK_TcpuFlexspiDiv11, /*!< Divided by 11 */
kCLOCK_TcpuFlexspiDiv10, /*!< Divided by 10 */
kCLOCK_TcpuFlexspiDiv9, /*!< Divided by 9 */
} clock_tcpu_flexspi_div_t;
/*! @brief TDDR PLL divider for tddr_mci_flexspi_clk */
typedef enum
{
kCLOCK_TddrFlexspiDiv11 = 0, /*!< Divided by 11 */
kCLOCK_TddrFlexspiDiv10, /*!< Divided by 10 */
kCLOCK_TddrFlexspiDiv9, /*!< Divided by 9 */
kCLOCK_TddrFlexspiDiv8, /*!< Divided by 8 */
} clock_tddr_flexspi_div_t;
/*! @brief T3 PLL IRC configuration */
typedef enum
{
kCLOCK_T3MciIrc60m = 0, /*!< T3 MCI IRC 59.53MHz */
kCLOCK_T3MciIrc48m, /*!< T3 MCI IRC 48.30MHz */
} clock_t3_mci_irc_config_t;
/*! @brief AVPLL channel1 frequency configuration */
typedef enum
{
kCLOCK_AvPllChUnchanged = 0, /*!< AVPLL channel frequency unchanged. */
kCLOCK_AvPllChFreq2p048m, /*!< AVPLL channel frequency 2.048MHz */
kCLOCK_AvPllChFreq4p096m, /*!< AVPLL channel frequency 4.096MHz */
kCLOCK_AvPllChFreq6p144m, /*!< AVPLL channel frequency 6.144MHz */
kCLOCK_AvPllChFreq8p192m, /*!< AVPLL channel frequency 8.192MHz */
kCLOCK_AvPllChFreq11p2896m, /*!< AVPLL channel frequency 11.2896MHz */
kCLOCK_AvPllChFreq12m, /*!< AVPLL channel frequency 12MHz */
kCLOCK_AvPllChFreq12p288m, /*!< AVPLL channel frequency 12.288MHz */
kCLOCK_AvPllChFreq24p576m, /*!< AVPLL channel frequency 24.576MHz */
kCLOCK_AvPllChFreq64m, /*!< AVPLL channel frequency 64MHz */
kCLOCK_AvPllChFreq98p304m, /*!< AVPLL channel frequency 98.304MHz */
} clock_avpll_ch_freq_t;
/*! @brief AVPLL configuration */
typedef struct
{
clock_avpll_ch_freq_t ch1Freq; /*!< AVPLL channel 1 frequency configuration */
clock_avpll_ch_freq_t ch2Freq; /*!< AVPLL channel 2 frequency configuration */
bool enableCali; /*!< Enable calibration */
} clock_avpll_config_t;
/*******************************************************************************
* API
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif /* __cplusplus */
/*! @brief External CLK_IN pin clock frequency (clkin) clock frequency.
*
* The CLK_IN pin (clkin) clock frequency in Hz, when the clock is setup, use the
* function CLOCK_SetClkinFreq to set the value in to clock driver. For example,
* if CLK_IN is 16MHz,
* @code
* CLOCK_SetClkinFreq(16000000);
* @endcode
*/
extern volatile uint32_t g_clkinFreq;
/*! @brief External MCLK IN clock frequency.
*
* The MCLK in (mclk_in) PIN clock frequency in Hz, when the clock is setup, use the
* function CLOCK_SetMclkInFreq to set the value in to clock driver. For example,
* if mclk_In is 16MHz,
* @code
* CLOCK_SetMclkInFreq(16000000);
* @endcode
*/
extern volatile uint32_t g_mclkinFreq;
/*! @brief Return Frequency of t3pll_mci_48_60m_irc
* @return Frequency of t3pll_mci_48_60m_irc
*/
uint32_t CLOCK_GetT3PllMciIrcClkFreq(void);
/*! @brief Return Frequency of t3pll_mci_213p3m
* @return Frequency of t3pll_mci_213p3m
*/
uint32_t CLOCK_GetT3PllMci213mClkFreq(void);
/*! @brief Return Frequency of t3pll_mci_256m
* @return Frequency of t3pll_mci_256m
*/
uint32_t CLOCK_GetT3PllMci256mClkFreq(void);
/*! @brief Return Frequency of t3pll_mci_flexspi_clk
* @return Frequency of t3pll_mci_flexspi_clk
*/
uint32_t CLOCK_GetT3PllMciFlexspiClkFreq(void);
/*! @brief Return Frequency of tcpu_mci_clk
* @return Frequency of tcpu_mci_clk
*/
uint32_t CLOCK_GetTcpuMciClkFreq(void);
/*! @brief Return Frequency of tcpu_mci_flexspi_clk
* @return Frequency of tcpu_mci_flexspi_clk
*/
uint32_t CLOCK_GetTcpuMciFlexspiClkFreq(void);
/*! @brief Return Frequency of tddr_mci_flexspi_clk
* @return Frequency of tddr_mci_flexspi_clk
*/
uint32_t CLOCK_GetTddrMciFlexspiClkFreq(void);
/*! @brief Return Frequency of tddr_mci_enet_clk
* @return Frequency of tddr_mci_enet_clk
*/
uint32_t CLOCK_GetTddrMciEnetClkFreq(void);
/*!
* @brief Enable the clock for specific IP.
*
* @param clk Which clock to enable, see @ref clock_ip_name_t.
*/
void CLOCK_EnableClock(clock_ip_name_t clk);
/*!
* @brief Disable the clock for specific IP.
*
* @param clk Which clock to disable, see @ref clock_ip_name_t.
*/
void CLOCK_DisableClock(clock_ip_name_t clk);
/**
* @brief Configure the clock selection muxes.
* @param connection : Clock to be configured.
*/
void CLOCK_AttachClk(clock_attach_id_t connection);
/**
* @brief Setup clock dividers.
* @param name : Clock divider name
* @param divider : Value to be divided.
*/
void CLOCK_SetClkDiv(clock_div_name_t name, uint32_t divider);
/*! @brief Return Frequency of selected clock
* @return Frequency of selected clock
*/
uint32_t CLOCK_GetFreq(clock_name_t clockName);
/*! @brief Return Input frequency for the Fractional baud rate generator
* @return Input Frequency for FRG
*/
uint32_t CLOCK_GetFRGClock(uint32_t id);
/*! @brief Set output of the Fractional baud rate generator
* @param config : Configuration to set to FRGn clock.
*/
void CLOCK_SetFRGClock(const clock_frg_clk_config_t *config);
/*! @brief Return Frequency of FFRO
* @return Frequency of FFRO
*/
uint32_t CLOCK_GetFFroFreq(void);
/*! @brief Return Frequency of SFRO
* @return Frequency of SFRO
*/
uint32_t CLOCK_GetSFroFreq(void);
/*! @brief Return Frequency of AUDIO PLL (AVPLL CH1)
* @return Frequency of AUDIO PLL
*/
uint32_t CLOCK_GetAvPllCh1Freq(void);
/*! @brief Return Frequency of AVPLL CH2
* @return Frequency of AVPLL CH2
*/
uint32_t CLOCK_GetAvPllCh2Freq(void);
/*! @brief Return Frequency of main clk
* @return Frequency of main clk
*/
uint32_t CLOCK_GetMainClkFreq(void);
/*! @brief Return Frequency of core/bus clk
* @return Frequency of core/bus clk
*/
uint32_t CLOCK_GetCoreSysClkFreq(void);
/*! @brief Return Frequency of systick clk
* @return Frequency of systick clk
*/
uint32_t CLOCK_GetSystickClkFreq(void);
/*! @brief Return Frequency of sys osc Clock
* @return Frequency of sys osc Clock. Or CLK_IN pin frequency.
*/
static inline uint32_t CLOCK_GetSysOscFreq(void)
{
return (CLKCTL0->SYSOSCBYPASS == 0U) ? CLK_XTAL_OSC_CLK : ((CLKCTL0->SYSOSCBYPASS == 1U) ? g_clkinFreq : 0U);
}
/*! @brief Return Frequency of MCLK Input Clock
* @return Frequency of MCLK input Clock.
*/
static inline uint32_t CLOCK_GetMclkInClkFreq(void)
{
return g_mclkinFreq;
}
/*! @brief Return Frequency of LPOSC
* @return Frequency of LPOSC
*/
static inline uint32_t CLOCK_GetLpOscFreq(void)
{
return CLK_XTAL_OSC_CLK / 40U;
}
/*! @brief Return Frequency of CLK_32K
* @return Frequency of 32KHz osc
*/
static inline uint32_t CLOCK_GetClk32KFreq(void)
{
return CLK_RTC_32K_CLK;
}
/*! @brief Enables and disables 32KHz XTAL
* @param enable : true to enable 32k XTAL clock, false to disable clock
*/
void CLOCK_EnableXtal32K(bool enable);
/*! @brief Enables and disables RTC 32KHz
* @param enable : true to enable 32k RTC clock, false to disable clock
*/
void CLOCK_EnableRtc32K(bool enable);
/*!
* @brief Set the CLKIN (CLKIN pin) frequency based on GPIO4 input.
*
* @param freq : The CLK_IN pin input clock frequency in Hz.
*/
static inline void CLOCK_SetClkinFreq(uint32_t freq)
{
g_clkinFreq = freq;
}
/*!
* @brief Set the MCLK in (mclk_in) clock frequency based on board setting.
*
* @param freq : The MCLK input clock frequency in Hz.
*/
static inline void CLOCK_SetMclkinFreq(uint32_t freq)
{
g_mclkinFreq = freq;
}
/*! @brief Return Frequency of DMIC clk
* @return Frequency of DMIC clk
*/
uint32_t CLOCK_GetDmicClkFreq(void);
/*! @brief Return Frequency of LCD clk
* @return Frequency of LCD clk
*/
uint32_t CLOCK_GetLcdClkFreq(void);
/*! @brief Return Frequency of WDT clk
* @return Frequency of WDT clk
*/
uint32_t CLOCK_GetWdtClkFreq(void);
/*! @brief Return Frequency of mclk
* @return Frequency of mclk clk
*/
uint32_t CLOCK_GetMclkClkFreq(void);
/*! @brief Return Frequency of sct
* @return Frequency of sct clk
*/
uint32_t CLOCK_GetSctClkFreq(void);
/*! @brief Return Frequency of Flexcomm functional Clock
* @param id : flexcomm index to get frequency.
* @return Frequency of Flexcomm functional Clock
*/
uint32_t CLOCK_GetFlexCommClkFreq(uint32_t id);
/*! @brief Return Frequency of CTimer Clock
* @param id : ctimer index to get frequency.
* @return Frequency of CTimer Clock
*/
uint32_t CLOCK_GetCTimerClkFreq(uint32_t id);
/*! @brief Return Frequency of Utick Clock
* @return Frequency of Utick Clock
*/
uint32_t CLOCK_GetUtickClkFreq(void);
/*! @brief Return Frequency of Flexspi Clock
* @return Frequency of Flexspi.
*/
uint32_t CLOCK_GetFlexspiClkFreq(void);
/*! @brief Return Frequency of USIM Clock
* @return Frequency of USIM.
*/
uint32_t CLOCK_GetUsimClkFreq(void);
/*! @brief Return Frequency of GAU Clock
* @return Frequency of GAU.
*/
uint32_t CLOCK_GetGauClkFreq(void);
/*! @brief Return Frequency of OSTimer Clock
* @return Frequency of OSTimer.
*/
uint32_t CLOCK_GetOSTimerClkFreq(void);
/*! @brief Initialize TCPU FVCO to target frequency.
* For 40MHz XTAL, FVCO ranges from 3000MHz to 3840MHz.
For 38.4MHz XTAL, FVCO ranges from 2995.2MHz to 3840MHz
* @param targetHz : Target FVCO frequency in Hz.
* @param div : Divider for tcpu_mci_flexspi_clk.
* @return Actual FVCO frequency in Hz.
*/
uint32_t CLOCK_InitTcpuRefClk(uint32_t targetHz, clock_tcpu_flexspi_div_t div);
/*! @brief Deinit the TCPU reference clock.
*/
void CLOCK_DeinitTcpuRefClk(void);
/*! @brief Initialize the TDDR reference clock.
* @param div : Divider for tddr_mci_flexspi_clk.
*/
void CLOCK_InitTddrRefClk(clock_tddr_flexspi_div_t div);
/*! @brief Deinit the TDDR reference clock.
*/
void CLOCK_DeinitTddrRefClk(void);
/*! @brief Initialize the T3 reference clock.
* @param cnfg : t3pll_mci_48_60m_irc clock configuration
*/
void CLOCK_InitT3RefClk(clock_t3_mci_irc_config_t cnfg);
/*! @brief Deinit the T3 reference clock. */
void CLOCK_DeinitT3RefClk(void);
/*! @brief Initialize the AVPLL. Both channel 1 and 2 are enabled.
* @param cnfg : AVPLL clock configuration
*/
void CLOCK_InitAvPll(const clock_avpll_config_t *cnfg);
/*! @brief Deinit the AVPLL. All channels are disabled.
*/
void CLOCK_DeinitAvPll(void);
/*! @brief Update the AVPLL channel configuration. Enable/Disable state keeps unchanged.
* @param ch1Freq : Channel 1 frequency to set.
* @param ch2Freq : Channel 2 frequency to set.
* @param enableCali : Enable AVPLL calibration.
*/
void CLOCK_ConfigAvPllCh(clock_avpll_ch_freq_t ch1Freq, clock_avpll_ch_freq_t ch2Freq, bool enableCali);
/*! @brief Enable the AVPLL channel.
* @param enableCh1 : Enable AVPLL channel1, channel unchanged on false.
* @param enableCh2 : Enable AVPLL channel2, channel unchanged on false.
* @param enableCali : Enable AVPLL calibration.
*/
void CLOCK_EnableAvPllCh(bool enableCh1, bool enableCh2, bool enableCali);
/*! @brief Disable the AVPLL.
* @param disableCh1 : Disable AVPLL channel1, channel unchanged on false.
* @param disableCh2 : Disable AVPLL channel2, channel unchanged on false.
*/
void CLOCK_DisableAvPllCh(bool disableCh1, bool disableCh2);
/*! @brief Enable USB HS PHY PLL clock.
*
* This function enables USB HS PHY PLL clock.
*/
void CLOCK_EnableUsbhsPhyClock(void);
/*! @brief Disable USB HS PHY PLL clock.
*
* This function disables USB HS PHY PLL clock.
*/
void CLOCK_DisableUsbhsPhyClock(void);
#if defined(__cplusplus)
}
#endif /* __cplusplus */
/*! @} */
#endif /* _FSL_CLOCK_H_ */