您好!
我正在尝试将 EPWM2用作通用计时器、以提供时间戳来测量 XINT1中断之间的间隔。
CPU 位于 LaunchpadXL 上的60 MHz 处、EPWM2预分频器设置为/1。
XINT1 ISR 是针对上升沿和下降沿配置的(极性= 3)
在每个 XINT1 ISR 中、我捕获 EPWM2.TBCTR 的值、然后设置 EPWM2.TBCTR=0;
50%占空比、10kHz 输入到 GPIO6/XINT1、我的预期是应该看到 TBCTR=3000个计数。 相反、我看到~3250计数在检测到上升沿时、而~2700计数在 检测到下降沿时。
我在示波器上确认、被输入的信号是具有50us 高电平时间、50us 低电平时间的 PWM。
如果我将 PWM 设置为25%占空比、10kHz 输入、那么 在下降沿我预计会看到 TBCTR = 1500个计数(25us)、在上升沿看到4500个计数(75us)。 相反、我看到下降边沿上计数为~1210、上升边沿上计数为~4760。 我再次确认了 GPIO6/XINT1的输入是正确的。
XINT ISR 为
__interrupt void XINT1_ISR (){
XINT1_CAPTURE = EPwm2Regs.TBCTR;
EPwm2Regs.TBCTR = 0x0000;//重置时间戳的计数器
if (next_edge_is_rising == true){
xint1_low_time = xint1_capture;
next_edge_is_rising = false;
}
否则{
xint1_high_time = xint1_capture;
next_edge_is_rising = true;
}
PieCtrlRegs.PIEACK.ACK1 = 1;
}
有什么关于为什么我看到这些不同的测量结果的建议吗?