Quiero configurar dos temporizadores que ejecuten dos ISR
-s con diferentes resoluciones.
Un temporizador para contar milisegundos por hora de reloj, otro para contar microsegundos cuando se solicite.
He configurado Timer1 y Timer2 en modo CTC, pero el temporizador con microsegundos (Timer2) obtiene mayor prioridad y el temporizador con milisegundos se ignora (Timer1). Mientras que funcionan bien por separado.
La configuración:
void timer1CtcInit(void)
{
TCCR1B = 0;
TCCR1A = 0;
//set CTC mode
TCCR1B |= (1 << WGM12);
// enable compare match interrupt
TIMSK1 |= (1 << OCIE1A);
// set OCR0A value for 100 msec
OCR1A = 0x0619;
//set 1024 prescaler
TCCR1B |= (( 1 << CS10) | (1 << CS12));
}
void timer2CtcInit(void)
{
//Timer 2 interrupt service routine CTC settings, 1 uS:
TCCR2A = 0;
TCCR2B = 0;
//set CTC mode
TCCR2A |= (1 << WGM21);
//prescaler 1 for timer2
TCCR2B |= (1 << CS20);
// value for 1 usec
OCR2A = 0x0f;
//set compare match for register OCRA
TIMSK2 |= (1 << OCIE2A);
}
ISRs:
ISR(TIMER2_COMPA_vect){
if (timerFlag){
tmr2Count++;
}
}
ISR(TIMER1_COMPA_vect){
tmr1Count++;
}