Estoy luchando para que mi Timer5 funcione correctamente. Creo que he habilitado todos los registros pero la interrupción nunca ocurre. Ya puse un punto de interrupción dentro de FingerprintRun()
en la oración asm("nop")
y encontré que TMR5
nunca supera 0x0000
.
void __ISR(_TIMER_5_VECTOR,IPL4) _T5Interrupt(void)
{
T5CONbits.ON = 0;
TMR5 = 0;
IFS0bits.T5IF = 0;
UART_TX = 0;
char x = 'b';
UARTFingerprintWriteChar( x );
}
void initTIMER5( void ){
__asm__("EI");
INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR); //configure multi vector
INTEnableSystemMultiVectoredInt(); //enable interrupts
T5CONbits.TON = 0;
T5CONbits.TGATE = 0;
T5CONbits.SIDL = 0;
T5CONbits.TCKPS = 0;// 0b111;1:256 prescale value
TMR5 = 0;
PR5=0xD0;
IFS0bits.T5IF = 0; // Clear timer interrupt flag
IPC5bits.T5IP = 4; // Setting Timer 5 priority to level 4 of 7
IPC5bits.T5IS = 1; // setting timer 5 sub priority to level 1 of 3
IEC0bits.T5IE = 1; // Enable timer interrupts
T5CONbits.TON = 1;
}
void main() {
initTIMER5();
asm("nop");
while(1);
}
¿Me estoy perdiendo algo?