Skip to content

Commit eafe053

Browse files
imi415pi-anl
authored andcommitted
mimxrt/boards: Re-generate MIMXRT1052 clock config files.
These were regenerated by the NXP Config tool for v2.11. board_init() update was needed to ensure CLOCK_SetMode() is run at the appropriate time during startup. Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
1 parent ad873b2 commit eafe053

File tree

3 files changed

+130
-103
lines changed

3 files changed

+130
-103
lines changed

ports/mimxrt/board_init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ void board_init(void) {
5252
SCB_EnableICache();
5353
// Init clock
5454
BOARD_BootClockRUN();
55+
CLOCK_SetMode(kCLOCK_ModeRun);
5556
SystemCoreClockUpdate();
5657

5758
// Enable IOCON clock

ports/mimxrt/boards/MIMXRT1052_clock_config.c

Lines changed: 76 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2017-2019 NXP
2+
* Copyright 2022 NXP
33
* All rights reserved.
44
*
55
* SPDX-License-Identifier: BSD-3-Clause
@@ -22,11 +22,11 @@
2222

2323
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
2424
!!GlobalInfo
25-
product: Clocks v5.0
25+
product: Clocks v10.0
2626
processor: MIMXRT1052xxxxB
2727
package_id: MIMXRT1052DVL6B
2828
mcu_data: ksdk2_0
29-
processor_version: 0.0.0
29+
processor_version: 0.12.10
3030
board: IMXRT1050-EVKB
3131
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
3232

@@ -40,8 +40,6 @@ board: IMXRT1050-EVKB
4040
/*******************************************************************************
4141
* Variables
4242
******************************************************************************/
43-
/* System clock frequency. */
44-
extern uint32_t SystemCoreClock;
4543

4644
/*******************************************************************************
4745
************************ BOARD_InitBootClocks function ************************
@@ -64,7 +62,6 @@ called_from_default_init: true
6462
- {id: CLK_1M.outFreq, value: 1 MHz}
6563
- {id: CLK_24M.outFreq, value: 24 MHz}
6664
- {id: CSI_CLK_ROOT.outFreq, value: 12 MHz}
67-
- {id: ENET1_TX_CLK.outFreq, value: 2.4 MHz}
6865
- {id: ENET_125M_CLK.outFreq, value: 2.4 MHz}
6966
- {id: ENET_25M_REF_CLK.outFreq, value: 1.2 MHz}
7067
- {id: FLEXIO1_CLK_ROOT.outFreq, value: 30 MHz}
@@ -92,7 +89,7 @@ called_from_default_init: true
9289
- {id: SAI3_MCLK3.outFreq, value: 30 MHz}
9390
- {id: SEMC_CLK_ROOT.outFreq, value: 75 MHz}
9491
- {id: SPDIF0_CLK_ROOT.outFreq, value: 30 MHz}
95-
- {id: TRACE_CLK_ROOT.outFreq, value: 352/3 MHz}
92+
- {id: TRACE_CLK_ROOT.outFreq, value: 132 MHz}
9693
- {id: UART_CLK_ROOT.outFreq, value: 80 MHz}
9794
- {id: USDHC1_CLK_ROOT.outFreq, value: 198 MHz}
9895
- {id: USDHC2_CLK_ROOT.outFreq, value: 198 MHz}
@@ -104,7 +101,7 @@ called_from_default_init: true
104101
- {id: CCM.LPSPI_PODF.scale, value: '5', locked: true}
105102
- {id: CCM.PERCLK_PODF.scale, value: '2', locked: true}
106103
- {id: CCM.SEMC_PODF.scale, value: '8'}
107-
- {id: CCM.TRACE_PODF.scale, value: '3', locked: true}
104+
- {id: CCM.TRACE_CLK_SEL.sel, value: CCM_ANALOG.PLL2_MAIN_CLK}
108105
- {id: CCM_ANALOG.PLL1_BYPASS.sel, value: CCM_ANALOG.PLL1}
109106
- {id: CCM_ANALOG.PLL1_PREDIV.scale, value: '1', locked: true}
110107
- {id: CCM_ANALOG.PLL1_VDIV.scale, value: '50', locked: true}
@@ -125,31 +122,45 @@ called_from_default_init: true
125122
- {id: CCM_ANALOG.PLL4.denom, value: '50'}
126123
- {id: CCM_ANALOG.PLL4.div, value: '47'}
127124
- {id: CCM_ANALOG.PLL5.denom, value: '1'}
128-
- {id: CCM_ANALOG.PLL5.div, value: '40'}
125+
- {id: CCM_ANALOG.PLL5.div, value: '31', locked: true}
129126
- {id: CCM_ANALOG.PLL5.num, value: '0'}
127+
- {id: CCM_ANALOG.PLL5_BYPASS.sel, value: CCM_ANALOG.PLL5_POST_DIV}
128+
- {id: CCM_ANALOG.PLL5_POST_DIV.scale, value: '2'}
129+
- {id: CCM_ANALOG.VIDEO_DIV.scale, value: '4'}
130130
- {id: CCM_ANALOG_PLL_ENET_POWERDOWN_CFG, value: 'Yes'}
131131
- {id: CCM_ANALOG_PLL_USB1_POWER_CFG, value: 'Yes'}
132+
- {id: CCM_ANALOG_PLL_VIDEO_POWERDOWN_CFG, value: 'No'}
132133
sources:
133-
- {id: XTALOSC24M.OSC.outFreq, value: 24 MHz, enabled: true}
134134
- {id: XTALOSC24M.RTC_OSC.outFreq, value: 32.768 kHz, enabled: true}
135135
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
136136

137137
/*******************************************************************************
138138
* Variables for BOARD_BootClockRUN configuration
139139
******************************************************************************/
140-
const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN = {
141-
.loopDivider = 100, /* PLL loop divider, Fout = Fin * 50 */
142-
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
140+
const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN =
141+
{
142+
.loopDivider = 100, /* PLL loop divider, Fout = Fin * 50 */
143+
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
143144
};
144-
const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN = {
145-
.loopDivider = 1, /* PLL loop divider, Fout = Fin * ( 20 + loopDivider*2 + numerator / denominator ) */
146-
.numerator = 0, /* 30 bit numerator of fractional loop divider */
147-
.denominator = 1, /* 30 bit denominator of fractional loop divider */
148-
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
145+
const clock_sys_pll_config_t sysPllConfig_BOARD_BootClockRUN =
146+
{
147+
.loopDivider = 1, /* PLL loop divider, Fout = Fin * ( 20 + loopDivider*2 + numerator / denominator ) */
148+
.numerator = 0, /* 30 bit numerator of fractional loop divider */
149+
.denominator = 1, /* 30 bit denominator of fractional loop divider */
150+
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
149151
};
150-
const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN = {
151-
.loopDivider = 0, /* PLL loop divider, Fout = Fin * 20 */
152-
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
152+
const clock_usb_pll_config_t usb1PllConfig_BOARD_BootClockRUN =
153+
{
154+
.loopDivider = 0, /* PLL loop divider, Fout = Fin * 20 */
155+
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
156+
};
157+
const clock_video_pll_config_t videoPllConfig_BOARD_BootClockRUN =
158+
{
159+
.loopDivider = 31, /* PLL loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
160+
.postDivider = 8, /* Divider after PLL */
161+
.numerator = 0, /* 30 bit numerator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
162+
.denominator = 1, /* 30 bit denominator of fractional loop divider, Fout = Fin * ( loopDivider + numerator / denominator ) */
163+
.src = 0, /* Bypass clock source, 0 - OSC 24M, 1 - CLK1_P and CLK1_N */
153164
};
154165
/*******************************************************************************
155166
* Code for BOARD_BootClockRUN configuration
@@ -213,10 +224,9 @@ void BOARD_BootClockRUN(void) {
213224
CLOCK_SetDiv(kCLOCK_Usdhc2Div, 1);
214225
/* Set Usdhc2 clock source. */
215226
CLOCK_SetMux(kCLOCK_Usdhc2Mux, 0);
216-
/* In SDK projects, SDRAM (configured by SEMC) will be initialized in either debug script or dcd.
217-
* With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left
218-
* unchanged.
219-
* Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as well.*/
227+
/* In SDK projects, SDRAM (configured by SEMC) will be initialized in either debug script or dcd.
228+
* With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left unchanged.
229+
* Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as well.*/
220230
#ifndef SKIP_SYSCLK_INIT
221231
/* Disable Semc clock gate. */
222232
CLOCK_DisableClock(kCLOCK_Semc);
@@ -227,10 +237,9 @@ void BOARD_BootClockRUN(void) {
227237
/* Set Semc clock source. */
228238
CLOCK_SetMux(kCLOCK_SemcMux, 0);
229239
#endif
230-
/* In SDK projects, external flash (configured by FLEXSPI) will be initialized by dcd.
231-
* With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left
232-
* unchanged.
233-
* Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as well.*/
240+
/* In SDK projects, external flash (configured by FLEXSPI) will be initialized by dcd.
241+
* With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left unchanged.
242+
* Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as well.*/
234243
#if !(defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1))
235244
/* Disable Flexspi clock gate. */
236245
CLOCK_DisableClock(kCLOCK_FlexSpi);
@@ -257,9 +266,9 @@ void BOARD_BootClockRUN(void) {
257266
/* Disable TRACE clock gate. */
258267
CLOCK_DisableClock(kCLOCK_Trace);
259268
/* Set TRACE_PODF. */
260-
CLOCK_SetDiv(kCLOCK_TraceDiv, 2);
269+
CLOCK_SetDiv(kCLOCK_TraceDiv, 3);
261270
/* Set Trace clock source. */
262-
CLOCK_SetMux(kCLOCK_TraceMux, 2);
271+
CLOCK_SetMux(kCLOCK_TraceMux, 0);
263272
/* Disable SAI1 clock gate. */
264273
CLOCK_DisableClock(kCLOCK_Sai1);
265274
/* Set SAI1_CLK_PRED. */
@@ -351,10 +360,12 @@ void BOARD_BootClockRUN(void) {
351360
/* Init ARM PLL. */
352361
CLOCK_InitArmPll(&armPllConfig_BOARD_BootClockRUN);
353362
/* In SDK projects, SDRAM (configured by SEMC) will be initialized in either debug script or dcd.
354-
* With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left
355-
* unchanged. Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as
356-
* well.*/
363+
* With this macro SKIP_SYSCLK_INIT, system pll (selected to be SEMC source clock in SDK projects) will be left unchanged.
364+
* Note: If another clock source is selected for SEMC, user may want to avoid changing that clock as well.*/
357365
#ifndef SKIP_SYSCLK_INIT
366+
#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1)
367+
#warning "SKIP_SYSCLK_INIT should be defined to keep system pll (selected to be SEMC source clock in SDK projects) unchanged."
368+
#endif
358369
/* Init System PLL. */
359370
CLOCK_InitSysPll(&sysPllConfig_BOARD_BootClockRUN);
360371
/* Init System pfd0. */
@@ -365,13 +376,10 @@ void BOARD_BootClockRUN(void) {
365376
CLOCK_InitSysPfd(kCLOCK_Pfd2, 24);
366377
/* Init System pfd3. */
367378
CLOCK_InitSysPfd(kCLOCK_Pfd3, 16);
368-
/* Disable pfd offset. */
369-
CCM_ANALOG->PLL_SYS &= ~CCM_ANALOG_PLL_SYS_PFD_OFFSET_EN_MASK;
370379
#endif
371380
/* In SDK projects, external flash (configured by FLEXSPI) will be initialized by dcd.
372-
* With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left
373-
* unchanged. Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as
374-
* well.*/
381+
* With this macro XIP_EXTERNAL_FLASH, usb1 pll (selected to be FLEXSPI clock source in SDK projects) will be left unchanged.
382+
* Note: If another clock source is selected for FLEXSPI, user may want to avoid changing that clock as well.*/
375383
#if !(defined(XIP_EXTERNAL_FLASH) && (XIP_EXTERNAL_FLASH == 1))
376384
/* Init Usb1 PLL. */
377385
CLOCK_InitUsb1Pll(&usb1PllConfig_BOARD_BootClockRUN);
@@ -395,21 +403,30 @@ void BOARD_BootClockRUN(void) {
395403
CCM_ANALOG->MISC2 &= ~CCM_ANALOG_MISC2_AUDIO_DIV_MSB_MASK;
396404
/* Enable Audio PLL output. */
397405
CCM_ANALOG->PLL_AUDIO |= CCM_ANALOG_PLL_AUDIO_ENABLE_MASK;
398-
/* DeInit Video PLL. */
399-
CLOCK_DeinitVideoPll();
400-
/* Bypass Video PLL. */
401-
CCM_ANALOG->PLL_VIDEO |= CCM_ANALOG_PLL_VIDEO_BYPASS_MASK;
402-
/* Set divider for Video PLL. */
403-
CCM_ANALOG->MISC2 = (CCM_ANALOG->MISC2 & (~CCM_ANALOG_MISC2_VIDEO_DIV_MASK)) | CCM_ANALOG_MISC2_VIDEO_DIV(0);
404-
/* Enable Video PLL output. */
405-
CCM_ANALOG->PLL_VIDEO |= CCM_ANALOG_PLL_VIDEO_ENABLE_MASK;
406+
/* Init Video PLL. */
407+
uint32_t pllVideo;
408+
/* Disable Video PLL output before initial Video PLL. */
409+
CCM_ANALOG->PLL_VIDEO &= ~CCM_ANALOG_PLL_VIDEO_ENABLE_MASK;
410+
/* Bypass PLL first */
411+
CCM_ANALOG->PLL_VIDEO = (CCM_ANALOG->PLL_VIDEO & (~CCM_ANALOG_PLL_VIDEO_BYPASS_CLK_SRC_MASK)) |
412+
CCM_ANALOG_PLL_VIDEO_BYPASS_MASK | CCM_ANALOG_PLL_VIDEO_BYPASS_CLK_SRC(0);
413+
CCM_ANALOG->PLL_VIDEO_NUM = CCM_ANALOG_PLL_VIDEO_NUM_A(0);
414+
CCM_ANALOG->PLL_VIDEO_DENOM = CCM_ANALOG_PLL_VIDEO_DENOM_B(1);
415+
pllVideo = (CCM_ANALOG->PLL_VIDEO & (~(CCM_ANALOG_PLL_VIDEO_DIV_SELECT_MASK | CCM_ANALOG_PLL_VIDEO_POWERDOWN_MASK))) |
416+
CCM_ANALOG_PLL_VIDEO_ENABLE_MASK | CCM_ANALOG_PLL_VIDEO_DIV_SELECT(31);
417+
pllVideo |= CCM_ANALOG_PLL_VIDEO_POST_DIV_SELECT(1);
418+
CCM_ANALOG->MISC2 = (CCM_ANALOG->MISC2 & (~CCM_ANALOG_MISC2_VIDEO_DIV_MASK)) | CCM_ANALOG_MISC2_VIDEO_DIV(3);
419+
CCM_ANALOG->PLL_VIDEO = pllVideo;
420+
while ((CCM_ANALOG->PLL_VIDEO & CCM_ANALOG_PLL_VIDEO_LOCK_MASK) == 0) {
421+
}
422+
/* Disable bypass for Video PLL. */
423+
CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllVideo, 0);
406424
/* DeInit Enet PLL. */
407425
CLOCK_DeinitEnetPll();
408426
/* Bypass Enet PLL. */
409427
CLOCK_SetPllBypass(CCM_ANALOG, kCLOCK_PllEnet, 1);
410428
/* Set Enet output divider. */
411-
CCM_ANALOG->PLL_ENET =
412-
(CCM_ANALOG->PLL_ENET & (~CCM_ANALOG_PLL_ENET_DIV_SELECT_MASK)) | CCM_ANALOG_PLL_ENET_DIV_SELECT(1);
429+
CCM_ANALOG->PLL_ENET = (CCM_ANALOG->PLL_ENET & (~CCM_ANALOG_PLL_ENET_DIV_SELECT_MASK)) | CCM_ANALOG_PLL_ENET_DIV_SELECT(1);
413430
/* Enable Enet output. */
414431
CCM_ANALOG->PLL_ENET |= CCM_ANALOG_PLL_ENET_ENABLE_MASK;
415432
/* Enable Enet25M output. */
@@ -429,8 +446,7 @@ void BOARD_BootClockRUN(void) {
429446
/* Set per clock source. */
430447
CLOCK_SetMux(kCLOCK_PerclkMux, 0);
431448
/* Set lvds1 clock source. */
432-
CCM_ANALOG->MISC1 =
433-
(CCM_ANALOG->MISC1 & (~CCM_ANALOG_MISC1_LVDS1_CLK_SEL_MASK)) | CCM_ANALOG_MISC1_LVDS1_CLK_SEL(0);
449+
CCM_ANALOG->MISC1 = (CCM_ANALOG->MISC1 & (~CCM_ANALOG_MISC1_LVDS1_CLK_SEL_MASK)) | CCM_ANALOG_MISC1_LVDS1_CLK_SEL(0);
434450
/* Set clock out1 divider. */
435451
CCM->CCOSR = (CCM->CCOSR & (~CCM_CCOSR_CLKO1_DIV_MASK)) | CCM_CCOSR_CLKO1_DIV(0);
436452
/* Set clock out1 source. */
@@ -457,13 +473,19 @@ void BOARD_BootClockRUN(void) {
457473
IOMUXC_SetSaiMClkClockSource(IOMUXC_GPR, kIOMUXC_GPR_SAI3MClk3Sel, 0);
458474
/* Set MQS configuration. */
459475
IOMUXC_MQSConfig(IOMUXC_GPR, kIOMUXC_MqsPwmOverSampleRate32, 0);
460-
/* Set ENET Tx clock source. */
461-
IOMUXC_EnableMode(IOMUXC_GPR, kIOMUXC_GPR_ENET1RefClkMode, false);
476+
/* Set ENET Ref clock source. */
477+
#if defined(IOMUXC_GPR_GPR1_ENET_REF_CLK_DIR_MASK)
478+
IOMUXC_GPR->GPR1 &= ~IOMUXC_GPR_GPR1_ENET_REF_CLK_DIR_MASK;
479+
#elif defined(IOMUXC_GPR_GPR1_ENET1_TX_CLK_DIR_MASK)
480+
/* Backward compatibility for original bitfield name */
481+
IOMUXC_GPR->GPR1 &= ~IOMUXC_GPR_GPR1_ENET1_TX_CLK_DIR_MASK;
482+
#else
483+
#error "Neither IOMUXC_GPR_GPR1_ENET_REF_CLK_DIR_MASK nor IOMUXC_GPR_GPR1_ENET1_TX_CLK_DIR_MASK is defined."
484+
#endif /* defined(IOMUXC_GPR_GPR1_ENET_REF_CLK_DIR_MASK) */
462485
/* Set GPT1 High frequency reference clock source. */
463486
IOMUXC_GPR->GPR5 &= ~IOMUXC_GPR_GPR5_VREF_1M_CLK_GPT1_MASK;
464487
/* Set GPT2 High frequency reference clock source. */
465488
IOMUXC_GPR->GPR5 &= ~IOMUXC_GPR_GPR5_VREF_1M_CLK_GPT2_MASK;
466489
/* Set SystemCoreClock variable. */
467490
SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK;
468-
CLOCK_SetMode(kCLOCK_ModeRun);
469491
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy