Forum: Compiler & IDEs MSP430: Interrupt von PIN Port 1


von Benjamin Johann (Gast)


Lesenswert?

Hallo zusammen!
Obwohl ich vor einiger Zeit gesehen habe, daß es schon diskutiert
wurde: Wie krieg ich das hin, daß mein MSP einen Interrupt auslöst und
dann ins Programm zurückspringt, wenn ich eine Flanke auf Port 1 habe.
Genauer gesagt auf einem PIN auf Port 1?

der Plan ist so:
* programmschleife unterbricht,
* setzt Interruptfunktion setzt variable
* programm wird fortgesetzt und reagiert später auf den Interrupt durch
eine aufzuckende LED


bool bPort1Int;     /* Description : wird von Port 1 gesetzt */

wakeup interrupt (PORT1_VECTOR) INT_P1(void) {
    //acknowledge interrupts (caution! clr is not appropriate when
multiple irqs are enabled)
    bPort1Int = 1;
    DINT();
  }

int main(void)
{
  P1DIR=0xFF;           //port 1 = output
  P1OUT=0x00;           //set bit 0 in port 1

  P1DIR=0;              //port 1 = input
  P1IES  = 0xFF;               // Interrupt Edge Select (+Slope=1)
  P1IE   = 0xFF;        // Interrupt Enable (Yes=1)

  P2DIR=0xFF;           //port 2 = output
  P2OUT=0x00;

  bPort1Int=0,

  EINT();

  for(;;) {             //infinite loop

    P2OUT+=1;
    delay(0x4fff);

    P2OUT+=1;
    delay(0x4fff);

  if (bPort1Int==1){
    P2OUT=0;
    bPort1Int=0;
    EINT();
  }
  delay(0x4fff);

    P2OUT+=1;
    delay(0x4fff);

    P2OUT+=1;
    delay(0x4fff);

    P2OUT+=1;
    delay(0x4fff);

    P2OUT+=1;
    delay(0x4fff);

    P2OUT+=1;
    delay(0x4fff);

  }

}

Danke
Benni

von m@is (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Benjamin,
gut das Du noch einen eigenen Thread zu Deiner Frage aufgemacht hast.

mit was arbeitest Du gcc- oder IAR-Tools?

von Benjamin Johann (Gast)


Lesenswert?

Ich habe mspgcc runtergeladen. Insigth und proxy tun ihre arbeit - wenn
auch nicht sehr zuverlässig: Ich lösche immer noch manuell den gesamten
speicher vor einer neuprogrammierung. Das passt mir nicht. Die
Quelltextanzeige im Insight funxt auch nicht wirklich. Vielelciht liegt
das aber eindfach an WinXP.
Will demnächst mal auf Linux testen.
CIAO Benni

von OldBug (Gast)


Lesenswert?

Das manuelle Löschen des gesamten Speichers macht doch sinn...
Wenn Du die Info-Memory (FSEG_A und FSEG_B) nicht löschen möchtest,
aber ein "monitor erase all" in der Insight-Config einträgst, gibts
da ein Problem ;-)
Sourcecode alignement funktioniert bei mir wunderbar (Win2K),
allerdings verabschiedet sich mein Insight schon mal beim auslesen des
Stacks oder hin und wieder auch mal ziemlich wild bei irgend einer
trivialen Operation, wie beispielsweise das Konsolenfenster des GDBs
öffnen...

Deine Frage zum Interrupt an Port 1 ist ja schon geklärt, oder?

Gruß,
Patrick...

von m@is (Gast)


Lesenswert?

von Benni in einem anderen Thread geschrieben:
***
Hallo M@is!
Danke! Hab den fehler diese "Nacht" noch gefunden. Deine antwort hat
meinen fund aber auch noch bestätigt: Ich habe das Interrupt-Flag
nicht
zurückgesetzt.
Die Eingänge habe ich einfach alle parallel geschaltet - dann liegen
sie definiert (und das eh schon über einen pull down).
Habe in einem sehr kelein Prog reaktionszeiten von rund 200-300 ns bei
8 MHz Quarz - finde ich etwas viel! Hast du erhfahrungen?
Benni
***
ANTWORT:
sieht bei mir nicht besser aus, mit den Zeiten liegst Du schon gut,
leider :-(
Gruß m@is

von Benjamin Johann (Gast)


Lesenswert?

Hab mich um eine paar 10er-potenzen vertan: es sind gerade 350µs. Das
finde ich etwas viel: Der Prozessor macht alle 125ns einen schritt -
dann brauchte er ja mehr als tausend schritte um den interrupt
durchzureichen?!?!

von Benjamin Johann (Gast)


Lesenswert?

JuHuuuu!
Gerae habe ich mal direkt in der Interrupt-Routine die ausgabe
gestartet. Da komme ich den Werten die ich brauche schon näher: 2,5µs
reaktionszeit. Das ist nicht schlecht!
Benni

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.