69 lines
2.2 KiB
C
69 lines
2.2 KiB
C
/**
|
|
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include "pico/stdlib.h"
|
|
#include "hardware/pll.h"
|
|
#include "hardware/clocks.h"
|
|
#include "hardware/structs/pll.h"
|
|
#include "hardware/structs/clocks.h"
|
|
|
|
void measure_freqs(void) {
|
|
uint f_pll_sys = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_PLL_SYS_CLKSRC_PRIMARY);
|
|
uint f_pll_usb = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_PLL_USB_CLKSRC_PRIMARY);
|
|
uint f_rosc = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_ROSC_CLKSRC);
|
|
uint f_clk_sys = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_SYS);
|
|
uint f_clk_peri = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_PERI);
|
|
uint f_clk_usb = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_USB);
|
|
uint f_clk_adc = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_ADC);
|
|
uint f_clk_rtc = frequency_count_khz(CLOCKS_FC0_SRC_VALUE_CLK_RTC);
|
|
|
|
printf("pll_sys = %dkHz\n", f_pll_sys);
|
|
printf("pll_usb = %dkHz\n", f_pll_usb);
|
|
printf("rosc = %dkHz\n", f_rosc);
|
|
printf("clk_sys = %dkHz\n", f_clk_sys);
|
|
printf("clk_peri = %dkHz\n", f_clk_peri);
|
|
printf("clk_usb = %dkHz\n", f_clk_usb);
|
|
printf("clk_adc = %dkHz\n", f_clk_adc);
|
|
printf("clk_rtc = %dkHz\n", f_clk_rtc);
|
|
|
|
// Can't measure clk_ref / xosc as it is the ref
|
|
}
|
|
|
|
int main() {
|
|
stdio_init_all();
|
|
|
|
printf("Hello, world!\n");
|
|
|
|
measure_freqs();
|
|
|
|
// Change clk_sys to be 48MHz. The simplest way is to take this from PLL_USB
|
|
// which has a source frequency of 48MHz
|
|
clock_configure(clk_sys,
|
|
CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX,
|
|
CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_USB,
|
|
48 * MHZ,
|
|
48 * MHZ);
|
|
|
|
// Turn off PLL sys for good measure
|
|
pll_deinit(pll_sys);
|
|
|
|
// CLK peri is clocked from clk_sys so need to change clk_peri's freq
|
|
clock_configure(clk_peri,
|
|
0,
|
|
CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS,
|
|
48 * MHZ,
|
|
48 * MHZ);
|
|
|
|
// Re init uart now that clk_peri has changed
|
|
stdio_init_all();
|
|
|
|
measure_freqs();
|
|
printf("Hello, 48MHz");
|
|
|
|
return 0;
|
|
}
|