Here is tthe candidate pseudo code for PLL initialization. Let me know if you finid anything.
I also added the code which check FXOSC status.
------------------------------------------------------------------------------------------------------------------------
/* Enable required clocks. Ungate by CCGRx */
CCM->CCGRx |= CCM_CCGRx_CGy(CLK_ON_ALL_MODES);
/* Enable external 32kHz clock */
SCSC->SOSC_CTR |= SCSC_SOSC_CTR_SOSC_EN_MASK;
/* Enable SIRC, PLL lock depends on it */
SCSC->SIRC_CTR |= SCSC_SIRC_CTR_SIRC_EN_MASK;
/*On-chip oscillator will not be powered down*/
CCM->CLPCR &= ~CCM_CLPCR_FXOSC_PWRDWN_MASK;
/*External high frequency oscillator will be enabled (ref_en_b = 0) - default, i.e., powered up */
CCM->CLPCR &= ~CCM_CLPCR_DIS_REF_OSC_MASK;
/*Enable FXOSC*/
CCM->CCR |= CCM_CCR_FXOSC_EN_MASK;
/*select 24 MHz XOSC clock, not 24MHz IRC clock*/
CCM->CCSR |= CCM_CCSR_FAST_CLK_SEL_MASK;
/* Enter RUN mode here - select PLL */
/* enable all the PLLs in Anadig */
/*PLL1 (System PLL) --> POWERDOWN=0, BYPASS=0, ENABLE=1, DIV_SELECT=1*/
ANADIG->PLL1_CTRL=0x00002001;
/*PLL2 (PLL 528) --> POWERDOWN=0, BYPASS=0, ENABLE=1, DIV_SELECT=1*/
ANADIG->PLL2_CTRL=0x00002001;
CCM->CCSR = (CCM_CCSR_PLL3_PFD4_EN_MASK | CCM_CCSR_PLL1_PFD_CLK_SEL(3) | \
0x0000FF00 | CCM_CCSR_FAST_CLK_SEL_MASK | (CCM_CCSR_SYS_CLK_SEL(4)));
CCM->CACRR=0x00000810; //ARM_DIV=0 (div by 1), BUS_DIV=2 (div by 3), ipg_div value is 1 (div by 2)
/*PLL2 (PLL 528) --> POWERDOWN=0, BYPASS=1, ENABLE=1, DIV_SELECT=1 (1->Fout=Fref*22, 0->Fout=Fref*22=>24M*22=528MHz) */
ANADIG->PLL2_CTRL=0x000 1 2001;
/* Disable PFD */
ANADIG->PLL2_PFD |= (PFD1_CLKGATE | PFD2_CLKGATE | PFD3_CLKGATE | PFD4_CLKGATE;
/*wait for LOCK of PLL2*/
While (!(ANADIG->PLL2_CTRL & ANADIG_PLL2_CTRL_LOCK));
/*After LOCK, PFD can be enabled. */
ANADIG->PLL2_PFD &= ~(PFD1_CLKGATE | PFD2_CLKGATE | PFD3_CLKGATE | PFD4_CLKGATE); // Enable PFD
CCM->CCSR = (CCM_CCSR_PLL3_PFD4_EN_MASK | CCM_CCSR_PLL1_PFD_CLK_SEL(3) | \
0x0000FF00 | CCM_CCSR_FAST_CLK_SEL_MASK | (CCM_CCSR_SYS_CLK_SEL(4)));
CCM->CACRR=0x00000810; //ARM_DIV=0 (div by 1), BUS_DIV=2 (div by 3), ipg_div value is 1 (div by 2)
The PFD must be disabled in the ANADIG register (ANADIG_PLLx_PFD).
The disable bit must be set (it is enabled by default after reset).