¿Por qué no se dispara la interrupción de cambio de pin Atmega324pb a pesar de que la entrada está cambiando?

1

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);
            }
        }
    }
}
...
    
pregunta Scampbell

1 respuesta

2

¡Resulta que malinterpreté la hoja de datos!

En esta línea en la sección 15.1 ...

"La solicitud de interrupción de cambio de pin 3 (PCI3) se activará si se activa cualquier pin de PCINT [31:24] habilitado".

Pensé que "PCINT [31:24]" se refería a los pines 31 a 24. Me perdí el hecho de que había pines definidos como PCINT31, PCINT30, PCINT29, ..., PCINT24. Para el atmega324pb, PCINT31 es el mismo pin que D7, como se señala en los comentarios.

    
respondido por el Scampbell

Lea otras preguntas en las etiquetas