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.
您好!
我正在通过 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); }