S12ZVH128 CPU Frequency

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

S12ZVH128 CPU Frequency

906 Views
axhubner
Contributor II

Hi,

 

i am currently using the TRK S12ZVH128 evolution board for pre-development.

I am trying to set the CPU Bus frequency up to 32Mhz (Max frequency).

Unfortunately the code always crashes when I try to set the CPMUSYNR register.

To eliminate bugs on my code i also tried to generate the CPU init code with processor expert, but it still crashes.

When i reduce the frequency down to 26 Mhz the initialization seems to work.

As i told, we are using the S12ZVH128 for pre-developing. For the product itself a S12zVH64 is planned.

If i run the code with the S12zVH64 it seems to work correctly. Why can't i use the maximum frequency for the S12ZVH128 and is it a problem to use 32Mhz for the S12zVH64?

 

 

void _EntryPoint(void)

{

  /*** !!! Here you can place your own code using property "User code before PE initialization" on the build options tab of the CPU compoennt. !!! ***/

  /* ### MC9S12ZVH128_144 "Cpu" init code ... */

  /*  PE initialization code after reset */

  /* IVBR: IVB_ADDR=0x7FFF,??=0 */

  setReg16(IVBR, 0xFFFEU);             

  /* ECLKCTL: NECLK=1,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */

  setReg8(ECLKCTL, 0x80U);             

  /*  System clock initialization */

  /* CPMUPROT: ??=0,??=0,??=1,??=0,??=0,??=1,??=1,PROT=0 */

  setReg8(CPMUPROT, 0x26U);            /* Disable protection of clock configuration registers */

  /* CPMUCLKS: PSTP=0 */

  clrReg8Bits(CPMUCLKS, 0x40U);        

  /* CPMUCLKS: PLLSEL=1 */

  setReg8Bits(CPMUCLKS, 0x80U);        /* Enable the PLL to allow write to divider registers */

  /* CPMUPOSTDIV: ??=0,??=0,??=0,POSTDIV4=0,POSTDIV3=0,POSTDIV2=0,POSTDIV1=0,POSTDIV0=0 */

  setReg8(CPMUPOSTDIV, 0x00U);         /* Set the post divider register */

  /* Whenever changing PLL reference clock (REFCLK) frequency to a higher value

   it is recommended to write CPMUSYNR = 0x00 in order to stay within specified

   maximum frequency of the MCU */

  /* CPMUSYNR: VCOFRQ1=0,VCOFRQ0=0,SYNDIV5=0,SYNDIV4=0,SYNDIV3=0,SYNDIV2=0,SYNDIV1=0,SYNDIV0=0 */

  setReg8(CPMUSYNR, 0x00U);            /* Set the multiplier register */

  /* CPMUPLL: ??=0,??=0,FM1=0,FM0=0,??=0,??=0,??=0,??=0 */

  setReg8(CPMUPLL, 0x00U);             /* Set the PLL frequency modulation */

  /* CPMUSYNR: VCOFRQ1=0,VCOFRQ0=1,SYNDIV5=0,SYNDIV4=1,SYNDIV3=1,SYNDIV2=1,SYNDIV1=1,SYNDIV0=1 */

  setReg8(CPMUSYNR, 0x5FU);            /* Set the multiplier register */  --> Crash

 

Regards

Axel

Labels (1)
0 Kudos
2 Replies

581 Views
RadekS
NXP Employee
NXP Employee

Hi Axel,

There might be the problem with BDM communication while debugging when MCU bus clock is set to close to maximum bus clock value.

This because the default debug configuration is set in order to the bus clock is used as debug controller clock source.

In order to change this feature, please go to CW project main menu -> Run -> Debug Configurations...

In the Debug Configurations window, find Target Settings -> Connection -> Edit...

In the Hardware or Simulator Connection window, find Connection tab and uncheck the box: 'Use Bus Clock as Debug Controller Clock Source', click OK.

Edit Debug Configuration CW10.png

Use Bus clock as Debug Controller Clock Source.png

In that case, the debug module will use 1MHz IRC clock for BDM communication instead Bus clock.

S12Z clock example codes:

https://community.freescale.com/docs/DOC-330238


I hope it helps you.

Have a great day,
RadekS

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

581 Views
axhubner
Contributor II

Thanks Radek, it works

0 Kudos