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.

[参考译文] TMS320F280025:运行 TI 诊断功能一段时间后 EPWM4中断停止

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1105628/tms320f280025-epwm4-interrupt-stop-after-a-while-as-ti-diagnostic-function-run

器件型号:TMS320F280025
主题中讨论的其他器件:AFE031

你(们)好

我的项目使用 TI AFE031 FSK boostxl_afe031_f28004x_Rx 作为模板。 我只需如下所示将中断源更改为 EPWM4

#pragma CODE_SECTION (epwm2_ISR、".TI.ramfunc");
_interrupt void epwm4_ISR (void)

   EALLOW;

   //
   //启用 ADC ISR 嵌套
   //
   uint16_t TempPIEIER;
   TempPIEIER = PieCtrlRegs.PIEIER2.all;
   IER |= M_INT1;
   IER &= MINT1;                        //设置"全局"优先级
   PieCtrlRegs.PIEIER2.all &= MG1_1;    //设置“组”优先级
   PieCtrlRegs.PIEACK.ALL = 0xFFFF;     //启用 PIE 中断
   asm ("      NOP");                   //等待一个周期
   EINT;                                //清除 INTM 以启用中断

   //
   //运行 FSK 相关性检测器函数
   //
   FSK_corr_Detector _ OverSampl_run (&FSK_struct1);

   //
   //查看是否检测到标记或空格位
   //
   if (fsk_struct1.bit_detected!= 0)
   {
       rxMessage[message_index+]= FSK_struct1.bit_detected;//将检测到的位保存在消息缓冲区中

       FSK_struct1.bit_detected = 0;//清除检测到的位成员

       //
       //在消息缓冲器已满时设置标志
       //
       if (RX_MESSAGE_SIZE <= MESSAGE_INDEX)
       {
           MESSAGE_INDEX = 0;
           msgFull = 1;
       }
   }

   //
   //清除 EPwm2的 INT 标志
   //
   //EPwm2Regs.ETCLR.bit.INT = 1;

  EPwm2Regs.ETCLR.bit.INT = 1;

   //
   //确认此中断以接收来自组3的更多中断
   //
   PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;

   //
   //恢复为 ADC ISR 嵌套保存的寄存器
   //
   Dint;
   PieCtrlRegs.PIEIER2.all = TempPIEIER;

   //
   //切换 GPIO 引脚以测量频率、进行调试
   //
   //GpioDataRegs.GPCTOGGL.bit.GPIO65=1;// LP 引脚47

#define INTERRUPT_BIT_ISR &epwm4_ISI

中断寄存器(INT_EPWM4、INTERRUPT_BIT_ISR)

只要我添加了 TI 诊断函数代码(该代码引用了诊断库示例 f28002x_test_application.c)、任何操作都正常

           Dint;

           uint16_t returnVal =
                   STL_CPU_REG_checkCPURegisters (STA_Tests _注入错误);
           IF (返回值=STL_CPU_REG_FAIL)
          {

                 mcuFAULT_Status = mcuFAULT_Status | CPU_REGISTER_FAULT;
           }
           EINT;

一段时间~ 7分钟后 ISR 函数不会运行。 诊断功能将每14ms 在主循环~中运行一次。

请告知我有没有做错了?