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 #if defined( _DEVINFO_PART_DEVICE_FAMILY_EZR32HG )
00090 systemPartFamilyEzr32Happy = _DEVINFO_PART_DEVICE_FAMILY_EZR32HG,
00091 #endif
00092
00093 #if defined( _DEVINFO_PART_DEVICE_FAMILY_G )
00094 systemPartFamilyGecko = _DEVINFO_PART_DEVICE_FAMILY_G,
00095 #endif
00096 #if defined( _DEVINFO_PART_DEVICE_FAMILY_GG )
00097 systemPartFamilyGiant = _DEVINFO_PART_DEVICE_FAMILY_GG,
00098 #endif
00099 #if defined( _DEVINFO_PART_DEVICE_FAMILY_TG )
00100 systemPartFamilyTiny = _DEVINFO_PART_DEVICE_FAMILY_TG,
00101 #endif
00102 #if defined( _DEVINFO_PART_DEVICE_FAMILY_LG )
00103 systemPartFamilyLeopard = _DEVINFO_PART_DEVICE_FAMILY_LG,
00104 #endif
00105 #if defined( _DEVINFO_PART_DEVICE_FAMILY_WG )
00106 systemPartFamilyWonder = _DEVINFO_PART_DEVICE_FAMILY_WG,
00107 #endif
00108 #if defined( _DEVINFO_PART_DEVICE_FAMILY_ZG )
00109 systemPartFamilyZero = _DEVINFO_PART_DEVICE_FAMILY_ZG,
00110 #endif
00111 #if defined( _DEVINFO_PART_DEVICE_FAMILY_HG )
00112 systemPartFamilyHappy = _DEVINFO_PART_DEVICE_FAMILY_HG,
00113 #endif
00114 systemPartFamilyUnknown = 0xFF
00117 } SYSTEM_PartFamily_TypeDef;
00118
00119
00120
00121
00122
00123
00125 typedef struct
00126 {
00127 uint8_t minor;
00128 uint8_t major;
00129 uint8_t family;
00130 } SYSTEM_ChipRevision_TypeDef;
00131
00132 #if defined( __FPU_PRESENT ) && ( __FPU_PRESENT == 1 )
00133
00134 typedef enum
00135 {
00136 fpuAccessDenied = (0x0 << 20),
00137 fpuAccessPrivilegedOnly = (0x5 << 20),
00138 fpuAccessReserved = (0xA << 20),
00139 fpuAccessFull = (0xF << 20)
00140 } SYSTEM_FpuAccess_TypeDef;
00141 #endif
00142
00143
00144
00145
00146
00147 void SYSTEM_ChipRevisionGet(SYSTEM_ChipRevision_TypeDef *rev);
00148 uint32_t SYSTEM_GetCalibrationValue(volatile uint32_t *regAddress);
00149
00150 #if defined( __FPU_PRESENT ) && ( __FPU_PRESENT == 1 )
00151
00159 __STATIC_INLINE void SYSTEM_FpuAccessModeSet(SYSTEM_FpuAccess_TypeDef accessMode)
00160 {
00161 SCB->CPACR = (SCB->CPACR & ~(0xF << 20)) | accessMode;
00162 }
00163 #endif
00164
00165
00172 __STATIC_INLINE uint64_t SYSTEM_GetUnique(void)
00173 {
00174 return ((uint64_t) ((uint64_t) DEVINFO->UNIQUEH << 32) | (uint64_t) DEVINFO->UNIQUEL);
00175 }
00176
00177
00184 __STATIC_INLINE uint8_t SYSTEM_GetProdRev(void)
00185 {
00186 return ((DEVINFO->PART & _DEVINFO_PART_PROD_REV_MASK)
00187 >> _DEVINFO_PART_PROD_REV_SHIFT);
00188 }
00189
00190
00202 __STATIC_INLINE uint16_t SYSTEM_GetSRAMSize(void)
00203 {
00204 #if defined(_EFM32_GECKO_FAMILY)
00205
00206 if (SYSTEM_GetProdRev() < 5)
00207 {
00208 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
00209 >> _DEVINFO_MSIZE_FLASH_SHIFT;
00210 }
00211 #endif
00212 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
00213 >> _DEVINFO_MSIZE_SRAM_SHIFT;
00214 }
00215
00216
00228 __STATIC_INLINE uint16_t SYSTEM_GetFlashSize(void)
00229 {
00230 #if defined(_EFM32_GECKO_FAMILY)
00231
00232 if (SYSTEM_GetProdRev() < 5)
00233 {
00234 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_SRAM_MASK)
00235 >> _DEVINFO_MSIZE_SRAM_SHIFT;
00236 }
00237 #endif
00238 return (DEVINFO->MSIZE & _DEVINFO_MSIZE_FLASH_MASK)
00239 >> _DEVINFO_MSIZE_FLASH_SHIFT;
00240 }
00241
00242
00243
00255 __STATIC_INLINE uint32_t SYSTEM_GetFlashPageSize(void)
00256 {
00257 uint32_t tmp;
00258
00259 #if defined( _EFM32_GIANT_FAMILY )
00260 tmp = SYSTEM_GetProdRev();
00261 if (tmp < 18)
00262 {
00263
00264 return FLASH_PAGE_SIZE;
00265 }
00266 #elif defined( _EFM32_ZERO_FAMILY )
00267 tmp = SYSTEM_GetProdRev();
00268 if (tmp < 24)
00269 {
00270
00271 return FLASH_PAGE_SIZE;
00272 }
00273 #endif
00274 tmp = (DEVINFO->MEMINFO & _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_MASK)
00275 >> _DEVINFO_MEMINFO_FLASH_PAGE_SIZE_SHIFT;
00276
00277 return 1 << ((tmp + 10) & 0xFF);
00278 }
00279
00280
00281
00288 __STATIC_INLINE uint16_t SYSTEM_GetPartNumber(void)
00289 {
00290 return (DEVINFO->PART & _DEVINFO_PART_DEVICE_NUMBER_MASK)
00291 >> _DEVINFO_PART_DEVICE_NUMBER_SHIFT;
00292 }
00293
00294
00308 __STATIC_INLINE SYSTEM_PartFamily_TypeDef SYSTEM_GetFamily(void)
00309 {
00310 return (SYSTEM_PartFamily_TypeDef)
00311 ((DEVINFO->PART & _DEVINFO_PART_DEVICE_FAMILY_MASK)
00312 >> _DEVINFO_PART_DEVICE_FAMILY_SHIFT);
00313 }
00314
00315
00316
00323 __STATIC_INLINE uint8_t SYSTEM_GetCalibrationTemperature(void)
00324 {
00325 return (DEVINFO->CAL & _DEVINFO_CAL_TEMP_MASK)
00326 >> _DEVINFO_CAL_TEMP_SHIFT;
00327 }
00328
00332 #ifdef __cplusplus
00333 }
00334 #endif
00335
00336 #endif