www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfragen MSP430 Interrupts Timer_A


Autor: moonstone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich möchte ein C_Programm für einen MSP430 schreiben.
Bei zwei Sachen bin ich mir unsicher und habe momentan nicht die 
Möglichkeit das zu testen, darum zwei (vermutlich) einfache Fragen:

1)
Ich möchte den Timer_A mit Interrupts verwenden.
Wenn ich den Interrupt für TACCR0==TAR; (Comparemodus) aktivieren 
möchte, geht das ja mit der Zeile:
TACCR0=CCIE;

Nun hab ich aber auch die Version gesehen:
TACCR0 |= CCIE;
folgt daraus, dass ich mit
TACCR0 &= ~CCIE;
den Interrupt inaktiv schalten kann??


2)
Ich möchte "die Zeit messen" die verschiedenen Funktionen brauchen um 
diese "Zeitwerte" dann weiter zu verarbeiten und schliesslich in eines 
der TACCRx-Register zu schreiben.
Das würde ich gerne so machen:
//Offset messen
TAR=0;
Messfehler=TAR;
//Jetzt die Messung machen
TAR=0;
foo();
Zeit=TAR-Messfehler;

Kann man das so machen, oder gibt es bessere Methoden?



Vielen Dank fürs Lesen
moonstone

Autor: moonstone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

weiß niemand Rat?
Oder sind alle MSP430 Experten Tatortfans?  ;)


Liebe Grüße
moonstone

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Ja, natürlich. Das hat mit MSP430 nix zu tun, überall schreibt und 
löscht man einzelne Bits so.

2) Das sollte klappen. Die Geschichte mit dem Messfehler ist vielleicht 
überflüssig, denn es ist ja bekannt und immer gleich, wieviele 
CPU-Zyklen der Schreibbefehl auf TAR dauert.

Autor: André H. (andrekr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu 1: Beim C18-Compiler sind & und | vertauscht, weil die Konstanten 
invertiert sind. ;) Keine Ahnung, warum...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moonstone schrieb:
> 1)
> Ich möchte den Timer_A mit Interrupts verwenden.
> Wenn ich den Interrupt für TACCR0==TAR; (Comparemodus) aktivieren
> möchte, geht das ja mit der Zeile:TACCR0=CCIE;
> Nun hab ich aber auch die Version gesehen:TACCR0 |= CCIE;folgt daraus, dass ich 
mitTACCR0 &= ~CCIE;den Interrupt inaktiv schalten kann??

Bei meinem Compiler muss ich aber
TACCTL0 |= CCIE;
setzen, um den IRQ zu aktivieren.

Zum anderen macht
TACCTL0 = CCIE;
durchaus auch Sinn, weil dadurch auch gleich das CCIFG-Flag gelöscht 
wird!

Autor: moonstone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend,

Danke für eure Antworten!

moonstone

Autor: moonstone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

jetzt hab ich nochmal eine Frage ...

Die ISR würde ich gerne so aufbauen:
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch (__even_in_range(TAIV, 10))               
  {
     //TACCR1:
     case 2: 
          MachWas1();
          TACCTL1 &= ~CCIE;       
      break;
    

      //TACCR2:
      case 4:
           MachWas2();
           TACCTL2 &= ~CCIE;
      break;
      
      
      //TAR Overflow 
      case 10: 
           Overflow_Counter++;
      break;
    }
}


Aber falls ich einen anderen Beitrag hier im Forum richtig verstanden 
habe, schalte ich zusammen mit dem Interrupt für TACCR1 auch den für die 
Overflows aus.
Den brauche ich jedoch die ganze Zeit ...


Würde mich sehr freuen, wenn mir nochmals jemand eine Rat geben könnte.
Gruß
moonstone

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moonstone schrieb:
> Aber falls ich einen anderen Beitrag hier im Forum richtig verstanden
> habe, schalte ich zusammen mit dem Interrupt für TACCR1 auch den für die
> Overflows aus.

Nö!
Overflow IRQ wird in TACTL mittels TAIE (de-)aktiviert.

Autor: moonstone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Stefan, danke Forum!
Ihr seid die Besten :)

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.