TMS320F280049C: F280049C单次捕获不能捕获到数据,连续模式可以。

Part Number: TMS320F280049C

改成连续模式是可以捕获到数据的,改成单次模式就不行,不知道为什么?

EALLOW; 

ECap1Regs.ECEINT.all = 0x0000; 

ECap1Regs.ECCLR.all = 0xFFFF;

ECap1Regs.ECCTL1.bit.CAPLDEN = 0;

 ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;

ECap1Regs.CAP1 = 0;

ECap1Regs.ECCTL1.bit.CAP1POL = 1;

ECap1Regs.ECCTL1.bit.CAP2POL = 0;

ECap1Regs.ECCTL1.bit.CAP3POL = 0;

ECap1Regs.ECCTL1.bit.CTRRST1 = 0;

ECap1Regs.ECCTL1.bit.CTRRST2 = 0;

ECap1Regs.ECCTL1.bit.CTRRST3 = 0;

ECap1Regs.ECCTL1.bit.PRESCALE = 0;

ECap1Regs.ECCTL1.bit.CAPLDEN = 1;

ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;

 ECap1Regs.ECCTL2.bit.SYNCO_SEL = 2;

ECap1Regs.ECCTL2.bit.CAP_APWM = 0;

ECap1Regs.ECCTL2.bit.CONT_ONESHT= 1;

ECap1Regs.ECCTL2.bit.STOP_WRAP = 2;

ECap1Regs.ECEINT.bit.CEVT1 = 0;

 ECap1Regs.ECEINT.bit.CEVT2 = 0;

ECap1Regs.ECEINT.bit.CEVT3 = 0;

ECap1Regs.ECEINT.bit.CEVT4 = 0;

 ECap1Regs.ECCTL0.bit.INPUTSEL = 2;

ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;

EDIS;

查询方式读取数据:

if( ECap1Regs.ECFLG.bit.CEVT1 )

 { ECAP1_CAP = ECap1Regs.CAP1; ECap1Regs.ECCLR.bit.CEVT1 = 1; }

else if( ECap1Regs.ECFLG.bit.CEVT2)

{ ECAP1_CAP2 = ECap1Regs.CAP2;

ECap1Regs.ECCLR.bit.CEVT2 = 1;

ECap1Regs.ECCTL2.bit.REARM = 1;

 }

else if( ECap1Regs.ECFLG.bit.CEVT3)

 { ECAP1_CAP2 = ECap1Regs.CAP3;

ECap1Regs.ECCLR.bit.CEVT3 = 1;

ECap1Regs.ECCTL2.bit.REARM = 1;

}

else if( ECap1Regs.ECFLG.bit.CEVT4)

 { ECAP1_CAP2 = ECap1Regs.CAP4;

ECap1Regs.ECCLR.bit.CEVT4 = 1;

ECap1Regs.ECCTL2.bit.REARM = 1;

}

  • 感谢您对TI产品的关注。
    我们正在核实您的问题,请等待我们的答复。

  • 有可能是STOP_WRAP的设置问题,连续模式下不受STOP_WRAP的影响,单次模式下,达到事件数才会触发中断,不然不会更新数据。

  • 谢谢回复,STOP_WRAP的设置ECap1Regs.ECCTL2.bit.STOP_WRAP = 2;看起来也没有什么问题,我也怀疑过这个问题,我仿真测试过,一次中断都不会进入,把这个这条语句ECap1Regs.ECCTL2.bit.REARM = 1;放到所有的捕获查询里都不行

  • 如下是常见原因的总结,再排查一下。

    1. Capture Stop/Rearm Configuration

    • In single-shot mode, the eCAP stops after the programmed number of events and must be manually re-armed
    • Check the CTRMODE bits in ECCTL2 register - ensure they're configured for one-shot mode properly
    • Verify you're resetting the module or re-enabling capture after each capture sequence

    2. Event Prescaler Settings

    • Single-shot mode is more sensitive to event prescaler configuration
    • Verify ECCTL1[PRESCALE] settings match your input frequency
    • Too aggressive prescaling can cause missed events in single-shot mode

    3. Interrupt/Flag Handling

    • In single-shot mode, the CEVT1-4 flags and CTROVF flag must be properly cleared
    • Check that you're servicing the CEINT (capture interrupt) correctly
    • Verify the ECCTL2[REARM] bit is being set to restart

    capture after completion

    4. Input Polarity & Qualification

    • Single-shot mode requires precise edge detection configuration
    • Verify ECCTL1[CAP1POL] through [CAP4POL] settings
    • Check input qualifier period ECCTL1[QUALPRD]

    5. Timing/Synchronization

    • Verify ECCTL2[SYNCI_EN] and [SYNCO_SEL] if using synchronized operation
    • Check the ECCTL2[CAP_APWM] bit is set to capture mode (not APWM)