PMF problem

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

PMF problem

891 Views
sufree
Contributor II

Hello community,

I'm working on a project using a s12zvm,My code is as following ,but it can not generate PWM in i/o port,I don't know why ,Can anyone give my some suggestion?

void initPMF(void){

PMFCFG0_EDGEA = 1;
PMFCFG0_EDGEB = 1;
PMFCFG0_EDGEC = 1; //01 23 45 complementary pwm pair and edge-aligned pwm

PMFCFG0_INDEPA = 1; //independent mode
PMFCFG0_INDEPB = 1;
PMFCFG0_INDEPC = 1;

PMFCFG2_REV0 = 1; // 01 PWM generator A generates reload event.
PMFCFG2_REV1 = 0;

PMFOUTB = 0x2A; // Low MOSFETs ON while SW control (Unipolar PWM) 01 23 45 complementary pwm pair

PMFCFG3_VLMODE = 0x01; // Writing to value register zero also writes to value registers one to five

//PMFFEN = 0 // Fault disabled
// .... (other fault registers)

PMFFQCA = 0; // Reload every PWM, Half-cycle disabled, f core / 1(25Mhz)

PMFMODA = 1250;
PMFDTMA = 13; //dead time

PMFCFG2 |= 0x3f; // mask all PWM outputs
PMFOUTC_OUTCTL = 0x3f; // all outputs in Software mode


PMFENCA_LDOKA = 1; // apply PMF Modulo value

PMFENCA_RSTRTA = 1; // 1 = PWM restart at commutation event

PMFENCA_PWMENA = 1;

//PMFENCA_PWMRIEA = 1; // Reload Interrupt - Used only for debugging

PMFCFG1_ENCE = 0; // buffered PMFOUTC, PMFOUTB, SWAPx and MSKx (change on commutation event)

PMFENCA_GLDOKA = 1; // 0 = Local LDOKA controls buffered registers / 1 = external Load OK controls buffered registers

MODRR1_PWMPRR =0x01; //PWM router
MODRR1_PWM54RR = 1;
MODRR1_PWM32RR = 1;
MODRR1_PWM10RR = 1;
}

Can you give me same advise?

Tags (2)
0 Kudos
2 Replies

527 Views
danielmartynek
NXP TechSupport
NXP TechSupport

Hi,

This has been solved in the thread below.

PMF problem on power-on 

In normal mode, the MODRR1 register can be written only once.

Regards,

Daniel

0 Kudos

527 Views
sufree
Contributor II

Hi,thank you very much for your help.I did it as what you said,but is failed. Can you help check my code ?

void initPMF(void){

PMFCFG0_EDGEA = 1;
PMFCFG0_EDGEB = 1;
PMFCFG0_EDGEC = 1; //01 23 45 complementary pwm pair and edge-aligned pwm

// PMFCFG0_INDEPA = 1; //independent mode
// PMFCFG0_INDEPB = 1;
// PMFCFG0_INDEPC = 1;

PMFCFG2_REV0 = 1; // 01 PWM generator A generates reload event.
PMFCFG2_REV1 = 0;

PMFOUTB = 0x2A; // Low MOSFETs ON while SW control (Unipolar PWM) 01 23 45 complementary pwm pair

PMFCFG3_VLMODE = 0x01; // Writing to value register zero also writes to value registers one to five

//PMFFEN = 0 // Fault disabled
// .... (other fault registers)

PMFFQCA = 0; // Reload every PWM, Half-cycle disabled, f core / 1(25Mhz)

PMFMODA = 1250;
PMFDTMA = 13; //dead time

PMFCFG2 |= 0x3f; // mask all PWM outputs
PMFOUTC_OUTCTL = 0x3f; // all outputs in Software mode

PMFENCA_LDOKA = 1; // apply PMF Modulo value

PMFENCA_RSTRTA = 1; // 1 = PWM restart at commutation event

PMFENCA_PWMENA = 1;

//PMFENCA_PWMRIEA = 1; // Reload Interrupt - Used only for debugging

PMFCFG1_ENCE = 1; // buffered PMFOUTC, PMFOUTB, SWAPx and MSKx (change on commutation event)

PMFENCA_GLDOKA = 1; // 0 = Local LDOKA controls buffered registers / 1 = external Load OK controls buffered registers

MODRR1|=0x0f; //PWM router
}

void main(void) {
initCPMU();
initPMF();
PMFVAL0 = 250;
PMFCFG2 = 0x40; // unmask all PWM outputs
PMFOUTC_OUTCTL = 0x3f; // all outputs in Software mode
PMFOUTB = 0x3f; //output enable

/* include your code here */

for(;;) {
//PMFVAL0 = 250;
// __RESET_WATCHDOG(); /* feeds the dog */

} /* loop forever */
/* please make sure that you never leave main */

}

0 Kudos