| /* |
| * Copyright 2017 NXP |
| * |
| * Redistribution and use in source and binary forms, with or without modification, |
| * are permitted provided that the following conditions are met: |
| * |
| * o Redistributions of source code must retain the above copyright notice, this list |
| * of conditions and the following disclaimer. |
| * |
| * o Redistributions in binary form must reproduce the above copyright notice, this |
| * list of conditions and the following disclaimer in the documentation and/or |
| * other materials provided with the distribution. |
| * |
| * o Neither the name of the copyright holder nor the names of its |
| * contributors may be used to endorse or promote products derived from this |
| * software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
| * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
| * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "fsl_common.h" |
| #include "clock_config.h" |
| |
| /******************************************************************************* |
| * Definitions |
| ******************************************************************************/ |
| /* ARM PLL configuration for RUN mode */ |
| const clock_arm_pll_config_t armPllConfig = {.loopDivider = 100U}; |
| |
| /* SYS PLL configuration for RUN mode */ |
| const clock_sys_pll_config_t sysPllConfig = {.loopDivider = 1U}; |
| |
| /* USB1 PLL configuration for RUN mode */ |
| const clock_usb_pll_config_t usb1PllConfig = {.loopDivider = 0U}; |
| |
| /******************************************************************************* |
| * Variables |
| ******************************************************************************/ |
| /* System clock frequency. */ |
| extern uint32_t SystemCoreClock; |
| |
| /******************************************************************************* |
| * Code |
| ******************************************************************************/ |
| static void BOARD_BootClockGate(void) |
| { |
| /* Disable all unused peripheral clock */ |
| CCM->CCGR0 = 0x00C0000FU; |
| CCM->CCGR1 = 0x30000000U; |
| CCM->CCGR2 = 0xFF3F303FU; |
| CCM->CCGR3 = 0xF0000330U; |
| CCM->CCGR4 = 0x0000FF3CU; |
| CCM->CCGR5 = 0xF003330FU; |
| CCM->CCGR6 = 0x00FC0F00U; |
| } |
| |
| void BOARD_BootClockRUN(void) |
| { |
| /* Boot ROM did initialize the XTAL, here we only sets external XTAL OSC freq */ |
| CLOCK_SetXtalFreq(24000000U); |
| CLOCK_SetRtcXtalFreq(32768U); |
| |
| CLOCK_SetMux(kCLOCK_PeriphClk2Mux, 0x1); /* Set PERIPH_CLK2 MUX to OSC */ |
| CLOCK_SetMux(kCLOCK_PeriphMux, 0x1); /* Set PERIPH_CLK MUX to PERIPH_CLK2 */ |
| |
| /* Setting the VDD_SOC to 1.5V. It is necessary to config AHB to 600Mhz */ |
| DCDC->REG3 = (DCDC->REG3 & (~DCDC_REG3_TRG_MASK)) | DCDC_REG3_TRG(0x12); |
| |
| CLOCK_InitArmPll(&armPllConfig); /* Configure ARM PLL to 1200M */ |
| #ifndef SKIP_SYSCLK_INIT |
| CLOCK_InitSysPll(&sysPllConfig); /* Configure SYS PLL to 528M */ |
| #endif |
| #ifndef SKIP_USB_PLL_INIT |
| CLOCK_InitUsb1Pll(&usb1PllConfig); /* Configure USB1 PLL to 480M */ |
| #endif |
| CLOCK_SetDiv(kCLOCK_ArmDiv, 0x1); /* Set ARM PODF to 0, divide by 2 */ |
| CLOCK_SetDiv(kCLOCK_AhbDiv, 0x0); /* Set AHB PODF to 0, divide by 1 */ |
| CLOCK_SetDiv(kCLOCK_IpgDiv, 0x3); /* Set IPG PODF to 3, divede by 4 */ |
| |
| CLOCK_SetMux(kCLOCK_PrePeriphMux, 0x3); /* Set PRE_PERIPH_CLK to PLL1, 1200M */ |
| CLOCK_SetMux(kCLOCK_PeriphMux, 0x0); /* Set PERIPH_CLK MUX to PRE_PERIPH_CLK */ |
| |
| /* Disable unused clock */ |
| BOARD_BootClockGate(); |
| |
| /* Power down all unused PLL */ |
| CLOCK_DeinitAudioPll(); |
| CLOCK_DeinitVideoPll(); |
| CLOCK_DeinitEnetPll(); |
| CLOCK_DeinitUsb2Pll(); |
| |
| /* Configure UART divider to default */ |
| CLOCK_SetMux(kCLOCK_UartMux, 0); /* Set UART source to PLL3 80M */ |
| CLOCK_SetDiv(kCLOCK_UartDiv, 0); /* Set UART divider to 1 */ |
| |
| /* Update core clock */ |
| SystemCoreClockUpdate(); |
| } |