您好!
我正在尝试使用 GPIO6/XINT1来捕获/测量 PWM 信号。 (ECAP 引脚不可用)
我看到基于 TRM 和引脚输入的测量值与预期值之间存在不匹配情况
在测试中、我将从 EPWM3生成占空比为50%的10kHz PWM 信号、并将其连接到 GPIO6。
脉冲高电平时间=脉冲低电平时间= 50us
脉冲周期= 100us
从 TRM、xintctr 时钟源为 SYSCLKOUT
系统时钟= 60MHz
因此、我的预期是50us 高电平时间或低电平时间将是60MHz 时钟的3000次计数。 相反、我看到高电平时间测量值为50、低电平时间测量值为~227。
在初始化时、我首先将极性仅设置为上升沿、以便知道捕获的是哪个边沿。 在第一次捕获时、我将极性切换到两个边沿。 下面是用于 INIT 和 ISR 的代码:
初始化:
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;// 0=GPIO、1=EPWM1A、2=Resv、3=Resv
GpioCtrlRegs.GPADIR.bit.GPIO6 = 0;// 1=输出、0=输入
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 6;// GPIO6作为中断源
XIntruptRegs.XINT1CR.BIT.POLARITY = 0x1;//在上升沿触发以开始
xint1_startup_flag =真;
XIntruptRegs.XINT1CR.bit.enable = 0x1;
EDIS;
ISR:
if (xint1_startup_FLAG){
xint1_startup_FLAG = false;
XIntruptRegs.XINT1CR.BIT.POLARITY = 0x3;
xint1_nextedge_is_falling=true;
}
否则{
if (xint1_nextedge_is_falling){
xint1_nextedge_is_falling=false;
xint1_pulse_high_time = XIntruptRegs。 XINT1CTR; //读数为50,预期为3000
}
否则{
xint1_nextedge_is_falling=true;
xint1_pulse_low_time = XIntruptRegs。 XINT1CTR; //读数~220、预期为3000
}
}
我通过逻辑分析仪确认 PWM 波形正确:10kHz 时占空比为50%。 测试硬件是28027的 LaunchPadXL。
您有什么建议、为什么我得到的是这些测量值而不是预期值? 或者我对数据表的解释是否错误?
谢谢!