尊敬的 TI 支持人员:
我已经将一个 eCAP 模块设置为单次模式来捕捉三个事件:
EVT1:上升、复位计数器
EVT2:下降、不复位计数器
EVT3:上升、复位计数器
连接到 eCAP 输入的脉冲序列的频率为100kHz (由 ePWM 生成)。 软件正在通过由 ePWM 触发的 ISR 以10kHz 的频率重新布防模块。
由于 EVT3和重新布防之间需要相当长的时间、因此我希望 EVT1捕获值较大(因为在 EVT3之后 Mod4计数器停止时、可能计数器会保持运行)。 不过、奇怪的是、EVT1和 EVT3的捕获值是相同的:1999 (SYSCLK = 200MHz 时)。 因此、这看起来是我希望从连续模式而不是单次操作中获得的行为。 我删除了周期性 ECCTL2.bit.rearm = 1语句、并确认 EVT3标志不再置位、从而验证我是否确实正在运行单次触发操作。
我的结论是我不能正确理解 eCAP 的操作-因此、我们希望能有更多的见解。
初始化代码(与"ECAP_Capture_PWM_Xbar_cpu01"示例几乎相同):
ECap1Regs.ECEINT.ALL = 0x0000;//禁用中断
ECap1Regs.ECCLR.ALL = 0xFFFF;//清除标志
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; //禁用 CAP1-CAP4寄存器加载
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; //停止计数器
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1;
ECap1Regs.ECCTL2.bit.STOP_Wrap = 2;//何时停止
ECap1Regs.ECCTL1.bit.CAP1POL = 0;//上升
ECap1Regs.ECCTL1.bit.CAP2POL = 1;//下降
ECap1Regs.ECCTL1.bit.CAP3POL = 0;//上升
ECap1Regs.ECCTL1.bit.CTRST1 = 1;//复位计数器
ECap1Regs.ECCTL1.bit.CTRST2 = 0;//不要复位计数器
ECap1Regs.ECCTL1.bit.CTRST3 = 1;//复位计数器
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0; //禁用同步输入
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; //传递
ECap1Regs.ECCTL1.bit.CAPLDEN = 1;//启用单元
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;//开始计数器
ECap1Regs.ECCTL2.bit.rearm = 1;// ARM 单次触发
ECap1Regs.ECCTL1.bit.CAPLDEN = 1;//启用单元
