Hi Sabina,
I'm OK, thank you.
And you?
Sorry about not mentioning my environment.
I'm using LPC5526 with SDK v2.8.0 with Eclipse IDE (2020-06) (so not MCUXpresso)
I'm talking about the function SystemCoreClockUpdate in system_LPC5526.c (snippet):
void SystemCoreClockUpdate (void) {
uint32_t clkRate = 0;
uint32_t prediv, postdiv;
uint64_t workRate;
uint64_t workRate1;
switch (SYSCON->MAINCLKSELB & SYSCON_MAINCLKSELB_SEL_MASK)
{
case 0x00:
switch (SYSCON->MAINCLKSELA & SYSCON_MAINCLKSELA_SEL_MASK)
{
case 0x00:
clkRate = GetFro12MFreq();
break;
case 0x01:
clkRate = GetExtClkFreq();
break;
case 0x02:
clkRate = GetFro1MFreq();
break;
default:
clkRate = GetFroHfFreq();
break;
}
break;
...
default:
clkRate = 0UL;
break;
}
SystemCoreClock = clkRate / ((SYSCON->AHBCLKDIV & 0xFFUL) + 1UL);
}
Since I'm using the external crystal (clk_in), GetExtClkFreq will be called:
static uint32_t GetExtClkFreq(void)
{
return ((ANACTRL->XO32M_CTRL & ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK) != 0UL) ? CLK_CLK_IN : 0U;
}
This will return CLK_CLK_IN:
#define CLK_CLK_IN 16000000u
So hardcoded 16MHz, regardless of what I setup as crystal frequency
The function CLOCK_GetExtClkFreq from fsl_clock.c will return the correct frequency:
uint32_t CLOCK_GetExtClkFreq(void)
{
return ((ANACTRL->XO32M_CTRL & ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK) != 0UL) ? s_Ext_Clk_Freq : 0U;
}
since s_Ext_Clk_Freq is set to the correct frequency in the function CLOCK_SetupExtClocking, which I use to setup the frequency ():
status_t CLOCK_SetupExtClocking(uint32_t iFreq)
{
if (iFreq >= 32000000U)
{
return kStatus_Fail;
}
/* Turn on power for crystal 32 MHz */
POWER_DisablePD(kPDRUNCFG_PD_XTAL32M);
POWER_DisablePD(kPDRUNCFG_PD_LDOXO32M);
/* Enable clock_in clock for clock module. */
SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK;
s_Ext_Clk_Freq = iFreq;
return kStatus_Success;
}
Note: External crystal is connected to Main clock with:
CLOCK_AttachClk(kEXT_CLK_to_MAIN_CLK);
in my code.