cpu_clock.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de>
3  * 2014 Freie Universität Berlin, Hinnerk van Bruinehsen
4  * 2018 RWTH Aachen, Josua Arndt <jarndt@ias.rwth-aachen.de>
5  * 2021 Gerson Fernando Budke <nandojve@gmail.com>
6  *
7  * This file is subject to the terms and conditions of the GNU Lesser
8  * General Public License v2.1. See the file LICENSE in the top level
9  * directory for more details.
10  */
11 
32 #ifndef CPU_CLOCK_H
33 #define CPU_CLOCK_H
34 
35 #include <stdint.h>
36 
37 #ifdef __cplusplus
38 extern "C"
39 {
40 #endif
41 
47 enum {
48  CPU_ATMEGA_CLK_SCALE_DIV1 = 0,
49  CPU_ATMEGA_CLK_SCALE_DIV2 = 1,
50  CPU_ATMEGA_CLK_SCALE_DIV4 = 2,
51  CPU_ATMEGA_CLK_SCALE_DIV8 = 3,
52  CPU_ATMEGA_CLK_SCALE_DIV16 = 4,
53  CPU_ATMEGA_CLK_SCALE_DIV32 = 5,
54  CPU_ATMEGA_CLK_SCALE_DIV64 = 6,
55  CPU_ATMEGA_CLK_SCALE_DIV128 = 7,
56  CPU_ATMEGA_CLK_SCALE_DIV256 = 8,
57  CPU_ATMEGA_CLK_SCALE_DIV512 = 9,
58 };
59 
63 static inline void atmega_set_prescaler(uint8_t clk_scale)
64 {
65  /* Enable clock change */
66 #ifdef CLKPR
67  /* Must be assignment to set all other bits to zero, see datasheet */
68  CLKPR = (1 << CLKPCE);
69 
70  /* Write clock within 4 cycles */
71  CLKPR = clk_scale;
72 #else
73  (void) clk_scale;
74 #endif
75 }
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 
81 #endif /* CPU_CLOCK_H */
static void atmega_set_prescaler(uint8_t clk_scale)
Initializes system clock prescaler.
Definition: cpu_clock.h:63