Hallo zusammen, ich versuche inzwischen seit Stunden meinem RP2040 den Takt der PLL_SYS zu verpassen. Irgendwie bleibt der Takt immer auf der clock_ref hängen, egal in welcher Reihenfolge und Versuchen ich das probiere. IDE ist Segger Embedded Studio. Das funktioniert eigentlich sehr ordentlich zusammen mit einem JLINK Ultra. Fertige Beispiele anderer IDEs laufen mit der pll_sys. Ich initialisiere die PLL, dann den clock_sys, aber ich kann immer nur zwischen rosc und xosc umschalten auf der clock_ref. Ein Umschalten des Taktes auf die clock_sys klappt einfach nicht. Hat vielleicht jemand eine Idee dazu, welche Abhägigkeiten dabei zu beachten sind. Die anderen clock Teile werden nicht verwendet, ebenso die pll_usb. besten Dank an die Leser meines Textes Schorsch
Schorsch X. schrieb: > aber ich kann immer nur > zwischen rosc und xosc umschalten auf der clock_ref. Als 3. Quelle gibt es nur noch eine AUXSRC. Was schreibst Du ins CLOCK_REF_CTRL Register? Es gehen nicht unbedingt immer die Sachen so, wie man es erwarten könnte.
Das CLR_REF_CTRL kann ich nur noch auf die pll_usb schalten (nach Datenblatt). Nach Datenblatt soll aber doch der CLK_SYS die CPUs versorgen ??? Ich stell mir das bei clk_sys so vor das src Feld kann den Takt auf 0x0 → clk_ref 0x1 → clksrc_clk_sys_aux legen. Und das clksrc_clk_sys_aux kann mit dem Feld AUXSRC auf 0x0 → clksrc_pll_sys 0x1 → clksrc_pll_usb 0x2 → rosc_clksrc 0x3 → xosc_clksrc 0x4 → clksrc_gpin0 0x5 → clksrc_gpin1 gestellt werden. Ich hab daher folgendes gemacht: CLOCKS->CLK_SYS_CTRL = 0x41; // aux=rosc, aux CLOCKS->CLK_SYS_DIV = 0x100; CLOCKS->CLK_SYS_CTRL = 0x01; // aux=pllsys, aux Der Takt wird aber immer noch vom CLK_REF an die CPU geliefert. Diese kann ich zwischen rosc und xosc umschalten. Imm Datenblatt wird irgendwas von einem Enable gefaselt, aber im SYS_CTRL Register ist davon nicht angegeben. Und irgendwie wird immer mal wieder das CLK_GPOUT0 erwähnt. Mir ist nicht klar, was das damit zu tun haben soll ???
:
Bearbeitet durch User
Schorsch X. schrieb: > Der Takt wird aber immer noch vom CLK_REF an die CPU geliefert. Das siehst du woran? Wenn die PLL auf Faktor 1 steht kommt da exakt die gleiche Taktfrequenz raus.
Wenn ich das CLK_SYS_DIV Register verstelle passiert nix, aber wenn ich CLK_REF_DIV verstelle. Muss ich denn auf irgendetwas warten beim umschalten , z.B. dass das CLK_SYS_SELECTED Register verstellt ist. Ich vermute, dass die Zeit reichen sollte, wenn ich im single step durch mein Programm laufe ???
Die betreffenden Register kann zur Laufzeit verändern, auch ohne Einzelschrittbetrieb. Was willst Du überhaupt erreichen?
Hallo Mi N., ich hab deine Initialisierung mal angesehen und nachvollzogen. Damit klappt es offenbar. Jetzt ist der CLK_SYS der Versorger der CPU und ensprechend einstellbar. Ich bin nicht sicher, ob alles andere passt, aber das sieht schon gut aus. Vielen, vielen Dank für deine Hilfe. Ich hab nur immer noch keine Idee, was ich anders mache. Evtl. ist es einfach die Reihenfolge. Besten Dank für Eure Anregungen und Hilfe. Mal sehen, ob das so weiter funktioniert. :-) Schorsch
Schorsch X. schrieb: > Wenn ich das CLK_SYS_DIV Register verstelle passiert nix, aber wenn ich > CLK_REF_DIV verstelle. Die PLLs haben mehr als nur zwei einstellbare Größen. Es sind insgesamt im Wesentlichen fünf. Und alle fünf müssen sinnvoll eingestellt werden. Und man kann sie nur dann umkonfigurieren, wenn die PLL gerade nicht aktiv ist (insbesondere natürlich nicht als Quelle for CLK_SYS). Vielleicht liest du einfach mal die Datenblätter, bevor du sinnlos rumhackst.
C-hater schrieb: > Und man kann sie nur dann umkonfigurieren, wenn die PLL gerade nicht > aktiv ist Das FBDIC_INT Register von PLL_SYS kann man zur Laufzeit prima verstellen. Und POSTDIV1 und POSTDIV2 natürlich auch, solange man nicht zu hoch übertaktet. RP2040 ist eben kein STM32. C-hater schrieb: > Vielleicht liest du einfach mal die Datenblätter, Das gilt auch für Dich.
Mi N. schrieb: > Das FBDIC_INT Register von PLL_SYS kann man zur Laufzeit prima > verstellen. Und POSTDIV1 und POSTDIV2 natürlich auch, solange man nicht > zu hoch übertaktet. Ja, machen kann man eine Menge, was durch die Hardware nicht explizit verhindert wird. Aber ob das auch sinnvoll ist, steht auf einem ganz anderen Blatt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.