#include "pico/stdlib.h" // Biblioteca padrão para funções básicas de E/S, temporização, controle de GPIO, etc.
#include "hardware/clocks.h" // Biblioteca para configuração e gerenciamento dos clocks do microcontrolador RP2040.
#include "hardware/pll.h" // Biblioteca para controle e configuração dos Phase-Locked Loops (PLLs).
int main() {
// Inicializa a comunicação serial, permitindo o uso das funções padrão de E/S como printf.
stdio_init_all();
// Inicializa o sistema de clocks com as configurações padrão.
// Isso configura o relógio de referência e os divisores de frequência iniciais.
clocks_init();
// Configura o PLL_SYS (PLL do sistema) para gerar uma frequência de 125 MHz.
// Parâmetros:
// pll_sys: PLL do sistema a ser configurado.
// 1: Pós-divisor de saída, que controla o número de fases. Neste caso, 1 para uma única fase.
// 1500 * MHZ: Frequência alvo do PLL (1500 MHz).
// 6 * MHZ: Frequência de referência de entrada do PLL, derivada do cristal externo de 12 MHz, dividida por 2.
// 1: Pré-divisor de entrada do PLL, que divide a frequência de entrada por 1 (sem alteração).
pll_init(pll_sys, 1, 1500 * MHZ, 6 * MHZ, 1);
// Configura o clock do sistema (CLK_SYS) para usar o PLL_SYS como fonte de clock.
// Parâmetros:
// clk_sys: O clock do sistema a ser configurado.
// CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX: Seleciona o clock auxiliar como fonte principal.
// CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS: Define o PLL_SYS como fonte auxiliar de clock.
// 125 * MHZ: A frequência desejada para o clock do sistema (125 MHz).
// 125 * MHZ: A frequência de origem (125 MHz), que deve corresponder à saída do PLL_SYS.
clock_configure(clk_sys,
CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLKSRC_CLK_SYS_AUX,
CLOCKS_CLK_SYS_CTRL_AUXSRC_VALUE_CLKSRC_PLL_SYS,
125 * MHZ, // Frequência desejada para o CLK_SYS.
125 * MHZ); // Frequência de saída do PLL_SYS.
// A partir deste ponto, o clock do sistema (CLK_SYS) está operando a 125 MHz.
// A mensagem é impressa na saída serial para confirmação e depuração.
printf("CLK_SYS está operando a 125 MHz\n");
// Loop principal do programa. Aqui você pode adicionar outras funcionalidades que deseja executar
// continuamente no microcontrolador. No momento, ele fica em um loop infinito.
while (true) {
// Espaço para adicionar lógica adicional, se necessário.
}
}