AVR32UC3 Programm freezt nach GPIO Interrupt

Gast #3238364
Lesenswert?

Moin,

ich habe erst vor kurzer zeit mit µC-Programmierung angefangen, von 
daher bitte ich jetzt schon für mögliche "Anfängerfehler" bzw. -fragen 
um Verständnis :-)

Leider scheitere ich momentan noch an der Implementierung einer ISR, die 
immer dann aufgerufen werden soll, wenn sich der Zustand eines GPIO Pins 
ändert (also high->low oder umgekehrt). Diese Änderung kann ich mit 
einem Schalter beeinflussen und weiß demnach, wann die ISR aufgerufen 
werden sollte.
Aus Debuggründen (und zur besseren Übersichtlichkeit) habe ich den Code 
auf ein "Minimum" reduziert, der jedoch immernoch nicht das tut, was ich 
erwarten würde.

Die ISR wird nur einmal aufgerufen, da die rote LED eingeschaltet wird. 
Jedoch scheint der µC die Routine nicht wieder zu verlassen, da das 
Blinken der grünen LED, welches in der main integriert ist, aufhört. 
Sämtliche weitere Änderungen des GPIO Pins werden auch nicht mehr 
berücksichtigt...

Vielleicht hat ja jemand eine Idee. Hier erstmal der wie gesagt recht 
minimalistische Code:

Main:
1
int main (void)
2
{
3
  // ======== INITIALIZING ========
4
  INIT_LEDS();        // Setup the Pins for the LEDs
5
  
6
  Disable_global_interrupt();
7
  INTC_init_interrupts();
8
  INTC_register_interrupt(&gpio_int_handler, AVR32_GPIO_IRQ_0 + (AVR32_PIN_PB11/8), AVR32_INTC_INT0);
9
  gpio_enable_pin_interrupt(AVR32_PIN_PB11, GPIO_PIN_CHANGE);
10
  Enable_global_interrupt(); 
11

12
while(1)              // Main loop
13
  {
14
    for (int i=0;i<20000;i++)
15
    {  
16
      if (i==0)
17
        LED_toggle_green();
18
      else if (i == 10000)
19
        LED_toggle_green();
20
    }    
21
  }
22
}

ISR:
1
static void gpio_int_handler(void)
2
{
3
  LED_toggle_red();
4
  gpio_clear_pin_interrupt_flag(AVR32_PIN_PB11);
5
}

Grüße
Momentum
Gast #3238377
Lesenswert?

Hey,

schonmal Danke für deine Antwort. Meinst du damit, dass ich vor die ISR 
noch das hier setzen muss?:
1
 __attribute__((__interrupt__))

Genau das steht bei mir nämlich noch vor der Funktion, nur habe ich es 
anscheinend vergessen oben anzugeben...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren