MSP430 timerA und ISR

Gast #326799
Lesenswert?
• ▲
▼
Hallo,

ich versuche schon seit einiger Zeit folgendes:

Eine an Port1 (P1.0) meines MSP430F1611 angeschlossene LED soll
blinken. Ich möchte, dass sie Timergesteuert blinkt und habe daher den
TimerA wie im Code (im Anhang) zu sehen initialisiert und auch eine ISR
geschrieben.

Das ganze scheint auch irgendwie zu funktionieren, die LED blinkt,
allerdings ist die Blinkfrequenz völlig unabhaengig vom Wert in CCR0.

Mache ich da irgendetwas falsch?

Klaus
Angehängte Dateien:
Gast #326801
Lesenswert?
• ▲
▼
versuch mal so:
1
  WDTCTL = WDTPW + WDTHOLD; // watchdog aus
2
  // Starten des Quarzes 
3
  BCSCTL1 |= XTS;         // ACLK = LFXT1 = HF XTAL
4
  do 
5
  {                       // pruefroutine, ob 8 Mhz-oszillator schon
6
stabil ist
7
    IFG1 &= ~OFIFG;       // OSCFault flag loeschen (zeigt
8
oszillatorfehler an)
9
    for (i=0xFF;i>0;i--); // warten, ob es wieder gesetzt wird
10
  }
11
  while (IFG1 & OFIFG);   // OSCFault immer noch gesetzt?       
12
  BCSCTL2 |= SELM_3;      // MCLK = LFXT1 (safe) 8 MHz 8,0005560
13
  BCSCTL2 |= SELS;        // SMCLK = LFXT1
14
  BCSCTL2 |= DIVS_0;      // SMCLK = 8 MHz
15

16
  _BIS_SR(GIE);           // allgemeiner interrupt-enable (noetig fuer
17
nulldurchgangserkennung)
18
  CCTL0 = CCIE;           // CCR0 interrupt enabled
19
  CCR0 = 200;
20
  TACTL = TASSEL_2 + MC_1;// SMCLK, upmode
21

22
...
23

24

25

26
// Timer A0 interrupt service routine
27
#pragma vector=TIMERA0_VECTOR
28
__interrupt void Timer_A (void)
29
{
30
  ms_counter++;
31
//  timer1++;
32
}

gruß
thomas
Gast #326803
Lesenswert?
• ▲
▼
Kein Wunder das deine Blinkfrequenz unabhängig vom Wert in CCR0 ist.
Selbst wenn du die CCR0 Zeile in der ISR rausnimmst, dürfte sich an dem
Verhalten nix ändern. Grund ist, das du den Wert in der ISR ensprechend
erhöhen musst, z.B. CCR0 += 100. So wie du das gemacht hast, löst dein
Interrupt immer bei 100 aus, zählt hoch, läuft über, löst wieder bei
100 aus, usw.. Ist genauso wie ein Überlauf Interrupt, nur um 100 Takte
verschoben. Im übrigen gibt es auf der TI Homepage massig Beispiele für
die Timer Interrupt Behandlung.

Gruß Ed.

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.