您好!
我正在通过 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 问题的根源、两者之间的区别是什么?