AVR32UC3 Programm freezt nach GPIO Interrupt

Gast #3238364
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.