1 /* 2 * Copyright (c) 2020-2025 Gerson Fernando Budke <nandojve@gmail.com> 3 * SPDX-License-Identifier: Apache-2.0 4 */ 5 6 /** 7 * @file SoC configuration macros for the Atmel SAM4L family processors. 8 */ 9 10 #ifndef _SOC_ATMEL_SAM_SAM4L_SOC_H_ 11 #define _SOC_ATMEL_SAM_SAM4L_SOC_H_ 12 13 #ifndef _ASMLANGUAGE 14 15 #define DONT_USE_CMSIS_INIT 16 #define DONT_USE_PREDEFINED_CORE_HANDLERS 17 #define DONT_USE_PREDEFINED_PERIPHERALS_HANDLERS 18 19 #if defined(CONFIG_SOC_SAM4LS8C) 20 #include <sam4ls8c.h> 21 #elif defined(CONFIG_SOC_SAM4LS8B) 22 #include <sam4ls8b.h> 23 #elif defined(CONFIG_SOC_SAM4LS8A) 24 #include <sam4ls8a.h> 25 #elif defined(CONFIG_SOC_SAM4LS4C) 26 #include <sam4ls4c.h> 27 #elif defined(CONFIG_SOC_SAM4LS4B) 28 #include <sam4ls4b.h> 29 #elif defined(CONFIG_SOC_SAM4LS4A) 30 #include <sam4ls4a.h> 31 #elif defined(CONFIG_SOC_SAM4LS2C) 32 #include <sam4ls2c.h> 33 #elif defined(CONFIG_SOC_SAM4LS2B) 34 #include <sam4ls2b.h> 35 #elif defined(CONFIG_SOC_SAM4LS2A) 36 #include <sam4ls2a.h> 37 #elif defined(CONFIG_SOC_SAM4LC8C) 38 #include <sam4lc8c.h> 39 #elif defined(CONFIG_SOC_SAM4LC8B) 40 #include <sam4lc8b.h> 41 #elif defined(CONFIG_SOC_SAM4LC8A) 42 #include <sam4lc8a.h> 43 #elif defined(CONFIG_SOC_SAM4LC4C) 44 #include <sam4lc4c.h> 45 #elif defined(CONFIG_SOC_SAM4LC4B) 46 #include <sam4lc4b.h> 47 #elif defined(CONFIG_SOC_SAM4LC4A) 48 #include <sam4lc4a.h> 49 #elif defined(CONFIG_SOC_SAM4LC2C) 50 #include <sam4lc2c.h> 51 #elif defined(CONFIG_SOC_SAM4LC2B) 52 #include <sam4lc2b.h> 53 #elif defined(CONFIG_SOC_SAM4LC2A) 54 #include <sam4lc2a.h> 55 #else 56 #error Library does not support the specified device. 57 #endif 58 59 #include "../common/soc_pmc.h" 60 #include "../common/soc_gpio.h" 61 #include "../common/atmel_sam_dt.h" 62 63 /** Processor Clock (HCLK) Frequency */ 64 #define SOC_ATMEL_SAM_HCLK_FREQ_HZ ATMEL_SAM_DT_CPU_CLK_FREQ_HZ 65 66 /** Master Clock (MCK) Frequency */ 67 #define SOC_ATMEL_SAM_MCK_FREQ_HZ SOC_ATMEL_SAM_HCLK_FREQ_HZ 68 69 #define SOC_ATMEL_SAM_RCSYS_NOMINAL_HZ 115000 70 #define SOC_ATMEL_SAM_RC32K_NOMINAL_HZ 32768 71 72 /** Oscillator identifiers 73 * External Oscillator 0 74 * External 32 kHz oscillator 75 * Internal 32 kHz RC oscillator 76 * Internal 80 MHz RC oscillator 77 * Internal 4-8-12 MHz RCFAST oscillator 78 * Internal 1 MHz RC oscillator 79 * Internal System RC oscillator 80 */ 81 #define OSC_ID_OSC0 0 82 #define OSC_ID_OSC32 1 83 #define OSC_ID_RC32K 2 84 #define OSC_ID_RC80M 3 85 #define OSC_ID_RCFAST 4 86 #define OSC_ID_RC1M 5 87 #define OSC_ID_RCSYS 6 88 89 /** System clock source 90 * System RC oscillator 91 * Oscillator 0 92 * Phase Locked Loop 0 93 * Digital Frequency Locked Loop 94 * 80 MHz RC oscillator 95 * 4-8-12 MHz RC oscillator 96 * 1 MHz RC oscillator 97 */ 98 #define OSC_SRC_RCSYS 0 99 #define OSC_SRC_OSC0 1 100 #define OSC_SRC_PLL0 2 101 #define OSC_SRC_DFLL 3 102 #define OSC_SRC_RC80M 4 103 #define OSC_SRC_RCFAST 5 104 #define OSC_SRC_RC1M 6 105 106 #define PM_CLOCK_MASK(bus, per) ((bus << 5) + per) 107 108 /** Bus index of maskable module clocks. Peripheral ids are defined out of 109 * order. It start from PBA up to PBD, then move to HSB, and finally CPU. 110 */ 111 #define PM_CLK_GRP_CPU 5 112 #define PM_CLK_GRP_HSB 4 113 #define PM_CLK_GRP_PBA 0 114 #define PM_CLK_GRP_PBB 1 115 #define PM_CLK_GRP_PBC 2 116 #define PM_CLK_GRP_PBD 3 117 118 /** Clocks derived from the CPU clock 119 */ 120 #define SYSCLK_OCD 0 121 122 /** Clocks derived from the HSB clock 123 */ 124 #define SYSCLK_PDCA_HSB 0 125 #define SYSCLK_HFLASHC_DATA 1 126 #define SYSCLK_HRAMC1_DATA 2 127 #define SYSCLK_USBC_DATA 3 128 #define SYSCLK_CRCCU_DATA 4 129 #define SYSCLK_PBA_BRIDGE 5 130 #define SYSCLK_PBB_BRIDGE 6 131 #define SYSCLK_PBC_BRIDGE 7 132 #define SYSCLK_PBD_BRIDGE 8 133 #define SYSCLK_AESA_HSB 9 134 135 /** Clocks derived from the PBA clock 136 */ 137 #define SYSCLK_IISC 0 138 #define SYSCLK_SPI 1 139 #define SYSCLK_TC0 2 140 #define SYSCLK_TC1 3 141 #define SYSCLK_TWIM0 4 142 #define SYSCLK_TWIS0 5 143 #define SYSCLK_TWIM1 6 144 #define SYSCLK_TWIS1 7 145 #define SYSCLK_USART0 8 146 #define SYSCLK_USART1 9 147 #define SYSCLK_USART2 10 148 #define SYSCLK_USART3 11 149 #define SYSCLK_ADCIFE 12 150 #define SYSCLK_DACC 13 151 #define SYSCLK_ACIFC 14 152 #define SYSCLK_GLOC 15 153 #define SYSCLK_ABDACB 16 154 #define SYSCLK_TRNG 17 155 #define SYSCLK_PARC 18 156 #define SYSCLK_CATB 19 157 #define SYSCLK_TWIM2 21 158 #define SYSCLK_TWIM3 22 159 #define SYSCLK_LCDCA 23 160 161 /** Clocks derived from the PBB clock 162 */ 163 #define SYSCLK_HFLASHC_REGS 0 164 #define SYSCLK_HRAMC1_REGS 1 165 #define SYSCLK_HMATRIX 2 166 #define SYSCLK_PDCA_PB 3 167 #define SYSCLK_CRCCU_REGS 4 168 #define SYSCLK_USBC_REGS 5 169 #define SYSCLK_PEVC 6 170 171 /** Clocks derived from the PBC clock 172 */ 173 #define SYSCLK_PM 0 174 #define SYSCLK_CHIPID 1 175 #define SYSCLK_SCIF 2 176 #define SYSCLK_FREQM 3 177 #define SYSCLK_GPIO 4 178 179 /** Clocks derived from the PBD clock 180 */ 181 #define SYSCLK_BPM 0 182 #define SYSCLK_BSCIF 1 183 #define SYSCLK_AST 2 184 #define SYSCLK_WDT 3 185 #define SYSCLK_EIC 4 186 #define SYSCLK_PICOUART 5 187 188 /** Divided clock mask derived from the PBA clock 189 */ 190 #define PBA_DIVMASK_TIMER_CLOCK2 (1u << 0) 191 #define PBA_DIVMASK_TIMER_CLOCK3 (1u << 2) 192 #define PBA_DIVMASK_CLK_USART (1u << 2) 193 #define PBA_DIVMASK_TIMER_CLOCK4 (1u << 4) 194 #define PBA_DIVMASK_TIMER_CLOCK5 (1u << 6) 195 #define PBA_DIVMASK_Msk (0x7Fu << 0) 196 197 /** Generic Clock Instances 198 * 0- DFLLIF main reference and GCLK0 pin (CLK_DFLLIF_REF) 199 * 1- DFLLIF dithering and SSG reference and GCLK1 pin (CLK_DFLLIF_DITHER) 200 * 2- AST and GCLK2 pin 201 * 3- CATB and GCLK3 pin 202 * 4- AESA 203 * 5- GLOC, TC0 and RC32KIFB_REF 204 * 6- ABDACB and IISC 205 * 7- USBC 206 * 8- TC1 and PEVC[0] 207 * 9- PLL0 and PEVC[1] 208 * 10- ADCIFE 209 * 11- Master generic clock. Can be used as source for other generic clocks. 210 */ 211 #define GEN_CLK_DFLL_REF 0 212 #define GEN_CLK_DFLL_DITHER 1 213 #define GEN_CLK_AST 2 214 #define GEN_CLK_CATB 3 215 #define GEN_CLK_AESA 4 216 #define GEN_CLK_TC0_GLOC_RC32 5 217 #define GEN_CLK_ABDACB 6 218 #define GEN_CLK_USBC 7 219 #define GEN_CLK_TC1_PEVC0 8 220 #define GEN_CLK_PLL0_PEVC1 9 221 #define GEN_CLK_ADCIFE 10 222 #define GEN_CLK_MASTER_GEN 11 223 224 /** 225 * 0- System RC oscillator 226 * 1- 32 kHz oscillator 227 * 2- DFLL 228 * 3- Oscillator 0 229 * 4- 80 MHz RC oscillator 230 * 5- 4-8-12 MHz RC oscillator 231 * 6- 1 MHz RC oscillator 232 * 7- CPU clock 233 * 8- High Speed Bus clock 234 * 9- Peripheral Bus A clock 235 * 10- Peripheral Bus B clock 236 * 11- Peripheral Bus C clock 237 * 12- Peripheral Bus D clock 238 * 13- 32 kHz RC oscillator 239 * 15- 1 kHz output from OSC32K 240 * 16- PLL0 241 * 17- High resolution prescaler 242 * 18- Fractional prescaler 243 * 19- GCLKIN0 244 * 20- GCLKIN1 245 * 21- GCLK11 246 */ 247 248 #define GEN_CLK_SRC_RCSYS 0 249 #define GEN_CLK_SRC_OSC32K 1 250 #define GEN_CLK_SRC_DFLL 2 251 #define GEN_CLK_SRC_OSC0 3 252 #define GEN_CLK_SRC_RC80M 4 253 #define GEN_CLK_SRC_RCFAST 5 254 #define GEN_CLK_SRC_RC1M 6 255 #define GEN_CLK_SRC_CLK_CPU 7 256 #define GEN_CLK_SRC_CLK_HSB 8 257 #define GEN_CLK_SRC_CLK_PBA 9 258 #define GEN_CLK_SRC_CLK_PBB 10 259 #define GEN_CLK_SRC_CLK_PBC 11 260 #define GEN_CLK_SRC_CLK_PBD 12 261 #define GEN_CLK_SRC_RC32K 13 262 #define GEN_CLK_SRC_CLK_1K 15 263 #define GEN_CLK_SRC_PLL0 16 264 #define GEN_CLK_SRC_HRPCLK 17 265 #define GEN_CLK_SRC_FPCLK 18 266 #define GEN_CLK_SRC_GCLKIN0 19 267 #define GEN_CLK_SRC_GCLKIN1 20 268 #define GEN_CLK_SRC_GCLK11 21 269 270 #endif /* !_ASMLANGUAGE */ 271 272 #endif /* _SOC_ATMEL_SAM_SAM4L_SOC_H_ */ 273