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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.