ASF sysclk_get_cpu_hz() nur Konstanten?

Gast #2631454
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
Gast #2632006
hm, anscheinend arbeiten noch nicht so viele mit dem Atmel Software 
Framework... :-/

oder ich hab meine Frage unklar gestellt...

Also es geht darum den Systemclock zur Laufzeit zu verändern und danach 
noch die Teilmodule mit der ASF anzusprechen

z.B.

adc_set_clock_rate(&adc_conf, 200000UL);

In der Funktion steht dann:

clk_per = sysclk_get_per_hz();
ratio = clk_per / clk_adc;

usw.

klar kann man die Register hier selbst schnell setzen, aber es gibt noch 
30 weitere Funktionen die es genauso handhaben und ich kann mir nicht 
vorstellen, dass es hier keine andere Möglichkeit gibt. So macht der 
ganze ASF keinen Sinn.

Weiß keiner Rat?

Danke

Basti

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.