Peter,
I found the problem.
The example doesn't do any peripheral clock generation InitPeriClkGen().
When I remove the function void SYS_InitPeriClkGen(void), it works fine.
I have tried changing the order of the functions, but it doesn't seem to have any effect.
Thanks for your help,
void SYS_clk_init(void)
{
MC_CGM.AC5_SC.B.SELCTL = 1; //Connect FXOSC to the FMPLL input.
//Set FMPLL to MHz with 16 MHz FXOSC reference.
PLLDIG.PLLDV.R = 0x06021050; //PREDIV = 1, MFD = 80, RFDPHI = 3, RFDPHI1 = 3
PLLDIG.PLLFD.R = 0x00000000; //PLL fractional numerators
PLLDIG.PLLCAL3.R = 0x00004000; //PLL fractional denominator //MFDEN = 1
//Turn on clock sources and select system clock source
MC_ME.RUN_MC[0].R = 0x001301F2; //Configure RUN0 mode settings with sysclk FMPLL_PHI0 (64 MHz).
//MC_ME.RUN_MC[0].B.MVRON = 1;
//MC_ME.RUN_MC[0].B.FLAON = 3;
//MC_ME.RUN_MC[0].B.SXOSCON = 1;
//MC_ME.RUN_MC[0].B.SIRCCON = 1
//MC_ME.RUN_MC[0].B.PLLON = 1;
//MC_ME.RUN_MC[0].B.FXOSCON = 1;
//MC_ME.RUN_MC[0].B.FIRCON = 1;
//MC_ME.RUN_MC[0].B.SYSCLK = 1;
//Configure the oscillator divided clocks
SIRC.CTL.R = 0x00000011; //SIRC_DIV_CLK is SIRC divided by 1 (0.128 MHz).
SIRC.CTL.B.SIRCS = 1; //Should be the only one set. No ideal why they do 0x...11 and get the value they do?
FIRC.CTL.R = 0x00000011; //FIRC_DIV_CLK is FIRC divided by 1 (16 MHz).
FIRC.CTL.B.FIRCS = 1; //Should be the only one set. No ideal why they do 0x...11 and get the value they do?
SXOSC.CTL.B.OSCDIV = 0x00; //SXOSC_DIV_CLK is SXOSC divided by 1 (0.032 MHz).
FXOSC.CTL.B.OSCDIV = 0x00; //FXOSC_DIV_CLK is FXOSC divided by 1 (16 MHz).
MC_ME.RUN_PC[0].R = 0x000000FE; //Enable peripherals to run in all modes
//Mode transition to RUN0 mode:
MC_ME.MCTL.R = 0x40005AF0; //Enter RUN0 mode & Key
MC_ME.MCTL.R = 0x4000A50F; //Enter RUN0 mode & Inverted Key
while(MC_ME.GS.B.S_MTRANS); //Wait for mode transition to complete
while(MC_ME.GS.B.S_CURRENT_MODE != 0x4); //Verify RUN0 is the current mode
}
void SYS_InitPeriClkGen(void)
{
MC_CGM.SC_DC0.R = 0x80000000; //S160 at system clock divided by 0 (160 MHz).//DE = 1, DIV = 0
//MC_CGM.SC_DC0.B.DE = 1;
//MC_CGM.SC_DC0.B.DIV = 0;
MC_CGM.SC_DC1.R = 0x80010000; //S80 at system clock divided by 2 (80 MHz). //DE = 1, DIV = 1
//MC_CGM.SC_DC1.B.DE = 1;
//MC_CGM.SC_DC1.B.DIV = 1;
MC_CGM.SC_DC2.R = 0x80030000; //S40 at system clock divided by 4 (40 MHz). //DE = 1, DIV = 3
//MC_CGM.SC_DC2.B.DE = 1;
//MC_CGM.SC_DC2.B.DIV = 3;
MC_CGM.SC_DC5.R = 0x01000000; //FS80 at system clock divided by 1 (80 MHz). //DE = 1, DIV = 0
//MC_CGM.SC_DC5.B.DE = 1;
//MC_CGM.SC_DC5.B.DIV = 0;
MC_CGM.AC2_SC.R = 0x01000000; //ENET timers use TXD_CLK/RMII_CLK as source (50 MHz). //SELCTL = 1
//MC_CGM.AC2_SC.B.SELCTL = 1;
MC_CGM.AC3_SC.R = 0x01000000; //HSM TRNG uses FXOSC as source (16 MHz). //SELCTL = 1
//MC_CGM.AC3_SC.B.SELCTL = 1;
MC_CGM.AC5_SC.R = 0x01000000; //FMPLL uses FXOSC as source (16 MHz). //SELCTL = 1
//MC_CGM.AC5_SC.B.SELCTL = 1;
MC_CGM.AC6_SC.R = 0x02000000; //CLKOUT0 uses as source PLL_CLKOUT1 (64 MHz.) //SELCTL = 2
//MC_CGM.AC6_SC.B.SELCTL = 2;
MC_CGM.AC6_DC0.R = 0x80000000; //Divide CLKOUT0 source by 1 (64 MHz).//DE = 1, DIV = 0
//MC_CGM.AC6_DC0.B.DE = 1;
//MC_CGM.AC6_DC0.B.DIV = 0;
MC_CGM.AC8_SC.R = 0x00000000; //SPI0 source is F40 (16 MHz). //SELCTL = 0
//MC_CGM.AC8_SC.B.SELCTL = 0;
MC_CGM.AC9_SC.R = 0x00000000; //FlexCAN0 source is FS80 (16 MHz). //SELCTL = 0
//MC_CGM.AC9_SC.B.SELCTL = 0;
MC_CGM.CLKOUT1_SC.R = 0x0E000000; //CLKOUT1 uses as source PLL_CLKOUT1 (64 MHz). //SELCTL = 0xE
//MC_CGM.CLKOUT1_SC.B.SELCTL = 0xE;
MC_CGM.CLKOUT1_DC.R = 0x80000000; //CLKOUT1 uses as source PLL_CLKOUT1 (64 MHz).//DE = 1, DIV = 0
//MC_CGM.CLKOUT1_DC.B.DE = 1;
//MC_CGM.CLKOUT1_DC.B.DIV = 0;
}