4 votos

La interrupción nunca se dispara

Soy nuevo en el incrustados y he estado luchando con esto por días. Yo no entiendo por qué esto no funciona.

Estoy usando un ATxMega128A1. Quiero usar un temporizador de interrupción por desborde de desplazamiento a la izquierda un bit en un puerto a la siguiente pin. El temporizador funciona. Puedo ver, haga clic a través de la CNT en el simulador, y el desbordamiento de la bandera se pone, pero el ISR nunca se ejecuta (y por lo tanto, el desbordamiento de la bandera nunca se reinicio). ¿Alguien tiene alguna idea de donde me estoy equivocando? Yo más o menos copia/pega el temporizador/código de interrupción de Atmel del código de formación.

ISR(TCC0_OVF_vect)
{
    LEDPORT = (LEDPORT << 1);
}

int main(void)
{
    initLights();

    // Set up Timer/Counter 0.
    TCC0.PER = 0x10; // 
    TCC0.CTRLA = ( TCC0.CTRLA & ~TC0_CLKSEL_gm ) | TC_CLKSEL_DIV1_gc; //start timer with system clock
    TCC0.INTCTRLA = ( TCC0.INTCTRLA & ~TC0_OVFINTLVL_gm ) | TC_OVFINTLVL_LO_gc; // Enable overflow interrupt.

    // enable global interrupts:
    sei();

    while(true)
    {   
        //do nothing, the timer interrupt will handle it
    }
}

5voto

Bash Puntos 1680

Como usted probablemente sabe, los XMEGA tiene un multinivel controlador de interrupciones. Usted no sólo tiene que activar el mundial de interrupción, sino también el Nivel deseado de Interrupción (de Bajo Nivel, ya que ha configurado el temporizador de prioridad "baja") en el registro de control.

CTRL – registro de Control de

Bit 0 – LOLVLEN: Bajo nivel de habilitación de Interrupción(1)

Cuando este bit está activado, todos los de bajo nivel de las interrupciones están habilitadas. Si este bit está desactivado, bajo nivel de solicitudes de interrupción será ignorado.

El código para habilitar la interrupción específico de nivel está por debajo.

//enable low level interrupts
PMIC.CTRL |= PMIC_LOLVLEN_bm; //0b00000001

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X