主题中讨论的其他器件:C2000WARE
您好!
我将使用 eCAP 来测量脉宽。
基本上、CAP1 reg 设置为上升沿、并进行复位。 CAP2被设定为下降边沿、无复位。
附加的是 init 函数。
我将读取 CAP2以获得脉冲宽度。
我有一个问题、在脉冲序列期间、我有时会在 CAP2中读取0 (零)、尽管我看到 GPIO 上存在示波器脉冲(我使用的是1000 Int16矢量、并使用 CCS 图形查看所有捕获)。
我在 GPIO 上使用异步模式、因此没有资格认证。 上拉电阻已禁用。
脉冲约为400ns、因此约为80 sysclk (200MHz SYSCLK)。
我的第一个问题是-如何在 CAP2中设置0? 我找不到这样的情况。
第二、是否有关于解决方案/如何调试的想法?
第三,是否有任何机制将 CAP2结果寄存器复位(例如,读取它)?
非常感谢!
void Init_eCAP(volatile struct ECAP_REGS *eCAP)
{
EALLOW;
eCAP->ECEINT.all = 0x0000; // Disable all capture interrupts
eCAP->ECCLR.all = 0xFFFF; // Clear all CAP interrupt flags
eCAP->ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads
eCAP->ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped
eCAP->ECCLR.bit.INT = 1; // Clear Global interrupt flag
// Configure peripheral registers
eCAP->ECCTL1.bit.CAP1POL = 0; // Rising edge
eCAP->ECCTL1.bit.CAP2POL = 1; // Falling edge
eCAP->ECCTL1.bit.CTRRST1 = 1; // Reset counter
eCAP->ECCTL1.bit.CTRRST2 = 0; // Don't reset
eCAP->ECCTL2.bit.SYNCI_EN = 0; // Enable sync in
eCAP->ECCTL2.bit.SYNCO_SEL = 0; // Pass through
eCAP->ECCTL2.bit.CONT_ONESHT = 0; // Continous
eCAP->ECCTL2.bit.STOP_WRAP = 1; // Stop at 2 events
eCAP->ECCTL2.bit.CAP_APWM = 0; // Ecap module operates in capture mode.
eCAP->ECCTL2.bit.REARM = 1; // arm one-shot
eCAP->ECCTL1.bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads
eCAP->ECCTL2.bit.TSCTRSTOP = 1; // Start Counter
EDIS;
}

