主要是ecap模块的问题。
我想用f28035的ecap模块捕捉电网频率,ecap模块的配置参照官方例程:Example_2803xECap_Capture_Pwm来弄的,烧录后实测也成功捕捉到电网频率。
但是我把ecap函数添加进主函数后就捕捉不到了,后来一步步排除,发现把epwm模块
(SetEPWM1(); // 初始化ePWM1
SetEPWM2(); // 初始化ePWM2)
注释掉后,ecap模块就可以正常工作了。
怀疑是epwm模块和ecap模块有什么不可言状的冲突,但是找了半天也没找到,希望官方人员帮忙解决问题。
谢谢。
另附代码如下:
void main(void) { InitSysCtrl(); // SetGpio(); // Initialize GPIO InitEPwm1Gpio(); InitEPwm2Gpio(); InitECap1Gpio(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.EPWM1_INT = &epwm1_isr; PieVectTable.EPWM2_INT = &epwm2_isr; PieVectTable.ECAP1_INT = &ecap1_isr; PieVectTable.ADCINT1 = &adc_isr; EDIS; InitAdc(); // For this example, init the ADC AdcOffsetSelfCal(); EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 停止所有ePWM时钟 EDIS; InitECapture1(); //Cap1功能初始化 SetEPWM1(); // 初始化ePWM1 SetEPWM2(); // 初始化ePWM2 InitADC(); EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // 启动所有ePWM时钟 EDIS; IER |= M_INT1+M_INT3+M_INT4; // Enable CPU Interrupt 1 PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // Enable INT 1.1 in the PIE PieCtrlRegs.PIEIER3.bit.INTx1 = 1; //使能PWM1中断 PieCtrlRegs.PIEIER3.bit.INTx2 = 1; //使能PWM2中断 PieCtrlRegs.PIEIER4.bit.INTx1 = 1; //使能ECAP1中断 EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM LoopCount = 0; ConversionCount = 0; for(;;) { LoopCount++; // EPwm1Regs.CMPA.half.CMPA = (8.6 / ((Ud_REG[0] * 3.3 / 4095) / 0.04782)) * TB_PERIOD; // EPwm2Regs.CMPA.half.CMPA = (8.6 / ((Ud_REG[0] * 3.3 / 4095) / 0.04782)) * TB_PERIOD; EPwm2Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 26) * TB_PERIOD; //110V使用 EPwm1Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 26) * TB_PERIOD; //110V使用 // EPwm2Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 26) * TB_PERIOD; //110V使用 // EPwm1Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 52) * TB_PERIOD; //220V使用 // EPwm2Regs.CMPA.half.CMPA = (2 * ((Voltage3[0] * 3.3 / 4095) * 59.64 + 82.59) + 3.5) / ((Ud_REG[0] * 3.3 / 4095) / 0.04782 * 52) * TB_PERIOD; //220V使用 // nCAP1=ECap1Regs.CAP1; }