Timer AT32UC3B

OP #2333236
Lesenswert?
• ▲
▼
Hallo,

ich habe das Problem, dass bei meiner Timer-Initialisierung das 
Enable-Bit CLKEN nicht gesetzt wird. Das CMR funktioniert (laut 
debugger) einwandfrei. Laut Datenblatt sollte das CCR ein "normales" 
Register sein und nicht geschützt wie das Status-Register.
Hier mal kurz meine Initialisierungs-Funktion:
1
void timer0_init(void)
2
{
3
  AVR32_TC.channel[0].cmr = 0x000D0701;   //Modus
4
  AVR32_TC.channel[0].ccr =  (1 << AVR32_TC_CCR0_CLKEN);    //Clock enable
5
  AVR32_TC.channel[0].ccr =  (1 << AVR32_TC_CCR0_SWTRG);    //SW-Trigger
6
}

Vielleicht hat ja jemand einen Tipp.

Danke,

Michael
Gast #2333296
Lesenswert?
• ▲
▼
>  AVR32_TC.channel[0].cmr = 0x000D0701;   //Modus
>  AVR32_TC.channel[0].ccr =  (1 << AVR32_TC_CCR0_CLKEN);    //Clock enable
>  AVR32_TC.channel[0].ccr =  (1 << AVR32_TC_CCR0_SWTRG);    //SW-Trigger

Ohne jetzt nachgeschaut zu haben, aber bist du sicher dass es in Zeile 3 
nicht "|=" heissen sollte?
Gast #2333337
Lesenswert?
• ▲
▼
Hm, schaut ansonsten schon richtig aus, evtl. ist der restliche Code 
problematisch.

Laut Datenblatt:

> • CLKEN: Counter Clock Enable Command
> 0 = No effect.
> 1 = Enables the clock if CLKDIS is not 1.
> • CLKDIS: Counter Clock Disable Command
> 0 = No effect.
> 1 = Disables the clock.
> • SWTRG: Software Trigger Command
> 0 = No effect.
> 1 = A software trigger is performed: the counter is reset and the clock is 
started.

"Enables the clock if CLKDIS is not 1" klingt für mich als wäre bei dir 
CLKDIS evtl. 1?

Vielleicht macht auch das hier weniger Probleme:

AVR32_TC.channel[0].ccr = (1 << AVR32_TC_CCR0_CLKEN) | (1 << 
AVR32_TC_CCR0_SWTRG);

(nur geraten)
OP #2333357
Lesenswert?
• ▲
▼
Hi,

danke erstmal für die Antworten.
Wie gesagt ist das CC-Register nur zum Setzen der internen Zustände und 
CLKDIS wird ja nicht gleichzeitig mit gesetzt und wurde auch vorher 
nicht gesetzt - selbst wenn, wird der Zustand ja nicht im CCR 
gespeichert, sondern intern. CLKDIS schaltet - wie der Name bereits 
sagt, intern die Clock vom Timer ab. CLKEN schaltet sie wieder zu. Der 
von dir zitierte Satz bezieht sich nur auf das Verhalten, wenn CLKDIS 
und CLKEN gleichzeitig gesetzt werden, dann muss ja ein Zustand 
priorisiert werden, um ein definiertes Verhalten zu erreichen.

Die von dir erwähnte zusammengefasste Zuweisung hatte ich davor schon, 
hab's nur zum Debuggen getrennt. Sollte aber an sich auch keinen 
Unterschied machen.

Es bleibt vertrackt...

Michael

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