最近在做一个项目,其中用到28062的ECAP3口做捕获,发现会间隔不定时间的不进入ECAP捕获中断。
本人是用ECAP捕获交流过零信号,其中ECAP设置捕获中断,在中断中用一个LED灯翻转指示。用示波器同时检测LED翻转指示信号和过零信号,发现过零信号有但是LED翻转信号会间隔丢失,即会出现偶尔的捕获失败,过零信号示波器显示是没有消失的,但是LED指示的信号却会在某个周期出现缺失。而且更严重会偶尔出现连续是三个过零捕获失败,已经验证多次现象,可以确定是捕获失败,过零信号一直有的。下面是我的配置,请各位大神给予指正,谢谢。
void InitECap3(void)
{
ECap3Regs.ECEINT.all = 0x0000; // Disable all capture interrupts
ECap3Regs.ECCLR.all = 0xFFFF; // Clear all CAP interrupt flags
ECap3Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads
ECap3Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped
ECap3Regs.ECCTL1.bit.PRESCALE = 0; // n*2分频
// Configure peripheral registers
ECap3Regs.ECCTL2.bit.CONT_ONESHT = 1; // One-shot
ECap3Regs.ECCTL2.bit.STOP_WRAP = 0; //3 // Stop at 1 events
ECap3Regs.ECCTL1.bit.CAP1POL = 1; // Falling edge
ECap3Regs.ECCTL1.bit.CTRRST1 = 1; // Difference operation
ECap3Regs.ECCTL2.bit.SYNCI_EN = 1; // Enable sync in
ECap3Regs.ECCTL2.bit.SYNCO_SEL = 0; // Pass through
ECap3Regs.ECCTL1.bit.CAPLDEN = 1; // Enable capture units
ECap3Regs.ECCTL2.bit.TSCTRSTOP = 1; // Start Counter
ECap3Regs.ECCTL2.bit.REARM = 1; // arm one-shot
ECap3Regs.ECCTL1.bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads
ECap3Regs.ECEINT.bit.CEVT1 = 1; // 1 events = interrupt
}
interrupt void ecap3_isr(void)
{
dfreq = ECap3Regs.CAP1;
Run_Led_Inverse = 1;
ECap3Regs.ECCLR.bit.CEVT1 = 1;
ECap3Regs.ECCLR.bit.INT = 1;
ECap3Regs.ECCTL2.bit.REARM = 1;
// Acknowledge this interrupt to receive more interrupts from group 4
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}