EFM32 Giant Gecko Software Documentation  efm32gg-doc-4.2.1
em_system.h
Go to the documentation of this file.
1 /***************************************************************************/
33 #ifndef __SILICON_LABS_EM_SYSTEM_H__
34 #define __SILICON_LABS_EM_SYSTEM_H__
35 
36 #include <stdbool.h>
37 #include "em_device.h"
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 /***************************************************************************/
48 /***************************************************************************/
53 /*******************************************************************************
54  ******************************** ENUMS ************************************
55  ******************************************************************************/
56 
58 typedef enum
59 {
60 /* New style family #defines */
61 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32G)
63 #endif
64 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32GG)
66 #endif
67 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32TG)
69 #endif
70 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32LG)
72 #endif
73 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32WG)
75 #endif
76 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32ZG)
78 #endif
79 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32HG)
81 #endif
82 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32PG1B)
83  systemPartFamilyEfm32Pearl1B = _DEVINFO_PART_DEVICE_FAMILY_EFM32PG1B,
84 #endif
85 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFM32JG1B)
86  systemPartFamilyEfm32Jade1B = _DEVINFO_PART_DEVICE_FAMILY_EFM32JG1B,
87 #endif
88 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EZR32WG)
90 #endif
91 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EZR32LG)
93 #endif
94 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EZR32HG)
96 #endif
97 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32MG1P)
98  systemPartFamilyMighty1P = _DEVINFO_PART_DEVICE_FAMILY_EFR32MG1P,
99 #endif
100 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32MG1B)
101  systemPartFamilyMighty1B = _DEVINFO_PART_DEVICE_FAMILY_EFR32MG1B,
102 #endif
103 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32MG1V)
104  systemPartFamilyMighty1V = _DEVINFO_PART_DEVICE_FAMILY_EFR32MG1V,
105 #endif
106 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32BG1P)
107  systemPartFamilyBlue1P = _DEVINFO_PART_DEVICE_FAMILY_EFR32BG1P,
108 #endif
109 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32BG1B)
110  systemPartFamilyBlue1B = _DEVINFO_PART_DEVICE_FAMILY_EFR32BG1B,
111 #endif
112 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32BG1V)
113  systemPartFamilyBlue1V = _DEVINFO_PART_DEVICE_FAMILY_EFR32BG1V,
114 #endif
115 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32SG1P)
116  systemPartFamilySnappy1P = _DEVINFO_PART_DEVICE_FAMILY_EFR32SG1P,
117 #endif
118 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32SG1B)
119  systemPartFamilySnappy1B = _DEVINFO_PART_DEVICE_FAMILY_EFR32SG1B,
120 #endif
121 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32SG1V)
122  systemPartFamilySnappy1V = _DEVINFO_PART_DEVICE_FAMILY_EFR32SG1V,
123 #endif
124 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32FG1P)
125  systemPartFamilyFlex1P = _DEVINFO_PART_DEVICE_FAMILY_EFR32FG1P,
126 #endif
127 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32FG1B)
128  systemPartFamilyFlex1B = _DEVINFO_PART_DEVICE_FAMILY_EFR32FG1B,
129 #endif
130 #if defined(_DEVINFO_PART_DEVICE_FAMILY_EFR32FG1V)
131  systemPartFamilyFlex1V = _DEVINFO_PART_DEVICE_FAMILY_EFR32FG1V,
132 #endif
133 /* Legacy family #defines */
134 #if defined(_DEVINFO_PART_DEVICE_FAMILY_G)
136 #endif
137 #if defined(_DEVINFO_PART_DEVICE_FAMILY_GG)
139 #endif
140 #if defined(_DEVINFO_PART_DEVICE_FAMILY_TG)
142 #endif
143 #if defined(_DEVINFO_PART_DEVICE_FAMILY_LG)
145 #endif
146 #if defined(_DEVINFO_PART_DEVICE_FAMILY_WG)
148 #endif
149 #if defined(_DEVINFO_PART_DEVICE_FAMILY_ZG)
151 #endif
152 #if defined(_DEVINFO_PART_DEVICE_FAMILY_HG)
154 #endif
159 
160 
161 /*******************************************************************************
162  ******************************* STRUCTS ***********************************
163  ******************************************************************************/
164 
166 typedef struct
167 {
168  uint8_t minor;
169  uint8_t major;
170  uint8_t family;
172 
173 #if defined(__FPU_PRESENT) && (__FPU_PRESENT == 1)
174 
175 typedef enum
176 {
177  fpuAccessDenied = (0x0 << 20),
178  fpuAccessPrivilegedOnly = (0x5 << 20),
179  fpuAccessReserved = (0xA << 20),
180  fpuAccessFull = (0xF << 20)
181 } SYSTEM_FpuAccess_TypeDef;
182 #endif
183 
184 /*******************************************************************************
185  ***************************** PROTOTYPES **********************************
186  ******************************************************************************/
187 
189 uint32_t SYSTEM_GetCalibrationValue(volatile uint32_t *regAddress);
190 
191 #if defined(__FPU_PRESENT) && (__FPU_PRESENT == 1)
192 /***************************************************************************/
200 __STATIC_INLINE void SYSTEM_FpuAccessModeSet(SYSTEM_FpuAccess_TypeDef accessMode)
201 {
202  SCB->CPACR = (SCB->CPACR & ~(0xF << 20)) | accessMode;
203 }
204 #endif
205 
206 /***************************************************************************/
213 __STATIC_INLINE uint64_t SYSTEM_GetUnique(void)
214 {
215  return (uint64_t)((uint64_t)DEVINFO->UNIQUEH << 32) | (uint64_t)DEVINFO->UNIQUEL;
216 }
217 
218 /***************************************************************************/
225 __STATIC_INLINE uint8_t SYSTEM_GetProdRev(void)
226 {
227  return (DEVINFO->PART & _DEVINFO_PART_PROD_REV_MASK)
229 }
230 
231 /***************************************************************************/
243 __STATIC_INLINE uint16_t SYSTEM_GetSRAMSize(void)
244 {
245 #if defined(_EFM32_GECKO_FAMILY)
246  /* Early Gecko devices had a bug where SRAM and Flash size were swapped. */
247  if (SYSTEM_GetProdRev() < 5)
248  {
249  return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
251  }
252 #endif
253  return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
255 }
256 
257 /***************************************************************************/
269 __STATIC_INLINE uint16_t SYSTEM_GetFlashSize(void)
270 {
271 #if defined(_EFM32_GECKO_FAMILY)
272  /* Early Gecko devices had a bug where SRAM and Flash size were swapped. */
273  if (SYSTEM_GetProdRev() < 5)
274  {
275  return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
277  }
278 #endif
279  return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
281 }
282 
283 
284 /***************************************************************************/
296 __STATIC_INLINE uint32_t SYSTEM_GetFlashPageSize(void)
297 {
298  uint32_t tmp;
299 
300 #if defined(_EFM32_GIANT_FAMILY)
301  if (SYSTEM_GetProdRev() < 18)
302  {
303  /* Early Giant/Leopard devices did not have MEMINFO in DEVINFO. */
304  return FLASH_PAGE_SIZE;
305  }
306 #elif defined(_EFM32_ZERO_FAMILY)
307  if (SYSTEM_GetProdRev() < 24)
308  {
309  /* Early Zero devices have an incorrect DEVINFO flash page size */
310  return FLASH_PAGE_SIZE;
311  }
312 #endif
313 
316 
317  return 1 << ((tmp + 10) & 0xFF);
318 }
319 
320 
321 #if defined( _DEVINFO_DEVINFOREV_DEVINFOREV_MASK )
322 /***************************************************************************/
329 __STATIC_INLINE uint8_t SYSTEM_GetDevinfoRev(void)
330 {
331  return (DEVINFO->DEVINFOREV & _DEVINFO_DEVINFOREV_DEVINFOREV_MASK)
332  >> _DEVINFO_DEVINFOREV_DEVINFOREV_SHIFT;
333 }
334 #endif
335 
336 
337 /***************************************************************************/
344 __STATIC_INLINE uint16_t SYSTEM_GetPartNumber(void)
345 {
348 }
349 
350 /***************************************************************************/
365 {
369 }
370 
371 
372 /***************************************************************************/
379 __STATIC_INLINE uint8_t SYSTEM_GetCalibrationTemperature(void)
380 {
381  return (DEVINFO->CAL & _DEVINFO_CAL_TEMP_MASK)
383 }
384 
388 #ifdef __cplusplus
389 }
390 #endif
391 
392 #endif /* __SILICON_LABS_EM_SYSTEM_H__ */
#define _DEVINFO_PART_DEVICE_FAMILY_EZR32LG
#define _DEVINFO_CAL_TEMP_SHIFT
#define _DEVINFO_PART_DEVICE_FAMILY_HG
#define _DEVINFO_PART_DEVICE_NUMBER_SHIFT
#define _DEVINFO_MSIZE_SRAM_SHIFT
void SYSTEM_ChipRevisionGet(SYSTEM_ChipRevision_TypeDef *rev)
Get chip major/minor revision.
Definition: em_system.c:58
#define FLASH_PAGE_SIZE
#define _DEVINFO_PART_DEVICE_FAMILY_SHIFT
#define _DEVINFO_CAL_TEMP_MASK
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
#define _DEVINFO_PART_DEVICE_FAMILY_EFM32ZG
#define _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_MASK
#define _DEVINFO_PART_DEVICE_FAMILY_MASK
#define _DEVINFO_PART_DEVICE_FAMILY_EFM32G
uint32_t SYSTEM_GetCalibrationValue(volatile uint32_t *regAddress)
Get factory calibration value for a given peripheral register.
Definition: em_system.c:92
#define _DEVINFO_MSIZE_SRAM_MASK
#define _DEVINFO_PART_DEVICE_FAMILY_EZR32HG
__STATIC_INLINE uint8_t SYSTEM_GetProdRev(void)
Get the production revision for this part.
Definition: em_system.h:225
__STATIC_INLINE SYSTEM_PartFamily_TypeDef SYSTEM_GetFamily(void)
Get family identifier of the MCU.
Definition: em_system.h:364
#define _DEVINFO_PART_DEVICE_FAMILY_ZG
#define _DEVINFO_PART_DEVICE_FAMILY_EFM32GG
#define _DEVINFO_PART_DEVICE_FAMILY_EFM32LG
#define _DEVINFO_PART_PROD_REV_SHIFT
#define _DEVINFO_PART_DEVICE_FAMILY_WG
#define _DEVINFO_PART_PROD_REV_MASK
#define DEVINFO
#define _DEVINFO_PART_DEVICE_FAMILY_G
#define _DEVINFO_MSIZE_FLASH_SHIFT
#define _DEVINFO_PART_DEVICE_FAMILY_GG
#define _DEVINFO_PART_DEVICE_FAMILY_EZR32WG
__STATIC_INLINE uint16_t SYSTEM_GetSRAMSize(void)
Get the SRAM size (in KB).
Definition: em_system.h:243
__STATIC_INLINE uint16_t SYSTEM_GetPartNumber(void)
Get part number of the MCU.
Definition: em_system.h:344
#define _DEVINFO_PART_DEVICE_FAMILY_LG
#define _DEVINFO_PART_DEVICE_FAMILY_EFM32TG
#define _DEVINFO_MSIZE_FLASH_MASK
#define _DEVINFO_PART_DEVICE_FAMILY_EFM32HG
#define _DEVINFO_PART_DEVICE_FAMILY_EFM32WG
__STATIC_INLINE uint16_t SYSTEM_GetFlashSize(void)
Get the flash size (in KB).
Definition: em_system.h:269
__STATIC_INLINE uint32_t SYSTEM_GetFlashPageSize(void)
Get the flash page size in bytes.
Definition: em_system.h:296
__STATIC_INLINE uint8_t SYSTEM_GetCalibrationTemperature(void)
Get the calibration temperature (in degrees Celsius).
Definition: em_system.h:379
#define _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_SHIFT
#define _DEVINFO_PART_DEVICE_NUMBER_MASK
__STATIC_INLINE uint64_t SYSTEM_GetUnique(void)
Get the unique number for this part.
Definition: em_system.h:213
SYSTEM_PartFamily_TypeDef
Definition: em_system.h:58
#define _DEVINFO_PART_DEVICE_FAMILY_TG