Loading...
Searching...
No Matches
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
22
23#include <stdint.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
34enum {
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
47enum {
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
57static 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