Por alguna razón, mis interrupciones de cambio de pin no se activan en mi Atmega324PB. Para probar, estoy usando una placa de evaluación y conectando un pin de salida a un pin configurado para activar una interrupción de cambio de pin. ¿Hay algo que me falta?
volatile uint16_t motorCount = 0;
// Configuring pin change interrupt on A7.
// A7 pin change interrupts are handled in
// "pin change interrupt request 3"
PCICR |= (1 << PCIE3);
PCMSK3 |= (1<<PCINT31);
// Interrupt routine
ISR(PCINT3_vect)
{
motorCount++;
}
Para probar, lo he conectado a un pin de salida, A2. He verificado con un multímetro que los pines A2 y A7 están cambiando de bajo (0V) a alto (~ 3.6V). Este cambio no dispara la interrupción. No se dispara cuando el cambio vuelve a ser bajo.
// main.c
...
__enable_interrupt();
uint8_t test = 0;
DDRA |= (1 << DDRA2); // A2 as output
while (1) {
if(kbhit()) // Wait's for serial input character (configured separately)
{
if(('\n' == tmp) || ('\r'== tmp))
{
test ^= 1; // Toggle first bit.
test &= 1; // Mask to only first bit.
if (test == 1) {
// output high on A2
PORTA |= (1 << PORTA2);
}
else {
// output low on A2
PORTA &= ~(1 << PORTA2);
}
}
}
}
...