Anfängerfragen MSP430 Interrupts Timer_A

Gast #1845128
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:
1
TACCR0=CCIE;

Nun hab ich aber auch die Version gesehen:
1
TACCR0 |= CCIE;
folgt daraus, dass ich mit
1
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:
1
//Offset messen
2
TAR=0;
3
Messfehler=TAR;
4
//Jetzt die Messung machen
5
TAR=0;
6
foo();
7
Zeit=TAR-Messfehler;

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



Vielen Dank fürs Lesen
moonstone
Gast #1845338
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
1
TACCTL0 |= CCIE;
setzen, um den IRQ zu aktivieren.

Zum anderen macht
1
TACCTL0 = CCIE;
durchaus auch Sinn, weil dadurch auch gleich das CCIFG-Flag gelöscht 
wird!
Gast #1846518
Lesenswert?
• ▲
▼
Hallo,

jetzt hab ich nochmal eine Frage ...

Die ISR würde ich gerne so aufbauen:
1
#pragma vector=TIMERA1_VECTOR
2
__interrupt void Timer_A(void)
3
{
4
switch (__even_in_range(TAIV, 10))               
5
  {
6
     //TACCR1:
7
     case 2: 
8
          MachWas1();
9
          TACCTL1 &= ~CCIE;       
10
      break;
11
    
12

13
      //TACCR2:
14
      case 4:
15
           MachWas2();
16
           TACCTL2 &= ~CCIE;
17
      break;
18
      
19
      
20
      //TAR Overflow 
21
      case 10: 
22
           Overflow_Counter++;
23
      break;
24
    }
25
}


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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.