nur im debugen funzt es.

Gast #1705154
Lesenswert?

Hallo!

Ich beschäftige mich seit geraumer Zeit mit dem MSP430F449. Ich habe mir 
ein Programm in C# geschrieben welches Daten die über COM0 kommen 
anzeigt.

Das Problem ist folgendes: wenn ich im Debug-Modus Zeile für Zeile 
durchgehe arbeitet alles so wie es soll. Lass ich das Programm 
selbstständig arbeiten (ohne Breakpoints und so..) kommt nur Mist am PC 
an. Allerdings ist immer der selbe Mist zu sehen!!

hier der Codeausschitt:

#pragma vector = PORT2_VECTOR
__interrupt void PORT2(void)
{
  for(int i=0;i<2000;i++){} // wenn diese Zeile nich da ist, schickt er 
endlos "0" rüber. keine Ahnung warum...

  int tmp;
  tmp=1;
  sent(tmp);

  if(P2IFG & BIT0){//Interrupt bei PIN 79
    // TODO
    P2IFG &= ~BIT0; // Flag wider aus
  }
  else
  if(P2IFG & BIT1){//Interrupt bei PIN 78
    // TODO
    P2IFG &= ~BIT1; // Flag wider aus
  }
  else
  if(P2IFG & BIT2){//Interrupt bei PIN 77
    P2IE &= ~BIT2;//Interrupt PIN77 aus
    if((~P2IES) & BIT2){//prüfe ob von 0 auf 1 ist
      tmp = 2;
      sent(tmp);
      P2IES |= BIT2; // ändere Flanke
    }else{
      tmp = 3;
      sent(tmp);
      P2IES &= ~BIT2; // ändere Flanke
    }
    P2IFG &= ~BIT2; // Flag aus
    P2IE |= BIT2; // Interrupt PIN 77 an
  }
  else
  if(P2IFG & BIT3){//Interrupt bei PIN 76
    // TODO
    P2IFG &= ~BIT3; // Flag wider aus
  }
  tmp=4;
  sent(tmp);
}

void sent(int x){
  while (!(IFG1 & UTXIFG0));
  TXBUF0 = x;
}


Vielen Dank!

MFG
Gast #1705464
Lesenswert?

Danke für die Antwort!

Ja, ich weiss das da keine while schleifen hinkommen. Vielleicht hat das 
auch mit meinem eigentlich Problem zu tun!?!? :-/

Minimalbeispiel? Wie meinst das? ein kleines Programm das überhaupt mal 
was zum PC sendet?? Das hab ich! Funktioniert auch tadellos! Es treten 
nur Fehler auf wenn ich mit diesem Interrupts arbeite...

Was meinst du mit Timing??

gz
Gast #1705482
Lesenswert?

Stimmt! Int müsste 16 Bit sein.

Habe jetzt mal auf Char geändert. Hatte aber leider keinerlei 
Auswirkung.

Bei meinem Minimalbeispiel hatte es auch mit Int funktioniert....

Vielleicht noch ne andere Idee??

Besten Dank nochmal!!
Gast #1705499
Lesenswert?

>Also beim AVR-GCC sind die Bitnamen keine Masken, sondern die
>Bitposition (0..7).

ich weiss nich was du mir damit sagen möchtest!??! BIT2 ist doch nichts 
anderes als 0000 0100 oder in dezimal ne 4. Oder Hex 0x04.
1
while (!(IFG1 & 1<<UTXIFG0));

das bewirkt bei mit nur das jetzt garnichts mehr gesendet werden kann. 
Ich komm nicht mal in die ISR rein.....
Gast #1705529
Lesenswert?

Problem gelöst!

Habe von woanders einmal den Tip bekommen nur nur in LPM1 zu gehen. (Ich 
hatte LPM2). Denn muss ich jetzt wohl nochmal nachschauen wo da genau 
die unterschiede waren!

Ich bedanke aber trotzdem für eure Hilfe!

MfG

der Jens

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