Loading...
Searching...
No Matches
cfg_clock_default.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2020 Inria
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser
5 * General Public License v2.1. See the file LICENSE in the top level
6 * directory for more details.
7 */
8
9#pragma once
10
24
26#include "kernel_defines.h"
27#include "macros/units.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
38#if IS_ACTIVE(CONFIG_BOARD_HAS_HSE) && (CONFIG_CLOCK_HSE < MHZ(4) || CONFIG_CLOCK_HSE > MHZ(48))
39#error "HSE clock frequency must be between 4MHz and 48MHz"
40#endif
41
42#ifdef CPU_FAM_STM32G0
43#ifndef CONFIG_CLOCK_HSISYS_DIV
44#define CONFIG_CLOCK_HSISYS_DIV (1)
45#endif
46#endif
47
48#if IS_ACTIVE(CONFIG_BOARD_HAS_HSE)
49#define CLOCK_PLL_SRC (CONFIG_CLOCK_HSE)
50#else /* CONFIG_CLOCK_HSI */
51#define CLOCK_PLL_SRC (CONFIG_CLOCK_HSI)
52#endif
53
54/* The following parameters configure a 64MHz system clock with HSI as input clock */
55#ifndef CONFIG_CLOCK_PLL_M
56#ifdef CPU_FAM_STM32G0
57#define CONFIG_CLOCK_PLL_M (1)
58#else
59#define CONFIG_CLOCK_PLL_M (4)
60#endif
61#endif
62#ifndef CONFIG_CLOCK_PLL_N
63#ifdef CPU_FAM_STM32G0
64#define CONFIG_CLOCK_PLL_N (20)
65#else
66#define CONFIG_CLOCK_PLL_N (85)
67#endif
68#endif
69#ifndef CONFIG_CLOCK_PLL_R
70#ifdef CPU_FAM_STM32G0
71#define CONFIG_CLOCK_PLL_R (5)
72#else
73#define CONFIG_CLOCK_PLL_R (2)
74#endif
75#endif
76
77#if IS_ACTIVE(CONFIG_USE_CLOCK_HSI)
78#ifdef CPU_FAM_STM32G0
79#define CLOCK_CORECLOCK (CONFIG_CLOCK_HSI / CONFIG_CLOCK_HSISYS_DIV)
80#else
81#define CLOCK_CORECLOCK (CONFIG_CLOCK_HSI)
82#endif
83
84#elif IS_ACTIVE(CONFIG_USE_CLOCK_HSE)
85#if !IS_ACTIVE(CONFIG_BOARD_HAS_HSE)
86#error "The board doesn't provide an HSE oscillator"
87#endif
88#define CLOCK_CORECLOCK (CONFIG_CLOCK_HSE)
89
90#elif IS_ACTIVE(CONFIG_USE_CLOCK_PLL)
91#define CLOCK_CORECLOCK \
92 ((CLOCK_PLL_SRC / CONFIG_CLOCK_PLL_M) * CONFIG_CLOCK_PLL_N) / CONFIG_CLOCK_PLL_R
93#ifdef CPU_FAM_STM32G0
94#if CLOCK_CORECLOCK > MHZ(64)
95#error "SYSCLK cannot exceed 64MHz"
96#endif
97#else /* CPU_FAM_STM32G4 */
98#if CLOCK_CORECLOCK > MHZ(170)
99#error "SYSCLK cannot exceed 170MHz"
100#endif
101#endif
102#endif /* CONFIG_USE_CLOCK_PLL */
103
104#define CLOCK_AHB CLOCK_CORECLOCK /* max: 64MHz (G0), 170MHZ (G4) */
105
106#ifndef CONFIG_CLOCK_APB1_DIV
107#define CONFIG_CLOCK_APB1_DIV (1)
108#endif
109#define CLOCK_APB1 (CLOCK_CORECLOCK / CONFIG_CLOCK_APB1_DIV) /* max: 64MHz (G0), 170MHZ (G4) */
110#ifdef CPU_FAM_STM32G4
111#ifndef CONFIG_CLOCK_APB2_DIV
112#define CONFIG_CLOCK_APB2_DIV (1)
113#endif
114#define CLOCK_APB2 (CLOCK_AHB / CONFIG_CLOCK_APB2_DIV) /* max: 170MHz (only on G4) */
115#endif
117
118#ifdef __cplusplus
119}
120#endif
121
Base STM32Fx/Gx/MP1/C0 clock configuration.
Common macros and compiler attributes/pragmas configuration.
Unit helper macros.