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

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