MSP430- TimerA0 soll TimerB0 wiederholt starten

Gast #689307
Lesenswert?

Der TimerA0 soll in Abständen von 1s den TimerB0 starten. TimerB0 soll 
später mal mit 8 kHz laufen und sich nach 8 Durchläufen abschalten.
Nach dem im Anhang entworfenen Programm wird der TimerB0 nach dem 
Rücksetzen des µC immer nur einmal aktiviert (LED rot blinkt) aber dann 
nie wieder, obwohl mit TBCTL = MC_1 der TimerB0 neu gestartet wird. 
(denk ich mir)
Was könnte ich falsch machen? Muss evtl. noch etwas zurückgesetzt 
werden?
MfG
Wolfgang
Angehängte Dateien:
Gast #689523
Lesenswert?

Hiho,
du machst bei Stop folgendes:
void STOP_B0 (void)
{
TBCTL = MC_0;      // Timer Stop
}

Du setzt TBCTL knallhart auf MC_0 und löscht damit alle anderen Bits in 
dem Register (die Du mit TBCTL = TBSSEL_1 + TBCLR gesetzt hast).
Das TBCLR ist denke ich nicht notwendig beim Restart. Aber das TBSSEL_1 
sollte stehenbleiben, damit der Timer den ACLK als Eingangsclock nimmt.
Probiere mal:
void STOP_B0 (void)
{
TBCTL &= ~MC_0;      // Timer Stop
}
Gast #689561
Lesenswert?

@Wolfgang:
Vor lauter Bit-Schubserei hab ich ganz vergessen noch was anzumerken!
Ich weiss jetzt nicht, ob Dein Code-Bsp vollständig ist, aber Du benutzt 
Deine globale Variable 'g' uninitialisiert!
Du hast wahrscheinlich Glück, dass Dein Compiler/Linker für Dich ein 
Stückchen Init-Code im MSP platziert, der alle Variablen zu Beginn Null 
setzt. Aber darauf würde ich mich nicht unbedingt verlassen.
Also: Variablen besser immer initialisieren, bevor sie benutzt werden!
Gast #689924
Lesenswert?

Dank an alle,
mit TBCTL &= ~MC_1  voller Erfolg

>Deine globale Variable 'g' uninitialisiert!
>Du hast wahrscheinlich Glück, dass Dein Compiler/Linker für Dich ein
>Stückchen Init-Code im MSP platziert, der alle Variablen zu Beginn Null
bisher hatte ich damit keine Probleme, aber bei der Deklaration der 
globalen Variablen diese auf 0 zu setzen, ist wohl ein besserer Stil

noch eine Frage:
während

#define MC1                 (0x0020)  /* Timer A mode control 1 */
#define MC0                 (0x0010)  /* Timer A mode control 0 */

im Register TBCTL    MC1 das Bit 5 bzw. MC0 das Bit 4 zuordnet,
kann ich die folgenden Definitionen nicht deuten
insbesondere, was bedeutet das kleine u?

#define MC_0     (0*0x10u)  /* Timer A mode control: 0 - Stop */
#define MC_1     (1*0x10u)  /* Timer A mode control: 1 - Up to CCR0 */
#define MC_2     (2*0x10u)  /* Timer A mode control: 2 - Continous up */
#define MC_3     (3*0x10u)  /* Timer A mode control: 3 - Up/Down */
MfG
Wolfgang

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