工具与软件:
我正在使用 TMS320F28379D 的 eCAP 模块进行频率测量。 为此、我使用 EPWM1A 生成了频率和占空比分别为1kHz 和0.5的 PWM 信号、并将相同的信号馈入 eCAP1。 GPIO 5使用输入交叉开关配置为 eCAP1。 但在调试过程中、它显示错误的频率值、即使我更改了 EPWM1生成的 PWM 信号的频率。 代码在调试模式下抛出相同的频率值。 请帮助解决该问题。
#include "F28x_Project.h"
void GPIO_select (void);
void Setup_ePWM (void);
void setup_ECAP (void);
外部中断失效 eCAP1_ISR (void);
INT I=0;
浮动 PWM_ON_PERIOD;
浮动 PWM_PERIOD;
浮点频率;
空 main (void)
{
InitSysCtrl();
InitECap1Gpio (0x5);
Dint;
GPIO_select ();
Setup_ePWM ();
Setup_ECAP ();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable。 eCAP1_INT =&eCAP1_ISR;
EDIS;
IER |= M_INT4;
PieCtrlRegs.PIEIER4.bit.INTx1 = 1;
EINT;
ERTM;
while (1)
{
}
}
void GPIO_select (void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;
EDIS;
EALLOW;
InputXbarRegs。 INPUT7SELECT = 0x5;//将 eCAP1源设置为 GPIO 引脚
EDIS;
}
void Setup_ePWM (void)
{
EPwm1Regs.TBCTL.bit.CLKDIV = 1;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 1;
EPwm1Regs.TBCTL.bit.CTRMODE = 0;
EPwm1Regs.TBPRD = 25000;
EPwm1Regs.AQCTLA.all = 0x0012;
EPwm1Regs.AQCTLB.all = 0x0021;
EPwm1Regs.CMPA.bit.CMPA = 12500;
}
void setup_ECAP (void)
{
ECap1Regs.ECEINT.ALL = 0;
ECap1Regs.ECCTL1.bit.CAPLDEN = 0;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;
ECap1Regs.TSCTR = 0;
ECap1Regs.CTRPHS = 0;
ECap1Regs.ECCTL1.all = 0x01C4;
ECap1Regs.ECCTL2.all = 0x0096;
ECap1Regs.ECEINT.all = 0x0008;
}
外部中断失效 eCAP1_ISR (void)
{
ECap1Regs.ECCLR.bit.INT = 1;
ECap1Regs.ECCLR.bit.CEVT3 = 1;
PWM_ON_PERIOD = ECap1Regs.CAP2 - ECap1Regs.CAP1;
PWM_PERIOD = ECap1Regs.CAP3 - ECap1Regs.CAP1;
频率= 1/PWM_PERIOD;
PieCtrlRegs.PIEACK.all = PIEACK_group4;
}