|
6 | 6 | #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_STM32G0_CLOCK_H_ |
7 | 7 | #define ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_STM32G0_CLOCK_H_ |
8 | 8 |
|
9 | | -/** Peripheral clock sources */ |
10 | | - |
11 | 9 | /** Bus clocks */ |
12 | 10 | #define STM32_CLOCK_BUS_IOP 0x034 |
13 | 11 | #define STM32_CLOCK_BUS_AHB1 0x038 |
|
17 | 15 | #define STM32_PERIPH_BUS_MIN STM32_CLOCK_BUS_IOP |
18 | 16 | #define STM32_PERIPH_BUS_MAX STM32_CLOCK_BUS_APB1 |
19 | 17 |
|
| 18 | +/** Peripheral clock sources */ |
| 19 | +/* RM0444, §5.4.21/22 Clock configuration register (RCC_CCIPRx) */ |
| 20 | + |
| 21 | +/** Fixed clocks */ |
| 22 | +#define STM32_SRC_HSI 0x001 |
| 23 | +#define STM32_SRC_MSI 0x002 |
| 24 | +#define STM32_SRC_LSE 0x003 |
| 25 | +#define STM32_SRC_LSI 0x004 |
| 26 | +/** System clock */ |
| 27 | +#define STM32_SRC_SYSCLK 0x005 |
| 28 | +/** Peripheral bus clock */ |
| 29 | +#define STM32_SRC_PCLK 0x006 |
| 30 | +/** PLL clock */ |
| 31 | +#define STM32_SRC_PLLCLK 0x007 |
| 32 | + |
| 33 | +#define STM32_SRC_CLOCK_MIN STM32_SRC_HSI |
| 34 | +#define STM32_SRC_CLOCK_MAX STM32_SRC_PLLCLK |
| 35 | + |
| 36 | +/** |
| 37 | + * @brief STM32 clock configuration bit field. |
| 38 | + * |
| 39 | + * - reg (1/2/3) [ 0 : 7 ] |
| 40 | + * - shift (0..31) [ 8 : 12 ] |
| 41 | + * - mask (0x1, 0x3, 0x7) [ 13 : 15 ] |
| 42 | + * - val (0..7) [ 16 : 18 ] |
| 43 | + * |
| 44 | + * @param reg RCC_CCIPRx register offset |
| 45 | + * @param shift Position within RCC_CCIPRx. |
| 46 | + * @param mask Mask for the RCC_CCIPRx field. |
| 47 | + * @param val Clock value (0, 1, ... 7). |
| 48 | + */ |
| 49 | + |
| 50 | +#define STM32_CLOCK_REG_MASK 0xFFU |
| 51 | +#define STM32_CLOCK_REG_SHIFT 0U |
| 52 | +#define STM32_CLOCK_SHIFT_MASK 0x1FU |
| 53 | +#define STM32_CLOCK_SHIFT_SHIFT 8U |
| 54 | +#define STM32_CLOCK_MASK_MASK 0x7U |
| 55 | +#define STM32_CLOCK_MASK_SHIFT 13U |
| 56 | +#define STM32_CLOCK_VAL_MASK 0x7U |
| 57 | +#define STM32_CLOCK_VAL_SHIFT 16U |
| 58 | + |
| 59 | +#define STM32_CLOCK(val, mask, shift, reg) \ |
| 60 | + ((((reg) & STM32_CLOCK_REG_MASK) << STM32_CLOCK_REG_SHIFT) | \ |
| 61 | + (((shift) & STM32_CLOCK_SHIFT_MASK) << STM32_CLOCK_SHIFT_SHIFT) | \ |
| 62 | + (((mask) & STM32_CLOCK_MASK_MASK) << STM32_CLOCK_MASK_SHIFT) | \ |
| 63 | + (((val) & STM32_CLOCK_VAL_MASK) << STM32_CLOCK_VAL_SHIFT)) |
| 64 | + |
| 65 | +/** @brief RCC_CCIPR register offset */ |
| 66 | +#define CCIPR_REG 0x54 |
| 67 | +#define CCIPR2_REG 0x58 |
| 68 | + |
| 69 | +/** @brief Device clk sources selection helpers */ |
| 70 | +/** CCIPR devices */ |
| 71 | +#define USART1_SEL(val) STM32_CLOCK(val, 3, 0, CCIPR_REG) |
| 72 | +#define USART2_SEL(val) STM32_CLOCK(val, 3, 2, CCIPR_REG) |
| 73 | +#define USART3_SEL(val) STM32_CLOCK(val, 3, 4, CCIPR_REG) |
| 74 | +#define CEC_SEL(val) STM32_CLOCK(val, 1, 6, CCIPR_REG) |
| 75 | +#define LPUART2_SEL(val) STM32_CLOCK(val, 3, 8, CCIPR_REG) |
| 76 | +#define LPUART1_SEL(val) STM32_CLOCK(val, 3, 10, CCIPR_REG) |
| 77 | +#define I2C1_SEL(val) STM32_CLOCK(val, 3, 12, CCIPR_REG) |
| 78 | +#define I2C2_I2S1_SEL(val) STM32_CLOCK(val, 3, 14, CCIPR_REG) |
| 79 | +#define LPTIM1_SEL(val) STM32_CLOCK(val, 3, 18, CCIPR_REG) |
| 80 | +#define LPTIM2_SEL(val) STM32_CLOCK(val, 3, 20, CCIPR_REG) |
| 81 | +#define TIM1_SEL(val) STM32_CLOCK(val, 1, 22, CCIPR_REG) |
| 82 | +#define TIM15_SEL(val) STM32_CLOCK(val, 1, 24, CCIPR_REG) |
| 83 | +#define RNG_SEL(val) STM32_CLOCK(val, 3, 26, CCIPR_REG) |
| 84 | +#define ADC_SEL(val) STM32_CLOCK(val, 3, 30, CCIPR_REG) |
| 85 | +/** CCIPR2 devices */ |
| 86 | +#define I2S1_SEL(val) STM32_CLOCK(val, 3, 0, CCIPR2_REG) |
| 87 | +#define I2S2_SEL(val) STM32_CLOCK(val, 3, 2, CCIPR2_REG) |
| 88 | +#define FDCAN_SEL(val) STM32_CLOCK(val, 3, 8, CCIPR2_REG) |
| 89 | +#define USB_SEL(val) STM32_CLOCK(val, 3, 12, CCIPR2_REG) |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | + |
20 | 94 | #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_STM32G0_CLOCK_H_ */ |
0 commit comments