Estoy tratando de aprender acerca de las interrupciones utilizando una de las tarjetas Teensy USB . Tiene un chip AVR AT90USB1286 en él. Estoy usando el código a continuación, y espero que se llame a mi bloque ISR y parpadee periódicamente el LED en el pin 6. Pero no pasa nada. ¿Alguien puede ver lo que estoy haciendo mal?
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define PIN_ON(n) (PORTD |= (1<<(n)))
#define PIN_OFF(n) (PORTD &= ~(1<<(n)))
#define LED_CONFIG (DDRD |= (1<<6))
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
#define OVERFLOW_INTERRUPT_ENABLE (TIMSK0 |= (1<<TOIE0))
volatile unsigned int overflow_count = 0; //Count of overflows
ISR(TIMER0_OVF_vect) {
cli(); //Disable Global Interupt
if (overflow_count < 0xFFFF) {
overflow_count++;
}
else {
PIN_ON(6);
_delay_ms(500);
PIN_OFF(6);
overflow_count = 0;
}
sei(); //enable global interupt
}
int main(void)
{
// set for 16 MHz clock, and make sure the LED is off
CPU_PRESCALE(0);
LED_CONFIG;
OVERFLOW_INTERRUPT_ENABLE;
sei(); //enable global interupts
while (1) {
_delay_ms(1000);
//analogWrite(6, 10);
}
}