Hello,
I am setting up a trip zone interrupt from a GPIO via Xbar and the PWM is able to respond to a trip event, but the ISR I wrote is not being entered. When I removed my interrupt name from the PieVectTable (e.g. commenting out the line: PieVectTable.EPWM1_TZ_INT = TripZoneISR), the Default ISR is reached so I believe I have the interrupt set up properly, but I am missing something small detail. Here is my config:
EALLOW;
PieVectTable.EPWM1_TZ_INT = TripZoneFault;
InputXbarRegs.INPUT1SELECT = 38;
EDIS;
// Enable CPU INT2 which is connected to EPWM1-3 INT:
IER |= M_INT2;
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
PieCtrlRegs.PIEIER2.bit.INTx1 = 1;
PieCtrlRegs.PIEIER2.bit.INTx2 = 1;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
EDIS;
//trip zone select and action
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;
then I have an ISR elsewhere,
interrupt void TripZoneISR(void) {
//code
}
I put a breakpoint inside the TripZoneISR and it is never reached even when the trip event occurs.
In my program, I have other interrupts that function properly by assigning the PieVectTable values without using the address of the ISR as I have shown before (i.e. PieVectTable.INTx = ISR versus PieVectTable.INTx = &ISR) but I see other examples typically use the address of the ISR. I suppose sides question are, how can my other interrupts work without the address of the ISR (i.e. PieVectTable.ADCA1_INT = anotherISR), whether this is the root of my problem for the trip zone ISR, and what the difference between the two is?