|
20 | 20 | /** Clock divider */ |
21 | 21 | #define STM32_CLOCK_DIV(div) (((div) - 1) << STM32_CLOCK_DIV_SHIFT) |
22 | 22 |
|
23 | | -/** STM32 MCO configuration values */ |
24 | | -#define STM32_MCO_CFGR_REG_MASK 0xFFFFU |
25 | | -#define STM32_MCO_CFGR_REG_SHIFT 0U |
26 | | -#define STM32_MCO_CFGR_SHIFT_MASK 0x3FU |
27 | | -#define STM32_MCO_CFGR_SHIFT_SHIFT 16U |
28 | | -#define STM32_MCO_CFGR_MASK_MASK 0x1FU |
29 | | -#define STM32_MCO_CFGR_MASK_SHIFT 22U |
30 | | -#define STM32_MCO_CFGR_VAL_MASK 0x1FU |
31 | | -#define STM32_MCO_CFGR_VAL_SHIFT 27U |
| 23 | +/** Helper macros to pack RCC clock source selection register info in the DT */ |
| 24 | +#define STM32_DT_CLKSEL_REG_MASK 0xFFFFU |
| 25 | +#define STM32_DT_CLKSEL_REG_SHIFT 0U |
| 26 | +#define STM32_DT_CLKSEL_SHIFT_MASK 0x3FU |
| 27 | +#define STM32_DT_CLKSEL_SHIFT_SHIFT 16U |
| 28 | +#define STM32_DT_CLKSEL_MASK_MASK 0x1FU |
| 29 | +#define STM32_DT_CLKSEL_MASK_SHIFT 22U |
| 30 | +#define STM32_DT_CLKSEL_VAL_MASK 0x1FU |
| 31 | +#define STM32_DT_CLKSEL_VAL_SHIFT 27U |
32 | 32 |
|
33 | 33 | /** |
34 | | - * @brief STM32 MCO configuration register bit field |
| 34 | + * @brief Pack STM32 source clock selection RCC register bit fields for the DT |
35 | 35 | * |
36 | | - * @param reg Offset to RCC register holding MCO configuration |
37 | | - * @param shift Position of field within RCC register (= field LSB's index) |
38 | | - * @param mask Mask of register field in RCC register |
39 | | - * @param val Clock configuration field value (0~0x1F) |
| 36 | + * @param val Clock configuration field value |
| 37 | + * @param mask Mask of register field in RCC register |
| 38 | + * @param shift Position of field within RCC register (= field LSB's index) |
| 39 | + * @param reg Offset to target clock configuration register in RCC |
40 | 40 | * |
41 | | - * @note 'reg' range: 0x0~0xFFFF [ 00 : 15 ] |
42 | | - * @note 'shift' range: 0~63 [ 16 : 21 ] |
43 | | - * @note 'mask' range: 0x00~0x1F [ 22 : 26 ] |
| 41 | + * @note 'reg' range: 0x0~0xFFFF [ 00 : 15 ] |
| 42 | + * @note 'shift' range: 0~63 [ 16 : 21 ] |
| 43 | + * @note 'mask' range: 0x00~0x1F [ 22 : 26 ] |
44 | 44 | * @note 'val' range: 0x00~0x1F [ 27 : 31 ] |
45 | | - * |
46 | 45 | */ |
47 | | -#define STM32_MCO_CFGR(val, mask, shift, reg) \ |
48 | | - ((((reg) & STM32_MCO_CFGR_REG_MASK) << STM32_MCO_CFGR_REG_SHIFT) | \ |
49 | | - (((shift) & STM32_MCO_CFGR_SHIFT_MASK) << STM32_MCO_CFGR_SHIFT_SHIFT) | \ |
50 | | - (((mask) & STM32_MCO_CFGR_MASK_MASK) << STM32_MCO_CFGR_MASK_SHIFT) | \ |
51 | | - (((val) & STM32_MCO_CFGR_VAL_MASK) << STM32_MCO_CFGR_VAL_SHIFT)) |
| 46 | +#define STM32_DT_CLOCK_SELECT(val, mask, shift, reg) \ |
| 47 | + ((((reg) & STM32_DT_CLKSEL_REG_MASK) << STM32_DT_CLKSEL_REG_SHIFT) | \ |
| 48 | + (((shift) & STM32_DT_CLKSEL_SHIFT_MASK) << STM32_DT_CLKSEL_SHIFT_SHIFT) | \ |
| 49 | + (((mask) & STM32_DT_CLKSEL_MASK_MASK) << STM32_DT_CLKSEL_MASK_SHIFT) | \ |
| 50 | + (((val) & STM32_DT_CLKSEL_VAL_MASK) << STM32_DT_CLKSEL_VAL_SHIFT)) |
| 51 | + |
| 52 | +/* STM32_CLOCK_* macros, defined for convenience */ |
| 53 | +#define STM32_CLOCK_REG_MASK STM32_DT_CLKSEL_REG_MASK |
| 54 | +#define STM32_CLOCK_REG_SHIFT STM32_DT_CLKSEL_REG_SHIFT |
| 55 | +#define STM32_CLOCK_SHIFT_MASK STM32_DT_CLKSEL_SHIFT_MASK |
| 56 | +#define STM32_CLOCK_SHIFT_SHIFT STM32_DT_CLKSEL_SHIFT_SHIFT |
| 57 | +#define STM32_CLOCK_MASK_MASK STM32_DT_CLKSEL_MASK_MASK |
| 58 | +#define STM32_CLOCK_MASK_SHIFT STM32_DT_CLKSEL_MASK_SHIFT |
| 59 | +#define STM32_CLOCK_VAL_MASK STM32_DT_CLKSEL_VAL_MASK |
| 60 | +#define STM32_CLOCK_VAL_SHIFT STM32_DT_CLKSEL_VAL_SHIFT |
| 61 | +#define STM32_DOMAIN_CLOCK(val, mask, shift, reg) \ |
| 62 | + STM32_DT_CLOCK_SELECT((val), (mask), (shift), (reg)) |
| 63 | + |
| 64 | +/* STM32_MCO_CFGR_* macros, defined for convenience */ |
| 65 | +#define STM32_MCO_CFGR_REG_MASK STM32_DT_CLKSEL_REG_MASK |
| 66 | +#define STM32_MCO_CFGR_REG_SHIFT STM32_DT_CLKSEL_REG_SHIFT |
| 67 | +#define STM32_MCO_CFGR_SHIFT_MASK STM32_DT_CLKSEL_SHIFT_MASK |
| 68 | +#define STM32_MCO_CFGR_SHIFT_SHIFT STM32_DT_CLKSEL_SHIFT_SHIFT |
| 69 | +#define STM32_MCO_CFGR_MASK_MASK STM32_DT_CLKSEL_MASK_MASK |
| 70 | +#define STM32_MCO_CFGR_MASK_SHIFT STM32_DT_CLKSEL_MASK_SHIFT |
| 71 | +#define STM32_MCO_CFGR_VAL_MASK STM32_DT_CLKSEL_VAL_MASK |
| 72 | +#define STM32_MCO_CFGR_VAL_SHIFT STM32_DT_CLKSEL_VAL_SHIFT |
| 73 | +#define STM32_MCO_CFGR(val, mask, shift, reg) \ |
| 74 | + STM32_DT_CLOCK_SELECT((val), (mask), (shift), (reg)) |
52 | 75 |
|
53 | 76 | /** |
54 | 77 | * Pack RCC clock register offset and bit in two 32-bit values |
|
0 commit comments