我想用28377的ecap功能来实现连续采样PWM波的频率,ecap时钟用系统时钟200M,连续采样周期值先放在ecap1的寄存器CAP1-4中。再利用epwm的计数功能,每1/40kHz个周期触发中断,在中断程序里将CAP1-4的数值取出计算频率。下面是我的ecap部分的程序,但是一直采样不到频率,寄存器CAP1-4的值也没有。
//主程序里的ECAP设置
void InitECapture();
GPIO_SetupPinOptions(19,GPIO_INPUT,GPIO_ASYNC);
void SetCap1Mode();
void InitECapture(void)
{
EALLOW;
InputXbarRegs.INPUT7SELECT = 19; // Set eCAP1 source to GPIO-pin
EDIS;
//GpioCtrlRegs.GPAPUD.bit.GPIO24=0;
//GpioCtrlRegs.GPAQSEL2.bit.GPIO24=0;
//GpioCtrlRegs.GPAMUX2.bit.GPIO24=1;
//EDIS;
}
void SetCap1Mode(void)
{
ECap1Regs.ECEINT.all = 0x0000; // Disable all capture __interrupts
ECap1Regs.ECCLR.all = 0xFFFF; // Clear all CAP __interrupt flags
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped
ECap1Regs.ECCTL1.bit.CAP1POL=0; //捕捉上升沿
ECap1Regs.ECCTL1.bit.CAP2POL=0;
ECap1Regs.ECCTL1.bit.CAP3POL=0;
ECap1Regs.ECCTL1.bit.CAP4POL=0;
ECap1Regs.ECCTL1.bit.CTRRST1=1; //差分模式
ECap1Regs.ECCTL1.bit.CTRRST2=1;
ECap1Regs.ECCTL1.bit.CTRRST3=1;
ECap1Regs.ECCTL1.bit.CTRRST4=1;
ECap1Regs.ECCTL1.bit.CAPLDEN=1; //使能事件捕捉时捕捉寄存器装载计算器值
ECap1Regs.ECCTL1.bit.PRESCALE=00000; //不分频
ECap1Regs.ECCTL2.bit.CAP_APWM=0; //捕捉模式
ECap1Regs.ECCTL2.bit.CONT_ONESHT=0; //连续模式
ECap1Regs.ECCTL2.bit.SYNCO_SEL=2; //屏蔽0x0010
ECap1Regs.ECCTL2.bit.SYNCI_EN=0; //屏蔽
ECap1Regs.ECEINT.all=0x0000; //关闭所有CAP中断
ECap1Regs.ECCLR.all=0xFFFF; //清除所有中断标志
ECap1Regs.ECCTL2.bit.TSCTRSTOP=1; //启动计数
//eCAP1Regs.ECEINT.bit.CEVT4=1; //使能4级事件中断
}
//中断程序采样频率取值
T1=ECap1Regs.CAP1;
T2=ECap1Regs.CAP2;
T3=ECap1Regs.CAP3;
T4=ECap1Regs.CAP4;
fs=200000*1000*(1/T1+1/T2+1/T3+1/T4)/4;