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.

[参考译文] TMS320F28379D:未进入触发区 ISR、但 PWM 操作已被填满

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/849676/tms320f28379d-trip-zone-isr-not-being-entered-but-pwm-action-is-being-fullfilled

器件型号:TMS320F28379D

您好!

我正在通过 Xbar 从 GPIO 设置触发区中断、PWM 能够响应触发事件、但未进入我编写的 ISR。 当我从 PieVectTable 中删除我的中断名称(例如注释掉行: PieVectTable.EPWM1_TZ_INT = TripZoneISR)时、会到达默认 ISR、因此我相信我已正确设置中断、但我缺少一些小细节。 下面是我的配置:

EALLOW;
PieVectTable.EPWM1_TZ_INT = TripZoneFault;

InputXbarRegs.INPUT1SELECT = 38;
EDIS;

//启用连接到 EPWM1-3 INT 的 CPU INT2:
IER |= M_INT2;
//在 PIE 中启用 ePWM INTn:组3中断1-3
PieCtrlRegs.PIEIER2.bit.INTx1 = 1;
PieCtrlRegs.PIEIER2.bit.INTx2 = 1;

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;

//跳匣区域选择和操作
EALLOW;
EPwm1Regs.TZSEL.bit.CBC1 = 1;
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HI;
EPwm1Regs.TZEINT.BIT.CBC = 1;
EPwm1Regs.TZCLR.bit.INT = 1;
EDIS;

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;

然后、我在其他地方有一个 ISR、  

中断空 TripZoneISR (空){

//代码

我在 TripZoneISR 中放置一个断点、即使在发生跳闸事件时也不会达到该断点。

在我的程序中、我有其他中断通过分配 PieVectTable 值而不使用之前所示的 ISR 地址来正常运行(即 PieVectTable.INTx = ISR 与 PieVectTable.INTx =&ISR)、但我看到其他示例通常使用 ISR 的地址。 我想问题是、我的其他中断在没有 ISR 地址(即 PieVectTable.ADCA1_INT = anotherISR)的情况下如何工作、这是否是跳闸区域 ISR 问题的根源、两者之间的区别是什么?

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

    您能否在调试期间检查 CCS 的寄存器窗口、确保初始化值已写入相应的寄存器?

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

    Jeff、

    您能找到解决方案吗? 如果是、您能否发布您的问题是什么?

    NIMA

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

    Jeff、

    我将关闭此主题。 为了确保其他人知道、这里是 TZ INT 的主要关键部件:

    //中断 proto 类型
    __interrupt void epwm1TZISR (void);
    
    
    //主寄存器
    Interrupt_register (INT_EPWM1_TZ、epwm1TZISR);
    
    //启用 TZ 中断并设置源
    ePWM_enableTripZoneInterrupt (EPWM1_base、ePWM_TZ_INTERRUPT)
    
    
    
    
    
    
    
    
    
    ;//启用 EPW1TZ1TZ1TESR/ void 中断/ePWM1T1TZ1TZ/中断/EPT1 (EPWIT_TRIP1);//启用 EPWIT_TRIP1 (EPWIT_TRIP1)中断/EPT1中断
    
    //
    //重新启用中断
    //
    ePWM_clearTripZoneFlag (EPWM1_base、
    ePWM_TZ_FLAG_DCAEVT1 | ePWM_TZ_FLAG_DCBEVT1 | ePWM_TZ_INTERRUPT);
    
    //
    //确认此中断以接收来自组2的更多中断
    //
    interrupt_clearACKGroup (interrupt_ack_group2);
    }