Hallo,
also ich hab jetzt bei meinem XMega A4U (also der neue mit USB) schon so
ziemlich alle Teilmodule durchprobiert und die laufen auch ohne
Probleme.
Nun möchte ich natürlich eine sinnvolle Anwendung daraus stricken, nur
leider sind mir die Clockoptionen der ASF 3.0.1 total suspekt.
Es geht um einen Batteriebetriebenen GPS Logger der ohne USB auf 2 MHz
getaktet sein soll und wenn USB angesteckt wird, muss der Prozessor ja
mit 32 MHz versorgt werden. Soweit so gut... Im einzelnen hab ich alles
schon zum laufen gebracht und bin ganz gut mit den Beispielen und
Funktionen klar gekommen...
Jetzt der Haken!
Wenn ich umschalte spuckt die Funktion sysclk_get_cpu_hz() immer nur den
Wert aus, der in der conf_clock.h in den defines gesetzt wurde.
Das schlimme ist nun, dass sich alle Module die mit dem Prozessorclock
arbeiten, sich die Taktrate aus dieser Funktion besorgen.
Das heißt ich kann nach dem Umschalten, alle Funktionen der ASF
vergessen und muss entweder die Register wieder einzeln setzen (von
allen Modulen) oder die sysclk Funktionen anpassen.
Da beides für mich sehr unsinnig klingt und ich der ASF etwas mehr
zugetraut hätte, wollte ich nochmal nachfragen ob evtl. noch was falsch
mache?!
Hier ein kurzer Codeschnipsel: (der Controller wird mit 2MHz gestartet)
1 | void Setze_sysclock_32MHz(void) {
|
2 |
|
3 | //sysclk_disable_peripheral_clock(&USB);
|
4 | osc_enable(OSC_ID_RC32MHZ);
|
5 | do {} while(!osc_is_ready(OSC_ID_RC32MHZ));
|
6 | sysclk_set_source(SYSCLK_SRC_RC32MHZ);
|
7 | osc_disable(OSC_ID_RC2MHZ);
|
8 | }
|
MfG
Basti