MSP430: Interrupt von PIN Port 1

Gast #76499
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
Gast #76501
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
Gast #76502
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...
Gast #76503
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
Gast #76504
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?!?!
Gast #76505
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

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