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
Weil ich gerade gesehen habe, dass Du da am Watchdog rum machst... der löst nicht ständig aus und Deine LED blinkt mit der Watchdogfrequenz?
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.