rp2040 Initialisierung pll_sys

OP #7363901
Lesenswert?

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

OP #7364101
Lesenswert?

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 ???

OP #7364247
Lesenswert?

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

#7364497
Lesenswert?

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.

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