Estoy intentando que funcione una interrupción de cambio de pin en un Attiny2313 pero estoy atascado, la interrupción no se está activando.
Estoy usando el siguiente código en main()
:
GIMSK |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT13) | (1 << PCINT14) | (1 << PCINT15);
sei();
Esto debería producir una interrupción en los pines PD2, PD3, PD4, ¿supongo?
Tengo una pantalla adjunta que muestra los bits en PIND (que de hecho son niveles cambiantes) Y he definido un uint8_t interruptTriggered = 0; en la parte superior del archivo, que debe establecerse en 1 en:
ISR(PCINT2_vect) { interruptTriggered = 1; }
También estoy mostrando el valor de interruptTriggered
en la pantalla, pero nunca cambia a 1.
Nota: como el archivo iotn2313.h incluido por AtmelStudio 6.1 no incluye todas las definiciones, tomé algunas libertades al definir lo siguiente:
//fix some missing definitions for Attiny2313
#define PCMSK2 _SFR_IO8(0x05)
#define PCMSK1 _SFR_IO8(0x04)
#define PCMSK0 _SFR_IO8(0x20)
#define PCINT11 0
#define PCINT12 1
#define PCINT13 2
#define PCINT14 3
#define PCINT15 4
#define PCINT16 5
#define PCINT17 6
#define PCINT1_vect _VECTOR(13)
#define PCINT2_vect _VECTOR(14)
#define PCIE0 5
#define PCIE1 3
#define PCIE2 4