Estoy intentando que la interrupción de coincidencia del período Timer2 en mi dsPIC33FJ128GP802 funcione. Quiero que se interrumpa después de ~ 480 ciclos. Estoy usando MPLAB C30.
Tengo, para inicializar el temporizador e interrumpir:
// Initialize Timer2, which is used for output timing.
T2CONbits.TON = 1;
T2CONbits.TSIDL = 0;
T2CONbits.TCKPS = 0;
T2CONbits.TCS = 0;
T2CONbits.T32 = 0;
// Initialize Timer2 interrupt with a slightly
// higher priority.
IPC1bits.T2IP = 5;
IFS0bits.T2IF = 0;
IEC0bits.T2IE = 0;
(la interrupción del temporizador está inicialmente desactivada)
Ya tengo interrupciones de cambio de pin que funcionan con una prioridad de 4. Quiero que la interrupción Timer2 tenga una prioridad más alta.
Y para configurar la interrupción tengo esto:
T2CONbits.TON = 1;
TMR2 = 0;
timer2_osd = 480 + vid_hoffset;
PR2 = timer2_osd;
IEC0bits.T2IE = 1;
También tengo un ISR,
void _MY_ISR _T2Interrupt()
{
IFS0bits.T2IF = 0;
return;
}
Sin embargo, encuentro que el procesador solo se reinicia y no se ejecutará con esto habilitado. Funcionará con un bucle ocupado comprobando el temporizador, pero eso desperdicia ciclos.
¿Alguien puede ver dónde me he equivocado?