大家好!
又来请教大家了,我是DSP的初学者,最近用28335。用到了上升沿捕获,一个引脚4个事件,但是我只用了一个事件的上升沿捕获中断,其他全部不使能,但是捕获总是出错,用示波器观察明明是下降沿依然进入上升沿中断,而且中断里的内容都是判断了标志位后才操作的,说明的确在下降沿的位置进入了该中断,具体的捕获配置信息如下:
void InitECap5(void)
{
ECap5Regs.ECEINT.all = 0x0000;
ECap5Regs.ECCLR.all = 0xFFFF;
ECap5Regs.ECCTL1.bit.CAPLDEN = 0;
ECap5Regs.ECCTL1.bit.FREE_SOFT = 0;
ECap5Regs.ECCTL1.bit.PRESCALE = 0;
ECap5Regs.ECCTL1.bit.CAP1POL = 0;
ECap5Regs.ECCTL1.bit.CAP2POL = 1;
ECap5Regs.ECCTL1.bit.CAP3POL = 1;
ECap5Regs.ECCTL1.bit.CAP4POL = 1;
ECap5Regs.ECCTL1.bit.CTRRST1 = 0;
ECap5Regs.ECCTL1.bit.CTRRST2 = 0;
ECap5Regs.ECCTL1.bit.CTRRST3 = 0;
ECap5Regs.ECCTL1.bit.CTRRST4 = 0;
ECap5Regs.ECCTL1.bit.CAPLDEN = 1;
ECap5Regs.ECCTL2.bit.CAP_APWM = 0;
ECap5Regs.ECCTL2.bit.SWSYNC = 0;
ECap5Regs.ECCTL2.bit.SYNCO_SEL = 0;
ECap5Regs.ECCTL2.bit.SYNCI_EN = 1;
ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1;
ECap5Regs.ECCTL2.bit.CONT_ONESHT = 0;
ECap5Regs.ECCTL2.bit.REARM = 1;
ECap5Regs.ECEINT.bit.CEVT1 = 1;
}
不知哪里应用的不对了,参考了网上的例程和讲解没有发现原则性的错误,可是不考虑硬件的波形问题,我还是想请教一下以上的寄存器操作是否有误,错在哪里?
目前我的解决方式是提高了捕获引脚的采样频率,调高了IO口的频率。
GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 2;
GpioCtrlRegs.GPBCTRL.bit.QUALPRD2 = 0xFF;
问题算是解决了,但还是偶有错误,只是概率极低!
不知我的软件寄存器哪里出了问题,还是能够确定是硬件的方波不好文波较大?
还请各位指点,不胜感激!提前谢谢各位了,大家如果遇到一样的问题,也请与我交流,相信大家都能帮到我,谢谢!
Eric Ma:
你可以用controlSUITE中的标准例程去测一下,进行排查。
还有,也有可能是外面的信号本来就不干净。
ERIC