clocks.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 _HARDWARE_CLOCKS_H_
8#define _HARDWARE_CLOCKS_H_
9
10#include "pico.h"
11#include "hardware/structs/clocks.h"
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
89#define KHZ 1000
90#define MHZ 1000000
91
92// PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_CLOCKS, Enable/disable assertions in the clocks module, type=bool, default=0, group=hardware_clocks
93#ifndef PARAM_ASSERTIONS_ENABLED_CLOCKS
94#define PARAM_ASSERTIONS_ENABLED_CLOCKS 0
95#endif
96
102void clocks_init(void);
103
115bool clock_configure(enum clock_index clk_index, uint32_t src, uint32_t auxsrc, uint32_t src_freq, uint32_t freq);
116
122void clock_stop(enum clock_index clk_index);
123
130uint32_t clock_get_hz(enum clock_index clk_index);
131
138uint32_t frequency_count_khz(uint src);
139
145void clock_set_reported_hz(enum clock_index clk_index, uint hz);
146
148static inline float frequency_count_mhz(uint src) {
149 return ((float) (frequency_count_khz(src))) / KHZ;
150}
152
158typedef void (*resus_callback_t)(void);
159
168void clocks_enable_resus(resus_callback_t resus_callback);
169
177void clock_gpio_init(uint gpio, uint src, uint div);
178
187bool clock_configure_gpin(enum clock_index clk_index, uint gpio, uint32_t src_freq, uint32_t freq);
188
189
190#ifdef __cplusplus
191}
192#endif
193
194#endif
void clock_stop(enum clock_index clk_index)
Stop the specified clock.
Definition: clocks.c:35
void(* resus_callback_t)(void)
Resus callback function type.
Definition: clocks.h:158
void clocks_enable_resus(resus_callback_t resus_callback)
Enable the resus function. Restarts clk_sys if it is accidentally stopped.
Definition: clocks.c:293
clock_index
Enumeration identifying a hardware clock.
Definition: clocks.h:27
bool clock_configure(enum clock_index clk_index, uint32_t src, uint32_t auxsrc, uint32_t src_freq, uint32_t freq)
Configure the specified clock.
Definition: clocks.c:42
bool clock_configure_gpin(enum clock_index clk_index, uint gpio, uint32_t src_freq, uint32_t freq)
Configure a clock to come from a gpio input.
Definition: clocks.c:364
void clock_gpio_init(uint gpio, uint src, uint div)
Output an optionally divided clock to the specified gpio pin.
Definition: clocks.c:317
void clocks_init(void)
Initialise the clock hardware.
Definition: clocks.c:121
uint32_t clock_get_hz(enum clock_index clk_index)
Get the current frequency of the specified clock.
Definition: clocks.c:208
uint32_t frequency_count_khz(uint src)
Measure a clocks frequency using the Frequency counter.
Definition: clocks.c:218
void clock_set_reported_hz(enum clock_index clk_index, uint hz)
Set the "current frequency" of the clock as reported by clock_get_hz without actually changing the cl...
Definition: clocks.c:213