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 
31 #include <stdint.h>
32 
33 #ifdef __cplusplus
34 extern "C"
35 {
36 #endif
37 
43 enum {
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 
59 static 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