mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Interrupt Handling mit mspgcc


Autor: Sven S. (badphantom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich benutze den MSP430 FG4619, und möchte einen Tastendruck per 
Interrupt abfangen.
Alles ist soweit initialisert, mit Port1 funktioniert das auch, nur die 
Taster an Port 2 bringen nicht das gewünschte Ergebnis.
Eine Vermutung ist jetzt:
Die Funktion selbst wird in den Speicherbereich der Adresse Port2_vector 
geschrieben, und der Speicher reicht dort nicht. (Beim Interrupt fuer 
Port2 steht mehr Code)
Oder ist der mspgcc schlau genug, und packt die Funktion woanders hin?
Dann müsste ich den Fehler woanders suchen.

Vom Interrupt scheint er auch ncihr zurückzuspringen.

Dass mspgcc handbuch sagt: "push pc,sr on stack...Fetch the interrupt 
vector into the PC" - was sagt mir das jetzt?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Deinen Sourcecode zu sehen, und zu sehen, wie Du die 
Interrupthandler deklariert hast, können wir nur unsere Glaskugeln 
polieren.

Autor: Sven S. (badphantom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Init:
  // Taster Interrupts
  P1IE |= 0x20;  // Pin 1.5
  P2IE |= 0xBF;  // alle Pins

  // Edge selection; falling edge
  P1IES |= 0x20;
  P2IES |= 0xBF;

Interrupt Funktionen
interrupt (PORT1_VECTOR) pin1interrupt(void)
{
  P1IFG = 0;
  showNumber('a');
  wait(65535);
  wait(65535);
  wait(65535);
  showNumber('o');
  wait(65535);
  wait(65535);
  wait(65535);
  if(P1IFG && 0x20)
    decrOff2();
  P1IFG = 0;
}

interrupt (PORT2_VECTOR) pin2interrupt(void)
{
  P2IFG = 0;
  showNumber('b');
  wait(65535);
  wait(65535);
  wait(65535);
  showNumber('o');
  wait(65535);
  wait(65535);
  wait(65535);
  if(P2IFG && 0x80)
    incrOff2();
  if(P2IFG && 0x40)
    incrOff2();
  P2IFG = 0;
}

Es geht aber eigtl. um den compiler mspgcc...

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Deklaration ist richtig für den GCC. Hast du signal.h includiert?

Und solche ewigen Waits in der ISR sind ein absolutes No-Go.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und solche ewigen Waits in der ISR sind ein absolutes No-Go.

Die werden auch das Problem sein. Zusätzlich zum Aufruf der ominösen 
Funktion "showNumber", die merkwürdigerweise Buchstaben übergeben 
bekommt.

Das Design ist kaputt.

Autor: Sven S. (badphantom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die vielen waits sind für das debuggen gedacht, ebenso wie die Funktion 
showNumbers, welche eine Zahl auf 7-Segment anzeigen darstellt.

Es funktioniert witzigerweise, wenn ich die Frequenz des Controllers 
"runterdrehe". Vermutlich sind also die wait Aufrufe (?) daran schuld.

Ist sehr schlecht zu debuggen.
Ja, signal.h ist inkludiert.

Danke für die Hilfe Christian und Rufus.
Ich denke, ich komme jetzt klar.

Autor: Tobias Korrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann bau doch in deine Main routine eine Statemaschine. Diese Steuerst 
du dann von deinen Interrupten aus an und du kannst wunderbar debuggen.

Autor: Sven S. (badphantom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, sehr gute Idee.
Ich werds so machen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.