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?
Hi,
This has been solved in the thread below.
In normal mode, the MODRR1 register can be written only once.
Regards,
Daniel
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 */
}