stdlib.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef _PICO_STDLIB_H
8#define _PICO_STDLIB_H
9
10#include "pico.h"
11#include "pico/stdio.h"
12#include "pico/time.h"
13#include "hardware/gpio.h"
14#include "hardware/uart.h"
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
43// Note PICO_STDIO_UART, PICO_STDIO_USB, PICO_STDIO_SEMIHOSTING are set by the
44// respective INTERFACE libraries, so these defines are set if the library
45// is included for the target executable
46
47#if LIB_PICO_STDIO_UART
48#include "pico/stdio_uart.h"
49#endif
50
51#if LIB_PICO_STDIO_USB
52#include "pico/stdio_usb.h"
53#endif
54
55#if LIB_PICO_STDIO_SEMIHOSTING
56#include "pico/stdio_semihosting.h"
57#endif
58
59// PICO_CONFIG: PICO_DEFAULT_LED_PIN, Optionally define a pin that drives a regular LED on the board, group=pico_stdlib
60
61// PICO_CONFIG: PICO_DEFAULT_LED_PIN_INVERTED, 1 if LED is inverted or 0 if not, type=int, default=0, group=pico_stdlib
62#ifndef PICO_DEFAULT_LED_PIN_INVERTED
63#define PICO_DEFAULT_LED_PIN_INVERTED 0
64#endif
65
66// PICO_CONFIG: PICO_DEFAULT_WS2812_PIN, Optionally define a pin that controls data to a WS2812 compatible LED on the board, group=pico_stdlib
67// PICO_CONFIG: PICO_DEFAULT_WS2812_POWER_PIN, Optionally define a pin that controls power to a WS2812 compatible LED on the board, group=pico_stdlib
68
84void setup_default_uart(void);
85
91void set_sys_clock_48mhz(void);
92
102void set_sys_clock_pll(uint32_t vco_freq, uint post_div1, uint post_div2);
103
113bool check_sys_clock_khz(uint32_t freq_khz, uint *vco_freq_out, uint *post_div1_out, uint *post_div2_out);
114
126static inline bool set_sys_clock_khz(uint32_t freq_khz, bool required) {
127 uint vco, postdiv1, postdiv2;
128 if (check_sys_clock_khz(freq_khz, &vco, &postdiv1, &postdiv2)) {
129 set_sys_clock_pll(vco, postdiv1, postdiv2);
130 return true;
131 } else if (required) {
132 panic("System clock of %u kHz cannot be exactly achieved", freq_khz);
133 }
134 return false;
135}
136
137#ifdef __cplusplus
138}
139#endif
140#endif
void panic(const char *fmt,...)
Displays a panic message and halts execution.
void set_sys_clock_pll(uint32_t vco_freq, uint post_div1, uint post_div2)
Initialise the system clock.
Definition: stdlib.c:48
bool check_sys_clock_khz(uint32_t freq_khz, uint *vco_freq_out, uint *post_div1_out, uint *post_div2_out)
Check if a given system clock frequency is valid/attainable.
Definition: stdlib.c:88
void set_sys_clock_48mhz(void)
Initialise the system clock to 48MHz.
Definition: stdlib.c:17
static bool set_sys_clock_khz(uint32_t freq_khz, bool required)
Attempt to set a system clock frequency in khz.
Definition: stdlib.h:126
void setup_default_uart(void)
Set up the default UART and assign it to the default GPIOs.
Definition: stdlib.c:108