Loading...
Searching...
No Matches
cpu_clock.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Kaspar Schleiser <kaspar@schleiser.de>
3 * SPDX-FileCopyrightText: 2014 Freie Universität Berlin, Hinnerk van Bruinehsen
4 * SPDX-FileCopyrightText: 2018 RWTH Aachen, Josua Arndt <jarndt@ias.rwth-aachen.de>
5 * SPDX-FileCopyrightText: 2021 Gerson Fernando Budke <nandojve@gmail.com>
6 * SPDX-License-Identifier: LGPL-2.1-only
7 */
8
9#pragma once
10
30
31#include <stdint.h>
32
33#ifdef __cplusplus
34extern "C"
35{
36#endif
37
43enum {
44 CPU_ATMEGA_CLK_SCALE_DIV1 = 0,
45 CPU_ATMEGA_CLK_SCALE_DIV2 = 1,
46 CPU_ATMEGA_CLK_SCALE_DIV4 = 2,
47 CPU_ATMEGA_CLK_SCALE_DIV8 = 3,
48 CPU_ATMEGA_CLK_SCALE_DIV16 = 4,
49 CPU_ATMEGA_CLK_SCALE_DIV32 = 5,
50 CPU_ATMEGA_CLK_SCALE_DIV64 = 6,
51 CPU_ATMEGA_CLK_SCALE_DIV128 = 7,
52 CPU_ATMEGA_CLK_SCALE_DIV256 = 8,
53 CPU_ATMEGA_CLK_SCALE_DIV512 = 9,
54};
55
59static inline void atmega_set_prescaler(uint8_t clk_scale)
60{
61 /* Enable clock change */
62#ifdef CLKPR
63 /* Must be assignment to set all other bits to zero, see datasheet */
64 CLKPR = (1 << CLKPCE);
65
66 /* Write clock within 4 cycles */
67 CLKPR = clk_scale;
68#else
69 (void) clk_scale;
70#endif
71}
72
73#ifdef __cplusplus
74}
75#endif
76
static void atmega_set_prescaler(uint8_t clk_scale)
Initializes system clock prescaler.
Definition cpu_clock.h:59