Forum: Mikrocontroller und Digitale Elektronik Timer AT32UC3B


von Michael K. (aemkai)


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

von sadsd (Gast)


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?

von Michael K. (aemkai)


Lesenswert?

Nein, das ist egal, da es sich um ein Nur-Schreiben-Register handelt. 
Eine "1" schreiben bedeutet, dass intern das entsprechende Bit gesetzt 
wird, eine "0" schreiben macht nichts. Über das Status-Register 
(Nur-Lesen) kann man den internen Zustand dann abfragen. Ist bei vielen 
AVR32-Registern so.

von adsad (Gast)


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)

von Michael K. (aemkai)


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

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
Noch kein Account? Hier anmelden.