rp-rs / sample-project

17 stars 3 forks source link

Source for clk_sys is not switched to pll_sys after PLLs are set up #5

Open kahara opened 3 years ago

kahara commented 3 years ago

To verify, looked at CLK_SYS_CTRL with debugger and it shows 0x00000000, so the clock source is pointing to clk_ref as expected. And CLK_SYS_SELECTED shows 0x00000001 which, if I've interpreted the datasheet correctly, also means that clk_ref is selected.

Is there a reason for setting up pll_sys and then not wiring clk_sys to it?

I tried something like this but it doesn't speed up the blinking:

clocks.clk_sys_ctrl.modify(|_, w| w.auxsrc().clksrc_pll_sys() );
clocks.clk_sys_ctrl.modify(|_, w| w.src().clksrc_clk_sys_aux() );
while clocks.clk_sys_selected.read().bits() != 2 {}
kahara commented 3 years ago

The problem seems to be that PLL::configure() erroneously sets REFDIV to the crystal's megahertz value:

p.cs.write(|w| unsafe { w.bits(ref_mhz as _) });

REFDIV is 1 on boot, so setting it isn't necessary. Removing the call above combined with the stuff mentioned in the earlier comment makes Pico run at full speed. I'll make a PR about this.