ISSDK  1.8
IoT Sensing Software Development Kit
clock_config.c
Go to the documentation of this file.
1 /*
2  * Copyright 2017 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include "fsl_common.h"
9 #include "clock_config.h"
10 
11 /*******************************************************************************
12  * Definitions
13  ******************************************************************************/
14 /* ARM PLL configuration for RUN mode */
15 const clock_arm_pll_config_t armPllConfig = {
16  .loopDivider = 100U};
17 
18 /* SYS PLL configuration for RUN mode */
19 const clock_sys_pll_config_t sysPllConfig = {
20  .loopDivider = 1U};
21 
22 /* USB1 PLL configuration for RUN mode */
23 const clock_usb_pll_config_t usb1PllConfig = {
24  .loopDivider = 0U};
25 
26 /*******************************************************************************
27  * Variables
28  ******************************************************************************/
29 /* System clock frequency. */
30 extern uint32_t SystemCoreClock;
31 
32 /*******************************************************************************
33  * Code
34  ******************************************************************************/
35 static void BOARD_BootClockGate(void)
36 {
37  /* Disable all unused peripheral clock */
38  CCM->CCGR0 = 0x00C0000FU;
39  CCM->CCGR1 = 0x30000000U;
40  CCM->CCGR2 = 0xFF3F003FU;
41  CCM->CCGR3 = 0xF0000330U;
42  CCM->CCGR4 = 0x0000FF3CU;
43  CCM->CCGR5 = 0xF003330FU;
44  CCM->CCGR6 = 0x00FC0F00U;
45 }
46 
48 {
49  /* Boot ROM did initialize the XTAL, here we only sets external XTAL OSC freq */
50  CLOCK_SetXtalFreq(24000000U);
51  CLOCK_SetRtcXtalFreq(32768U);
52 
53  CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 0x1); /* Set PERIPH_CLK2 MUX to OSC */
54  CLOCK_SetMux(kCLOCK_PeriphMux, 0x1); /* Set PERIPH_CLK MUX to PERIPH_CLK2 */
55 
56  /* Setting the VDD_SOC to 1.5V. It is necessary to config AHB to 600Mhz */
57  DCDC->REG3 = (DCDC->REG3 & (~DCDC_REG3_TRG_MASK)) | DCDC_REG3_TRG(0x12);
58 
59  CLOCK_InitArmPll(&armPllConfig); /* Configure ARM PLL to 1200M */
60 #ifndef SKIP_SYSCLK_INIT
61  CLOCK_InitSysPll(&sysPllConfig); /* Configure SYS PLL to 528M */
62 #endif
63 #ifndef SKIP_USB_PLL_INIT
64  CLOCK_InitUsb1Pll(&usb1PllConfig); /* Configure USB1 PLL to 480M */
65 #endif
66  CLOCK_SetDiv(kCLOCK_ArmDiv, 0x1); /* Set ARM PODF to 0, divide by 2 */
67  CLOCK_SetDiv(kCLOCK_AhbDiv, 0x0); /* Set AHB PODF to 0, divide by 1 */
68  CLOCK_SetDiv(kCLOCK_IpgDiv, 0x3); /* Set IPG PODF to 3, divede by 4 */
69 
70  CLOCK_SetMux(kCLOCK_PrePeriphMux, 0x3); /* Set PRE_PERIPH_CLK to PLL1, 1200M */
71  CLOCK_SetMux(kCLOCK_PeriphMux, 0x0); /* Set PERIPH_CLK MUX to PRE_PERIPH_CLK */
72 
73  /* Disable unused clock */
74  BOARD_BootClockGate();
75 
76  /* Power down all unused PLL */
77  CLOCK_DeinitAudioPll();
78  CLOCK_DeinitVideoPll();
79  CLOCK_DeinitEnetPll();
80  CLOCK_DeinitUsb2Pll();
81 
82  /* Configure UART divider to default */
83  CLOCK_SetMux(kCLOCK_UartMux, 0); /* Set UART source to PLL3 80M */
84  CLOCK_SetDiv(kCLOCK_UartDiv, 0); /* Set UART divider to 1 */
85 
86  /* Update core clock */
87  SystemCoreClockUpdate();
88 }
const clock_arm_pll_config_t armPllConfig
Definition: clock_config.c:15
uint32_t SystemCoreClock
void BOARD_BootClockRUN(void)
This function executes configuration of clocks.
Definition: clock_config.c:168
const clock_sys_pll_config_t sysPllConfig
Definition: clock_config.c:19
const clock_usb_pll_config_t usb1PllConfig
Definition: clock_config.c:23