This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2.8035万:错误生成捕获中断

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/616382/tms320f28035-false-generation-of-capture-interrupt

部件号:TMS320F2.8035万

您好...

我正在使用TSM320f2.8035万来运行其中一个应用程序。

我正在使用设备的捕获模块来检查滤线栅信号(230 VAC RMS)的零交叉点,这进一步用于计算滤线栅的频率。

请注意,我正在使用上升和下降边缘触发器捕获每个备用样本中的信号。

下面是用于初始化捕获模块的代码。  

我使用GPIO5作为捕获引脚。

void init_capture (void)

    ecapFlag =0;

     EALLOW;

     /*为所选引脚启用内部上拉*/

    GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;     //在GPIO5 (CAP1)上启用上拉

    //默认情况下,输入与SYSCLKOUT同步。

    gpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 0;   //同步到SYSCLKOUT GPIO5 (CAP1)

    gpioCtrlRegs.GPAMUX1.bit.GPIO5 =3;    //将GPIO5配置为CAP1

    EDIS;

    ECap1Regs.ECEINT.ALL = 0x0000;            //禁用所有捕获中断

    ECap1Regs.ECCLr.ALL = 0xFFFFFF;             //清除所有CAP中断标志

    ECap1Regs.ECCTL1.bit.CAPLDEN = 0;         //禁用CAP1-CAP4寄存器加载

    ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;       //确保计数器停止

    //配置外设寄存器

    ECap1Regs.ECCTL1.bit.prescale = 0;           //绕过 预分频器

    ECap1Regs.ECCTL2.bit.CAP_APWM = 0;          //捕获模式

    ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0;        //  OneShot 模式

    ECap1Regs.ECCTL1.bit.CAP1POL = 1;         //在下降边缘捕获事件                    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.ECCTL2.bit.SYNCI_EN = 0;        //禁用同步输入

    ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0;       //通过

    ECap1Regs.ECCTL1.bit.CAPLDEN = 1;         //启用捕获装置

    ECap1Regs.ECCTL2.bit.stop_wrap = 0;          //捕获序列在捕获事件2后停止

    ECap1Regs.ECCTL2.bit.rearm =1;              //重置和 解冻 计数器

    ECap1Regs.ECEINT.Bit.CEVT1 =1;           //捕获事件1是中断源

    ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;       //启动计数器

}

 

ISR中断如下。

 

中断 无效 eCAP1_ISR(void)

   GpioDataRegs.GPATOGLE.bit.GPIO23 = 1;

       IF (ecapFlag == 1)

      {

        ecapFlag =0;

 

         ECap1Regs.ECCLr.bit.CEVT1 = 1;

         ECap1Regs.ECCLr.bit.INT =1;

         ECap1Regs.ECCLr.ALL = 0xFFFFFF;          //清除所有CAP中断标志

         ECap1Regs.ECCTL1.bit.CTRST1 = 1;

         ECap1Regs.ECCTL2.bit.rearm = 1;

         ECap1Regs.ECCTL1.bit.CAP1POL = 1;         //在下降沿捕获事件

         ECap1Regs.TSCTR = 0;

    

       //确认此中断以接收来自组4的更多中断

         PieCtrlRegs.PIEACK.ALL = PIEACK_group4;

 

         返回;

      }

    ECap1Regs.ECCLr.bit.CEVT1 = 1;

      ECap1Regs.ECCLr.bit.INT =1;

      ECap1Regs.ECCLr.ALL = 0xFFFFFF;          //清除所有CAP中断标志

      ECap1Regs.ECCTL1.bit.CTRST1 = 1;

      ECap1Regs.ECCTL2.bit.rearm = 1;

      ECap1Regs.ECCTL1.bit.CAP1POL = 0;         //在下降沿捕获事件

      ecapFlag =1;

      ECap1Regs.TSCTR = 0;

 

      //确认此中断以接收来自组4的更多中断

      PieCtrlRegs.PIEACK.ALL = PIEACK_group4;

}

请注意,我已经启用了捕获模块的外设时钟以及捕获的中断向量,但在示例代码中没有提到。

我还在代码"ADC interrupt riggered by PWM signal & Capture module event interrupt"中使用了2个中断

执行上述例程时,有时会显示突然的结果,进而导致我的系统跳闸。

为了确保我的捕获事件被正确触发,我在中断中切换了GPIO引脚(在中断例程中显示的GPIO23)。  

捕获的波形如下所示。

 

                                                            图1.

                                                       图2.

 

请忽略图中的"绿色"和"黄色"波形。  

图2是图1的放大版本。

"粉红色"是零交叉波形,每10毫秒打开和关闭一次。 “蓝色”是我切换的GPIO23引脚。

从波形中可以很清楚地看出,存在一个正确的零交叉波形,当存在一些错误捕获事件时,即"蓝色"波形的时间段已更改,我正在捕获该波形。

即使零交叉引脚上似乎也没有噪音问题,因为波形中的事件上没有捕获到峰值。

这导致我的系统跳闸。  

 

我们衷心感谢您的真诚回应。

 

提前感谢。

此致,

卡迈勒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卡迈勒

    您的代码中是否有其他任何可能正在切换GPIO24的地方?

    您是否意外地将另一个中断映射到eCAP1_ISR?

    您是否正在使用输入限定条件?

    您的代码中是否有任何分支机构可能意外地将您的PC发送到ISR?

    意外事件期间的eCAP时间戳是什么,如果ECAP未捕获值,则其他设备正在切换GPIO24,这可能会帮助您找到来源。


    此致,
    科迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Cody:

    问题已解决。
    实际上,捕获销上出现了一些故障。 我使用的示波器设置如上图所示,无法捕捉。 当我减少了示波器的时间垃圾邮件时,我就能够捕获到它。

    在代码中,我没有使用任何输入限定符进行捕获。
    使用此输入限定符后,我可以避免引脚上出现故障。

    谢谢,祝你度过美好的一天。

    卡迈勒