em_system.h
Go to the documentation of this file.00001
00034 #ifndef __SILICON_LABS_EM_SYSTEM_H_
00035 #define __SILICON_LABS_EM_SYSTEM_H_
00036
00037 #include <stdbool.h>
00038 #include "em_device.h"
00039
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043
00044
00049
00054
00055
00056
00057
00059 typedef enum
00060 {
00061
00062 #if defined ( _DEVINFO_PART_DEVICE_FAMILY_EFM32G )
00063 systemPartFamilyEfm32Gecko = _DEVINFO_PART_DEVICE_FAMILY_EFM32G,
00064 #endif
00065 #if defined ( _DEVINFO_PART_DEVICE_FAMILY_EFM32GG )
00066 systemPartFamilyEfm32Giant = _DEVINFO_PART_DEVICE_FAMILY_EFM32GG,
00067 #endif
00068 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EFM32TG )
00069 systemPartFamilyEfm32Tiny = _DEVINFO_PART_DEVICE_FAMILY_EFM32TG,
00070 #endif
00071 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EFM32LG )
00072 systemPartFamilyEfm32Leopard = _DEVINFO_PART_DEVICE_FAMILY_EFM32LG,
00073 #endif
00074 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EFM32WG )
00075 systemPartFamilyEfm32Wonder = _DEVINFO_PART_DEVICE_FAMILY_EFM32WG,
00076 #endif
00077 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EFM32ZG )
00078 systemPartFamilyEfm32Zero = _DEVINFO_PART_DEVICE_FAMILY_EFM32ZG,
00079 #endif
00080 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EFM32HG )
00081 systemPartFamilyEfm32Happy = _DEVINFO_PART_DEVICE_FAMILY_EFM32HG,
00082 #endif
00083 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EZR32WG )
00084 systemPartFamilyEzr32Wonder = _DEVINFO_PART_DEVICE_FAMILY_EZR32WG,
00085 #endif
00086 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EZR32LG )
00087 systemPartFamilyEzr32Leopard = _DEVINFO_PART_DEVICE_FAMILY_EZR32LG,
00088 #endif
00089
00090 #if defined( _DEVINFO_PART_DEVICE_FAMILY_G )
00091 systemPartFamilyGecko = _DEVINFO_PART_DEVICE_FAMILY_G,
00092 #endif
00093 #if defined( _DEVINFO_PART_DEVICE_FAMILY_GG )
00094 systemPartFamilyGiant = _DEVINFO_PART_DEVICE_FAMILY_GG,
00095 #endif
00096 #if defined( _DEVINFO_PART_DEVICE_FAMILY_TG )
00097 systemPartFamilyTiny = _DEVINFO_PART_DEVICE_FAMILY_TG,
00098 #endif
00099 #if defined( _DEVINFO_PART_DEVICE_FAMILY_LG )
00100 systemPartFamilyLeopard = _DEVINFO_PART_DEVICE_FAMILY_LG,
00101 #endif
00102 #if defined( _DEVINFO_PART_DEVICE_FAMILY_WG )
00103 systemPartFamilyWonder = _DEVINFO_PART_DEVICE_FAMILY_WG,
00104 #endif
00105 #if defined( _DEVINFO_PART_DEVICE_FAMILY_ZG )
00106 systemPartFamilyZero = _DEVINFO_PART_DEVICE_FAMILY_ZG,
00107 #endif
00108 #if defined( _DEVINFO_PART_DEVICE_FAMILY_HG )
00109 systemPartFamilyHappy = _DEVINFO_PART_DEVICE_FAMILY_HG,
00110 #endif
00111 systemPartFamilyUnknown = 0xFF
00114 } SYSTEM_PartFamily_TypeDef;
00115
00116
00117
00118
00119
00120
00122 typedef struct
00123 {
00124 uint8_t minor;
00125 uint8_t major;
00126 uint8_t family;
00127 } SYSTEM_ChipRevision_TypeDef;
00128
00129 #if defined( __FPU_PRESENT ) && ( __FPU_PRESENT == 1 )
00130
00131 typedef enum
00132 {
00133 fpuAccessDenied = (0x0 << 20),
00134 fpuAccessPrivilegedOnly = (0x5 << 20),
00135 fpuAccessReserved = (0xA << 20),
00136 fpuAccessFull = (0xF << 20)
00137 } SYSTEM_FpuAccess_TypeDef;
00138 #endif
00139
00140
00141
00142
00143
00144 void SYSTEM_ChipRevisionGet(SYSTEM_ChipRevision_TypeDef *rev);
00145 uint32_t SYSTEM_GetCalibrationValue(volatile uint32_t *regAddress);
00146
00147 #if defined( __FPU_PRESENT ) && ( __FPU_PRESENT == 1 )
00148
00156 __STATIC_INLINE void SYSTEM_FpuAccessModeSet(SYSTEM_FpuAccess_TypeDef accessMode)
00157 {
00158 SCB->CPACR = (SCB->CPACR & ~(0xF << 20)) | accessMode;
00159 }
00160 #endif
00161
00162
00169 __STATIC_INLINE uint64_t SYSTEM_GetUnique(void)
00170 {
00171 return ((uint64_t) ((uint64_t) DEVINFO->UNIQUEH << 32) | (uint64_t) DEVINFO->UNIQUEL);
00172 }
00173
00174
00181 __STATIC_INLINE uint8_t SYSTEM_GetProdRev(void)
00182 {
00183 return ((DEVINFO->PART & _DEVINFO_PART_PROD_REV_MASK)
00184 >> _DEVINFO_PART_PROD_REV_SHIFT);
00185 }
00186
00187
00199 __STATIC_INLINE uint16_t SYSTEM_GetSRAMSize(void)
00200 {
00201 #if defined(_EFM32_GECKO_FAMILY)
00202
00203 if (SYSTEM_GetProdRev() < 5)
00204 {
00205 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
00206 >> _DEVINFO_MSIZE_FLASH_SHIFT;
00207 }
00208 #endif
00209 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
00210 >> _DEVINFO_MSIZE_SRAM_SHIFT;
00211 }
00212
00213
00225 __STATIC_INLINE uint16_t SYSTEM_GetFlashSize(void)
00226 {
00227 #if defined(_EFM32_GECKO_FAMILY)
00228
00229 if (SYSTEM_GetProdRev() < 5)
00230 {
00231 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
00232 >> _DEVINFO_MSIZE_SRAM_SHIFT;
00233 }
00234 #endif
00235 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
00236 >> _DEVINFO_MSIZE_FLASH_SHIFT;
00237 }
00238
00239
00240
00252 __STATIC_INLINE uint32_t SYSTEM_GetFlashPageSize(void)
00253 {
00254 uint32_t tmp;
00255
00256 #if defined( _EFM32_GIANT_FAMILY )
00257 tmp = SYSTEM_GetProdRev();
00258 if (tmp < 18)
00259 {
00260
00261 return FLASH_PAGE_SIZE;
00262 }
00263 #elif defined( _EFM32_ZERO_FAMILY )
00264 tmp = SYSTEM_GetProdRev();
00265 if (tmp < 24)
00266 {
00267
00268 return FLASH_PAGE_SIZE;
00269 }
00270 #endif
00271 tmp = (DEVINFO->MEMINFO & _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_MASK)
00272 >> _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_SHIFT;
00273
00274 return 1 << ((tmp + 10) & 0xFF);
00275 }
00276
00277
00278
00285 __STATIC_INLINE uint16_t SYSTEM_GetPartNumber(void)
00286 {
00287 return (DEVINFO->PART & _DEVINFO_PART_DEVICE_NUMBER_MASK)
00288 >> _DEVINFO_PART_DEVICE_NUMBER_SHIFT;
00289 }
00290
00291
00305 __STATIC_INLINE SYSTEM_PartFamily_TypeDef SYSTEM_GetFamily(void)
00306 {
00307 return (SYSTEM_PartFamily_TypeDef)
00308 ((DEVINFO->PART & _DEVINFO_PART_DEVICE_FAMILY_MASK)
00309 >> _DEVINFO_PART_DEVICE_FAMILY_SHIFT);
00310 }
00311
00312
00313
00320 __STATIC_INLINE uint8_t SYSTEM_GetCalibrationTemperature(void)
00321 {
00322 return (DEVINFO->CAL & _DEVINFO_CAL_TEMP_MASK)
00323 >> _DEVINFO_CAL_TEMP_SHIFT;
00324 }
00325
00329 #ifdef __cplusplus
00330 }
00331 #endif
00332
00333 #endif