emios MPC5634M can I use counter bus

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

emios MPC5634M can I use counter bus

894 Views
monicabagade
Contributor II

I am trying to learn EMIOS module for MPC 5634M for all modes of operation. In this Initially I have tried use of Bus A and internal counter to drive the unifeid channel. ITS working propely. Now, I am trying to use counter bus B, C, D to drive the channel by selecting EMIOS.CH[10].CCR.B.BSL = 0x1 but its not working. Can anyone tell me what are the other settings require to use this mode. Also can I use use internal counter by selecting EMIOS.CH[10].CCR.B.BSL = 0x3 for other channel while using EMIOS.CH[10].CCR.B.BSL = 0x1 mode for some different channel in the same program.

This is my code.

/ Initilization of EMIOS

void initEMIOS(void) {
 
  EMIOS.MCR.B.GPRE= 63;   /* Divide 64 MHz sysclk by 63+1 = 64 for 1MHz eMIOS clk*/
  EMIOS.MCR.B.GPREN = 1; /* Enable eMIOS clock */
  EMIOS.MCR.B.GTBE = 1;   /* Enable global time base */
  EMIOS.MCR.B.FRZ = 1;    /* Enable stopping channels when in debug mode */
   //EMIOS.MCR.B.ETB = 0;
}

// Channel 23 for modulous counter

void initEMIOSch23(void) {        /* EMIOS CH 23: Modulus Up Counter */
  EMIOS.CH[23].CADR.R = 999;     /* Period will be 999999+1 = 1000000 clocks (1 sec) */
  EMIOS.CH[23].CCR.B.MODE = 0x50; /* MPC551x, MPC563x: Mod Ctr Bufd (MCB) int clk */
  EMIOS.CH[23].CCR.B.BSL = 0x3;   /* Use internal counter */
  EMIOS.CH[23].CCR.B.UCPRE=0;   /* Set channel prescaler to divide by 1 */
  EMIOS.CH[23].CCR.B.FREN = 1;    /* Freeze channel counting when in debug mode */
  EMIOS.CH[23].CCR.B.UCPREN = 1;  /* Enable prescaler; uses default divide by 1 */
}

//Channel 10 for OPWMB

void initEMIOSch10(void) {         /* EMIOS CH 0: Output Pulse Width Modulation */
  EMIOS.CH[10].CADR.R = 250 ;       /* Leading edge when channel counter bus=250*/
  EMIOS.CH[10].CBDR.R = 500;       /* Trailing edge when channel counter bus=500*/
  EMIOS.CH[10].CCR.B.BSL = 0x1;   /* Use counter bus A (default) */
  //EMIOS.CH[14].CCR.B.UCPRE = 1;     // internal prescaler of Unified Channel=1
  //EMIOS.CH[14].CCR.B.UCPREN = 1;   // internal prescaler of Unified Channel enable
  EMIOS.CH[10].CCR.B.EDPOL = 1;   /* Polarity-leading edge sets output/trailing clears*/
  EMIOS.CH[10].CCR.B.MODE = 0x60;  /* MPC551x, MPC563x: Mode is OPWM Buffered */
  SIU.PCR[189].R = 0x0600;        /* Initialize pad for eMIOS chan. 0 output */
}

/Channel 14 for OPWFMB

void initEMIOSch14(void) {         /* EMIOS CH 0: Output Pulse Width Modulation */
  EMIOS.CH[14].CADR.R =  499;       /* Leading edge when channel counter bus=250*/
  EMIOS.CH[14].CBDR.R = 999;       /* Trailing edge when channel counter bus=500*/
  EMIOS.CH[14].CCR.B.UCPRE = 1;     // internal prescaler of Unified Channel=1
  EMIOS.CH[14].CCR.B.UCPREN = 1;   // internal prescaler of Unified Channel enable
  EMIOS.CH[14].CCR.B.EDPOL = 1;   /* Polarity-leading edge sets output/trailing clears*/
  EMIOS.CH[14].CCR.B.MODE = 0x58;  /* MPC551x, MPC563x: Mode is OPWM Buffered */
  SIU.PCR[193].R = 0x0600;        /* Initialize pad for eMIOS chan. 0 output */
}

Tags (2)
0 Kudos
2 Replies

591 Views
PetrS
NXP TechSupport
NXP TechSupport

Hi,

There is always group of channels, which are running from counter bus B, C or D. See Figure 297 “eMIOS block diagram” of the device RM for more info.

Channels 1-7 can use Counter bus B, which is driven by Channle 0.

Channels 9-15 can use Counter bus C, which is driven by Channle 8.

Channels 17-23 can use Counter bus D, which is driven by Channle 16.

 

So channel 10 can run from  Counter bus C, thus you need to initialize channel 8 for MCB mode, similarly as you init channel 23 to serve counter bus A.

 

Each channel can run from Counter bus A or one of B/C/D buses or internal counter depending on CCR[BSL] setting and used mode.

Note: only a big channels can run from internal counter. See Table 209 for channel group implementation.

BR, Petr

0 Kudos

591 Views
monicabagade
Contributor II

Okay.

I got it.

Thank you.

0 Kudos