1 /* 2 * Copyright (c) 2020 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 _ATMEL_SAM4L_SOC_H_ 11 #define _ATMEL_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_PART_NUMBER_SAM4LS8C) 20 #include <sam4ls8c.h> 21 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS8B) 22 #include <sam4ls8b.h> 23 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS8A) 24 #include <sam4ls8a.h> 25 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS4C) 26 #include <sam4ls4c.h> 27 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS4B) 28 #include <sam4ls4b.h> 29 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS4A) 30 #include <sam4ls4a.h> 31 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS2C) 32 #include <sam4ls2c.h> 33 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS2B) 34 #include <sam4ls2b.h> 35 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LS2A) 36 #include <sam4ls2a.h> 37 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC8C) 38 #include <sam4lc8c.h> 39 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC8B) 40 #include <sam4lc8b.h> 41 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC8A) 42 #include <sam4lc8a.h> 43 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC4C) 44 #include <sam4lc4c.h> 45 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC4B) 46 #include <sam4lc4b.h> 47 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC4A) 48 #include <sam4lc4a.h> 49 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC2C) 50 #include <sam4lc2c.h> 51 #elif defined(CONFIG_SOC_PART_NUMBER_SAM4LC2B) 52 #include <sam4lc2b.h> 53 #elif defined(CONFIG_SOC_PART_NUMBER_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 /** Oscillator identifiers 70 * External Oscillator 0 71 * External 32 kHz oscillator 72 * Internal 32 kHz RC oscillator 73 * Internal 80 MHz RC oscillator 74 * Internal 4-8-12 MHz RCFAST oscillator 75 * Internal 1 MHz RC oscillator 76 * Internal System RC oscillator 77 */ 78 #define OSC_ID_OSC0 0 79 #define OSC_ID_OSC32 1 80 #define OSC_ID_RC32K 2 81 #define OSC_ID_RC80M 3 82 #define OSC_ID_RCFAST 4 83 #define OSC_ID_RC1M 5 84 #define OSC_ID_RCSYS 6 85 86 /** System clock source 87 * System RC oscillator 88 * Oscillator 0 89 * Phase Locked Loop 0 90 * Digital Frequency Locked Loop 91 * 80 MHz RC oscillator 92 * 4-8-12 MHz RC oscillator 93 * 1 MHz RC oscillator 94 */ 95 #define OSC_SRC_RCSYS 0 96 #define OSC_SRC_OSC0 1 97 #define OSC_SRC_PLL0 2 98 #define OSC_SRC_DFLL 3 99 #define OSC_SRC_RC80M 4 100 #define OSC_SRC_RCFAST 5 101 #define OSC_SRC_RC1M 6 102 103 #define PM_CLOCK_MASK(bus, per) ((bus << 5) + per) 104 105 /** Bus index of maskable module clocks. Peripheral ids are defined out of 106 * order. It start from PBA up to PBD, then move to HSB, and finally CPU. 107 */ 108 #define PM_CLK_GRP_CPU 5 109 #define PM_CLK_GRP_HSB 4 110 #define PM_CLK_GRP_PBA 0 111 #define PM_CLK_GRP_PBB 1 112 #define PM_CLK_GRP_PBC 2 113 #define PM_CLK_GRP_PBD 3 114 115 /** Clocks derived from the CPU clock 116 */ 117 #define SYSCLK_OCD 0 118 119 /** Clocks derived from the HSB clock 120 */ 121 #define SYSCLK_PDCA_HSB 0 122 #define SYSCLK_HFLASHC_DATA 1 123 #define SYSCLK_HRAMC1_DATA 2 124 #define SYSCLK_USBC_DATA 3 125 #define SYSCLK_CRCCU_DATA 4 126 #define SYSCLK_PBA_BRIDGE 5 127 #define SYSCLK_PBB_BRIDGE 6 128 #define SYSCLK_PBC_BRIDGE 7 129 #define SYSCLK_PBD_BRIDGE 8 130 #define SYSCLK_AESA_HSB 9 131 132 /** Clocks derived from the PBA clock 133 */ 134 #define SYSCLK_IISC 0 135 #define SYSCLK_SPI 1 136 #define SYSCLK_TC0 2 137 #define SYSCLK_TC1 3 138 #define SYSCLK_TWIM0 4 139 #define SYSCLK_TWIS0 5 140 #define SYSCLK_TWIM1 6 141 #define SYSCLK_TWIS1 7 142 #define SYSCLK_USART0 8 143 #define SYSCLK_USART1 9 144 #define SYSCLK_USART2 10 145 #define SYSCLK_USART3 11 146 #define SYSCLK_ADCIFE 12 147 #define SYSCLK_DACC 13 148 #define SYSCLK_ACIFC 14 149 #define SYSCLK_GLOC 15 150 #define SYSCLK_ABDACB 16 151 #define SYSCLK_TRNG 17 152 #define SYSCLK_PARC 18 153 #define SYSCLK_CATB 19 154 #define SYSCLK_TWIM2 21 155 #define SYSCLK_TWIM3 22 156 #define SYSCLK_LCDCA 23 157 158 /** Clocks derived from the PBB clock 159 */ 160 #define SYSCLK_HFLASHC_REGS 0 161 #define SYSCLK_HRAMC1_REGS 1 162 #define SYSCLK_HMATRIX 2 163 #define SYSCLK_PDCA_PB 3 164 #define SYSCLK_CRCCU_REGS 4 165 #define SYSCLK_USBC_REGS 5 166 #define SYSCLK_PEVC 6 167 168 /** Clocks derived from the PBC clock 169 */ 170 #define SYSCLK_PM 0 171 #define SYSCLK_CHIPID 1 172 #define SYSCLK_SCIF 2 173 #define SYSCLK_FREQM 3 174 #define SYSCLK_GPIO 4 175 176 /** Clocks derived from the PBD clock 177 */ 178 #define SYSCLK_BPM 0 179 #define SYSCLK_BSCIF 1 180 #define SYSCLK_AST 2 181 #define SYSCLK_WDT 3 182 #define SYSCLK_EIC 4 183 #define SYSCLK_PICOUART 5 184 185 /** Divided clock mask derived from the PBA clock 186 */ 187 #define PBA_DIVMASK_TIMER_CLOCK2 (1u << 0) 188 #define PBA_DIVMASK_TIMER_CLOCK3 (1u << 2) 189 #define PBA_DIVMASK_CLK_USART (1u << 2) 190 #define PBA_DIVMASK_TIMER_CLOCK4 (1u << 4) 191 #define PBA_DIVMASK_TIMER_CLOCK5 (1u << 6) 192 #define PBA_DIVMASK_Msk (0x7Fu << 0) 193 194 /** Generic Clock Instances 195 * 0- DFLLIF main reference and GCLK0 pin (CLK_DFLLIF_REF) 196 * 1- DFLLIF dithering and SSG reference and GCLK1 pin (CLK_DFLLIF_DITHER) 197 * 2- AST and GCLK2 pin 198 * 3- CATB and GCLK3 pin 199 * 4- AESA 200 * 5- GLOC, TC0 and RC32KIFB_REF 201 * 6- ABDACB and IISC 202 * 7- USBC 203 * 8- TC1 and PEVC[0] 204 * 9- PLL0 and PEVC[1] 205 * 10- ADCIFE 206 * 11- Master generic clock. Can be used as source for other generic clocks. 207 */ 208 #define GEN_CLK_DFLL_REF 0 209 #define GEN_CLK_DFLL_DITHER 1 210 #define GEN_CLK_AST 2 211 #define GEN_CLK_CATB 3 212 #define GEN_CLK_AESA 4 213 #define GEN_CLK_GLOC 5 214 #define GEN_CLK_ABDACB 6 215 #define GEN_CLK_USBC 7 216 #define GEN_CLK_TC1_PEVC0 8 217 #define GEN_CLK_PLL0_PEVC1 9 218 #define GEN_CLK_ADCIFE 10 219 #define GEN_CLK_MASTER_GEN 11 220 221 #endif /* !_ASMLANGUAGE */ 222 223 #endif /* _ATMEL_SAM4L_SOC_H_ */ 224