#include "pico/stdlib.h"
#include "hardware/pwm.h"
#include "hardware/pll.h"
#include "hardware/clocks.h"
#include "hardware/structs/pll.h"
#include "hardware/structs/clocks.h"

int main() {
  clock_gpio_init(21, CLOCKS_CLK_GPOUT0_CTRL_AUXSRC_VALUE_CLK_SYS, 10);
  clock_gpio_init(23, CLOCKS_CLK_GPOUT1_CTRL_AUXSRC_VALUE_CLK_REF, 10);

  // Temporarily switch to crystal clock
  clock_configure(clk_sys,
                  CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX,
                  CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_XOSC_CLKSRC,
                  12 * MHZ,
                  12 * MHZ);

  // Configure PLL sys to 1500 / 5 / 3 = 100MHz
  // Parameters obtained by running:
  // python src/rp2_common/hardware_clocks/scripts/vcocalc.py --input 12 100
  pll_init(pll_sys, 1, 1500 * MHZ, 5, 3);

  // Switch back to PLL
  clock_configure(clk_sys,
                  CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX,
                  CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS,
                  100 * MHZ,
                  100 * MHZ);

  // PWM (Clock output) setup
  gpio_set_function(2, GPIO_FUNC_PWM);
  uint slice_num = pwm_gpio_to_slice_num(2);
  pwm_set_wrap(slice_num, 9);
  pwm_set_chan_level(slice_num, PWM_CHAN_A, 5); // 50% duty cycle

  pwm_set_enabled(slice_num, true);

  while (1)
    tight_loop_contents();
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
D0D1D2D3D4D5D6D7GNDLOGIC