cpu_clock.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2021 Gerson Fernando Budke <nandojve@gmail.com>
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
23 #include <stdint.h>
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
34 enum {
35  CPU_ATXMEGA_CLK_SCALE_DIV1 = 0,
36  CPU_ATXMEGA_CLK_SCALE_DIV2 = 1,
37  CPU_ATXMEGA_CLK_SCALE_DIV4 = 3,
38  CPU_ATXMEGA_CLK_SCALE_DIV8 = 5,
39  CPU_ATXMEGA_CLK_SCALE_DIV16 = 7,
40  CPU_ATXMEGA_CLK_SCALE_DIV32 = 9,
41  CPU_ATXMEGA_CLK_SCALE_DIV64 = 11,
42  CPU_ATXMEGA_CLK_SCALE_DIV128 = 13,
43  CPU_ATXMEGA_CLK_SCALE_DIV256 = 15,
44  CPU_ATXMEGA_CLK_SCALE_DIV512 = 17,
45 };
46 
47 enum {
48  CPU_ATXMEGA_BUS_SCALE_DIV1_1 = 0,
49  CPU_ATXMEGA_BUS_SCALE_DIV1_2 = 1,
50  CPU_ATXMEGA_BUS_SCALE_DIV4_1 = 2,
51  CPU_ATXMEGA_BUS_SCALE_DIV2_2 = 3,
52 };
53 
57 static inline void atxmega_set_prescaler(uint8_t clk_scale, uint8_t bus_scale)
58 {
59  /* Disable CCP for Protected IO register and set new value
60  * Set system clock prescalers to zero. PSCTRL contains A Prescaler
61  * Value and one value for and B and C Prescaler
62  */
63  _PROTECTED_WRITE(CLK.PSCTRL, clk_scale | bus_scale);
64 }
65 
66 #ifdef __cplusplus
67 }
68 #endif
69 
static void atxmega_set_prescaler(uint8_t clk_scale, uint8_t bus_scale)
Initializes system clock prescaler.
Definition: cpu_clock.h:57