I have the below timer 5 interrupt vector that is not entered, even when both the corresponding Interrupt enable bit for timer 5 is set, and the corresponding interrupt flag for timer 5 is set.
Here is my interrupt vector handler:
void __ISR(_TIMER_5_VECTOR,IPL4SOFT) _T5Interrupt(void) { PORTDbits.RD2 = 1; // << -- LED will light when here. T4CONbits.ON = 0; TMR4 = 0; TMR5 = 0; Global_TimeOut = 1; IFS0bits.T5IF = 0; } My global interrupts are set to accept multi-vector interrupts and is initialized as follows:
void Init_Global_Interrupts(void) { // Initializing Global Interrupts //INTCON // 16 Single Vector is not presented with a shadow register set INTCONbits.SS0 = 0; // 12 Interrupt Controller configured for multi vectored mode INTCONbits.MVEC = 1; // 10 - 8 Disables interrupt proximity timer INTCONbits.TPC = 0; // 4 External interrupt 0 falling edge interrupt INTCONbits.INT0EP = 0; // 4 External interrupt 1 falling edge interrupt INTCONbits.INT1EP = 0; // 4 External interrupt 2 falling edge interrupt INTCONbits.INT2EP = 0; // 4 External interrupt 3 falling edge interrupt INTCONbits.INT3EP = 0; // 4 External interrupt 4 falling edge interrupt INTCONbits.INT4EP = 0; } Timer 4 and timer 5 is being used in 32 bit mode. As the data sheet states, in this configuration, it is timer 5 interrupts that is used:
void Init_Timer4_5(void) { // 15 - Timer 4 is off T4CONbits.ON = 0; // 13 - Continue operation when device enters idle mode T4CONbits.SIDL = 0; // 7 - Gated time accumulation is disabled T4CONbits.TGATE = 0; // 6 - 4 - 1:8 prescale to achieve a 1uS unit time T4CONbits.TCKPS = 3; // 3 - Timer 4 and 5 set for 32 bit operation T4CONbits.T32 = 1; // 1 - Use internal Peripheral clock T4CONbits.TCS = 0; // Setting Timer 5 priority to level 4 of 7 IPC5bits.T5IP = 4; // setting timer 5 sub priority to level 1 of 3 IPC5bits.T5IS = 1; // Clear timer interrupt flag IFS0bits.T5IF = 0; // Enable timer interrupts IEC0bits.T5IE = 1; } The timers are started with the following function:
void Time_Out(unsigned int uTime) { T4CONbits.ON = 0; TMR4 = 0; TMR5 = 0; Global_TimeOut = 0; PR4 = uTime; T4CONbits.ON = 1; } As far as I can tell, I have done everything necessary.
Let me know if you require any additional information.