@@ -189,26 +189,26 @@ pub unsafe extern "C" fn jump_to_bootloader() {
189189 ) ;
190190}
191191
192- fn init_clocks ( peripherals : & Rp2040DefaultPeripherals ) {
192+ fn init_clocks (
193+ peripherals : & Rp2040DefaultPeripherals ,
194+ clocks : & ' static rp2040:: clocks:: Clocks ,
195+ resets : & ' static rp2040:: resets:: Resets ,
196+ ) {
193197 // Start tick in watchdog
194198 peripherals. watchdog . start_tick ( 12 ) ;
195199
196200 // Disable the Resus clock
197- peripherals . clocks . disable_resus ( ) ;
201+ clocks. disable_resus ( ) ;
198202
199203 // Setup the external Oscillator
200204 peripherals. xosc . init ( ) ;
201205
202206 // disable ref and sys clock aux sources
203- peripherals . clocks . disable_sys_aux ( ) ;
204- peripherals . clocks . disable_ref_aux ( ) ;
207+ clocks. disable_sys_aux ( ) ;
208+ clocks. disable_ref_aux ( ) ;
205209
206- peripherals
207- . resets
208- . reset ( & [ Peripheral :: PllSys , Peripheral :: PllUsb ] ) ;
209- peripherals
210- . resets
211- . unreset ( & [ Peripheral :: PllSys , Peripheral :: PllUsb ] , true ) ;
210+ resets. reset ( & [ Peripheral :: PllSys , Peripheral :: PllUsb ] ) ;
211+ resets. unreset ( & [ Peripheral :: PllSys , Peripheral :: PllUsb ] , true ) ;
212212
213213 // Configure PLLs (from Pico SDK)
214214 // REF FBDIV VCO POSTDIV
@@ -217,45 +217,33 @@ fn init_clocks(peripherals: &Rp2040DefaultPeripherals) {
217217
218218 // It seems that the external osciallator is clocked at 12 MHz
219219
220- peripherals
221- . clocks
222- . pll_init ( PllClock :: Sys , 12 , 1 , 1500 * 1000000 , 6 , 2 ) ;
223- peripherals
224- . clocks
225- . pll_init ( PllClock :: Usb , 12 , 1 , 480 * 1000000 , 5 , 2 ) ;
220+ clocks. pll_init ( PllClock :: Sys , 12 , 1 , 1500 * 1000000 , 6 , 2 ) ;
221+ clocks. pll_init ( PllClock :: Usb , 12 , 1 , 480 * 1000000 , 5 , 2 ) ;
226222
227223 // pico-sdk: // CLK_REF = XOSC (12MHz) / 1 = 12MHz
228- peripherals . clocks . configure_reference (
224+ clocks. configure_reference (
229225 ReferenceClockSource :: Xosc ,
230226 ReferenceAuxiliaryClockSource :: PllUsb ,
231227 12000000 ,
232228 12000000 ,
233229 ) ;
234230 // pico-sdk: CLK SYS = PLL SYS (125MHz) / 1 = 125MHz
235- peripherals . clocks . configure_system (
231+ clocks. configure_system (
236232 SystemClockSource :: Auxiliary ,
237233 SystemAuxiliaryClockSource :: PllSys ,
238234 125000000 ,
239235 125000000 ,
240236 ) ;
241237 // pico-sdk: CLK USB = PLL USB (48MHz) / 1 = 48MHz
242- peripherals
243- . clocks
244- . configure_usb ( UsbAuxiliaryClockSource :: PllSys , 48000000 , 48000000 ) ;
238+ clocks. configure_usb ( UsbAuxiliaryClockSource :: PllSys , 48000000 , 48000000 ) ;
245239 // pico-sdk: CLK ADC = PLL USB (48MHZ) / 1 = 48MHz
246- peripherals
247- . clocks
248- . configure_adc ( AdcAuxiliaryClockSource :: PllUsb , 48000000 , 48000000 ) ;
240+ clocks. configure_adc ( AdcAuxiliaryClockSource :: PllUsb , 48000000 , 48000000 ) ;
249241 // pico-sdk: CLK RTC = PLL USB (48MHz) / 1024 = 46875Hz
250- peripherals
251- . clocks
252- . configure_rtc ( RtcAuxiliaryClockSource :: PllSys , 48000000 , 46875 ) ;
242+ clocks. configure_rtc ( RtcAuxiliaryClockSource :: PllSys , 48000000 , 46875 ) ;
253243 // pico-sdk:
254244 // CLK PERI = clk_sys. Used as reference clock for Peripherals. No dividers so just select and enable
255245 // Normally choose clk_sys or clk_usb
256- peripherals
257- . clocks
258- . configure_peripheral ( PeripheralAuxiliaryClockSource :: System , 125000000 ) ;
246+ clocks. configure_peripheral ( PeripheralAuxiliaryClockSource :: System , 125000000 ) ;
259247}
260248
261249/// This is in a separate, inline(never) function so that its stack frame is
@@ -281,11 +269,16 @@ pub unsafe fn start() -> (
281269 PanicResources :: new ( ) ,
282270 ) ;
283271
284- let peripherals = static_init ! ( Rp2040DefaultPeripherals , Rp2040DefaultPeripherals :: new( ) ) ;
285- peripherals. resolve_dependencies ( ) ;
272+ let clocks = static_init ! ( rp2040:: clocks:: Clocks , rp2040:: clocks:: Clocks :: new( ) ) ;
273+ let resets = static_init ! ( rp2040:: resets:: Resets , rp2040:: resets:: Resets :: new( ) ) ;
274+ let peripherals = static_init ! (
275+ Rp2040DefaultPeripherals ,
276+ Rp2040DefaultPeripherals :: new( clocks, resets)
277+ ) ;
278+ peripherals. init ( ) ;
286279
287280 // Reset all peripherals except QSPI (we might be booting from Flash), PLL USB and PLL SYS
288- peripherals . resets . reset_all_except ( & [
281+ resets. reset_all_except ( & [
289282 Peripheral :: IOQSpi ,
290283 Peripheral :: PadsQSpi ,
291284 Peripheral :: PllUsb ,
@@ -294,7 +287,7 @@ pub unsafe fn start() -> (
294287
295288 // Unreset all the peripherals that do not require clock setup as they run using the sys_clk or ref_clk
296289 // Wait for the peripherals to reset
297- peripherals . resets . unreset_all_except (
290+ resets. unreset_all_except (
298291 & [
299292 Peripheral :: Adc ,
300293 Peripheral :: Rtc ,
@@ -307,10 +300,10 @@ pub unsafe fn start() -> (
307300 true ,
308301 ) ;
309302
310- init_clocks ( peripherals) ;
303+ init_clocks ( peripherals, clocks , resets ) ;
311304
312305 // Unreset all peripherals
313- peripherals . resets . unreset_all_except ( & [ ] , true ) ;
306+ resets. unreset_all_except ( & [ ] , true ) ;
314307
315308 //set RX and TX pins in UART mode
316309 let gpio_tx = peripherals. pins . get_pin ( RPGpio :: GPIO0 ) ;
@@ -723,7 +716,7 @@ pub unsafe fn start() -> (
723716
724717 let mut pio: Pio = Pio :: new_pio0 ( ) ;
725718
726- let _pio_pwm = PioPwm :: new ( & mut pio, & peripherals . clocks ) ;
719+ let _pio_pwm = PioPwm :: new ( & mut pio, clocks) ;
727720 // This will start a PWM with PIO with the set frequency and duty cycle on the specified pin.
728721 // pio_pwm
729722 // .start(
0 commit comments